@lokascript/compilation-service 4.1.0 → 4.3.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/http.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/http.ts","../src/diff/diff.ts","../src/scoring/score.ts","../src/input/detect.ts","../src/input/normalize.ts","../src/validation/inert-shapes.ts","../src/validation/gates.ts","../src/operations/extract.ts","../src/renderers/html-fixture.ts","../src/renderers/playwright.ts","../src/renderers/renderer-helpers.ts","../src/renderers/react.ts","../src/renderers/vue.ts","../src/renderers/svelte.ts","../src/service.ts","../src/middleware/body-limit.ts","../src/middleware/timeout.ts","../src/middleware/logger.ts"],"sourcesContent":["/**\n * HTTP/Edge Wrapper for CompilationService\n *\n * Thin Hono server exposing CompilationService over HTTP.\n * Works on Node, Deno, Bun, and Cloudflare Workers.\n *\n * Usage:\n * import { createApp } from '@lokascript/compilation-service/http';\n * const app = createApp();\n * // Use with any Hono-compatible server\n *\n * import { serve } from '@lokascript/compilation-service/http';\n * serve({ port: 3001 }); // Starts Node server\n */\n\nimport { Hono } from 'hono';\nimport { cors } from 'hono/cors';\nimport { CompilationService } from './service.js';\nimport type {\n CompileRequest,\n TranslateRequest,\n TestRequest,\n ComponentRequest,\n DiffRequest,\n GenerateRequest,\n} from './types.js';\nimport { bodyLimit } from './middleware/body-limit.js';\nimport { timeout } from './middleware/timeout.js';\nimport { structuredLogger } from './middleware/logger.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface HttpOptions {\n /** API key for authentication (optional — skips /health) */\n apiKey?: string;\n /** CORS origin (default '*') */\n corsOrigin?: string;\n /** Port for serve() (default 3001) */\n port?: number;\n /** Pre-created service instance (skips lazy init) */\n service?: CompilationService;\n /** Enable production middleware (body limit, timeout, logger) */\n production?: boolean;\n /** Max request body in bytes (default 50KB, requires production: true) */\n maxBodyBytes?: number;\n /** Request timeout in ms (default 10000, requires production: true) */\n timeoutMs?: number;\n}\n\n// =============================================================================\n// App Factory\n// =============================================================================\n\n/**\n * Create a Hono app wrapping CompilationService.\n * Testable without starting a server — use `app.request()`.\n */\nexport function createApp(options: HttpOptions = {}): Hono {\n const app = new Hono();\n\n // Lazy-init service on first request\n let service: CompilationService | null = options.service ?? null;\n let initPromise: Promise<CompilationService> | null = null;\n\n async function getService(): Promise<CompilationService> {\n if (service) return service;\n if (!initPromise) {\n initPromise = CompilationService.create().then(s => {\n service = s;\n return s;\n });\n }\n return initPromise;\n }\n\n // --- Middleware ---\n\n app.use('*', cors({ origin: options.corsOrigin ?? '*' }));\n\n // Production middleware (body limit, timeout, structured logging)\n if (options.production) {\n app.use('*', bodyLimit(options.maxBodyBytes));\n app.use('*', timeout(options.timeoutMs));\n app.use('*', structuredLogger());\n }\n\n // API key auth (optional)\n if (options.apiKey) {\n app.use('*', async (c, next) => {\n // Skip auth for health check\n if (new URL(c.req.url).pathname === '/health') {\n return next();\n }\n const auth = c.req.header('Authorization');\n if (auth !== `Bearer ${options.apiKey}`) {\n return c.json({ ok: false, error: 'Unauthorized' }, 401);\n }\n return next();\n });\n }\n\n // --- Routes ---\n\n app.get('/health', async c => {\n const ready = service !== null;\n return c.json({ ok: true, version: '1.4.0', ready, uptime: process.uptime() });\n });\n\n app.post('/validate', async c => {\n const svc = await getService();\n const body = await c.req.json<CompileRequest>();\n const result = svc.validate(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/translate', async c => {\n const svc = await getService();\n const body = await c.req.json<TranslateRequest>();\n const result = svc.translate(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/generate-tests', async c => {\n const svc = await getService();\n const body = await c.req.json<TestRequest>();\n const result = svc.generateTests(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/generate-component', async c => {\n const svc = await getService();\n const body = await c.req.json<ComponentRequest>();\n const result = svc.generateComponent(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/diff', async c => {\n const svc = await getService();\n const body = await c.req.json<DiffRequest>();\n const result = svc.diff(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n /**\n * POST /generate — convert LSE to a target-specific output.\n *\n * Accepts bracket syntax or protocol JSON produced by an LLM\n * (e.g. via the `lse_generate_with_correction` MCP tool) and renders\n * it to the requested target format.\n *\n * Body: { lse: string, target: 'react'|'vue'|'svelte'|'intent-element', task?: string }\n */\n app.post('/generate', async c => {\n const svc = await getService();\n const body = await c.req.json<GenerateRequest>();\n if (!body.lse || typeof body.lse !== 'string') {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'MISSING_LSE',\n message: 'Request body must include a non-empty `lse` string.',\n },\n ],\n },\n 400\n );\n }\n const result = await svc.generate(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n // --- Error handler ---\n\n app.onError((err, c) => {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'INTERNAL_ERROR',\n message: err instanceof Error ? err.message : String(err),\n },\n ],\n },\n 500\n );\n });\n\n return app;\n}\n\n// =============================================================================\n// Node Server\n// =============================================================================\n\n/**\n * Start a Node HTTP server with the compilation service.\n * Convenience for CLI usage; for production, use createApp() with your server.\n */\nexport async function serve(options: HttpOptions = {}): Promise<void> {\n const { serve: honoServe } = await import('@hono/node-server');\n const app = createApp(options);\n const port = options.port ?? 3001;\n\n honoServe({ fetch: app.fetch, port });\n console.log(`LokaScript Compilation Service listening on http://localhost:${port}`);\n}\n","/**\n * Semantic Diff Engine\n *\n * Compares two BehaviorSpecs at the abstract operation level.\n * Uses LCS (longest common subsequence) for operation-level diffing\n * and post-processes to detect reorderings.\n */\n\nimport type { AbstractOperation, BehaviorSpec } from '../operations/types.js';\nimport type { TriggerDiff, OperationDiff, OperationChangeKind } from './types.js';\n\n// =============================================================================\n// Public API\n// =============================================================================\n\nexport interface DiffResult {\n identical: boolean;\n trigger: TriggerDiff | null;\n operations: OperationDiff[];\n summary: string;\n}\n\n/**\n * Compare two BehaviorSpecs and produce a structured diff.\n */\nexport function diffBehaviors(a: BehaviorSpec, b: BehaviorSpec): DiffResult {\n const triggerDiff = diffTrigger(a, b);\n const opDiffs = diffOperations(a.operations, b.operations);\n\n const identical = triggerDiff === null && opDiffs.every(d => d.kind === 'unchanged');\n const summary = generateSummary(triggerDiff, opDiffs);\n\n return { identical, trigger: triggerDiff, operations: opDiffs, summary };\n}\n\n// =============================================================================\n// Trigger Comparison\n// =============================================================================\n\nfunction diffTrigger(a: BehaviorSpec, b: BehaviorSpec): TriggerDiff | null {\n const changes: string[] = [];\n\n if (a.trigger.event !== b.trigger.event) {\n changes.push(`event: ${a.trigger.event} → ${b.trigger.event}`);\n }\n\n // Compare modifiers\n const aModKeys = Object.keys(a.trigger.modifiers ?? {}).sort();\n const bModKeys = Object.keys(b.trigger.modifiers ?? {}).sort();\n const aMods = a.trigger.modifiers ?? {};\n const bMods = b.trigger.modifiers ?? {};\n\n for (const key of new Set([...aModKeys, ...bModKeys])) {\n const aVal = aMods[key];\n const bVal = bMods[key];\n if (aVal === undefined) {\n changes.push(`added modifier: ${key}`);\n } else if (bVal === undefined) {\n changes.push(`removed modifier: ${key}`);\n } else if (JSON.stringify(aVal) !== JSON.stringify(bVal)) {\n changes.push(`modifier ${key}: ${JSON.stringify(aVal)} → ${JSON.stringify(bVal)}`);\n }\n }\n\n if (changes.length === 0) return null;\n\n return {\n a: { event: a.trigger.event, modifiers: a.trigger.modifiers },\n b: { event: b.trigger.event, modifiers: b.trigger.modifiers },\n changes,\n };\n}\n\n// =============================================================================\n// Operation Comparison (LCS-based)\n// =============================================================================\n\nfunction diffOperations(a: AbstractOperation[], b: AbstractOperation[]): OperationDiff[] {\n const aKeys = a.map(canonicalizeOp);\n const bKeys = b.map(canonicalizeOp);\n\n // Build LCS table\n const lcs = computeLCS(aKeys, bKeys);\n\n // Walk the LCS to produce diffs\n const rawDiffs = buildDiffFromLCS(a, b, aKeys, bKeys, lcs);\n\n // Post-process: detect reorderings among added/removed pairs\n return detectReorderings(rawDiffs);\n}\n\n/**\n * Compute LCS length table.\n */\nfunction computeLCS(a: string[], b: string[]): number[][] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n\n return dp;\n}\n\n/**\n * Walk the LCS table backwards to produce raw diffs.\n */\nfunction buildDiffFromLCS(\n a: AbstractOperation[],\n b: AbstractOperation[],\n aKeys: string[],\n bKeys: string[],\n dp: number[][]\n): OperationDiff[] {\n const diffs: OperationDiff[] = [];\n let i = a.length;\n let j = b.length;\n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && aKeys[i - 1] === bKeys[j - 1]) {\n // Match — unchanged\n diffs.push({\n kind: 'unchanged',\n index: { a: i - 1, b: j - 1 },\n a: a[i - 1],\n b: b[j - 1],\n });\n i--;\n j--;\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n // Added in b\n diffs.push({\n kind: 'added',\n index: { b: j - 1 },\n b: b[j - 1],\n });\n j--;\n } else {\n // Removed from a\n diffs.push({\n kind: 'removed',\n index: { a: i - 1 },\n a: a[i - 1],\n });\n i--;\n }\n }\n\n return diffs.reverse();\n}\n\n/**\n * Post-process raw diffs to detect reorderings and field-level changes.\n *\n * A reordering is when an operation appears in both sides but at different\n * positions (shows as removed+added pair with the same canonical key).\n *\n * A change is when an operation at the same position has the same op type\n * but different fields (shows as removed+added pair with the same op type).\n */\nfunction detectReorderings(diffs: OperationDiff[]): OperationDiff[] {\n const removed: OperationDiff[] = [];\n const added: OperationDiff[] = [];\n const result: OperationDiff[] = [];\n\n // Separate removed and added\n for (const d of diffs) {\n if (d.kind === 'removed') removed.push(d);\n else if (d.kind === 'added') added.push(d);\n else result.push(d);\n }\n\n // Match removed/added pairs\n const usedRemoved = new Set<number>();\n const usedAdded = new Set<number>();\n\n // First pass: exact matches (reorderings)\n for (let ri = 0; ri < removed.length; ri++) {\n if (usedRemoved.has(ri)) continue;\n const rKey = canonicalizeOp(removed[ri].a!);\n for (let ai = 0; ai < added.length; ai++) {\n if (usedAdded.has(ai)) continue;\n const aKey = canonicalizeOp(added[ai].b!);\n if (rKey === aKey) {\n usedRemoved.add(ri);\n usedAdded.add(ai);\n result.push({\n kind: 'reordered',\n index: { a: removed[ri].index.a, b: added[ai].index.b },\n a: removed[ri].a,\n b: added[ai].b,\n });\n break;\n }\n }\n }\n\n // Second pass: same op type → changed\n for (let ri = 0; ri < removed.length; ri++) {\n if (usedRemoved.has(ri)) continue;\n for (let ai = 0; ai < added.length; ai++) {\n if (usedAdded.has(ai)) continue;\n if (removed[ri].a!.op === added[ai].b!.op) {\n usedRemoved.add(ri);\n usedAdded.add(ai);\n result.push({\n kind: 'changed',\n index: { a: removed[ri].index.a, b: added[ai].index.b },\n a: removed[ri].a,\n b: added[ai].b,\n changes: describeChanges(removed[ri].a!, added[ai].b!),\n });\n break;\n }\n }\n }\n\n // Remaining unmatched\n for (let ri = 0; ri < removed.length; ri++) {\n if (!usedRemoved.has(ri)) result.push(removed[ri]);\n }\n for (let ai = 0; ai < added.length; ai++) {\n if (!usedAdded.has(ai)) result.push(added[ai]);\n }\n\n // Sort by position for stable output\n result.sort((x, y) => {\n const xPos = x.index.a ?? x.index.b ?? 0;\n const yPos = y.index.a ?? y.index.b ?? 0;\n return xPos - yPos;\n });\n\n return result;\n}\n\n// =============================================================================\n// Canonicalization\n// =============================================================================\n\n/**\n * Produce a deterministic string key for an AbstractOperation.\n * Two operations with the same key are semantically identical.\n */\nexport function canonicalizeOp(op: AbstractOperation): string {\n const parts: string[] = [op.op];\n\n switch (op.op) {\n case 'toggleClass':\n case 'addClass':\n case 'removeClass':\n parts.push(op.className, canonicalizeTarget(op.target));\n break;\n case 'setContent':\n parts.push(op.content, canonicalizeTarget(op.target), op.position);\n break;\n case 'appendContent':\n parts.push(op.content, canonicalizeTarget(op.target));\n break;\n case 'show':\n case 'hide':\n case 'focus':\n case 'blur':\n parts.push(canonicalizeTarget(op.target));\n break;\n case 'setVariable':\n parts.push(op.name, op.value, op.scope);\n break;\n case 'increment':\n case 'decrement':\n parts.push(canonicalizeTarget(op.target), String(op.amount));\n break;\n case 'navigate':\n parts.push(op.url);\n break;\n case 'historyBack':\n case 'historyForward':\n break;\n case 'fetch':\n parts.push(op.url, op.format, op.target ? canonicalizeTarget(op.target) : '');\n break;\n case 'wait':\n parts.push(String(op.durationMs));\n break;\n case 'triggerEvent':\n parts.push(op.eventName, canonicalizeTarget(op.target), op.detail ?? '');\n break;\n case 'log':\n parts.push(...op.values);\n break;\n }\n\n return parts.join('|');\n}\n\nfunction canonicalizeTarget(t: { kind: string; value?: string }): string {\n return t.kind === 'self' ? 'self' : `${t.kind}:${(t as { value?: string }).value ?? ''}`;\n}\n\n// =============================================================================\n// Change Description\n// =============================================================================\n\nfunction describeChanges(a: AbstractOperation, b: AbstractOperation): string[] {\n const changes: string[] = [];\n const aObj = a as unknown as Record<string, unknown>;\n const bObj = b as unknown as Record<string, unknown>;\n\n // Compare all fields except 'op'\n const allKeys = new Set([...Object.keys(aObj), ...Object.keys(bObj)]);\n for (const key of allKeys) {\n if (key === 'op') continue;\n const aVal = JSON.stringify(aObj[key]);\n const bVal = JSON.stringify(bObj[key]);\n if (aVal !== bVal) {\n changes.push(`${key}: ${formatValue(aObj[key])} → ${formatValue(bObj[key])}`);\n }\n }\n\n return changes;\n}\n\nfunction formatValue(v: unknown): string {\n if (v === undefined) return '(none)';\n if (typeof v === 'object' && v !== null) {\n const obj = v as Record<string, unknown>;\n if ('kind' in obj) return obj.kind === 'self' ? 'self' : `${obj.kind}:${obj.value ?? ''}`;\n return JSON.stringify(v);\n }\n return String(v);\n}\n\n// =============================================================================\n// Summary Generation\n// =============================================================================\n\nfunction generateSummary(trigger: TriggerDiff | null, opDiffs: OperationDiff[]): string {\n const parts: string[] = [];\n\n if (!trigger && opDiffs.every(d => d.kind === 'unchanged')) {\n return 'No semantic change';\n }\n\n if (trigger) {\n parts.push(`Trigger: ${trigger.changes.join(', ')}`);\n }\n\n const counts: Record<OperationChangeKind, number> = {\n added: 0,\n removed: 0,\n changed: 0,\n reordered: 0,\n unchanged: 0,\n };\n for (const d of opDiffs) counts[d.kind]++;\n\n const opParts: string[] = [];\n if (counts.added > 0) opParts.push(`${counts.added} added`);\n if (counts.removed > 0) opParts.push(`${counts.removed} removed`);\n if (counts.changed > 0) opParts.push(`${counts.changed} changed`);\n if (counts.reordered > 0) opParts.push(`${counts.reordered} reordered`);\n\n if (opParts.length > 0) {\n parts.push(`Operations: ${opParts.join(', ')}`);\n }\n\n return parts.join('. ');\n}\n","/**\n * Structural fidelity scoring — `scoreFidelity()` (agent-era arc 4).\n *\n * The scorer itself (`scoreNodes` and its report types) lives in\n * `@lokascript/semantic/fidelity` since arc 5 slice 2, so the language\n * server's translate-with-verification request and this service share ONE\n * implementation; this module re-exports it for API compatibility and adds\n * the service-level request/response shapes. See that module for signal\n * semantics; docs/FIDELITY.md for the methodology.\n */\n\nimport type { Diagnostic } from '../types.js';\nimport type { DiffInput } from '../diff/types.js';\nimport type { FidelityReport } from '@lokascript/semantic/fidelity';\n\nexport { scoreNodes } from '@lokascript/semantic/fidelity';\nexport type { FidelityReport, FidelityScores } from '@lokascript/semantic/fidelity';\n\n/** Score request — a candidate scored against a reference. Sides accept the\n * same input formats as diff/validate and may be in different languages. */\nexport interface ScoreRequest {\n reference: DiffInput;\n candidate: DiffInput;\n /** Minimum confidence for natural language parsing (default 0.7) */\n confidence?: number;\n}\n\nexport interface ScoreResponse extends Partial<FidelityReport> {\n /** Whether both sides parsed successfully. */\n ok: boolean;\n diagnostics: Diagnostic[];\n /**\n * False when the reference parse left tokens unconsumed (UNCONSUMED_INPUT):\n * the scores then compare only what parsed, and `faithful` is false.\n */\n referenceComplete?: boolean;\n /** The same, for the candidate. */\n candidateComplete?: boolean;\n}\n","/**\n * Input format detection.\n *\n * Determines whether input is natural language, explicit syntax, or LLM JSON.\n */\n\nimport type { InputFormat } from '../types.js';\n\n/**\n * Detect the input format from a string.\n */\nexport function detectFormat(input: string): InputFormat {\n const trimmed = input.trim();\n\n // Explicit syntax: [command role:value ...]\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return 'explicit';\n }\n\n // LLM JSON: { \"action\": \"...\", ... }\n if (trimmed.startsWith('{')) {\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === 'object' && typeof parsed.action === 'string') {\n return 'json';\n }\n } catch {\n // Not valid JSON — fall through to natural language\n }\n }\n\n return 'natural';\n}\n","/**\n * Input normalization.\n *\n * Converts any input format (natural language, explicit syntax, LLM JSON)\n * to a SemanticNode for downstream validation, translation and rendering.\n */\n\nimport type { CompileRequest, NormalizeResult, SemanticJSON, Diagnostic } from '../types.js';\nimport { detectFormat } from './detect.js';\nimport { validateProtocolJSON, fromProtocolJSON } from '@lokascript/framework';\n\n// =============================================================================\n// Dynamic imports (resolved at service creation time)\n// =============================================================================\n\n/** Semantic package functions, injected by CompilationService.create() */\nexport interface SemanticFunctions {\n parseSemantic: (\n code: string,\n language: string\n ) => { node: unknown; confidence: number; error?: string };\n parseExplicit: (input: string) => unknown;\n isExplicitSyntax: (input: string) => boolean;\n}\n\nlet _semantic: SemanticFunctions | null = null;\n\n/** Initialize with semantic package functions. */\nexport function initNormalizer(semantic: SemanticFunctions): void {\n _semantic = semantic;\n}\n\n// =============================================================================\n// Normalization\n// =============================================================================\n\n/**\n * Normalize any input format to a SemanticNode.\n */\nexport function normalize(request: CompileRequest): NormalizeResult {\n if (!_semantic) {\n throw new Error('Normalizer not initialized. Call initNormalizer() first.');\n }\n\n // Determine which input format we're working with\n if (request.semantic) {\n return normalizeJSON(request.semantic);\n }\n\n const input = request.code ?? request.explicit;\n if (!input) {\n return {\n node: null,\n confidence: 0,\n format: 'natural',\n diagnostics: [\n {\n severity: 'error',\n code: 'NO_INPUT',\n message: 'No input provided. Supply one of: code, explicit, or semantic.',\n },\n ],\n };\n }\n\n const format = request.explicit ? 'explicit' : detectFormat(input);\n\n switch (format) {\n case 'explicit':\n return normalizeExplicit(input);\n case 'json':\n return normalizeJSON(JSON.parse(input.trim()) as SemanticJSON);\n case 'natural':\n return normalizeNatural(input, request.language ?? 'en');\n }\n}\n\n// =============================================================================\n// Format-Specific Normalization\n// =============================================================================\n\n/** Shape of the diagnostics the semantic parser attaches to its nodes. */\ninterface NodeDiagnostic {\n severity?: string;\n code?: string;\n message?: string;\n}\n\n/**\n * Lift warning/error diagnostics off the parsed node into the response.\n *\n * The semantic parser deliberately parses leniently — it records problems as\n * node-level diagnostics instead of failing (e.g. `unconsumed-input` when\n * `add .x #el` drops `#el` and the destination silently defaults to `me`,\n * hoisted to the top node from any depth). Until 2026-08 this function never\n * read them, so `validate()` reported ok with ZERO diagnostics for parses the\n * parser itself had flagged — the agent-bench probe measured 18/37 plausible\n * phrasings misbehaving with nothing for the validate/repair loop to react to\n * (arc 3b, AGENT_ERA_ROADMAP.md). `info` entries stay behind: they are match\n * commentary (\"pattern matched: …\"), not actionable signal.\n */\nfunction liftNodeDiagnostics(node: unknown, diagnostics: Diagnostic[]): void {\n const nodeDiags = (node as { diagnostics?: NodeDiagnostic[] }).diagnostics;\n if (!Array.isArray(nodeDiags)) return;\n for (const d of nodeDiags) {\n if (d.severity !== 'warning' && d.severity !== 'error') continue;\n const diag: Diagnostic = {\n severity: d.severity,\n // Parser codes are kebab-case; this surface uses UPPER_SNAKE (PARSE_ERROR &c).\n code: (d.code ?? 'PARSE_DIAGNOSTIC').replace(/-/g, '_').toUpperCase(),\n message: d.message ?? 'parser diagnostic',\n };\n if (d.code === 'unconsumed-input') {\n diag.suggestion =\n 'Dropped tokens were parsed but bound to no role — usually a missing role ' +\n \"marker (e.g. 'to'/'on'/'from' before the target), so the role fell back to \" +\n 'a default like `me`. Compare the returned roles against your intent.';\n }\n diagnostics.push(diag);\n }\n}\n\nfunction normalizeNatural(code: string, language: string): NormalizeResult {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const result = _semantic!.parseSemantic(code, language);\n\n if (result.error) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_ERROR',\n message: result.error,\n });\n }\n\n if (!result.node) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_FAILED',\n message: `Failed to parse \"${code}\" as ${language} hyperscript.`,\n suggestion: 'Check syntax or try explicit syntax: [command role:value ...]',\n });\n return { node: null, confidence: result.confidence, format: 'natural', diagnostics };\n }\n\n liftNodeDiagnostics(result.node, diagnostics);\n\n return {\n node: result.node,\n confidence: result.confidence,\n format: 'natural',\n diagnostics,\n };\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_EXCEPTION',\n message: error instanceof Error ? error.message : String(error),\n });\n return { node: null, confidence: 0, format: 'natural', diagnostics };\n }\n}\n\nfunction normalizeExplicit(input: string): NormalizeResult {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const node = _semantic!.parseExplicit(input);\n return {\n node,\n confidence: 1.0,\n format: 'explicit',\n diagnostics,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const hasRoleGuidance =\n message.includes('Valid roles') || message.includes('Missing required role');\n diagnostics.push({\n severity: 'error',\n code: 'EXPLICIT_PARSE_ERROR',\n message,\n suggestion: hasRoleGuidance\n ? undefined\n : 'Use format: [command role:value ...] e.g. [toggle patient:.active]. Use get_command_docs(command) to see valid roles.',\n });\n return { node: null, confidence: 0, format: 'explicit', diagnostics };\n }\n}\n\nfunction normalizeJSON(input: SemanticJSON): NormalizeResult {\n // Validate structure (unified protocol JSON validator accepts optional kind + trigger)\n const validationErrors = validateProtocolJSON(input);\n if (validationErrors.some(d => d.severity === 'error')) {\n return {\n node: null,\n confidence: 0,\n format: 'json',\n diagnostics: validationErrors,\n };\n }\n\n // Convert to SemanticNode (unified path accepts optional kind + trigger)\n const node = fromProtocolJSON(input as any);\n return {\n node,\n confidence: 1.0,\n format: 'json',\n diagnostics: validationErrors, // May contain warnings\n };\n}\n","/**\n * Inert-shape heuristics — Gate 4 of the validation pipeline (arc 3b).\n *\n * A parse can consume every token at confidence 1.0 and still be provably\n * useless at runtime: the agent-bench probe found five plausible phrasings\n * that do exactly that (silent no-op, or effect on the wrong element) with\n * nothing in the response for the validate/repair loop to react to. Each left\n * a distinctive fingerprint in the IR; this gate matches those fingerprints\n * and emits WARNINGS — never errors, and never a confidence change, so parse\n * outcomes are byte-identical and only the diagnostics array grows (the same\n * contract as the arc-3b unconsumed-input propagation).\n *\n * Checks are deliberately narrow — a fingerprint each, not a general theory of\n * inertness — because a false warning teaches an agent to distrust warnings.\n * The known-remaining silent phrasings these do NOT cover are valid code with\n * different intent (e.g. `add .hidden to #menu`), which no compile-time check\n * can catch; that is IR-vs-intent review's job.\n */\n\nimport type { Diagnostic } from '../types.js';\n\n/** Quantifier words that read as \"the matched set\" in English but parse as a\n * bare identifier, making `all.todo` an undefined property access at runtime.\n * Spaced (`all .todo`), the target is the identifier `all` alone and the\n * selector is left unread (both engines read a spaced `.todo` as a class). */\nconst QUANTIFIER = /^(all|every|each)\\.(\\S+)$/;\nconst BARE_QUANTIFIER = /^(all|every|each)$/;\n\n/** Predicate words that, mis-tokenized as class selectors inside a condition\n * (`#box .has class .danger`), silently make the condition falsy. The pattern\n * requires the word to stand alone — real utility classes like `.is-active`\n * do not match. */\nconst PREDICATE_AS_CLASS = /(^|\\s)\\.(has|is|contains|matches|includes)(\\s|$)/;\n\ninterface RoleValueLike {\n type?: string;\n value?: unknown;\n raw?: string;\n /** property-path values carry object + property instead of value. */\n property?: string;\n}\n\ninterface NodeLike {\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n body?: unknown[];\n}\n\nfunction valueString(v: RoleValueLike): string {\n return String(v.value ?? v.raw ?? '');\n}\n\n/**\n * Walk a SemanticNode (recursing into command bodies) and return warnings for\n * shapes that are known to execute as no-ops or mis-bindings.\n */\nexport function checkInertShapes(node: unknown): Diagnostic[] {\n const out: Diagnostic[] = [];\n walk(node, out);\n return out;\n}\n\nfunction walk(node: unknown, out: Diagnostic[]): void {\n if (!node || typeof node !== 'object') return;\n const n = node as NodeLike;\n\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, raw] of n.roles.entries()) {\n const v = (raw ?? {}) as RoleValueLike;\n const s = valueString(v);\n\n // `add .done to all .todo` → destination expression `all.todo`:\n // identifier `all` is undefined at runtime, so the effect lands on the\n // default target (usually `me`) or nowhere.\n const q = v.type === 'expression' ? QUANTIFIER.exec(s) : null;\n if (q && (role === 'destination' || role === 'source')) {\n out.push({\n severity: 'warning',\n code: 'INERT_QUANTIFIER_TARGET',\n message: `${role} parsed as property access \"${s}\" — \"${q[1]}\" is an undefined identifier at runtime, so this ${role} will not resolve.`,\n suggestion: `Selectors already address every match: write the bare selector (e.g. \".${q[2]}\") without \"${q[1]}\".`,\n });\n continue;\n }\n if (\n v.type === 'expression' &&\n BARE_QUANTIFIER.test(s) &&\n (role === 'destination' || role === 'source')\n ) {\n out.push({\n severity: 'warning',\n code: 'INERT_QUANTIFIER_TARGET',\n message: `${role} parsed as the identifier \"${s}\", which is undefined at runtime, so this ${role} will not resolve; the selector after it is not read.`,\n suggestion: `Selectors already address every match: write the selector alone, without \"${s}\".`,\n });\n continue;\n }\n\n // `if #box has class .danger` → condition `#box .has class .danger`:\n // the predicate word became a class selector, the condition evaluates\n // falsy, and the body silently never runs.\n if (role === 'condition' && v.type === 'expression' && PREDICATE_AS_CLASS.test(s)) {\n const word = PREDICATE_AS_CLASS.exec(s)?.[2];\n out.push({\n severity: 'warning',\n code: 'HALF_PARSED_CONDITION',\n message: `condition parsed \".${word}\" as a class selector (full condition: \"${s}\") — it will evaluate falsy and the body will never run.`,\n suggestion: 'For class tests use `matches`: `if #box matches .danger`.',\n });\n continue;\n }\n\n // (`UNSUPPORTED_QUERY_LITERAL`, for `add .x to <body/>`, retired with the AOT\n // compiler in 4.0: on its path `<body/>` reached querySelector verbatim, but the\n // engine reads query literals, as upstream does.)\n\n // `set the text of #output to \"…\"` → property-path `#output.text`:\n // `.text` is not a DOM-visible property on ordinary elements, so the\n // write is an invisible expando.\n if (n.action === 'set' && v.type === 'property-path' && v.property === 'text') {\n out.push({\n severity: 'warning',\n code: 'INERT_PROPERTY_WRITE',\n message: `set targets property \"text\" — on most elements this is not a DOM property, so the write usually changes nothing visible.`,\n suggestion:\n 'Use `textContent` (`set the textContent of #el to …`) or `put \"…\" into #el`.',\n });\n }\n }\n }\n\n if (Array.isArray(n.body)) for (const child of n.body) walk(child, out);\n}\n","/**\n * Validation pipeline.\n *\n * Sequential gates that validate a parsed SemanticNode.\n * Each gate can add diagnostics; an error fails validation.\n */\n\nimport type { Diagnostic } from '../types.js';\nimport { checkInertShapes } from './inert-shapes.js';\n\n// =============================================================================\n// Dynamic imports\n// =============================================================================\n\n/** Semantic validation functions, injected by CompilationService.create() */\nexport interface ValidationFunctions {\n validateSemanticResult: (result: unknown) => {\n valid: boolean;\n errors: Array<{ code: string; message: string; role?: string; severity: string }>;\n warnings: Array<{ code: string; message: string; role?: string; severity: string }>;\n confidenceAdjustment: number;\n suggestions: string[];\n };\n}\n\nlet _validators: ValidationFunctions | null = null;\n\n/** Initialize with validation functions. */\nexport function initValidation(validators: ValidationFunctions): void {\n _validators = validators;\n}\n\n// =============================================================================\n// Validation Pipeline\n// =============================================================================\n\nexport interface GateResult {\n pass: boolean;\n diagnostics: Diagnostic[];\n adjustedConfidence: number;\n}\n\n/**\n * Run all validation gates on a parsed semantic node.\n */\nexport function runValidationGates(\n node: unknown,\n confidence: number,\n confidenceThreshold: number\n): GateResult {\n const diagnostics: Diagnostic[] = [];\n let adjustedConfidence = confidence;\n\n // Gate 1: Parse success\n if (!node) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_FAILED',\n message: 'No semantic node produced from input.',\n });\n return { pass: false, diagnostics, adjustedConfidence: 0 };\n }\n\n // Gate 2: Confidence threshold\n if (confidence < confidenceThreshold) {\n diagnostics.push({\n severity: 'error',\n code: 'LOW_CONFIDENCE',\n message: `Parse confidence ${confidence.toFixed(2)} is below threshold ${confidenceThreshold.toFixed(2)}.`,\n suggestion: 'Try explicit syntax [command role:value ...] for unambiguous input.',\n });\n return { pass: false, diagnostics, adjustedConfidence: confidence };\n }\n\n // Gate 3: Schema validation\n if (_validators) {\n const semanticResult = nodeToParseResult(node);\n if (semanticResult) {\n const validation = _validators.validateSemanticResult(semanticResult);\n\n // Convert errors\n for (const err of validation.errors) {\n diagnostics.push({\n severity: 'error',\n code: err.code,\n message: err.message,\n });\n }\n\n // Convert warnings\n for (const warn of validation.warnings) {\n diagnostics.push({\n severity: 'warning',\n code: warn.code,\n message: warn.message,\n });\n }\n\n // Add suggestions\n for (const suggestion of validation.suggestions) {\n diagnostics.push({\n severity: 'info',\n code: 'SUGGESTION',\n message: suggestion,\n });\n }\n\n // Adjust confidence\n adjustedConfidence = Math.max(0, Math.min(1, confidence + validation.confidenceAdjustment));\n\n if (!validation.valid) {\n return { pass: false, diagnostics, adjustedConfidence };\n }\n }\n }\n\n // Gate 4: inert-shape heuristics (arc 3b). Warnings only — a parse that\n // consumed everything at full confidence can still be provably useless at\n // runtime, and without a diagnostic the validate/repair loop never hears\n // about it. Never affects pass/confidence.\n diagnostics.push(...checkInertShapes(node));\n\n return { pass: true, diagnostics, adjustedConfidence };\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Convert a SemanticNode to the SemanticParseResult format expected by\n * validateSemanticResult(). The validator expects { action, arguments, confidence }.\n */\nfunction nodeToParseResult(node: unknown): unknown {\n const n = node as {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n };\n\n if (!n.action) return null;\n\n // For event handlers, validate the body commands instead\n const action = n.action === 'on' ? null : n.action;\n if (!action) return null;\n\n // Convert roles map to arguments array\n const args: unknown[] = [];\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, value] of n.roles.entries()) {\n args.push({ role, ...(value as Record<string, unknown>) });\n }\n }\n\n return {\n action,\n arguments: args,\n confidence: 1.0,\n };\n}\n","/**\n * Operation Extraction\n *\n * Converts a SemanticNode (from the parsing pipeline) into a BehaviorSpec\n * containing abstract operations. This is the bridge between semantic roles\n * and framework-agnostic behavior descriptions.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from './types.js';\n\n// =============================================================================\n// Internal Types (mirrors SemanticNode shape without importing semantic types)\n// =============================================================================\n\ninterface RoleValue {\n type?: string;\n value?: unknown;\n raw?: string;\n selectorKind?: string;\n dataType?: string;\n scope?: string;\n}\n\ninterface NodeLike {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, RoleValue>;\n body?: NodeLike[];\n eventModifiers?: Record<string, unknown>;\n metadata?: { sourceText?: string };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Extract abstract operations from a semantic node.\n *\n * Handles event handlers (extracts trigger + recurses into body)\n * and standalone commands.\n */\nexport function extractOperations(node: unknown): BehaviorSpec {\n const n = node as NodeLike;\n if (!n || typeof n !== 'object') {\n return emptySpec();\n }\n\n // Event handler: extract trigger and recurse into body\n if (n.kind === 'event-handler' || n.action === 'on') {\n return extractEventHandler(n);\n }\n\n // Standalone command: wrap with default trigger\n const ops = extractCommand(n);\n return {\n trigger: { event: 'click' },\n triggerTarget: { kind: 'self' },\n operations: ops,\n async: ops.some(isAsyncOp),\n source: n.metadata?.sourceText,\n };\n}\n\n// =============================================================================\n// Event Handler Extraction\n// =============================================================================\n\nfunction extractEventHandler(n: NodeLike): BehaviorSpec {\n // A colon-qualified event is an expression (`raw`), not a literal (`value`).\n const eventRole = n.roles?.get('event') as (RoleValue & { raw?: unknown }) | undefined;\n const named = eventRole?.value ?? eventRole?.raw;\n const eventName = typeof named === 'string' && named.length > 0 ? named : 'click';\n\n const operations: AbstractOperation[] = [];\n\n if (n.body && Array.isArray(n.body)) {\n for (const child of n.body) {\n operations.push(...extractCommand(child));\n }\n }\n\n return {\n trigger: {\n event: eventName,\n modifiers: n.eventModifiers,\n },\n triggerTarget: { kind: 'self' },\n operations,\n async: operations.some(isAsyncOp),\n source: n.metadata?.sourceText,\n };\n}\n\n// =============================================================================\n// Command Extraction\n// =============================================================================\n\nfunction extractCommand(n: NodeLike): AbstractOperation[] {\n const action = n.action;\n if (!action || action === 'on') return [];\n\n const roles = n.roles;\n\n switch (action) {\n // --- DOM Class ---\n case 'toggle':\n return extractClassOp('toggleClass', roles);\n case 'add':\n return extractClassOp('addClass', roles);\n case 'remove':\n return extractClassOp('removeClass', roles);\n\n // --- DOM Content ---\n case 'put':\n return extractPut(roles);\n case 'append':\n return extractAppend(roles);\n\n // --- DOM Visibility ---\n case 'show':\n return extractVisibility('show', roles);\n case 'hide':\n return extractVisibility('hide', roles);\n\n // --- Variables ---\n case 'set':\n return extractSet(roles);\n case 'increment':\n return extractIncrDecr('increment', roles);\n case 'decrement':\n return extractIncrDecr('decrement', roles);\n\n // --- Navigation ---\n case 'go':\n return extractGo(roles);\n\n // --- Async ---\n case 'fetch':\n return extractFetch(roles);\n case 'wait':\n return extractWait(roles);\n\n // --- Events ---\n case 'send':\n case 'trigger':\n return extractTriggerEvent(roles);\n\n // --- Focus ---\n case 'focus':\n return [{ op: 'focus', target: resolveTarget(roles, 'patient') }];\n case 'blur':\n return [{ op: 'blur', target: resolveTarget(roles, 'patient') }];\n\n // --- Utility ---\n case 'log':\n return extractLog(roles);\n\n default:\n return [];\n }\n}\n\n// =============================================================================\n// Per-Command Extractors\n// =============================================================================\n\nfunction extractClassOp(\n op: 'toggleClass' | 'addClass' | 'removeClass',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const value = String(patient.value ?? '');\n const className = value.startsWith('.') ? value.slice(1) : value;\n if (!className) return [];\n\n const target = resolveTarget(roles, op === 'removeClass' ? 'source' : 'destination');\n\n return [{ op, className, target }];\n}\n\nfunction extractPut(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const content = String(patient.value ?? patient.raw ?? '');\n const target = resolveTarget(roles, 'destination');\n\n // Determine position from method role\n const method = roles?.get('method');\n let position: 'into' | 'before' | 'after' | 'start' | 'end' = 'into';\n if (method?.value) {\n const m = String(method.value);\n if (m === 'before') position = 'before';\n else if (m === 'after') position = 'after';\n else if (m === 'start' || m === 'at start of') position = 'start';\n else if (m === 'end' || m === 'at end of') position = 'end';\n }\n\n return [{ op: 'setContent', content, target, position }];\n}\n\nfunction extractAppend(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const content = String(patient.value ?? patient.raw ?? '');\n const target = resolveTarget(roles, 'destination');\n\n return [{ op: 'appendContent', content, target }];\n}\n\nfunction extractVisibility(\n op: 'show' | 'hide',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const target = resolveTarget(roles, 'patient');\n return [{ op, target }];\n}\n\nfunction extractSet(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const destination = roles?.get('destination');\n const patient = roles?.get('patient');\n\n if (!destination && !patient) return [];\n\n // Variable assignment: set :count to 5\n const targetRole = destination ?? patient;\n const valueRole = destination ? patient : undefined;\n\n const name = String(targetRole?.value ?? '');\n const value = valueRole ? String(valueRole.value ?? '') : '';\n const scope = (targetRole?.scope ?? 'local') as 'local' | 'element' | 'global';\n\n return [{ op: 'setVariable', name, value, scope }];\n}\n\nfunction extractIncrDecr(\n op: 'increment' | 'decrement',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const target = resolveTarget(roles, 'patient');\n\n // Amount from quantity role\n const quantity = roles?.get('quantity');\n const amount = quantity?.value ? Number(quantity.value) : 1;\n\n return [{ op, target, amount }];\n}\n\nfunction extractGo(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const destination = roles?.get('destination');\n if (!destination) return [];\n\n const url = String(destination.value ?? '');\n\n if (url === 'back') return [{ op: 'historyBack' }];\n if (url === 'forward') return [{ op: 'historyForward' }];\n\n return [{ op: 'navigate', url }];\n}\n\nfunction extractFetch(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const source = roles?.get('source');\n if (!source) return [];\n\n const url = String(source.value ?? source.raw ?? '');\n\n const responseType = roles?.get('responseType');\n let format: 'json' | 'text' | 'html' = 'text';\n if (responseType?.value) {\n const f = String(responseType.value);\n if (f === 'json') format = 'json';\n else if (f === 'html') format = 'html';\n }\n\n const destRole = roles?.get('destination');\n const target = destRole ? resolveTargetFromRole(destRole) : undefined;\n\n return [{ op: 'fetch', url, format, target }];\n}\n\nfunction extractWait(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const duration = roles?.get('duration') ?? roles?.get('patient');\n if (!duration) return [];\n\n let ms = 0;\n const val = duration.value;\n if (typeof val === 'number') {\n ms = val;\n } else if (typeof val === 'string') {\n ms = parseDurationMs(val);\n }\n\n return [{ op: 'wait', durationMs: ms }];\n}\n\nfunction extractTriggerEvent(\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const eventName = String(patient.value ?? '');\n const target = resolveTarget(roles, 'destination');\n\n return [{ op: 'triggerEvent', eventName, target }];\n}\n\nfunction extractLog(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n const values: string[] = [];\n\n if (patient) {\n values.push(String(patient.value ?? patient.raw ?? ''));\n }\n\n return [{ op: 'log', values }];\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Resolve a target reference from the roles map.\n * Falls back to { kind: 'self' } if the role is missing or defaults to 'me'.\n */\nfunction resolveTarget(\n roles: ReadonlyMap<string, RoleValue> | undefined,\n roleName: string\n): TargetRef {\n const role = roles?.get(roleName);\n if (!role) return { kind: 'self' };\n return resolveTargetFromRole(role);\n}\n\nfunction resolveTargetFromRole(role: RoleValue): TargetRef {\n const value = String(role.value ?? '');\n\n // Reference to self\n if (role.type === 'reference' && (value === 'me' || value === 'it')) {\n return { kind: 'self' };\n }\n\n // Variable reference\n if (value.startsWith(':') || role.scope) {\n return { kind: 'variable', value };\n }\n\n // CSS selector\n if (\n role.type === 'selector' ||\n value.startsWith('#') ||\n value.startsWith('.') ||\n value.startsWith('[')\n ) {\n return { kind: 'selector', value };\n }\n\n // Literal URL or other value — treat as selector if it looks like one\n if (value) {\n return { kind: 'selector', value };\n }\n\n return { kind: 'self' };\n}\n\nfunction isAsyncOp(op: AbstractOperation): boolean {\n return op.op === 'fetch' || op.op === 'wait';\n}\n\nfunction parseDurationMs(value: string): number {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)?$/);\n if (!match) return 0;\n\n const num = parseFloat(match[1]);\n const unit = match[2] ?? 'ms';\n\n switch (unit) {\n case 'ms':\n return num;\n case 's':\n return num * 1000;\n case 'm':\n return num * 60000;\n case 'h':\n return num * 3600000;\n default:\n return num;\n }\n}\n\nfunction emptySpec(): BehaviorSpec {\n return {\n trigger: { event: 'click' },\n triggerTarget: { kind: 'self' },\n operations: [],\n async: false,\n };\n}\n","/**\n * HTML Fixture Generator\n *\n * Generates minimal HTML pages that contain all elements referenced\n * by a BehaviorSpec. Used by test renderers to create test fixtures.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Generate a minimal HTML fixture for a behavior spec.\n *\n * @param spec - The behavior to create a fixture for\n * @param hyperscript - Original hyperscript source to embed as `_=\"...\"` attribute\n */\nexport function generateFixture(spec: BehaviorSpec, hyperscript?: string): string {\n const elements = collectElements(spec);\n const triggerSelector = targetToSelector(spec.triggerTarget);\n\n // When trigger is 'self', the hyperscript attribute goes on the first\n // operation target (since 'self' means the element the script is on).\n // When trigger is a specific selector, check if it matches an operation target.\n const triggerIsSeparate =\n triggerSelector !== null && !elements.some(e => e.selector === triggerSelector);\n\n // Track whether the _= attribute has been placed on an element\n let hyperscriptPlaced = false;\n\n const lines: string[] = [];\n\n // Add initial styles for visibility tests\n if (needsInitialStyles(spec.operations)) {\n lines.push('<style>');\n for (const op of spec.operations) {\n if (op.op === 'hide') {\n const sel = targetToSelector(op.target);\n if (sel) lines.push(` ${sel} { display: block; }`);\n }\n if (op.op === 'show') {\n const sel = targetToSelector(op.target);\n if (sel) lines.push(` ${sel} { display: none; }`);\n }\n }\n lines.push('</style>');\n }\n\n // Generate elements\n if (triggerIsSeparate) {\n // Trigger element is separate from targets\n const triggerEl = createTriggerElement(triggerSelector!, hyperscript);\n lines.push(triggerEl);\n hyperscriptPlaced = true;\n }\n\n for (const el of elements) {\n // Place _= attribute on this element if:\n // 1. It matches the trigger selector, OR\n // 2. Trigger is 'self' and this is the first element (hasn't been placed yet)\n const isTrigger =\n (!triggerIsSeparate && el.selector === triggerSelector) ||\n (triggerSelector === null && !hyperscriptPlaced);\n const attrs = isTrigger && hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n if (isTrigger && hyperscript) hyperscriptPlaced = true;\n const extraClasses = getInitialClasses(el.selector, spec.operations);\n\n let tag = el.tag;\n let className = el.className;\n if (extraClasses.length > 0) {\n className = className ? `${className} ${extraClasses.join(' ')}` : extraClasses.join(' ');\n }\n\n const classAttr = className ? ` class=\"${className}\"` : '';\n const idAttr = el.id ? ` id=\"${el.id}\"` : '';\n\n if (tag === 'input') {\n lines.push(`<${tag}${idAttr}${classAttr}${attrs} />`);\n } else {\n const content = el.defaultContent ?? '';\n lines.push(`<${tag}${idAttr}${classAttr}${attrs}>${content}</${tag}>`);\n }\n }\n\n // If trigger is self and no explicit elements, create a self-targeting button\n if (elements.length === 0 && spec.triggerTarget.kind === 'self') {\n const attr = hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n lines.push(`<button id=\"trigger\"${attr}>Click me</button>`);\n }\n\n return lines.join('\\n');\n}\n\n// =============================================================================\n// Element Collection\n// =============================================================================\n\ninterface FixtureElement {\n selector: string;\n id?: string;\n className?: string;\n tag: string;\n defaultContent?: string;\n}\n\nfunction collectElements(spec: BehaviorSpec): FixtureElement[] {\n const seen = new Set<string>();\n const elements: FixtureElement[] = [];\n\n for (const op of spec.operations) {\n for (const ref of getTargetRefs(op)) {\n if (ref.kind !== 'selector') continue;\n if (seen.has(ref.value)) continue;\n seen.add(ref.value);\n\n elements.push(selectorToElement(ref.value));\n }\n }\n\n return elements;\n}\n\nfunction getTargetRefs(op: AbstractOperation): TargetRef[] {\n const refs: TargetRef[] = [];\n\n if ('target' in op && op.target) {\n refs.push(op.target as TargetRef);\n }\n\n return refs;\n}\n\nfunction selectorToElement(selector: string): FixtureElement {\n // ID selector: #foo\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return {\n selector,\n id,\n tag: inferTagFromId(id),\n defaultContent: inferContent(id),\n };\n }\n\n // Class selector: .foo\n if (selector.startsWith('.')) {\n const className = selector.slice(1);\n return {\n selector,\n className,\n tag: 'div',\n defaultContent: className,\n };\n }\n\n // Attribute or complex selector — use div\n return {\n selector,\n tag: 'div',\n defaultContent: '',\n };\n}\n\n// =============================================================================\n// Smart Element Type Inference\n// =============================================================================\n\nconst BUTTON_IDS = new Set(['btn', 'button', 'submit', 'trigger', 'action']);\nconst INPUT_IDS = new Set(['input', 'search', 'email', 'text', 'field', 'query']);\nconst FORM_IDS = new Set(['form', 'signup', 'login']);\nconst DIALOG_IDS = new Set(['modal', 'dialog', 'popup', 'overlay']);\nconst LIST_IDS = new Set(['list', 'items', 'results', 'options']);\n\nfunction inferTagFromId(id: string): string {\n const lower = id.toLowerCase();\n if (BUTTON_IDS.has(lower)) return 'button';\n if (INPUT_IDS.has(lower)) return 'input';\n if (FORM_IDS.has(lower)) return 'form';\n if (DIALOG_IDS.has(lower)) return 'div';\n if (LIST_IDS.has(lower)) return 'ul';\n return 'div';\n}\n\nfunction inferContent(id: string): string {\n const lower = id.toLowerCase();\n if (BUTTON_IDS.has(lower)) return 'Click';\n if (INPUT_IDS.has(lower)) return '';\n if (LIST_IDS.has(lower)) return '';\n // Capitalize first letter\n return id.charAt(0).toUpperCase() + id.slice(1);\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction createTriggerElement(selector: string, hyperscript?: string): string {\n const attr = hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n // If the trigger selector refers to an existing element type, use it\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return `<button id=\"${id}\"${attr}>Click</button>`;\n }\n return `<button id=\"trigger\"${attr}>Click</button>`;\n}\n\nfunction targetToSelector(ref: TargetRef): string | null {\n if (ref.kind === 'selector') return ref.value;\n if (ref.kind === 'self') return null;\n return null;\n}\n\nfunction needsInitialStyles(ops: AbstractOperation[]): boolean {\n return ops.some(op => op.op === 'hide' || op.op === 'show');\n}\n\nfunction getInitialClasses(selector: string, ops: AbstractOperation[]): string[] {\n const classes: string[] = [];\n for (const op of ops) {\n if (op.op === 'removeClass' && 'target' in op) {\n const targetSel = targetToSelector(op.target);\n if (targetSel === selector || (op.target.kind === 'self' && selector === null)) {\n classes.push(op.className);\n }\n }\n }\n return classes;\n}\n\nfunction escapeAttr(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n","/**\n * Playwright Test Renderer\n *\n * Generates complete Playwright test files from BehaviorSpecs.\n * Each generated test creates an HTML fixture, triggers the behavior,\n * and asserts the expected DOM changes.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type { TestRenderer, TestRenderOptions, GeneratedTest } from './types.js';\nimport { generateFixture } from './html-fixture.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class PlaywrightRenderer implements TestRenderer {\n readonly framework = 'playwright';\n\n render(spec: BehaviorSpec, options: TestRenderOptions = {}): GeneratedTest {\n const testName = options.testName ?? generateTestName(spec);\n const html = generateFixture(spec, options.hyperscript);\n\n const lines: string[] = [];\n\n // Import\n lines.push(\"import { test, expect } from '@playwright/test';\");\n lines.push('');\n\n // Test\n lines.push(`test('${escapeString(testName)}', async ({ page }) => {`);\n\n // Setup fixture\n lines.push(` await page.setContent(\\`${escapeTemplate(wrapHtml(html))}\\`);`);\n\n // Load the engine's script-tag bundle. (Until 4.0 this named core's\n // `lokascript-browser.js`, an alias of `hyperfixi.js`, which is the engine's file since\n // Phase C3; a 'compiled' mode loaded AOT output instead, until the AOT compiler retired.)\n const bundlePath =\n options.bundlePath ?? './node_modules/@hyperfixi/engine/dist/hyperfixi-hs.js';\n lines.push(` await page.addScriptTag({ path: '${escapeString(bundlePath)}' });`);\n lines.push(\" await page.waitForFunction(() => document.querySelector('[_]') !== null);\");\n // Wait for the engine to process attributes\n lines.push(' await page.waitForTimeout(100);');\n lines.push('');\n\n // Determine trigger locator\n const triggerLocator = getTriggerLocator(spec);\n\n // Generate assertions for each operation\n for (const op of spec.operations) {\n const assertions = generateAssertions(op, spec, triggerLocator);\n lines.push(...assertions.map(l => ` ${l}`));\n }\n\n lines.push('});');\n lines.push('');\n\n return {\n name: testName,\n code: lines.join('\\n'),\n html,\n framework: 'playwright',\n operations: spec.operations,\n };\n }\n}\n\n// =============================================================================\n// Assertion Generation\n// =============================================================================\n\nfunction generateAssertions(\n op: AbstractOperation,\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n switch (op.op) {\n case 'toggleClass':\n return generateToggleClassAssertions(op, spec, triggerLocator);\n case 'addClass':\n return generateAddClassAssertions(op, spec, triggerLocator);\n case 'removeClass':\n return generateRemoveClassAssertions(op, spec, triggerLocator);\n case 'setContent':\n return generateSetContentAssertions(op, spec, triggerLocator);\n case 'appendContent':\n return generateAppendContentAssertions(op, spec, triggerLocator);\n case 'show':\n return generateShowAssertions(op, spec, triggerLocator);\n case 'hide':\n return generateHideAssertions(op, spec, triggerLocator);\n case 'navigate':\n return generateNavigateAssertions(op, spec, triggerLocator);\n case 'focus':\n return generateFocusAssertions(op, spec, triggerLocator);\n case 'blur':\n return generateBlurAssertions(op, spec, triggerLocator);\n case 'triggerEvent':\n return generateTriggerEventAssertions(op, spec, triggerLocator);\n case 'fetch':\n return generateFetchAssertions(op, spec, triggerLocator);\n case 'wait':\n return generateWaitAssertions(op);\n case 'setVariable':\n case 'increment':\n case 'decrement':\n return generateVariableAssertions(op, spec, triggerLocator);\n case 'log':\n return generateLogAssertions(op, spec, triggerLocator);\n default:\n return [`// Unsupported operation: ${(op as AbstractOperation).op}`];\n }\n}\n\n// --- DOM Class ---\n\nfunction generateToggleClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n const lines: string[] = [];\n\n lines.push(`// Toggle .${op.className}`);\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n if (spec.async) lines.push('await page.waitForTimeout(100);');\n lines.push(`await expect(${locator}).toHaveClass(/${op.className}/);`);\n lines.push('');\n lines.push(`// Toggle back`);\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n if (spec.async) lines.push('await page.waitForTimeout(100);');\n lines.push(`await expect(${locator}).not.toHaveClass(/${op.className}/);`);\n\n return lines;\n}\n\nfunction generateAddClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Add .${op.className}`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toHaveClass(/${op.className}/);`,\n ];\n}\n\nfunction generateRemoveClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Remove .${op.className} (should have it initially)`,\n `await expect(${locator}).toHaveClass(/${op.className}/);`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toHaveClass(/${op.className}/);`,\n ];\n}\n\n// --- DOM Content ---\n\nfunction generateSetContentAssertions(\n op: { content: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Put \"${op.content}\" into element`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toContainText('${escapeString(op.content)}');`,\n ];\n}\n\nfunction generateAppendContentAssertions(\n op: { content: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Append \"${op.content}\"`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toContainText('${escapeString(op.content)}');`,\n ];\n}\n\n// --- DOM Visibility ---\n\nfunction generateShowAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Show element (initially hidden)',\n `await expect(${locator}).not.toBeVisible();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toBeVisible();`,\n ];\n}\n\nfunction generateHideAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Hide element (initially visible)',\n `await expect(${locator}).toBeVisible();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toBeVisible();`,\n ];\n}\n\n// --- Navigation ---\n\nfunction generateNavigateAssertions(\n op: { url: string },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Navigate to ${op.url}`,\n `// Note: Navigation will change the page URL`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n `await page.waitForURL('**${op.url}**');`,\n ];\n}\n\n// --- Focus ---\n\nfunction generateFocusAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Focus element',\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toBeFocused();`,\n ];\n}\n\nfunction generateBlurAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Blur element',\n `await ${locator}.focus();`,\n `await expect(${locator}).toBeFocused();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toBeFocused();`,\n ];\n}\n\n// --- Events ---\n\nfunction generateTriggerEventAssertions(\n op: { eventName: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Trigger '${op.eventName}' event`,\n `const eventReceived = page.evaluate((sel) => {`,\n ` return new Promise<boolean>((resolve) => {`,\n ` const el = document.querySelector(sel) ?? document.body;`,\n ` el.addEventListener('${escapeString(op.eventName)}', () => resolve(true), { once: true });`,\n ` setTimeout(() => resolve(false), 2000);`,\n ` });`,\n `}, '${escapeString(targetToCssSelector(op.target))}');`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n `expect(await eventReceived).toBe(true);`,\n ];\n}\n\n// --- Async ---\n\nfunction generateFetchAssertions(\n op: { url: string; format: string; target?: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const lines: string[] = [];\n\n lines.push(`// Fetch ${op.url} as ${op.format}`);\n\n // Mock the network request\n if (op.format === 'json') {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'application/json',`);\n lines.push(` body: JSON.stringify({ data: 'mock' }),`);\n lines.push(` });`);\n lines.push(`});`);\n } else if (op.format === 'html') {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'text/html',`);\n lines.push(` body: '<div>Mock HTML</div>',`);\n lines.push(` });`);\n lines.push(`});`);\n } else {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'text/plain',`);\n lines.push(` body: 'Mock response',`);\n lines.push(` });`);\n lines.push(`});`);\n }\n\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n lines.push('await page.waitForTimeout(500);');\n\n // If there's a target, verify content was placed\n if (op.target) {\n const locator = targetToLocator(op.target, spec);\n lines.push(`await expect(${locator}).not.toBeEmpty();`);\n }\n\n return lines;\n}\n\nfunction generateWaitAssertions(op: { durationMs: number }): string[] {\n return [`// Wait ${op.durationMs}ms`, `// (no assertion — wait is a timing operation)`];\n}\n\n// --- Variables ---\n\nfunction generateVariableAssertions(\n op: AbstractOperation,\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n // Variable operations don't have direct DOM assertions\n // but we can verify the behavior executed without errors\n return [\n `// ${op.op} (variable operation — verify no errors)`,\n 'const errors: string[] = [];',\n \"page.on('pageerror', (err) => errors.push(err.message));\",\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n 'expect(errors).toHaveLength(0);',\n ];\n}\n\n// --- Utility ---\n\nfunction generateLogAssertions(\n op: { values: string[] },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Log: ${op.values.join(', ')}`,\n 'const logs: string[] = [];',\n \"page.on('console', msg => { if (msg.type() === 'log') logs.push(msg.text()); });\",\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n 'expect(logs.length).toBeGreaterThan(0);',\n ];\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction generateTestName(spec: BehaviorSpec): string {\n if (spec.source) return spec.source;\n\n const parts: string[] = [];\n parts.push(`on ${spec.trigger.event}`);\n\n for (const op of spec.operations) {\n parts.push(describeOp(op));\n }\n\n return parts.join(' ');\n}\n\nfunction describeOp(op: AbstractOperation): string {\n switch (op.op) {\n case 'toggleClass':\n return `toggle .${op.className}${describeTarget(op.target)}`;\n case 'addClass':\n return `add .${op.className}${describeTarget(op.target)}`;\n case 'removeClass':\n return `remove .${op.className}${describeTarget(op.target)}`;\n case 'setContent':\n return `put \"${op.content}\"${describeTarget(op.target)}`;\n case 'appendContent':\n return `append \"${op.content}\"${describeTarget(op.target)}`;\n case 'show':\n return `show${describeTarget(op.target)}`;\n case 'hide':\n return `hide${describeTarget(op.target)}`;\n case 'navigate':\n return `go to ${op.url}`;\n case 'focus':\n return `focus${describeTarget(op.target)}`;\n case 'blur':\n return `blur${describeTarget(op.target)}`;\n case 'fetch':\n return `fetch ${op.url} as ${op.format}`;\n case 'wait':\n return `wait ${op.durationMs}ms`;\n case 'setVariable':\n return `set ${op.name} to ${op.value}`;\n case 'increment':\n return `increment${describeTarget(op.target)}`;\n case 'decrement':\n return `decrement${describeTarget(op.target)}`;\n case 'triggerEvent':\n return `trigger ${op.eventName}${describeTarget(op.target)}`;\n case 'log':\n return `log ${op.values.join(', ')}`;\n case 'historyBack':\n return 'go back';\n case 'historyForward':\n return 'go forward';\n default:\n return (op as AbstractOperation).op;\n }\n}\n\nfunction describeTarget(target: TargetRef): string {\n if (target.kind === 'self') return '';\n if (target.kind === 'selector') return ` on ${target.value}`;\n if (target.kind === 'variable') return ` on ${target.value}`;\n return '';\n}\n\nfunction getTriggerLocator(spec: BehaviorSpec): string {\n if (spec.triggerTarget.kind === 'selector') {\n return `page.locator('${escapeString(spec.triggerTarget.value)}')`;\n }\n\n // Self — find the element with the _=\"...\" attribute\n // If operations have a target, use that; otherwise use a generic trigger\n for (const op of spec.operations) {\n if ('target' in op && (op as { target: TargetRef }).target.kind === 'selector') {\n const t = (op as { target: TargetRef }).target;\n if (t.kind === 'selector') {\n return `page.locator('${escapeString(t.value)}')`;\n }\n }\n }\n\n return \"page.locator('[_]')\";\n}\n\nfunction targetToLocator(target: TargetRef, spec: BehaviorSpec): string {\n if (target.kind === 'selector') {\n return `page.locator('${escapeString(target.value)}')`;\n }\n if (target.kind === 'self') {\n return getTriggerLocator(spec);\n }\n // Variable target — fall back to trigger\n return getTriggerLocator(spec);\n}\n\nfunction targetToCssSelector(target: TargetRef): string {\n if (target.kind === 'selector') return target.value;\n if (target.kind === 'self') return '[_]';\n return 'body';\n}\n\nfunction triggerAction(spec: BehaviorSpec): string {\n const event = spec.trigger.event;\n switch (event) {\n case 'click':\n return 'click()';\n case 'dblclick':\n return 'dblclick()';\n case 'mouseenter':\n return 'hover()';\n case 'mouseover':\n return 'hover()';\n case 'focus':\n return 'focus()';\n case 'blur':\n return 'blur()';\n case 'keydown':\n case 'keyup':\n case 'keypress':\n return \"press('Enter')\";\n case 'input':\n case 'change':\n return \"fill('test')\";\n case 'submit':\n return 'click()';\n default:\n return `dispatchEvent(new Event('${escapeString(event)}'))`;\n }\n}\n\nfunction wrapHtml(body: string): string {\n return `<!DOCTYPE html>\\n<html>\\n<body>\\n${body}\\n</body>\\n</html>`;\n}\n\nfunction escapeString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction escapeTemplate(s: string): string {\n return s.replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n","/**\n * Shared Renderer Helpers\n *\n * Pure utility functions used by React, Vue, and Svelte component renderers.\n * Framework-agnostic: naming, type inference, tag inference, string escaping.\n */\n\nimport type { BehaviorSpec, TargetRef } from '../operations/types.js';\n\n// =============================================================================\n// String Utilities\n// =============================================================================\n\nexport function capitalize(s: string): string {\n if (!s) return s;\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function escapeString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nexport function isNumeric(s: string): boolean {\n return /^-?\\d+(\\.\\d+)?$/.test(s);\n}\n\nexport function cleanVarName(name: string): string {\n return name.replace(/^:/, '').replace(/[^a-zA-Z0-9]/g, '');\n}\n\n// =============================================================================\n// Target Helpers\n// =============================================================================\n\nexport function targetKey(target: TargetRef): string {\n if (target.kind === 'self') return 'self';\n return target.value;\n}\n\nexport function stateKey(prefix: string, name: string, target: TargetRef): string {\n return `${prefix}:${name}:${targetKey(target)}`;\n}\n\nexport function targetStateName(target: TargetRef, suffix: string): string {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n return clean + suffix;\n }\n return suffix.toLowerCase();\n}\n\nexport function targetRefName(target: TargetRef): string {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n return clean + 'Ref';\n }\n return 'elementRef';\n}\n\n// =============================================================================\n// Type Inference\n// =============================================================================\n\nexport function inferType(value: string): string {\n if (isNumeric(value)) return '<number>';\n if (value === 'true' || value === 'false') return '<boolean>';\n return '<string>';\n}\n\nexport function inferInitial(value: string, typeAnn: string): string {\n if (typeAnn === '<number>') return isNumeric(value) ? value : '0';\n if (typeAnn === '<boolean>') return value === 'true' ? 'true' : 'false';\n return `'${escapeString(value)}'`;\n}\n\n// =============================================================================\n// Tag and Selector Inference\n// =============================================================================\n\nexport function selectorToTag(selector: string): string {\n if (selector.startsWith('#')) {\n const id = selector.slice(1).toLowerCase();\n if (['btn', 'button', 'submit', 'trigger'].includes(id)) return 'button';\n if (['input', 'search', 'email', 'text', 'field'].includes(id)) return 'input';\n if (['form', 'signup', 'login'].includes(id)) return 'form';\n return 'div';\n }\n return 'div';\n}\n\nexport function inferTriggerTag(spec: BehaviorSpec): string {\n if (spec.triggerTarget.kind === 'selector') {\n return selectorToTag(spec.triggerTarget.value);\n }\n if (spec.trigger.event === 'submit') return 'form';\n if (spec.trigger.event === 'input' || spec.trigger.event === 'change') return 'input';\n return 'button';\n}\n\nexport function inferTriggerContent(spec: BehaviorSpec): string {\n const tag = inferTriggerTag(spec);\n if (tag === 'input' || tag === 'form') return '';\n if (spec.triggerTarget.kind === 'selector') {\n const id = spec.triggerTarget.value.replace(/^[#.]/, '');\n return capitalize(id);\n }\n return 'Click';\n}\n\n// =============================================================================\n// Component Naming\n// =============================================================================\n\nexport function generateComponentName(spec: BehaviorSpec): string {\n if (spec.operations.length === 0) return 'Component';\n\n const parts: string[] = [];\n const firstOp = spec.operations[0];\n\n switch (firstOp.op) {\n case 'toggleClass':\n parts.push('Toggle', capitalize(firstOp.className));\n break;\n case 'addClass':\n parts.push('Add', capitalize(firstOp.className));\n break;\n case 'removeClass':\n parts.push('Remove', capitalize(firstOp.className));\n break;\n case 'show':\n parts.push('Show');\n appendTargetName(parts, firstOp.target);\n break;\n case 'hide':\n parts.push('Hide');\n appendTargetName(parts, firstOp.target);\n break;\n case 'setContent':\n parts.push('SetContent');\n appendTargetName(parts, firstOp.target);\n break;\n case 'navigate':\n parts.push('NavigateTo');\n parts.push(capitalize(firstOp.url.replace(/[^a-zA-Z0-9]/g, '')));\n break;\n case 'fetch':\n parts.push('FetchData');\n break;\n case 'increment':\n parts.push('Increment');\n appendTargetName(parts, firstOp.target);\n break;\n case 'decrement':\n parts.push('Decrement');\n appendTargetName(parts, firstOp.target);\n break;\n case 'focus':\n parts.push('Focus');\n appendTargetName(parts, firstOp.target);\n break;\n default:\n parts.push('Component');\n }\n\n if (spec.trigger.event !== 'click') {\n parts.push('On', capitalize(spec.trigger.event));\n }\n\n return parts.join('') || 'Component';\n}\n\nfunction appendTargetName(parts: string[], target: TargetRef): void {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n parts.push(capitalize(clean));\n }\n}\n\n// =============================================================================\n// Class State Extraction\n// =============================================================================\n\n/**\n * Find class operations on the trigger element ('self') and look up their state variable names.\n * Works with any renderer's stateMap as long as keys follow the `target:class:className` pattern.\n */\nexport function getSelfClassStates(\n spec: BehaviorSpec,\n stateMap: Map<string, string>\n): { stateName: string; className: string }[] {\n const result: { stateName: string; className: string }[] = [];\n for (const op of spec.operations) {\n if (\n (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') &&\n op.target.kind === 'self'\n ) {\n const stateVar = stateMap.get('self:class:' + op.className);\n if (stateVar) {\n result.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n return result;\n}\n","/**\n * React Component Renderer\n *\n * Generates complete React functional components from BehaviorSpecs.\n * Maps abstract operations to React hooks (useState, useRef, useCallback) and JSX.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class ReactRenderer implements ComponentRenderer {\n readonly framework = 'react';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n // Pre-pass: analyze what hooks and state we need\n const analysis = analyzeOperations(spec);\n\n const lines: string[] = [];\n\n // Imports\n const hooksList = [...analysis.hooks];\n if (hooksList.length > 0) {\n lines.push(`import { ${hooksList.join(', ')} } from 'react';`);\n }\n lines.push('');\n\n // Component function\n const propsType = ts ? '()' : '()';\n lines.push(`export function ${componentName}${propsType} {`);\n\n // State declarations\n for (const state of analysis.states) {\n const typeAnn = ts ? state.typeAnnotation : '';\n lines.push(\n ` const [${state.name}, ${state.setter}] = useState${typeAnn}(${state.initialValue});`\n );\n }\n\n // Ref declarations\n for (const ref of analysis.refs) {\n const typeAnn = ts ? ref.typeAnnotation : '';\n lines.push(` const ${ref.name} = useRef${typeAnn}(null);`);\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n lines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n lines.push(` const ${handlerName} = useCallback(${asyncPrefix}() => {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n lines.push(` ${l}`);\n }\n }\n\n lines.push(' }, []);');\n lines.push('');\n\n // JSX return\n lines.push(' return (');\n const jsx = generateJSX(spec, analysis, handlerName);\n for (const l of jsx) {\n lines.push(` ${l}`);\n }\n lines.push(' );');\n lines.push('}');\n lines.push('');\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'react',\n operations: spec.operations,\n hooks: hooksList,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis (pre-pass)\n// =============================================================================\n\ninterface StateDecl {\n name: string;\n setter: string;\n typeAnnotation: string;\n initialValue: string;\n /** The target selector this state is associated with */\n targetKey: string;\n}\n\ninterface RefDecl {\n name: string;\n typeAnnotation: string;\n targetKey: string;\n}\n\ninterface OperationAnalysis {\n hooks: Set<string>;\n states: StateDecl[];\n refs: RefDecl[];\n /** Map from target key → state variable name */\n stateMap: Map<string, string>;\n /** Map from target key → ref variable name */\n refMap: Map<string, string>;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec): OperationAnalysis {\n const hooks = new Set<string>();\n const states: StateDecl[] = [];\n const refs: RefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n // Always need useCallback for the handler\n hooks.add('useCallback');\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = `has${capitalize(op.className)}`;\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: 'false',\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: initial,\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: typeAnn,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Count');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<number>',\n initialValue: '0',\n targetKey: tk,\n });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n // Need state for the fetched data\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n hooks.add('useRef');\n const name = targetRefName(op.target);\n refs.push({\n name,\n typeAnnotation: '<HTMLElement>',\n targetKey: tk,\n });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n hooks.add('useRef');\n const name = targetRefName(op.target);\n refs.push({\n name,\n typeAnnotation: '<HTMLElement>',\n targetKey: tk,\n });\n refMap.set(tk, name);\n }\n break;\n }\n\n // navigate, historyBack, historyForward, wait, log — no state/refs needed\n }\n }\n\n return { hooks, states, refs, stateMap, refMap };\n}\n\n// =============================================================================\n// Operation Code Generation\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: OperationAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(prev => !prev);`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(true);`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(false);`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setVisible';\n return [`${setter}(true);`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setVisible';\n return [`${setter}(false);`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n return [`${setter}('${escapeString(op.content)}');`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n return [`${setter}(prev => prev + '${escapeString(op.content)}');`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setValue';\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${setter}(${val});`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setCount';\n return [`${setter}(prev => prev + ${op.amount});`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setCount';\n return [`${setter}(prev => prev - ${op.amount});`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}';`];\n\n case 'historyBack':\n return ['window.history.back();'];\n\n case 'historyForward':\n return ['window.history.forward();'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}');`);\n if (op.format === 'json') {\n lines.push('const data = await response.json();');\n } else if (op.format === 'html') {\n lines.push('const data = await response.text();');\n } else {\n lines.push('const data = await response.text();');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n if (op.format === 'json') {\n lines.push(`${setter}(JSON.stringify(data));`);\n } else {\n lines.push(`${setter}(data);`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}));`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.current?.focus();`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.current?.blur();`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}?.current?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }));`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')});`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// JSX Generation\n// =============================================================================\n\nfunction generateJSX(\n spec: BehaviorSpec,\n analysis: OperationAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectJSXElements(spec, analysis);\n const eventProp = eventToReactProp(spec.trigger.event);\n\n const needsFragment = elements.length > 1 || elements.length === 0;\n\n if (needsFragment) lines.push('<>');\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventProp}={${handlerName}}`];\n\n // If trigger is 'self' and there are class operations on self, add className\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n if (selfClassStates.length > 0) {\n const classExpr = selfClassStates\n .map(s => `\\${${s.stateName} ? '${s.className}' : ''}`)\n .join(' ')\n .trim();\n triggerAttrs.push(`className={\\`${classExpr}\\`.trim()}`);\n }\n\n const indent = needsFragment ? ' ' : '';\n lines.push(\n `${indent}<${triggerTag} ${triggerAttrs.join(' ')}>${inferTriggerContent(spec)}</${triggerTag}>`\n );\n\n // Target elements (that aren't the trigger)\n for (const el of elements) {\n const elLines = renderJSXElement(el, analysis);\n for (const l of elLines) {\n lines.push(`${indent}${l}`);\n }\n }\n\n if (needsFragment) lines.push('</>');\n\n return lines;\n}\n\ninterface JSXElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n content?: string;\n /** Operations targeting this element */\n ops: AbstractOperation[];\n}\n\nfunction collectJSXElements(spec: BehaviorSpec, _analysis: OperationAnalysis): JSXElement[] {\n const seen = new Set<string>();\n const elements: JSXElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n // Skip if this is the trigger element (it's rendered separately)\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n // Add op to existing element\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({\n selector: sel,\n tag,\n id,\n className: cls,\n ops: [op],\n });\n }\n\n return elements;\n}\n\nfunction renderJSXElement(el: JSXElement, analysis: OperationAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Check for class state on this element\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (classStates.length > 0) {\n const parts = classStates.map(s => `\\${${s.stateName} ? '${s.className}' : ''}`);\n if (el.className) {\n attrs.push(`className={\\`${el.className} ${parts.join(' ')}\\`.trim()}`);\n } else {\n attrs.push(`className={\\`${parts.join(' ')}\\`.trim()}`);\n }\n } else if (el.className) {\n attrs.push(`className=\"${el.className}\"`);\n }\n\n // Check for ref on this element\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`ref={${refName}}`);\n }\n\n // Check for visibility state\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Check for content state\n const contentState = analysis.stateMap.get(el.selector + ':content');\n\n // Check for numeric state\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState\n ? `{${contentState}}`\n : numState\n ? `{${numState}}`\n : (el.content ?? el.id ?? '');\n\n const elementLine = `<${el.tag}${attrStr}>${content}</${el.tag}>`;\n\n if (visState) {\n lines.push(`{${visState} && ${elementLine}}`);\n } else {\n lines.push(elementLine);\n }\n\n return lines;\n}\n\n// =============================================================================\n// React-specific Helpers\n// =============================================================================\n\nfunction eventToReactProp(event: string): string {\n switch (event) {\n case 'click':\n return 'onClick';\n case 'dblclick':\n return 'onDoubleClick';\n case 'mouseenter':\n return 'onMouseEnter';\n case 'mouseover':\n return 'onMouseOver';\n case 'mouseleave':\n return 'onMouseLeave';\n case 'focus':\n return 'onFocus';\n case 'blur':\n return 'onBlur';\n case 'keydown':\n return 'onKeyDown';\n case 'keyup':\n return 'onKeyUp';\n case 'keypress':\n return 'onKeyPress';\n case 'input':\n return 'onInput';\n case 'change':\n return 'onChange';\n case 'submit':\n return 'onSubmit';\n default:\n return `on${capitalize(event)}`;\n }\n}\n","/**\n * Vue 3 Component Renderer\n *\n * Generates Vue 3 Single File Components (SFC) with Composition API\n * (<script setup>) from BehaviorSpecs.\n * Maps abstract operations to Vue refs and template directives.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class VueRenderer implements ComponentRenderer {\n readonly framework = 'vue';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n const analysis = analyzeOperations(spec);\n\n // -- <script setup> block --\n const scriptLines: string[] = [];\n\n // Imports\n const vueImports: string[] = [];\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n vueImports.push('ref');\n }\n if (vueImports.length > 0) {\n scriptLines.push(`import { ${vueImports.join(', ')} } from 'vue'`);\n scriptLines.push('');\n }\n\n // State declarations\n for (const state of analysis.states) {\n if (ts) {\n scriptLines.push(`const ${state.name} = ref${state.typeAnnotation}(${state.initialValue})`);\n } else {\n scriptLines.push(`const ${state.name} = ref(${state.initialValue})`);\n }\n }\n\n // Ref declarations\n for (const r of analysis.refs) {\n if (ts) {\n scriptLines.push(`const ${r.name} = ref<HTMLElement | null>(null)`);\n } else {\n scriptLines.push(`const ${r.name} = ref(null)`);\n }\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n scriptLines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n scriptLines.push(`${asyncPrefix}function ${handlerName}() {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n scriptLines.push(` ${l}`);\n }\n }\n\n scriptLines.push('}');\n\n // -- <template> block --\n const templateLines = generateTemplate(spec, analysis, handlerName);\n\n // -- Combine SFC --\n const langAttr = ts ? ' lang=\"ts\"' : '';\n const lines: string[] = [];\n lines.push(`<script setup${langAttr}>`);\n for (const l of scriptLines) {\n lines.push(l);\n }\n lines.push('</script>');\n lines.push('');\n lines.push('<template>');\n for (const l of templateLines) {\n lines.push(` ${l}`);\n }\n lines.push('</template>');\n lines.push('');\n\n const hooks = vueImports.length > 0 ? [...vueImports] : [];\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'vue',\n operations: spec.operations,\n hooks,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis\n// =============================================================================\n\ninterface VueStateDecl {\n name: string;\n typeAnnotation: string;\n initialValue: string;\n targetKey: string;\n}\n\ninterface VueRefDecl {\n name: string;\n targetKey: string;\n}\n\ninterface VueAnalysis {\n states: VueStateDecl[];\n refs: VueRefDecl[];\n stateMap: Map<string, string>;\n refMap: Map<string, string>;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec): VueAnalysis {\n const states: VueStateDecl[] = [];\n const refs: VueRefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: 'false',\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: initial,\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n typeAnnotation: typeAnn,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Count');\n states.push({\n name,\n typeAnnotation: '<number>',\n initialValue: '0',\n targetKey: tk,\n });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n }\n }\n\n return { states, refs, stateMap, refMap };\n}\n\n// =============================================================================\n// Operation Code Generation (Vue: .value mutation)\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: VueAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = !${stateVar ?? 'state'}.value`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = true`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = false`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'}.value = true`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'}.value = false`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'}.value = '${escapeString(op.content)}'`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'}.value += '${escapeString(op.content)}'`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${stateVar ?? 'value'}.value = ${val}`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'}.value += ${op.amount}`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'}.value -= ${op.amount}`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}'`];\n\n case 'historyBack':\n return ['window.history.back()'];\n\n case 'historyForward':\n return ['window.history.forward()'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}')`);\n if (op.format === 'json') {\n lines.push('const data = await response.json()');\n } else {\n lines.push('const data = await response.text()');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n if (op.format === 'json') {\n lines.push(`${stateVar ?? 'content'}.value = JSON.stringify(data)`);\n } else {\n lines.push(`${stateVar ?? 'content'}.value = data`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}))`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}.value?.focus()`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}.value?.blur()`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}.value?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }))`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')})`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// Template Generation\n// =============================================================================\n\nfunction generateTemplate(\n spec: BehaviorSpec,\n analysis: VueAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectTargetElements(spec);\n const eventDirective = `@${spec.trigger.event}`;\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventDirective}=\"${handlerName}\"`];\n\n // Class bindings on trigger\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n if (selfClassStates.length > 0) {\n const classObj = selfClassStates.map(s => `${s.className}: ${s.stateName}`).join(', ');\n triggerAttrs.push(`:class=\"{ ${classObj} }\"`);\n }\n\n const triggerContent = inferTriggerContent(spec);\n lines.push(`<${triggerTag} ${triggerAttrs.join(' ')}>${triggerContent}</${triggerTag}>`);\n\n // Target elements\n for (const el of elements) {\n const elLines = renderVueElement(el, analysis);\n for (const l of elLines) {\n lines.push(l);\n }\n }\n\n return lines;\n}\n\ninterface TemplateElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n ops: AbstractOperation[];\n}\n\nfunction collectTargetElements(spec: BehaviorSpec): TemplateElement[] {\n const seen = new Set<string>();\n const elements: TemplateElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({ selector: sel, tag, id, className: cls, ops: [op] });\n }\n\n return elements;\n}\n\nfunction renderVueElement(el: TemplateElement, analysis: VueAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Class bindings\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (classStates.length > 0) {\n const classObj = classStates.map(s => `${s.className}: ${s.stateName}`).join(', ');\n if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n attrs.push(`:class=\"{ ${classObj} }\"`);\n } else {\n attrs.push(`:class=\"{ ${classObj} }\"`);\n }\n } else if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n }\n\n // Ref binding\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`ref=\"${refName}\"`);\n }\n\n // Visibility\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Content\n const contentState = analysis.stateMap.get(el.selector + ':content');\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState\n ? `{{ ${contentState} }}`\n : numState\n ? `{{ ${numState} }}`\n : (el.id ?? '');\n\n if (visState) {\n lines.push(`<${el.tag}${attrStr} v-if=\"${visState}\">${content}</${el.tag}>`);\n } else {\n lines.push(`<${el.tag}${attrStr}>${content}</${el.tag}>`);\n }\n\n return lines;\n}\n","/**\n * Svelte 5 Component Renderer\n *\n * Generates Svelte 5 components with runes ($state, $derived, $effect)\n * from BehaviorSpecs.\n * Maps abstract operations to direct state mutation and Svelte template syntax.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class SvelteRenderer implements ComponentRenderer {\n readonly framework = 'svelte';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n const analysis = analyzeOperations(spec, ts);\n\n // -- <script> block --\n const scriptLines: string[] = [];\n\n // State declarations ($state runes — no imports needed)\n for (const state of analysis.states) {\n scriptLines.push(`let ${state.name} = $state(${state.initialValue})`);\n }\n\n // Ref declarations (plain variables, bound via bind:this)\n for (const r of analysis.refs) {\n if (ts) {\n scriptLines.push(`let ${r.name}: HTMLElement`);\n } else {\n scriptLines.push(`let ${r.name}`);\n }\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n scriptLines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n scriptLines.push(`${asyncPrefix}function ${handlerName}() {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n scriptLines.push(` ${l}`);\n }\n }\n\n scriptLines.push('}');\n\n // -- Template --\n const templateLines = generateTemplate(spec, analysis, handlerName);\n\n // -- Combine --\n const langAttr = ts ? ' lang=\"ts\"' : '';\n const lines: string[] = [];\n lines.push(`<script${langAttr}>`);\n for (const l of scriptLines) {\n lines.push(` ${l}`);\n }\n lines.push('</script>');\n lines.push('');\n for (const l of templateLines) {\n lines.push(l);\n }\n lines.push('');\n\n // Track which runes are used\n const hooks: string[] = [];\n if (analysis.states.length > 0) hooks.push('$state');\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'svelte',\n operations: spec.operations,\n hooks,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis\n// =============================================================================\n\ninterface SvelteStateDecl {\n name: string;\n initialValue: string;\n targetKey: string;\n}\n\ninterface SvelteRefDecl {\n name: string;\n targetKey: string;\n}\n\ninterface SvelteAnalysis {\n states: SvelteStateDecl[];\n refs: SvelteRefDecl[];\n stateMap: Map<string, string>;\n refMap: Map<string, string>;\n ts: boolean;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec, ts: boolean): SvelteAnalysis {\n const states: SvelteStateDecl[] = [];\n const refs: SvelteRefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n states.push({ name, initialValue: 'false', targetKey: targetKey(op.target) });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({ name, initialValue: initial, targetKey: targetKey(op.target) });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({ name, initialValue: \"''\", targetKey: tk });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Count');\n states.push({ name, initialValue: '0', targetKey: tk });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({ name, initialValue: \"''\", targetKey: tk });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n }\n }\n\n return { states, refs, stateMap, refMap, ts };\n}\n\n// =============================================================================\n// Operation Code Generation (Svelte: direct mutation)\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: SvelteAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = !${stateVar ?? 'state'}`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = true`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = false`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'} = true`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'} = false`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'} = '${escapeString(op.content)}'`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'} += '${escapeString(op.content)}'`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${stateVar ?? 'value'} = ${val}`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'} += ${op.amount}`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'} -= ${op.amount}`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}'`];\n\n case 'historyBack':\n return ['window.history.back()'];\n\n case 'historyForward':\n return ['window.history.forward()'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}')`);\n if (op.format === 'json') {\n lines.push('const data = await response.json()');\n } else {\n lines.push('const data = await response.text()');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n if (op.format === 'json') {\n lines.push(`${stateVar ?? 'content'} = JSON.stringify(data)`);\n } else {\n lines.push(`${stateVar ?? 'content'} = data`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}))`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.focus()`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.blur()`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }))`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')})`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// Template Generation\n// =============================================================================\n\nfunction generateTemplate(\n spec: BehaviorSpec,\n analysis: SvelteAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectTargetElements(spec);\n const eventAttr = `on${spec.trigger.event}`;\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventAttr}={${handlerName}}`];\n\n // Class directives on trigger\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n for (const s of selfClassStates) {\n triggerAttrs.push(`class:${s.className}={${s.stateName}}`);\n }\n\n const triggerContent = inferTriggerContent(spec);\n lines.push(`<${triggerTag} ${triggerAttrs.join(' ')}>${triggerContent}</${triggerTag}>`);\n\n // Target elements\n for (const el of elements) {\n const elLines = renderSvelteElement(el, analysis);\n for (const l of elLines) {\n lines.push(l);\n }\n }\n\n return lines;\n}\n\ninterface TemplateElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n ops: AbstractOperation[];\n}\n\nfunction collectTargetElements(spec: BehaviorSpec): TemplateElement[] {\n const seen = new Set<string>();\n const elements: TemplateElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({ selector: sel, tag, id, className: cls, ops: [op] });\n }\n\n return elements;\n}\n\nfunction renderSvelteElement(el: TemplateElement, analysis: SvelteAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Class directives\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n }\n for (const s of classStates) {\n attrs.push(`class:${s.className}={${s.stateName}}`);\n }\n\n // Ref binding\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`bind:this={${refName}}`);\n }\n\n // Visibility\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Content\n const contentState = analysis.stateMap.get(el.selector + ':content');\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState ? `{${contentState}}` : numState ? `{${numState}}` : (el.id ?? '');\n\n const elementLine = `<${el.tag}${attrStr}>${content}</${el.tag}>`;\n\n if (visState) {\n lines.push(`{#if ${visState}}`);\n lines.push(` ${elementLine}`);\n lines.push('{/if}');\n } else {\n lines.push(elementLine);\n }\n\n return lines;\n}\n","/**\n * CompilationService — the main orchestrator.\n *\n * Accepts hyperscript in three formats (natural language, explicit syntax, LLM JSON),\n * validates it through semantic schemas and the engine, and translates, diffs, scores, and\n * renders it as components and tests. (It compiled to JavaScript through\n * `@hyperfixi/aot-compiler` until 4.0, when the AOT compiler retired.)\n */\n\nimport type {\n CompileRequest,\n ValidationResponse,\n TranslateRequest,\n TranslateResponse,\n TestRequest,\n TestResponse,\n ComponentRequest,\n ComponentResponse,\n DiffRequest,\n DiffResponse,\n GenerateRequest,\n GenerateResponse,\n ServiceOptions,\n SemanticJSON,\n SemanticJSONValue,\n Diagnostic,\n NormalizeResult,\n} from './types.js';\nimport { diffBehaviors } from './diff/diff.js';\nimport { scoreNodes, type ScoreRequest, type ScoreResponse } from './scoring/score.js';\nimport { normalize, initNormalizer } from './input/normalize.js';\nimport {\n runValidationGates,\n initValidation,\n type ValidationFunctions,\n} from './validation/gates.js';\nimport { extractOperations } from './operations/extract.js';\nimport { PlaywrightRenderer } from './renderers/playwright.js';\nimport { ReactRenderer } from './renderers/react.js';\nimport { VueRenderer } from './renderers/vue.js';\nimport { SvelteRenderer } from './renderers/svelte.js';\nimport type { TestRenderer } from './renderers/types.js';\nimport type { ComponentRenderer } from './renderers/component-types.js';\n\n// =============================================================================\n// Service\n// =============================================================================\n\n/** semantic's `findTranslationCollisions`, as the service calls it. */\ntype TranslationCollisionsFn = (\n code: string,\n from: string,\n to: string\n) => ReadonlyArray<{\n readonly name: string;\n readonly occurrences: ReadonlyArray<unknown>;\n readonly rename: string | undefined;\n readonly message: string;\n}>;\n\nexport class CompilationService {\n private confidenceThreshold: number;\n private translateFn: ((code: string, from: string, to: string) => string) | null = null;\n private translationCollisionsFn: TranslationCollisionsFn | null = null;\n /** semantic's `render`, for the English a translation runs as. */\n private renderFn: ((node: unknown, language: string) => string) | null = null;\n /**\n * `@hyperfixi/engine`'s first parse error for a source (null: it parses). Set by create()\n * when the engine is installed (an optional peer); without it there is no engine check.\n */\n private engineError: ((source: string) => string | null) | null = null;\n private testRenderers: Map<string, TestRenderer>;\n private componentRenderers: Map<string, ComponentRenderer>;\n\n private constructor(options: ServiceOptions = {}) {\n this.confidenceThreshold = options.confidenceThreshold ?? 0.7;\n\n // Initialize renderer registries with defaults\n this.testRenderers = new Map<string, TestRenderer>(\n Object.entries(options.testRenderers ?? { playwright: new PlaywrightRenderer() })\n );\n this.componentRenderers = new Map<string, ComponentRenderer>(\n Object.entries(\n options.componentRenderers ?? {\n react: new ReactRenderer(),\n vue: new VueRenderer(),\n svelte: new SvelteRenderer(),\n }\n )\n );\n }\n\n /**\n * Register a test renderer for a given framework.\n */\n registerTestRenderer(framework: string, renderer: TestRenderer): void {\n this.testRenderers.set(framework, renderer);\n }\n\n /**\n * Register a component renderer for a given framework.\n */\n registerComponentRenderer(framework: string, renderer: ComponentRenderer): void {\n this.componentRenderers.set(framework, renderer);\n }\n\n /**\n * Create a CompilationService by dynamically importing dependencies.\n *\n * This async factory resolves @lokascript/semantic (and, when it is installed,\n * @hyperfixi/engine) at runtime.\n */\n static async create(options: ServiceOptions = {}): Promise<CompilationService> {\n const service = new CompilationService(options);\n\n // Import semantic package\n const semantic = await import('@lokascript/semantic');\n\n // Initialize normalizer with semantic parsing functions\n initNormalizer({\n parseSemantic: semantic.parseSemantic,\n parseExplicit: semantic.parseExplicit,\n isExplicitSyntax: semantic.isExplicitSyntax,\n });\n\n // Initialize validation with schema validator\n // Cast needed: our interface uses `unknown` to avoid importing semantic types\n initValidation({\n validateSemanticResult:\n semantic.validateSemanticResult as ValidationFunctions['validateSemanticResult'],\n });\n\n // Store translate function\n service.translateFn = semantic.translate;\n service.translationCollisionsFn = semantic.findTranslationCollisions;\n service.renderFn = semantic.render as (node: unknown, language: string) => string;\n\n // The engine the product runs (hyperfixi-hs.js), when it is installed. Natural-language\n // input has to be English it reads: semantic's grammar is more permissive than the\n // engine's, and a source only semantic accepts does nothing on a page.\n try {\n const engine = await import('@hyperfixi/engine');\n engine.register(...engine.everything);\n service.engineError = source => {\n try {\n return engine.api.parse(source).errors[0]?.message.split('\\n')[0] ?? null;\n } catch (e) {\n return (e instanceof Error ? e.message : String(e)).split('\\n')[0] ?? 'parse error';\n }\n };\n } catch {\n /* @hyperfixi/engine is not installed: validation is semantic's alone */\n }\n\n return service;\n }\n\n /**\n * The engine's verdict on natural-language input: its parse of the English the page would\n * run — the source as written, or a translation's English render (what\n * `@lokascript/hyperscript-adapter` hands the engine). Null when it parses, or when there is\n * nothing to check (explicit / JSON input, or no engine installed).\n */\n private engineDiagnostic(\n request: CompileRequest,\n normalized: NormalizeResult\n ): Diagnostic | null {\n if (!this.engineError || normalized.format !== 'natural' || !request.code) return null;\n const language = request.language ?? 'en';\n const english = language === 'en' || language.startsWith('en-');\n let source = request.code;\n if (!english) {\n if (!this.renderFn || !normalized.node) return null;\n try {\n source = this.renderFn(normalized.node, 'en');\n } catch {\n return null;\n }\n }\n const error = this.engineError(source);\n if (!error) return null;\n return {\n severity: 'error',\n code: 'ENGINE_PARSE_ERROR',\n message: english\n ? `@hyperfixi/engine cannot read this: ${error}`\n : `@hyperfixi/engine cannot read its English (${source}): ${error}`,\n suggestion:\n \"The engine reads upstream _hyperscript's grammar: check the command's syntax \" +\n '(get_command_docs) and rewrite the part the error names.',\n };\n }\n\n // ===========================================================================\n // Public API\n // ===========================================================================\n\n /**\n * Validate input: semantic's parse and schemas, and (for natural-language input) the\n * engine's parse of the English the page would run.\n * Returns semantic representation and diagnostics.\n */\n validate(request: CompileRequest): ValidationResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Normalize\n const normalized = normalize(request);\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, diagnostics };\n }\n\n // Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n const engineRejects = gateResult.pass ? this.engineDiagnostic(request, normalized) : null;\n if (engineRejects) diagnostics.push(engineRejects);\n const ok = gateResult.pass && !engineRejects;\n\n const semanticJSON = ok ? nodeToSemanticJSON(normalized.node) : undefined;\n\n return {\n ok,\n semantic: semanticJSON,\n confidence: gateResult.adjustedConfidence,\n diagnostics,\n };\n }\n\n /**\n * Translate hyperscript between languages.\n */\n translate(request: TranslateRequest): TranslateResponse {\n if (!this.translateFn) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'NOT_INITIALIZED',\n message: 'Translation not available.',\n },\n ],\n };\n }\n\n try {\n const result = this.translateFn(request.code, request.from, request.to);\n\n // Arc 5's verified-translation badge: score the rendering against its\n // source (cross-language scoreFidelity). Advisory — verification can\n // fail to parse without flipping ok, and its diagnostics stay inside it.\n let verification: ScoreResponse | undefined;\n if (request.verify !== false) {\n verification = this.scoreFidelity({\n reference: { code: request.code, language: request.from },\n candidate: { code: result, language: request.to },\n });\n }\n\n return {\n ok: true,\n code: result,\n ...(verification !== undefined ? { verification } : {}),\n diagnostics: this.translationCollisions(request),\n };\n } catch (error) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'TRANSLATE_ERROR',\n message: error instanceof Error ? error.message : String(error),\n },\n ],\n };\n }\n }\n\n /**\n * A variable of the source that the target language reads as a value word\n * (tl `ako` is `me`): the translation reads the value, and no spelling of\n * the name tells them apart, so the fix is a rename before translating.\n */\n private translationCollisions(request: TranslateRequest): Diagnostic[] {\n const findings = this.translationCollisionsFn?.(request.code, request.from, request.to) ?? [];\n return findings.map(finding => ({\n severity: 'warning' as const,\n code: 'NAME_COLLISION',\n message: finding.message,\n suggestion: finding.rename\n ? `Rename \\`${finding.name}\\` to \\`${finding.rename}\\` in the source (${finding.occurrences.length} place(s)), then translate.`\n : `Rename \\`${finding.name}\\` in the source, then translate.`,\n }));\n }\n\n /**\n * Generate behavior-level tests from hyperscript.\n *\n * Parses the input, extracts abstract operations (what the behavior does),\n * and renders them as test code in the requested framework.\n */\n generateTests(request: TestRequest): TestResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Step 1: Normalize input to SemanticNode (reuse existing pipeline)\n const normalized = normalize({\n code: request.code,\n explicit: request.explicit,\n semantic: request.semantic,\n language: request.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Step 2: Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n if (!gateResult.pass) {\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Step 3: Extract abstract operations\n const spec = extractOperations(normalized.node);\n\n if (spec.operations.length === 0) {\n diagnostics.push({\n severity: 'warning',\n code: 'NO_OPERATIONS',\n message: 'No testable operations extracted from the input.',\n });\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Attach source hyperscript for test naming\n if (!spec.source && request.code) {\n spec.source = request.code;\n }\n\n // Step 4: Render tests\n const frameworkName = request.framework ?? 'playwright';\n const renderer = this.testRenderers.get(frameworkName);\n if (!renderer) {\n diagnostics.push({\n severity: 'error',\n code: 'UNKNOWN_FRAMEWORK',\n message: `No test renderer registered for framework '${frameworkName}'. Available: ${[...this.testRenderers.keys()].join(', ')}`,\n });\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n const generated = renderer.render(spec, {\n testName: request.testName,\n bundlePath: request.bundlePath,\n hyperscript: request.code ?? request.explicit,\n });\n\n const semanticJSON = nodeToSemanticJSON(normalized.node);\n\n return {\n ok: true,\n tests: [\n {\n name: generated.name,\n code: generated.code,\n html: generated.html,\n framework: generated.framework,\n },\n ],\n operations: spec.operations,\n semantic: semanticJSON,\n diagnostics,\n };\n }\n\n /**\n * Generate a framework component from hyperscript.\n *\n * Parses the input, extracts abstract operations, and renders\n * them as a framework-specific component (React, Vue, or Svelte).\n */\n generateComponent(request: ComponentRequest): ComponentResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Step 1: Normalize input to SemanticNode\n const normalized = normalize({\n code: request.code,\n explicit: request.explicit,\n semantic: request.semantic,\n language: request.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, operations: [], diagnostics };\n }\n\n // Step 2: Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n if (!gateResult.pass) {\n return { ok: false, operations: [], diagnostics };\n }\n\n // Step 3: Extract abstract operations\n const spec = extractOperations(normalized.node);\n\n if (spec.operations.length === 0) {\n diagnostics.push({\n severity: 'warning',\n code: 'NO_OPERATIONS',\n message: 'No operations extracted from the input.',\n });\n return { ok: false, operations: [], diagnostics };\n }\n\n if (!spec.source && request.code) {\n spec.source = request.code;\n }\n\n // Step 4: Render component\n const frameworkName = request.framework ?? 'react';\n const renderer = this.componentRenderers.get(frameworkName);\n if (!renderer) {\n diagnostics.push({\n severity: 'error',\n code: 'UNKNOWN_FRAMEWORK',\n message: `No component renderer registered for framework '${frameworkName}'. Available: ${[...this.componentRenderers.keys()].join(', ')}`,\n });\n return { ok: false, operations: [], diagnostics };\n }\n const generated = renderer.render(spec, {\n componentName: request.componentName,\n typescript: request.typescript,\n });\n\n const semanticJSON = nodeToSemanticJSON(normalized.node);\n\n return {\n ok: true,\n component: {\n name: generated.name,\n code: generated.code,\n hooks: generated.hooks,\n framework: generated.framework,\n },\n operations: spec.operations,\n semantic: semanticJSON,\n diagnostics,\n };\n }\n\n /**\n * Compare two hyperscript inputs at the behavior level.\n *\n * Both sides are independently normalized and validated, then compared\n * as abstract operations. Same behavior in different languages → identical.\n */\n diff(request: DiffRequest): DiffResponse {\n const diagnostics: Diagnostic[] = [];\n const threshold = request.confidence ?? this.confidenceThreshold;\n\n // Normalize both sides independently\n const normA = normalize({\n code: request.a.code,\n explicit: request.a.explicit,\n semantic: request.a.semantic,\n language: request.a.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normA.diagnostics.map(d => ({ ...d, message: `[a] ${d.message}` })));\n\n const normB = normalize({\n code: request.b.code,\n explicit: request.b.explicit,\n semantic: request.b.semantic,\n language: request.b.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normB.diagnostics.map(d => ({ ...d, message: `[b] ${d.message}` })));\n\n if (!normA.node || !normB.node) {\n return {\n ok: false,\n identical: false,\n trigger: null,\n operations: [],\n summary: 'Parse failed',\n diagnostics,\n };\n }\n\n // Validate both sides\n const gateA = runValidationGates(normA.node, normA.confidence, threshold);\n diagnostics.push(...gateA.diagnostics.map(d => ({ ...d, message: `[a] ${d.message}` })));\n\n const gateB = runValidationGates(normB.node, normB.confidence, threshold);\n diagnostics.push(...gateB.diagnostics.map(d => ({ ...d, message: `[b] ${d.message}` })));\n\n if (!gateA.pass || !gateB.pass) {\n return {\n ok: false,\n identical: false,\n trigger: null,\n operations: [],\n summary: 'Validation failed',\n diagnostics,\n };\n }\n\n // Extract operations from both\n const specA = extractOperations(normA.node);\n const specB = extractOperations(normB.node);\n\n // Diff\n const result = diffBehaviors(specA, specB);\n\n return {\n ok: true,\n identical: result.identical,\n trigger: result.trigger,\n operations: result.operations,\n summary: result.summary,\n diagnostics,\n };\n }\n\n /**\n * Score a candidate against a reference for structural fidelity — the\n * multilingual ratchet's scorers (docs/FIDELITY.md) applied to one pair of\n * inputs. Sides accept any input format and may be in different languages;\n * see src/scoring/score.ts for signal semantics. Complementary to diff():\n * diff answers \"identical, and where not?\", this answers \"how faithful, and\n * what exactly is missing or hallucinated?\".\n */\n scoreFidelity(request: ScoreRequest): ScoreResponse {\n const diagnostics: Diagnostic[] = [];\n const threshold = request.confidence ?? this.confidenceThreshold;\n\n const normRef = normalize({ ...request.reference, confidence: request.confidence });\n diagnostics.push(\n ...normRef.diagnostics.map(d => ({ ...d, message: `[reference] ${d.message}` }))\n );\n const normCand = normalize({ ...request.candidate, confidence: request.confidence });\n diagnostics.push(\n ...normCand.diagnostics.map(d => ({ ...d, message: `[candidate] ${d.message}` }))\n );\n\n if (!normRef.node || !normCand.node) {\n return { ok: false, diagnostics };\n }\n\n const gateRef = runValidationGates(normRef.node, normRef.confidence, threshold);\n const gateCand = runValidationGates(normCand.node, normCand.confidence, threshold);\n diagnostics.push(\n ...gateRef.diagnostics.map(d => ({ ...d, message: `[reference] ${d.message}` }))\n );\n diagnostics.push(\n ...gateCand.diagnostics.map(d => ({ ...d, message: `[candidate] ${d.message}` }))\n );\n if (!gateRef.pass || !gateCand.pass) {\n return { ok: false, diagnostics };\n }\n\n // A side whose parse left tokens unconsumed was scored on a TRUNCATED\n // node, so every score compares less than was written. Scoring a\n // translation against a truncated reference is how `on load click() me`\n // → `ロード を で` came out faithful 1.0 on every axis: both sides had\n // dropped the same command. The scores stay as measured; `faithful` — the\n // claim \"this rendering is structurally exact\" — needs both parses whole.\n const truncated = (...lists: Diagnostic[][]): boolean =>\n lists.some(ds => ds.some(d => d.code === 'UNCONSUMED_INPUT'));\n const referenceComplete = !truncated(normRef.diagnostics, gateRef.diagnostics);\n const candidateComplete = !truncated(normCand.diagnostics, gateCand.diagnostics);\n if (!referenceComplete || !candidateComplete) {\n const sides = [!referenceComplete && 'reference', !candidateComplete && 'candidate']\n .filter(Boolean)\n .join(' and ');\n diagnostics.push({\n severity: 'warning',\n code: 'INCOMPLETE_PARSE',\n message: `The ${sides} parse left tokens unconsumed, so the scores compare only what parsed; not faithful.`,\n suggestion:\n 'The unconsumed tokens are named in the UNCONSUMED_INPUT diagnostics above. ' +\n 'If the reference is truncated, a translation of it drops the same clause.',\n });\n }\n\n const report = scoreNodes(normRef.node, normCand.node);\n return {\n ok: true,\n diagnostics,\n ...report,\n faithful: report.faithful && referenceComplete && candidateComplete,\n referenceComplete,\n candidateComplete,\n };\n }\n\n /**\n * Generate a target-specific output from LSE (bracket syntax or protocol JSON).\n *\n * Accepts LSE produced by an LLM (via `lse_generate_with_correction` MCP tool),\n * validates it, and renders to the requested target format.\n *\n * Targets (`target` is required):\n * - 'react' — React component\n * - 'vue' — Vue component\n * - 'svelte' — Svelte component\n * - 'intent-element' — HTML snippet with embedded `<lse-intent>` JSON\n */\n async generate(request: GenerateRequest): Promise<GenerateResponse> {\n const { lse, target, task } = request;\n const diagnostics: Diagnostic[] = [];\n\n const isJSON = lse.trimStart().startsWith('{');\n\n // ── intent-element: validate via @lokascript/intent, render HTML ───────\n if (target === 'intent-element') {\n try {\n const { parseExplicit, toProtocolJSON, validateProtocolJSON, fromProtocolJSON } =\n await import('@lokascript/framework');\n\n let node: import('@lokascript/framework').SemanticNode | null = null;\n\n if (isJSON) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(lse);\n } catch {\n return {\n ok: false,\n diagnostics: [\n { severity: 'error', code: 'INVALID_JSON', message: 'LSE is not valid JSON' },\n ],\n };\n }\n const protoDiags = validateProtocolJSON(parsed as Record<string, unknown>);\n for (const d of protoDiags) {\n diagnostics.push({\n severity: d.severity as 'error' | 'warning' | 'info',\n code: d.code,\n message: d.message,\n });\n }\n if (!protoDiags.some(d => d.severity === 'error')) {\n node = fromProtocolJSON(parsed as Parameters<typeof fromProtocolJSON>[0]);\n }\n } else {\n try {\n node = parseExplicit(lse);\n } catch (e) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'PARSE_ERROR',\n message: e instanceof Error ? e.message : String(e),\n },\n ],\n };\n }\n }\n\n if (!node) {\n return { ok: false, diagnostics };\n }\n\n const protocol = toProtocolJSON(node);\n const protocolStr = JSON.stringify(protocol, null, 2);\n const taskComment = task ? `<!-- Task: ${task.replace(/-->/g, '-\\\\->')} -->\\n` : '';\n\n // Infer a declarative trigger attribute from the node.\n //\n // - event-handler nodes carry their event name in roles.get('event')\n // as a literal (wire-format trigger sugar is unwrapped into this\n // shape by fromProtocolJSON). Emit trigger=\"<event>\".\n // - Everything else gets trigger=\"load\" — the element fires\n // validation+execution on connect. This matches the default\n // behavior and is the safest choice when no event is specified.\n let triggerAttr = 'load';\n if (node.kind === 'event-handler') {\n const eventValue = node.roles.get('event');\n if (\n eventValue &&\n eventValue.type === 'literal' &&\n typeof eventValue.value === 'string' &&\n eventValue.value.length > 0\n ) {\n triggerAttr = eventValue.value;\n }\n }\n const escapedTrigger = triggerAttr.replace(/\"/g, '&quot;');\n\n const output = [\n `${taskComment}<lse-intent trigger=\"${escapedTrigger}\">`,\n ` <script type=\"application/lse+json\">`,\n protocolStr\n .split('\\n')\n .map(l => ` ${l}`)\n .join('\\n'),\n ` </script>`,\n `</lse-intent>`,\n ].join('\\n');\n\n const semanticJSON = nodeToSemanticJSON(node);\n\n return { ok: true, output, protocol: semanticJSON, diagnostics };\n } catch (e) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'INTERNAL_ERROR',\n message: e instanceof Error ? e.message : String(e),\n },\n ],\n };\n }\n }\n\n // ── framework targets: delegate to existing pipeline ───────────────────\n\n const componentTargets = ['react', 'vue', 'svelte'] as const;\n type ComponentTarget = (typeof componentTargets)[number];\n\n if ((componentTargets as readonly string[]).includes(target)) {\n const componentRequest: ComponentRequest = isJSON\n ? { semantic: JSON.parse(lse) as SemanticJSON }\n : { explicit: lse };\n const result = this.generateComponent({\n ...componentRequest,\n framework: target as ComponentTarget,\n });\n return {\n ok: result.ok,\n output: result.component?.code,\n protocol: result.semantic,\n diagnostics: result.diagnostics,\n };\n }\n\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'UNKNOWN_TARGET',\n message: `Unknown target '${String(target)}'. Available: react, vue, svelte, intent-element`,\n },\n ],\n };\n }\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Flatten a SemanticValue (possibly nested property-path) to a string.\n */\nfunction extractSemanticValueString(v: unknown): string {\n if (!v || typeof v !== 'object') return '';\n const sv = v as {\n type?: string;\n value?: unknown;\n raw?: string;\n object?: unknown;\n property?: string;\n };\n if (sv.type === 'property-path') {\n return `${extractSemanticValueString(sv.object)}.${sv.property ?? ''}`;\n }\n return String(sv.value ?? sv.raw ?? '');\n}\n\n/**\n * Convert a SemanticNode to SemanticJSON for the response.\n */\nfunction nodeToSemanticJSON(node: unknown): SemanticJSON | undefined {\n if (!node || typeof node !== 'object') return undefined;\n\n const n = node as {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n body?: unknown[];\n eventModifiers?: Record<string, unknown>;\n };\n\n if (!n.action) return undefined;\n\n const roles: Record<string, SemanticJSONValue> = {};\n\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, value] of n.roles.entries()) {\n if (role === 'event') continue; // Handled via trigger\n const v = value as { type?: string; value?: unknown; raw?: string };\n if (v && v.type) {\n if (v.type === 'property-path') {\n roles[role] = {\n type: 'property-path',\n value: extractSemanticValueString(v),\n };\n } else {\n const valueType = v.type as SemanticJSONValue['type'];\n roles[role] = {\n type: (['selector', 'literal', 'reference', 'expression'].includes(valueType)\n ? valueType\n : 'literal') as SemanticJSONValue['type'],\n value: (v.value ?? v.raw ?? '') as string | number | boolean,\n };\n }\n }\n }\n }\n\n // Handle event handlers\n if (n.kind === 'event-handler' || n.action === 'on') {\n const eventRole =\n n.roles && typeof n.roles.get === 'function'\n ? (n.roles.get('event') as { value?: unknown; raw?: unknown } | undefined)\n : undefined;\n\n // For event handlers, return the body command's semantic JSON\n if (n.body && n.body.length > 0) {\n const bodyJSON = nodeToSemanticJSON(n.body[0]);\n if (bodyJSON) {\n bodyJSON.trigger = {\n event: eventNameOf(eventRole),\n modifiers: n.eventModifiers,\n };\n return bodyJSON;\n }\n }\n\n return {\n action: n.action,\n roles,\n trigger: {\n event: eventNameOf(eventRole),\n modifiers: n.eventModifiers,\n },\n };\n }\n\n return { action: n.action, roles };\n}\n\n/**\n * The event name of a handler's `event` role. A colon-qualified event\n * (`htmx:beforeRequest`, `draggable:start`) arrives as an `expression` with\n * `raw`, not a literal with `value`, and reading `value` alone reported every\n * one of them as `click`.\n */\nexport function eventNameOf(eventRole: { value?: unknown; raw?: unknown } | undefined): string {\n const name = eventRole?.value ?? eventRole?.raw;\n return typeof name === 'string' && name.length > 0 ? name : 'click';\n}\n","/**\n * Body Limit Middleware\n *\n * Rejects requests with Content-Length exceeding the configured limit.\n * Returns 413 Payload Too Large.\n */\n\nimport type { MiddlewareHandler } from 'hono';\n\nexport function bodyLimit(maxBytes: number = 50 * 1024): MiddlewareHandler {\n return async (c, next) => {\n const contentLength = c.req.header('Content-Length');\n if (contentLength && parseInt(contentLength, 10) > maxBytes) {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'PAYLOAD_TOO_LARGE',\n message: `Request body exceeds ${maxBytes} bytes`,\n },\n ],\n },\n 413\n );\n }\n return next();\n };\n}\n","/**\n * Timeout Middleware\n *\n * Aborts request processing after the configured duration.\n * Returns 504 Gateway Timeout.\n */\n\nimport type { MiddlewareHandler } from 'hono';\n\nexport function timeout(ms: number = 10_000): MiddlewareHandler {\n return async (c, next) => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), ms);\n\n try {\n const result = await Promise.race([\n next(),\n new Promise<never>((_, reject) => {\n controller.signal.addEventListener('abort', () => {\n reject(new Error('Request timeout'));\n });\n }),\n ]);\n return result;\n } catch (err) {\n if (err instanceof Error && err.message === 'Request timeout') {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'REQUEST_TIMEOUT',\n message: `Request timed out after ${ms}ms`,\n },\n ],\n },\n 504\n );\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n };\n}\n","/**\n * Structured Logger Middleware\n *\n * Emits JSON log lines to stdout for each request.\n * Format: { timestamp, method, path, status, durationMs }\n */\n\nimport type { MiddlewareHandler } from 'hono';\n\nexport interface LogEntry {\n timestamp: string;\n method: string;\n path: string;\n status: number;\n durationMs: number;\n}\n\nexport function structuredLogger(): MiddlewareHandler {\n return async (c, next) => {\n const start = Date.now();\n await next();\n const durationMs = Date.now() - start;\n\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n method: c.req.method,\n path: new URL(c.req.url).pathname,\n status: c.res.status,\n durationMs,\n };\n\n console.log(JSON.stringify(entry));\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,kBAAqB;AACrB,kBAAqB;;;ACSd,SAAS,cAAc,GAAiB,GAA6B;AAC1E,QAAM,cAAc,YAAY,GAAG,CAAC;AACpC,QAAM,UAAU,eAAe,EAAE,YAAY,EAAE,UAAU;AAEzD,QAAM,YAAY,gBAAgB,QAAQ,QAAQ,MAAM,OAAK,EAAE,SAAS,WAAW;AACnF,QAAM,UAAU,gBAAgB,aAAa,OAAO;AAEpD,SAAO,EAAE,WAAW,SAAS,aAAa,YAAY,SAAS,QAAQ;AACzE;AAMA,SAAS,YAAY,GAAiB,GAAqC;AACzE,QAAM,UAAoB,CAAC;AAE3B,MAAI,EAAE,QAAQ,UAAU,EAAE,QAAQ,OAAO;AACvC,YAAQ,KAAK,UAAU,EAAE,QAAQ,KAAK,WAAM,EAAE,QAAQ,KAAK,EAAE;AAAA,EAC/D;AAGA,QAAM,WAAW,OAAO,KAAK,EAAE,QAAQ,aAAa,CAAC,CAAC,EAAE,KAAK;AAC7D,QAAM,WAAW,OAAO,KAAK,EAAE,QAAQ,aAAa,CAAC,CAAC,EAAE,KAAK;AAC7D,QAAM,QAAQ,EAAE,QAAQ,aAAa,CAAC;AACtC,QAAM,QAAQ,EAAE,QAAQ,aAAa,CAAC;AAEtC,aAAW,OAAO,oBAAI,IAAI,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,GAAG;AACrD,UAAM,OAAO,MAAM,GAAG;AACtB,UAAM,OAAO,MAAM,GAAG;AACtB,QAAI,SAAS,QAAW;AACtB,cAAQ,KAAK,mBAAmB,GAAG,EAAE;AAAA,IACvC,WAAW,SAAS,QAAW;AAC7B,cAAQ,KAAK,qBAAqB,GAAG,EAAE;AAAA,IACzC,WAAW,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI,GAAG;AACxD,cAAQ,KAAK,YAAY,GAAG,KAAK,KAAK,UAAU,IAAI,CAAC,WAAM,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,IACnF;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,SAAO;AAAA,IACL,GAAG,EAAE,OAAO,EAAE,QAAQ,OAAO,WAAW,EAAE,QAAQ,UAAU;AAAA,IAC5D,GAAG,EAAE,OAAO,EAAE,QAAQ,OAAO,WAAW,EAAE,QAAQ,UAAU;AAAA,IAC5D;AAAA,EACF;AACF;AAMA,SAAS,eAAe,GAAwB,GAAyC;AACvF,QAAM,QAAQ,EAAE,IAAI,cAAc;AAClC,QAAM,QAAQ,EAAE,IAAI,cAAc;AAGlC,QAAM,MAAM,WAAW,OAAO,KAAK;AAGnC,QAAM,WAAW,iBAAiB,GAAG,GAAG,OAAO,OAAO,GAAG;AAGzD,SAAO,kBAAkB,QAAQ;AACnC;AAKA,SAAS,WAAW,GAAa,GAAyB;AACxD,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,EAAE;AACZ,QAAM,KAAiB,MAAM,KAAK,EAAE,QAAQ,IAAI,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAEnF,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,aAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,UAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG;AACzB,WAAG,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;AAAA,MAChC,OAAO;AACL,WAAG,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,iBACP,GACA,GACA,OACA,OACA,IACiB;AACjB,QAAM,QAAyB,CAAC;AAChC,MAAI,IAAI,EAAE;AACV,MAAI,IAAI,EAAE;AAEV,SAAO,IAAI,KAAK,IAAI,GAAG;AACrB,QAAI,IAAI,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,GAAG;AAEnD,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,EAAE;AAAA,QAC5B,GAAG,EAAE,IAAI,CAAC;AAAA,QACV,GAAG,EAAE,IAAI,CAAC;AAAA,MACZ,CAAC;AACD;AACA;AAAA,IACF,WAAW,IAAI,MAAM,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI;AAE7D,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,IAAI,EAAE;AAAA,QAClB,GAAG,EAAE,IAAI,CAAC;AAAA,MACZ,CAAC;AACD;AAAA,IACF,OAAO;AAEL,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,IAAI,EAAE;AAAA,QAClB,GAAG,EAAE,IAAI,CAAC;AAAA,MACZ,CAAC;AACD;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,QAAQ;AACvB;AAWA,SAAS,kBAAkB,OAAyC;AAClE,QAAM,UAA2B,CAAC;AAClC,QAAM,QAAyB,CAAC;AAChC,QAAM,SAA0B,CAAC;AAGjC,aAAW,KAAK,OAAO;AACrB,QAAI,EAAE,SAAS,UAAW,SAAQ,KAAK,CAAC;AAAA,aAC/B,EAAE,SAAS,QAAS,OAAM,KAAK,CAAC;AAAA,QACpC,QAAO,KAAK,CAAC;AAAA,EACpB;AAGA,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,YAAY,oBAAI,IAAY;AAGlC,WAAS,KAAK,GAAG,KAAK,QAAQ,QAAQ,MAAM;AAC1C,QAAI,YAAY,IAAI,EAAE,EAAG;AACzB,UAAM,OAAO,eAAe,QAAQ,EAAE,EAAE,CAAE;AAC1C,aAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AACxC,UAAI,UAAU,IAAI,EAAE,EAAG;AACvB,YAAM,OAAO,eAAe,MAAM,EAAE,EAAE,CAAE;AACxC,UAAI,SAAS,MAAM;AACjB,oBAAY,IAAI,EAAE;AAClB,kBAAU,IAAI,EAAE;AAChB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,OAAO,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,GAAG,GAAG,MAAM,EAAE,EAAE,MAAM,EAAE;AAAA,UACtD,GAAG,QAAQ,EAAE,EAAE;AAAA,UACf,GAAG,MAAM,EAAE,EAAE;AAAA,QACf,CAAC;AACD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,WAAS,KAAK,GAAG,KAAK,QAAQ,QAAQ,MAAM;AAC1C,QAAI,YAAY,IAAI,EAAE,EAAG;AACzB,aAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AACxC,UAAI,UAAU,IAAI,EAAE,EAAG;AACvB,UAAI,QAAQ,EAAE,EAAE,EAAG,OAAO,MAAM,EAAE,EAAE,EAAG,IAAI;AACzC,oBAAY,IAAI,EAAE;AAClB,kBAAU,IAAI,EAAE;AAChB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,OAAO,EAAE,GAAG,QAAQ,EAAE,EAAE,MAAM,GAAG,GAAG,MAAM,EAAE,EAAE,MAAM,EAAE;AAAA,UACtD,GAAG,QAAQ,EAAE,EAAE;AAAA,UACf,GAAG,MAAM,EAAE,EAAE;AAAA,UACb,SAAS,gBAAgB,QAAQ,EAAE,EAAE,GAAI,MAAM,EAAE,EAAE,CAAE;AAAA,QACvD,CAAC;AACD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,WAAS,KAAK,GAAG,KAAK,QAAQ,QAAQ,MAAM;AAC1C,QAAI,CAAC,YAAY,IAAI,EAAE,EAAG,QAAO,KAAK,QAAQ,EAAE,CAAC;AAAA,EACnD;AACA,WAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AACxC,QAAI,CAAC,UAAU,IAAI,EAAE,EAAG,QAAO,KAAK,MAAM,EAAE,CAAC;AAAA,EAC/C;AAGA,SAAO,KAAK,CAAC,GAAG,MAAM;AACpB,UAAM,OAAO,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK;AACvC,UAAM,OAAO,EAAE,MAAM,KAAK,EAAE,MAAM,KAAK;AACvC,WAAO,OAAO;AAAA,EAChB,CAAC;AAED,SAAO;AACT;AAUO,SAAS,eAAe,IAA+B;AAC5D,QAAM,QAAkB,CAAC,GAAG,EAAE;AAE9B,UAAQ,GAAG,IAAI;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,YAAM,KAAK,GAAG,WAAW,mBAAmB,GAAG,MAAM,CAAC;AACtD;AAAA,IACF,KAAK;AACH,YAAM,KAAK,GAAG,SAAS,mBAAmB,GAAG,MAAM,GAAG,GAAG,QAAQ;AACjE;AAAA,IACF,KAAK;AACH,YAAM,KAAK,GAAG,SAAS,mBAAmB,GAAG,MAAM,CAAC;AACpD;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,YAAM,KAAK,mBAAmB,GAAG,MAAM,CAAC;AACxC;AAAA,IACF,KAAK;AACH,YAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK;AACtC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,YAAM,KAAK,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAC3D;AAAA,IACF,KAAK;AACH,YAAM,KAAK,GAAG,GAAG;AACjB;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH;AAAA,IACF,KAAK;AACH,YAAM,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,mBAAmB,GAAG,MAAM,IAAI,EAAE;AAC5E;AAAA,IACF,KAAK;AACH,YAAM,KAAK,OAAO,GAAG,UAAU,CAAC;AAChC;AAAA,IACF,KAAK;AACH,YAAM,KAAK,GAAG,WAAW,mBAAmB,GAAG,MAAM,GAAG,GAAG,UAAU,EAAE;AACvE;AAAA,IACF,KAAK;AACH,YAAM,KAAK,GAAG,GAAG,MAAM;AACvB;AAAA,EACJ;AAEA,SAAO,MAAM,KAAK,GAAG;AACvB;AAEA,SAAS,mBAAmB,GAA6C;AACvE,SAAO,EAAE,SAAS,SAAS,SAAS,GAAG,EAAE,IAAI,IAAK,EAAyB,SAAS,EAAE;AACxF;AAMA,SAAS,gBAAgB,GAAsB,GAAgC;AAC7E,QAAM,UAAoB,CAAC;AAC3B,QAAM,OAAO;AACb,QAAM,OAAO;AAGb,QAAM,UAAU,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,GAAG,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC;AACpE,aAAW,OAAO,SAAS;AACzB,QAAI,QAAQ,KAAM;AAClB,UAAM,OAAO,KAAK,UAAU,KAAK,GAAG,CAAC;AACrC,UAAM,OAAO,KAAK,UAAU,KAAK,GAAG,CAAC;AACrC,QAAI,SAAS,MAAM;AACjB,cAAQ,KAAK,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG,CAAC,CAAC,WAAM,YAAY,KAAK,GAAG,CAAC,CAAC,EAAE;AAAA,IAC9E;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,YAAY,GAAoB;AACvC,MAAI,MAAM,OAAW,QAAO;AAC5B,MAAI,OAAO,MAAM,YAAY,MAAM,MAAM;AACvC,UAAM,MAAM;AACZ,QAAI,UAAU,IAAK,QAAO,IAAI,SAAS,SAAS,SAAS,GAAG,IAAI,IAAI,IAAI,IAAI,SAAS,EAAE;AACvF,WAAO,KAAK,UAAU,CAAC;AAAA,EACzB;AACA,SAAO,OAAO,CAAC;AACjB;AAMA,SAAS,gBAAgB,SAA6B,SAAkC;AACtF,QAAM,QAAkB,CAAC;AAEzB,MAAI,CAAC,WAAW,QAAQ,MAAM,OAAK,EAAE,SAAS,WAAW,GAAG;AAC1D,WAAO;AAAA,EACT;AAEA,MAAI,SAAS;AACX,UAAM,KAAK,YAAY,QAAQ,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,EACrD;AAEA,QAAM,SAA8C;AAAA,IAClD,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACA,aAAW,KAAK,QAAS,QAAO,EAAE,IAAI;AAEtC,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAO,QAAQ,EAAG,SAAQ,KAAK,GAAG,OAAO,KAAK,QAAQ;AAC1D,MAAI,OAAO,UAAU,EAAG,SAAQ,KAAK,GAAG,OAAO,OAAO,UAAU;AAChE,MAAI,OAAO,UAAU,EAAG,SAAQ,KAAK,GAAG,OAAO,OAAO,UAAU;AAChE,MAAI,OAAO,YAAY,EAAG,SAAQ,KAAK,GAAG,OAAO,SAAS,YAAY;AAEtE,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAM,KAAK,eAAe,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,EAChD;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;;;ACvWA,sBAA2B;;;ACJpB,SAAS,aAAa,OAA4B;AACvD,QAAM,UAAU,MAAM,KAAK;AAG3B,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACpD,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,OAAO;AACjC,UAAI,UAAU,OAAO,WAAW,YAAY,OAAO,OAAO,WAAW,UAAU;AAC7E,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO;AACT;;;ACvBA,uBAAuD;AAgBvD,IAAI,YAAsC;AAGnC,SAAS,eAAe,UAAmC;AAChE,cAAY;AACd;AASO,SAAS,UAAU,SAA0C;AAClE,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAGA,MAAI,QAAQ,UAAU;AACpB,WAAO,cAAc,QAAQ,QAAQ;AAAA,EACvC;AAEA,QAAM,QAAQ,QAAQ,QAAQ,QAAQ;AACtC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,aAAa;AAAA,QACX;AAAA,UACE,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,QAAQ,WAAW,aAAa,aAAa,KAAK;AAEjE,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,kBAAkB,KAAK;AAAA,IAChC,KAAK;AACH,aAAO,cAAc,KAAK,MAAM,MAAM,KAAK,CAAC,CAAiB;AAAA,IAC/D,KAAK;AACH,aAAO,iBAAiB,OAAO,QAAQ,YAAY,IAAI;AAAA,EAC3D;AACF;AA0BA,SAAS,oBAAoB,MAAe,aAAiC;AAC3E,QAAM,YAAa,KAA4C;AAC/D,MAAI,CAAC,MAAM,QAAQ,SAAS,EAAG;AAC/B,aAAW,KAAK,WAAW;AACzB,QAAI,EAAE,aAAa,aAAa,EAAE,aAAa,QAAS;AACxD,UAAM,OAAmB;AAAA,MACvB,UAAU,EAAE;AAAA;AAAA,MAEZ,OAAO,EAAE,QAAQ,oBAAoB,QAAQ,MAAM,GAAG,EAAE,YAAY;AAAA,MACpE,SAAS,EAAE,WAAW;AAAA,IACxB;AACA,QAAI,EAAE,SAAS,oBAAoB;AACjC,WAAK,aACH;AAAA,IAGJ;AACA,gBAAY,KAAK,IAAI;AAAA,EACvB;AACF;AAEA,SAAS,iBAAiB,MAAc,UAAmC;AACzE,QAAM,cAA4B,CAAC;AAEnC,MAAI;AACF,UAAM,SAAS,UAAW,cAAc,MAAM,QAAQ;AAEtD,QAAI,OAAO,OAAO;AAChB,kBAAY,KAAK;AAAA,QACf,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,OAAO,MAAM;AAChB,kBAAY,KAAK;AAAA,QACf,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,oBAAoB,IAAI,QAAQ,QAAQ;AAAA,QACjD,YAAY;AAAA,MACd,CAAC;AACD,aAAO,EAAE,MAAM,MAAM,YAAY,OAAO,YAAY,QAAQ,WAAW,YAAY;AAAA,IACrF;AAEA,wBAAoB,OAAO,MAAM,WAAW;AAE5C,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb,YAAY,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,gBAAY,KAAK;AAAA,MACf,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAChE,CAAC;AACD,WAAO,EAAE,MAAM,MAAM,YAAY,GAAG,QAAQ,WAAW,YAAY;AAAA,EACrE;AACF;AAEA,SAAS,kBAAkB,OAAgC;AACzD,QAAM,cAA4B,CAAC;AAEnC,MAAI;AACF,UAAM,OAAO,UAAW,cAAc,KAAK;AAC3C,WAAO;AAAA,MACL;AAAA,MACA,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,UAAM,kBACJ,QAAQ,SAAS,aAAa,KAAK,QAAQ,SAAS,uBAAuB;AAC7E,gBAAY,KAAK;AAAA,MACf,UAAU;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,YAAY,kBACR,SACA;AAAA,IACN,CAAC;AACD,WAAO,EAAE,MAAM,MAAM,YAAY,GAAG,QAAQ,YAAY,YAAY;AAAA,EACtE;AACF;AAEA,SAAS,cAAc,OAAsC;AAE3D,QAAM,uBAAmB,uCAAqB,KAAK;AACnD,MAAI,iBAAiB,KAAK,OAAK,EAAE,aAAa,OAAO,GAAG;AACtD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,aAAa;AAAA,IACf;AAAA,EACF;AAGA,QAAM,WAAO,mCAAiB,KAAY;AAC1C,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA;AAAA,EACf;AACF;;;AC1LA,IAAM,aAAa;AACnB,IAAM,kBAAkB;AAMxB,IAAM,qBAAqB;AAgB3B,SAAS,YAAY,GAA0B;AAC7C,SAAO,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE;AACtC;AAMO,SAAS,iBAAiB,MAA6B;AAC5D,QAAM,MAAoB,CAAC;AAC3B,OAAK,MAAM,GAAG;AACd,SAAO;AACT;AAEA,SAAS,KAAK,MAAe,KAAyB;AACpD,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AACvC,QAAM,IAAI;AAEV,MAAI,EAAE,SAAS,OAAO,EAAE,MAAM,YAAY,YAAY;AACpD,eAAW,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,QAAQ,GAAG;AAC3C,YAAM,IAAK,OAAO,CAAC;AACnB,YAAM,IAAI,YAAY,CAAC;AAKvB,YAAM,IAAI,EAAE,SAAS,eAAe,WAAW,KAAK,CAAC,IAAI;AACzD,UAAI,MAAM,SAAS,iBAAiB,SAAS,WAAW;AACtD,YAAI,KAAK;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS,GAAG,IAAI,+BAA+B,CAAC,aAAQ,EAAE,CAAC,CAAC,oDAAoD,IAAI;AAAA,UACpH,YAAY,0EAA0E,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;AAAA,QAC/G,CAAC;AACD;AAAA,MACF;AACA,UACE,EAAE,SAAS,gBACX,gBAAgB,KAAK,CAAC,MACrB,SAAS,iBAAiB,SAAS,WACpC;AACA,YAAI,KAAK;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS,GAAG,IAAI,8BAA8B,CAAC,6CAA6C,IAAI;AAAA,UAChG,YAAY,6EAA6E,CAAC;AAAA,QAC5F,CAAC;AACD;AAAA,MACF;AAKA,UAAI,SAAS,eAAe,EAAE,SAAS,gBAAgB,mBAAmB,KAAK,CAAC,GAAG;AACjF,cAAM,OAAO,mBAAmB,KAAK,CAAC,IAAI,CAAC;AAC3C,YAAI,KAAK;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS,sBAAsB,IAAI,2CAA2C,CAAC;AAAA,UAC/E,YAAY;AAAA,QACd,CAAC;AACD;AAAA,MACF;AASA,UAAI,EAAE,WAAW,SAAS,EAAE,SAAS,mBAAmB,EAAE,aAAa,QAAQ;AAC7E,YAAI,KAAK;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,UACT,YACE;AAAA,QACJ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,EAAE,IAAI,EAAG,YAAW,SAAS,EAAE,KAAM,MAAK,OAAO,GAAG;AACxE;;;AC3GA,IAAI,cAA0C;AAGvC,SAAS,eAAe,YAAuC;AACpE,gBAAc;AAChB;AAeO,SAAS,mBACd,MACA,YACA,qBACY;AACZ,QAAM,cAA4B,CAAC;AACnC,MAAI,qBAAqB;AAGzB,MAAI,CAAC,MAAM;AACT,gBAAY,KAAK;AAAA,MACf,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AACD,WAAO,EAAE,MAAM,OAAO,aAAa,oBAAoB,EAAE;AAAA,EAC3D;AAGA,MAAI,aAAa,qBAAqB;AACpC,gBAAY,KAAK;AAAA,MACf,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS,oBAAoB,WAAW,QAAQ,CAAC,CAAC,uBAAuB,oBAAoB,QAAQ,CAAC,CAAC;AAAA,MACvG,YAAY;AAAA,IACd,CAAC;AACD,WAAO,EAAE,MAAM,OAAO,aAAa,oBAAoB,WAAW;AAAA,EACpE;AAGA,MAAI,aAAa;AACf,UAAM,iBAAiB,kBAAkB,IAAI;AAC7C,QAAI,gBAAgB;AAClB,YAAM,aAAa,YAAY,uBAAuB,cAAc;AAGpE,iBAAW,OAAO,WAAW,QAAQ;AACnC,oBAAY,KAAK;AAAA,UACf,UAAU;AAAA,UACV,MAAM,IAAI;AAAA,UACV,SAAS,IAAI;AAAA,QACf,CAAC;AAAA,MACH;AAGA,iBAAW,QAAQ,WAAW,UAAU;AACtC,oBAAY,KAAK;AAAA,UACf,UAAU;AAAA,UACV,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,MACH;AAGA,iBAAW,cAAc,WAAW,aAAa;AAC/C,oBAAY,KAAK;AAAA,UACf,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAGA,2BAAqB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,WAAW,oBAAoB,CAAC;AAE1F,UAAI,CAAC,WAAW,OAAO;AACrB,eAAO,EAAE,MAAM,OAAO,aAAa,mBAAmB;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAMA,cAAY,KAAK,GAAG,iBAAiB,IAAI,CAAC;AAE1C,SAAO,EAAE,MAAM,MAAM,aAAa,mBAAmB;AACvD;AAUA,SAAS,kBAAkB,MAAwB;AACjD,QAAM,IAAI;AAMV,MAAI,CAAC,EAAE,OAAQ,QAAO;AAGtB,QAAM,SAAS,EAAE,WAAW,OAAO,OAAO,EAAE;AAC5C,MAAI,CAAC,OAAQ,QAAO;AAGpB,QAAM,OAAkB,CAAC;AACzB,MAAI,EAAE,SAAS,OAAO,EAAE,MAAM,YAAY,YAAY;AACpD,eAAW,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,QAAQ,GAAG;AAC7C,WAAK,KAAK,EAAE,MAAM,GAAI,MAAkC,CAAC;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF;;;ACrHO,SAAS,kBAAkB,MAA6B;AAC7D,QAAM,IAAI;AACV,MAAI,CAAC,KAAK,OAAO,MAAM,UAAU;AAC/B,WAAO,UAAU;AAAA,EACnB;AAGA,MAAI,EAAE,SAAS,mBAAmB,EAAE,WAAW,MAAM;AACnD,WAAO,oBAAoB,CAAC;AAAA,EAC9B;AAGA,QAAM,MAAM,eAAe,CAAC;AAC5B,SAAO;AAAA,IACL,SAAS,EAAE,OAAO,QAAQ;AAAA,IAC1B,eAAe,EAAE,MAAM,OAAO;AAAA,IAC9B,YAAY;AAAA,IACZ,OAAO,IAAI,KAAK,SAAS;AAAA,IACzB,QAAQ,EAAE,UAAU;AAAA,EACtB;AACF;AAMA,SAAS,oBAAoB,GAA2B;AAEtD,QAAM,YAAY,EAAE,OAAO,IAAI,OAAO;AACtC,QAAM,QAAQ,WAAW,SAAS,WAAW;AAC7C,QAAM,YAAY,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAE1E,QAAM,aAAkC,CAAC;AAEzC,MAAI,EAAE,QAAQ,MAAM,QAAQ,EAAE,IAAI,GAAG;AACnC,eAAW,SAAS,EAAE,MAAM;AAC1B,iBAAW,KAAK,GAAG,eAAe,KAAK,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,MACP,OAAO;AAAA,MACP,WAAW,EAAE;AAAA,IACf;AAAA,IACA,eAAe,EAAE,MAAM,OAAO;AAAA,IAC9B;AAAA,IACA,OAAO,WAAW,KAAK,SAAS;AAAA,IAChC,QAAQ,EAAE,UAAU;AAAA,EACtB;AACF;AAMA,SAAS,eAAe,GAAkC;AACxD,QAAM,SAAS,EAAE;AACjB,MAAI,CAAC,UAAU,WAAW,KAAM,QAAO,CAAC;AAExC,QAAM,QAAQ,EAAE;AAEhB,UAAQ,QAAQ;AAAA;AAAA,IAEd,KAAK;AACH,aAAO,eAAe,eAAe,KAAK;AAAA,IAC5C,KAAK;AACH,aAAO,eAAe,YAAY,KAAK;AAAA,IACzC,KAAK;AACH,aAAO,eAAe,eAAe,KAAK;AAAA;AAAA,IAG5C,KAAK;AACH,aAAO,WAAW,KAAK;AAAA,IACzB,KAAK;AACH,aAAO,cAAc,KAAK;AAAA;AAAA,IAG5B,KAAK;AACH,aAAO,kBAAkB,QAAQ,KAAK;AAAA,IACxC,KAAK;AACH,aAAO,kBAAkB,QAAQ,KAAK;AAAA;AAAA,IAGxC,KAAK;AACH,aAAO,WAAW,KAAK;AAAA,IACzB,KAAK;AACH,aAAO,gBAAgB,aAAa,KAAK;AAAA,IAC3C,KAAK;AACH,aAAO,gBAAgB,aAAa,KAAK;AAAA;AAAA,IAG3C,KAAK;AACH,aAAO,UAAU,KAAK;AAAA;AAAA,IAGxB,KAAK;AACH,aAAO,aAAa,KAAK;AAAA,IAC3B,KAAK;AACH,aAAO,YAAY,KAAK;AAAA;AAAA,IAG1B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAoB,KAAK;AAAA;AAAA,IAGlC,KAAK;AACH,aAAO,CAAC,EAAE,IAAI,SAAS,QAAQ,cAAc,OAAO,SAAS,EAAE,CAAC;AAAA,IAClE,KAAK;AACH,aAAO,CAAC,EAAE,IAAI,QAAQ,QAAQ,cAAc,OAAO,SAAS,EAAE,CAAC;AAAA;AAAA,IAGjE,KAAK;AACH,aAAO,WAAW,KAAK;AAAA,IAEzB;AACE,aAAO,CAAC;AAAA,EACZ;AACF;AAMA,SAAS,eACP,IACA,OACqB;AACrB,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,QAAM,QAAQ,OAAO,QAAQ,SAAS,EAAE;AACxC,QAAM,YAAY,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;AAC3D,MAAI,CAAC,UAAW,QAAO,CAAC;AAExB,QAAM,SAAS,cAAc,OAAO,OAAO,gBAAgB,WAAW,aAAa;AAEnF,SAAO,CAAC,EAAE,IAAI,WAAW,OAAO,CAAC;AACnC;AAEA,SAAS,WAAW,OAAwE;AAC1F,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,QAAM,UAAU,OAAO,QAAQ,SAAS,QAAQ,OAAO,EAAE;AACzD,QAAM,SAAS,cAAc,OAAO,aAAa;AAGjD,QAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,MAAI,WAA0D;AAC9D,MAAI,QAAQ,OAAO;AACjB,UAAM,IAAI,OAAO,OAAO,KAAK;AAC7B,QAAI,MAAM,SAAU,YAAW;AAAA,aACtB,MAAM,QAAS,YAAW;AAAA,aAC1B,MAAM,WAAW,MAAM,cAAe,YAAW;AAAA,aACjD,MAAM,SAAS,MAAM,YAAa,YAAW;AAAA,EACxD;AAEA,SAAO,CAAC,EAAE,IAAI,cAAc,SAAS,QAAQ,SAAS,CAAC;AACzD;AAEA,SAAS,cAAc,OAAwE;AAC7F,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,QAAM,UAAU,OAAO,QAAQ,SAAS,QAAQ,OAAO,EAAE;AACzD,QAAM,SAAS,cAAc,OAAO,aAAa;AAEjD,SAAO,CAAC,EAAE,IAAI,iBAAiB,SAAS,OAAO,CAAC;AAClD;AAEA,SAAS,kBACP,IACA,OACqB;AACrB,QAAM,SAAS,cAAc,OAAO,SAAS;AAC7C,SAAO,CAAC,EAAE,IAAI,OAAO,CAAC;AACxB;AAEA,SAAS,WAAW,OAAwE;AAC1F,QAAM,cAAc,OAAO,IAAI,aAAa;AAC5C,QAAM,UAAU,OAAO,IAAI,SAAS;AAEpC,MAAI,CAAC,eAAe,CAAC,QAAS,QAAO,CAAC;AAGtC,QAAM,aAAa,eAAe;AAClC,QAAM,YAAY,cAAc,UAAU;AAE1C,QAAM,OAAO,OAAO,YAAY,SAAS,EAAE;AAC3C,QAAM,QAAQ,YAAY,OAAO,UAAU,SAAS,EAAE,IAAI;AAC1D,QAAM,QAAS,YAAY,SAAS;AAEpC,SAAO,CAAC,EAAE,IAAI,eAAe,MAAM,OAAO,MAAM,CAAC;AACnD;AAEA,SAAS,gBACP,IACA,OACqB;AACrB,QAAM,SAAS,cAAc,OAAO,SAAS;AAG7C,QAAM,WAAW,OAAO,IAAI,UAAU;AACtC,QAAM,SAAS,UAAU,QAAQ,OAAO,SAAS,KAAK,IAAI;AAE1D,SAAO,CAAC,EAAE,IAAI,QAAQ,OAAO,CAAC;AAChC;AAEA,SAAS,UAAU,OAAwE;AACzF,QAAM,cAAc,OAAO,IAAI,aAAa;AAC5C,MAAI,CAAC,YAAa,QAAO,CAAC;AAE1B,QAAM,MAAM,OAAO,YAAY,SAAS,EAAE;AAE1C,MAAI,QAAQ,OAAQ,QAAO,CAAC,EAAE,IAAI,cAAc,CAAC;AACjD,MAAI,QAAQ,UAAW,QAAO,CAAC,EAAE,IAAI,iBAAiB,CAAC;AAEvD,SAAO,CAAC,EAAE,IAAI,YAAY,IAAI,CAAC;AACjC;AAEA,SAAS,aAAa,OAAwE;AAC5F,QAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,QAAM,MAAM,OAAO,OAAO,SAAS,OAAO,OAAO,EAAE;AAEnD,QAAM,eAAe,OAAO,IAAI,cAAc;AAC9C,MAAI,SAAmC;AACvC,MAAI,cAAc,OAAO;AACvB,UAAM,IAAI,OAAO,aAAa,KAAK;AACnC,QAAI,MAAM,OAAQ,UAAS;AAAA,aAClB,MAAM,OAAQ,UAAS;AAAA,EAClC;AAEA,QAAM,WAAW,OAAO,IAAI,aAAa;AACzC,QAAM,SAAS,WAAW,sBAAsB,QAAQ,IAAI;AAE5D,SAAO,CAAC,EAAE,IAAI,SAAS,KAAK,QAAQ,OAAO,CAAC;AAC9C;AAEA,SAAS,YAAY,OAAwE;AAC3F,QAAM,WAAW,OAAO,IAAI,UAAU,KAAK,OAAO,IAAI,SAAS;AAC/D,MAAI,CAAC,SAAU,QAAO,CAAC;AAEvB,MAAI,KAAK;AACT,QAAM,MAAM,SAAS;AACrB,MAAI,OAAO,QAAQ,UAAU;AAC3B,SAAK;AAAA,EACP,WAAW,OAAO,QAAQ,UAAU;AAClC,SAAK,gBAAgB,GAAG;AAAA,EAC1B;AAEA,SAAO,CAAC,EAAE,IAAI,QAAQ,YAAY,GAAG,CAAC;AACxC;AAEA,SAAS,oBACP,OACqB;AACrB,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,QAAM,YAAY,OAAO,QAAQ,SAAS,EAAE;AAC5C,QAAM,SAAS,cAAc,OAAO,aAAa;AAEjD,SAAO,CAAC,EAAE,IAAI,gBAAgB,WAAW,OAAO,CAAC;AACnD;AAEA,SAAS,WAAW,OAAwE;AAC1F,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,QAAM,SAAmB,CAAC;AAE1B,MAAI,SAAS;AACX,WAAO,KAAK,OAAO,QAAQ,SAAS,QAAQ,OAAO,EAAE,CAAC;AAAA,EACxD;AAEA,SAAO,CAAC,EAAE,IAAI,OAAO,OAAO,CAAC;AAC/B;AAUA,SAAS,cACP,OACA,UACW;AACX,QAAM,OAAO,OAAO,IAAI,QAAQ;AAChC,MAAI,CAAC,KAAM,QAAO,EAAE,MAAM,OAAO;AACjC,SAAO,sBAAsB,IAAI;AACnC;AAEA,SAAS,sBAAsB,MAA4B;AACzD,QAAM,QAAQ,OAAO,KAAK,SAAS,EAAE;AAGrC,MAAI,KAAK,SAAS,gBAAgB,UAAU,QAAQ,UAAU,OAAO;AACnE,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAGA,MAAI,MAAM,WAAW,GAAG,KAAK,KAAK,OAAO;AACvC,WAAO,EAAE,MAAM,YAAY,MAAM;AAAA,EACnC;AAGA,MACE,KAAK,SAAS,cACd,MAAM,WAAW,GAAG,KACpB,MAAM,WAAW,GAAG,KACpB,MAAM,WAAW,GAAG,GACpB;AACA,WAAO,EAAE,MAAM,YAAY,MAAM;AAAA,EACnC;AAGA,MAAI,OAAO;AACT,WAAO,EAAE,MAAM,YAAY,MAAM;AAAA,EACnC;AAEA,SAAO,EAAE,MAAM,OAAO;AACxB;AAEA,SAAS,UAAU,IAAgC;AACjD,SAAO,GAAG,OAAO,WAAW,GAAG,OAAO;AACxC;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,QAAM,QAAQ,MAAM,MAAM,iCAAiC;AAC3D,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,MAAM,WAAW,MAAM,CAAC,CAAC;AAC/B,QAAM,OAAO,MAAM,CAAC,KAAK;AAEzB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,YAA0B;AACjC,SAAO;AAAA,IACL,SAAS,EAAE,OAAO,QAAQ;AAAA,IAC1B,eAAe,EAAE,MAAM,OAAO;AAAA,IAC9B,YAAY,CAAC;AAAA,IACb,OAAO;AAAA,EACT;AACF;;;AC/XO,SAAS,gBAAgB,MAAoB,aAA8B;AAChF,QAAM,WAAW,gBAAgB,IAAI;AACrC,QAAM,kBAAkB,iBAAiB,KAAK,aAAa;AAK3D,QAAM,oBACJ,oBAAoB,QAAQ,CAAC,SAAS,KAAK,OAAK,EAAE,aAAa,eAAe;AAGhF,MAAI,oBAAoB;AAExB,QAAM,QAAkB,CAAC;AAGzB,MAAI,mBAAmB,KAAK,UAAU,GAAG;AACvC,UAAM,KAAK,SAAS;AACpB,eAAW,MAAM,KAAK,YAAY;AAChC,UAAI,GAAG,OAAO,QAAQ;AACpB,cAAM,MAAM,iBAAiB,GAAG,MAAM;AACtC,YAAI,IAAK,OAAM,KAAK,KAAK,GAAG,sBAAsB;AAAA,MACpD;AACA,UAAI,GAAG,OAAO,QAAQ;AACpB,cAAM,MAAM,iBAAiB,GAAG,MAAM;AACtC,YAAI,IAAK,OAAM,KAAK,KAAK,GAAG,qBAAqB;AAAA,MACnD;AAAA,IACF;AACA,UAAM,KAAK,UAAU;AAAA,EACvB;AAGA,MAAI,mBAAmB;AAErB,UAAM,YAAY,qBAAqB,iBAAkB,WAAW;AACpE,UAAM,KAAK,SAAS;AACpB,wBAAoB;AAAA,EACtB;AAEA,aAAW,MAAM,UAAU;AAIzB,UAAM,YACH,CAAC,qBAAqB,GAAG,aAAa,mBACtC,oBAAoB,QAAQ,CAAC;AAChC,UAAM,QAAQ,aAAa,cAAc,OAAO,WAAW,WAAW,CAAC,MAAM;AAC7E,QAAI,aAAa,YAAa,qBAAoB;AAClD,UAAM,eAAe,kBAAkB,GAAG,UAAU,KAAK,UAAU;AAEnE,QAAI,MAAM,GAAG;AACb,QAAI,YAAY,GAAG;AACnB,QAAI,aAAa,SAAS,GAAG;AAC3B,kBAAY,YAAY,GAAG,SAAS,IAAI,aAAa,KAAK,GAAG,CAAC,KAAK,aAAa,KAAK,GAAG;AAAA,IAC1F;AAEA,UAAM,YAAY,YAAY,WAAW,SAAS,MAAM;AACxD,UAAM,SAAS,GAAG,KAAK,QAAQ,GAAG,EAAE,MAAM;AAE1C,QAAI,QAAQ,SAAS;AACnB,YAAM,KAAK,IAAI,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,KAAK;AAAA,IACtD,OAAO;AACL,YAAM,UAAU,GAAG,kBAAkB;AACrC,YAAM,KAAK,IAAI,GAAG,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,OAAO,KAAK,GAAG,GAAG;AAAA,IACvE;AAAA,EACF;AAGA,MAAI,SAAS,WAAW,KAAK,KAAK,cAAc,SAAS,QAAQ;AAC/D,UAAM,OAAO,cAAc,OAAO,WAAW,WAAW,CAAC,MAAM;AAC/D,UAAM,KAAK,uBAAuB,IAAI,oBAAoB;AAAA,EAC5D;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAcA,SAAS,gBAAgB,MAAsC;AAC7D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,WAA6B,CAAC;AAEpC,aAAW,MAAM,KAAK,YAAY;AAChC,eAAW,OAAO,cAAc,EAAE,GAAG;AACnC,UAAI,IAAI,SAAS,WAAY;AAC7B,UAAI,KAAK,IAAI,IAAI,KAAK,EAAG;AACzB,WAAK,IAAI,IAAI,KAAK;AAElB,eAAS,KAAK,kBAAkB,IAAI,KAAK,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,IAAoC;AACzD,QAAM,OAAoB,CAAC;AAE3B,MAAI,YAAY,MAAM,GAAG,QAAQ;AAC/B,SAAK,KAAK,GAAG,MAAmB;AAAA,EAClC;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,UAAkC;AAE3D,MAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,UAAM,KAAK,SAAS,MAAM,CAAC;AAC3B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,eAAe,EAAE;AAAA,MACtB,gBAAgB,aAAa,EAAE;AAAA,IACjC;AAAA,EACF;AAGA,MAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,UAAM,YAAY,SAAS,MAAM,CAAC;AAClC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,gBAAgB;AAAA,IAClB;AAAA,EACF;AAGA,SAAO;AAAA,IACL;AAAA,IACA,KAAK;AAAA,IACL,gBAAgB;AAAA,EAClB;AACF;AAMA,IAAM,aAAa,oBAAI,IAAI,CAAC,OAAO,UAAU,UAAU,WAAW,QAAQ,CAAC;AAC3E,IAAM,YAAY,oBAAI,IAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,SAAS,OAAO,CAAC;AAChF,IAAM,WAAW,oBAAI,IAAI,CAAC,QAAQ,UAAU,OAAO,CAAC;AACpD,IAAM,aAAa,oBAAI,IAAI,CAAC,SAAS,UAAU,SAAS,SAAS,CAAC;AAClE,IAAM,WAAW,oBAAI,IAAI,CAAC,QAAQ,SAAS,WAAW,SAAS,CAAC;AAEhE,SAAS,eAAe,IAAoB;AAC1C,QAAM,QAAQ,GAAG,YAAY;AAC7B,MAAI,WAAW,IAAI,KAAK,EAAG,QAAO;AAClC,MAAI,UAAU,IAAI,KAAK,EAAG,QAAO;AACjC,MAAI,SAAS,IAAI,KAAK,EAAG,QAAO;AAChC,MAAI,WAAW,IAAI,KAAK,EAAG,QAAO;AAClC,MAAI,SAAS,IAAI,KAAK,EAAG,QAAO;AAChC,SAAO;AACT;AAEA,SAAS,aAAa,IAAoB;AACxC,QAAM,QAAQ,GAAG,YAAY;AAC7B,MAAI,WAAW,IAAI,KAAK,EAAG,QAAO;AAClC,MAAI,UAAU,IAAI,KAAK,EAAG,QAAO;AACjC,MAAI,SAAS,IAAI,KAAK,EAAG,QAAO;AAEhC,SAAO,GAAG,OAAO,CAAC,EAAE,YAAY,IAAI,GAAG,MAAM,CAAC;AAChD;AAMA,SAAS,qBAAqB,UAAkB,aAA8B;AAC5E,QAAM,OAAO,cAAc,OAAO,WAAW,WAAW,CAAC,MAAM;AAE/D,MAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,UAAM,KAAK,SAAS,MAAM,CAAC;AAC3B,WAAO,eAAe,EAAE,IAAI,IAAI;AAAA,EAClC;AACA,SAAO,uBAAuB,IAAI;AACpC;AAEA,SAAS,iBAAiB,KAA+B;AACvD,MAAI,IAAI,SAAS,WAAY,QAAO,IAAI;AACxC,MAAI,IAAI,SAAS,OAAQ,QAAO;AAChC,SAAO;AACT;AAEA,SAAS,mBAAmB,KAAmC;AAC7D,SAAO,IAAI,KAAK,QAAM,GAAG,OAAO,UAAU,GAAG,OAAO,MAAM;AAC5D;AAEA,SAAS,kBAAkB,UAAkB,KAAoC;AAC/E,QAAM,UAAoB,CAAC;AAC3B,aAAW,MAAM,KAAK;AACpB,QAAI,GAAG,OAAO,iBAAiB,YAAY,IAAI;AAC7C,YAAM,YAAY,iBAAiB,GAAG,MAAM;AAC5C,UAAI,cAAc,YAAa,GAAG,OAAO,SAAS,UAAU,aAAa,MAAO;AAC9E,gBAAQ,KAAK,GAAG,SAAS;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,WAAW,GAAmB;AACrC,SAAO,EACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AACzB;;;AC7NO,IAAM,qBAAN,MAAiD;AAAA,EAAjD;AACL,SAAS,YAAY;AAAA;AAAA,EAErB,OAAO,MAAoB,UAA6B,CAAC,GAAkB;AACzE,UAAM,WAAW,QAAQ,YAAY,iBAAiB,IAAI;AAC1D,UAAM,OAAO,gBAAgB,MAAM,QAAQ,WAAW;AAEtD,UAAM,QAAkB,CAAC;AAGzB,UAAM,KAAK,kDAAkD;AAC7D,UAAM,KAAK,EAAE;AAGb,UAAM,KAAK,SAAS,aAAa,QAAQ,CAAC,0BAA0B;AAGpE,UAAM,KAAK,6BAA6B,eAAe,SAAS,IAAI,CAAC,CAAC,MAAM;AAK5E,UAAM,aACJ,QAAQ,cAAc;AACxB,UAAM,KAAK,sCAAsC,aAAa,UAAU,CAAC,OAAO;AAChF,UAAM,KAAK,6EAA6E;AAExF,UAAM,KAAK,mCAAmC;AAC9C,UAAM,KAAK,EAAE;AAGb,UAAM,iBAAiB,kBAAkB,IAAI;AAG7C,eAAW,MAAM,KAAK,YAAY;AAChC,YAAM,aAAa,mBAAmB,IAAI,MAAM,cAAc;AAC9D,YAAM,KAAK,GAAG,WAAW,IAAI,OAAK,KAAK,CAAC,EAAE,CAAC;AAAA,IAC7C;AAEA,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,EAAE;AAEb,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB;AAAA,MACA,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AACF;AAMA,SAAS,mBACP,IACA,MACA,gBACU;AACV,UAAQ,GAAG,IAAI;AAAA,IACb,KAAK;AACH,aAAO,8BAA8B,IAAI,MAAM,cAAc;AAAA,IAC/D,KAAK;AACH,aAAO,2BAA2B,IAAI,MAAM,cAAc;AAAA,IAC5D,KAAK;AACH,aAAO,8BAA8B,IAAI,MAAM,cAAc;AAAA,IAC/D,KAAK;AACH,aAAO,6BAA6B,IAAI,MAAM,cAAc;AAAA,IAC9D,KAAK;AACH,aAAO,gCAAgC,IAAI,MAAM,cAAc;AAAA,IACjE,KAAK;AACH,aAAO,uBAAuB,IAAI,MAAM,cAAc;AAAA,IACxD,KAAK;AACH,aAAO,uBAAuB,IAAI,MAAM,cAAc;AAAA,IACxD,KAAK;AACH,aAAO,2BAA2B,IAAI,MAAM,cAAc;AAAA,IAC5D,KAAK;AACH,aAAO,wBAAwB,IAAI,MAAM,cAAc;AAAA,IACzD,KAAK;AACH,aAAO,uBAAuB,IAAI,MAAM,cAAc;AAAA,IACxD,KAAK;AACH,aAAO,+BAA+B,IAAI,MAAM,cAAc;AAAA,IAChE,KAAK;AACH,aAAO,wBAAwB,IAAI,MAAM,cAAc;AAAA,IACzD,KAAK;AACH,aAAO,uBAAuB,EAAE;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,2BAA2B,IAAI,MAAM,cAAc;AAAA,IAC5D,KAAK;AACH,aAAO,sBAAsB,IAAI,MAAM,cAAc;AAAA,IACvD;AACE,aAAO,CAAC,6BAA8B,GAAyB,EAAE,EAAE;AAAA,EACvE;AACF;AAIA,SAAS,8BACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,QAAM,QAAkB,CAAC;AAEzB,QAAM,KAAK,cAAc,GAAG,SAAS,EAAE;AACvC,QAAM,KAAK,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC,GAAG;AAC5D,MAAI,KAAK,MAAO,OAAM,KAAK,iCAAiC;AAC5D,QAAM,KAAK,gBAAgB,OAAO,kBAAkB,GAAG,SAAS,KAAK;AACrE,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,gBAAgB;AAC3B,QAAM,KAAK,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC,GAAG;AAC5D,MAAI,KAAK,MAAO,OAAM,KAAK,iCAAiC;AAC5D,QAAM,KAAK,gBAAgB,OAAO,sBAAsB,GAAG,SAAS,KAAK;AAEzE,SAAO;AACT;AAEA,SAAS,2BACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL,WAAW,GAAG,SAAS;AAAA,IACvB,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO,kBAAkB,GAAG,SAAS;AAAA,EACvD;AACF;AAEA,SAAS,8BACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL,cAAc,GAAG,SAAS;AAAA,IAC1B,gBAAgB,OAAO,kBAAkB,GAAG,SAAS;AAAA,IACrD,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO,sBAAsB,GAAG,SAAS;AAAA,EAC3D;AACF;AAIA,SAAS,6BACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL,WAAW,GAAG,OAAO;AAAA,IACrB,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO,oBAAoB,aAAa,GAAG,OAAO,CAAC;AAAA,EACrE;AACF;AAEA,SAAS,gCACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL,cAAc,GAAG,OAAO;AAAA,IACxB,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO,oBAAoB,aAAa,GAAG,OAAO,CAAC;AAAA,EACrE;AACF;AAIA,SAAS,uBACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,OAAO;AAAA,IACvB,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO;AAAA,EACzB;AACF;AAEA,SAAS,uBACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,OAAO;AAAA,IACvB,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO;AAAA,EACzB;AACF;AAIA,SAAS,2BACP,IACA,MACA,gBACU;AACV,SAAO;AAAA,IACL,kBAAkB,GAAG,GAAG;AAAA,IACxB;AAAA,IACA,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,4BAA4B,GAAG,GAAG;AAAA,EACpC;AACF;AAIA,SAAS,wBACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL;AAAA,IACA,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO;AAAA,EACzB;AACF;AAEA,SAAS,uBACP,IACA,MACA,gBACU;AACV,QAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,SAAO;AAAA,IACL;AAAA,IACA,SAAS,OAAO;AAAA,IAChB,gBAAgB,OAAO;AAAA,IACvB,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD,gBAAgB,OAAO;AAAA,EACzB;AACF;AAIA,SAAS,+BACP,IACA,MACA,gBACU;AACV,SAAO;AAAA,IACL,eAAe,GAAG,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,4BAA4B,aAAa,GAAG,SAAS,CAAC;AAAA,IACtD;AAAA,IACA;AAAA,IACA,OAAO,aAAa,oBAAoB,GAAG,MAAM,CAAC,CAAC;AAAA,IACnD,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C;AAAA,EACF;AACF;AAIA,SAAS,wBACP,IACA,MACA,gBACU;AACV,QAAM,QAAkB,CAAC;AAEzB,QAAM,KAAK,YAAY,GAAG,GAAG,OAAO,GAAG,MAAM,EAAE;AAG/C,MAAI,GAAG,WAAW,QAAQ;AACxB,UAAM,KAAK,uBAAuB,GAAG,GAAG,iBAAiB;AACzD,UAAM,KAAK,mBAAmB;AAC9B,UAAM,KAAK,sCAAsC;AACjD,UAAM,KAAK,6CAA6C;AACxD,UAAM,KAAK,OAAO;AAClB,UAAM,KAAK,KAAK;AAAA,EAClB,WAAW,GAAG,WAAW,QAAQ;AAC/B,UAAM,KAAK,uBAAuB,GAAG,GAAG,iBAAiB;AACzD,UAAM,KAAK,mBAAmB;AAC9B,UAAM,KAAK,+BAA+B;AAC1C,UAAM,KAAK,mCAAmC;AAC9C,UAAM,KAAK,OAAO;AAClB,UAAM,KAAK,KAAK;AAAA,EAClB,OAAO;AACL,UAAM,KAAK,uBAAuB,GAAG,GAAG,iBAAiB;AACzD,UAAM,KAAK,mBAAmB;AAC9B,UAAM,KAAK,gCAAgC;AAC3C,UAAM,KAAK,4BAA4B;AACvC,UAAM,KAAK,OAAO;AAClB,UAAM,KAAK,KAAK;AAAA,EAClB;AAEA,QAAM,KAAK,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC,GAAG;AAC5D,QAAM,KAAK,iCAAiC;AAG5C,MAAI,GAAG,QAAQ;AACb,UAAM,UAAU,gBAAgB,GAAG,QAAQ,IAAI;AAC/C,UAAM,KAAK,gBAAgB,OAAO,oBAAoB;AAAA,EACxD;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,IAAsC;AACpE,SAAO,CAAC,WAAW,GAAG,UAAU,MAAM,qDAAgD;AACxF;AAIA,SAAS,2BACP,IACA,MACA,gBACU;AAGV,SAAO;AAAA,IACL,MAAM,GAAG,EAAE;AAAA,IACX;AAAA,IACA;AAAA,IACA,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAIA,SAAS,sBACP,IACA,MACA,gBACU;AACV,SAAO;AAAA,IACL,WAAW,GAAG,OAAO,KAAK,IAAI,CAAC;AAAA,IAC/B;AAAA,IACA;AAAA,IACA,SAAS,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,IAC9C,GAAI,KAAK,QAAQ,CAAC,iCAAiC,IAAI,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAMA,SAAS,iBAAiB,MAA4B;AACpD,MAAI,KAAK,OAAQ,QAAO,KAAK;AAE7B,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,MAAM,KAAK,QAAQ,KAAK,EAAE;AAErC,aAAW,MAAM,KAAK,YAAY;AAChC,UAAM,KAAK,WAAW,EAAE,CAAC;AAAA,EAC3B;AAEA,SAAO,MAAM,KAAK,GAAG;AACvB;AAEA,SAAS,WAAW,IAA+B;AACjD,UAAQ,GAAG,IAAI;AAAA,IACb,KAAK;AACH,aAAO,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;AAAA,IAC5D,KAAK;AACH,aAAO,QAAQ,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;AAAA,IACzD,KAAK;AACH,aAAO,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;AAAA,IAC5D,KAAK;AACH,aAAO,QAAQ,GAAG,OAAO,IAAI,eAAe,GAAG,MAAM,CAAC;AAAA,IACxD,KAAK;AACH,aAAO,WAAW,GAAG,OAAO,IAAI,eAAe,GAAG,MAAM,CAAC;AAAA,IAC3D,KAAK;AACH,aAAO,OAAO,eAAe,GAAG,MAAM,CAAC;AAAA,IACzC,KAAK;AACH,aAAO,OAAO,eAAe,GAAG,MAAM,CAAC;AAAA,IACzC,KAAK;AACH,aAAO,SAAS,GAAG,GAAG;AAAA,IACxB,KAAK;AACH,aAAO,QAAQ,eAAe,GAAG,MAAM,CAAC;AAAA,IAC1C,KAAK;AACH,aAAO,OAAO,eAAe,GAAG,MAAM,CAAC;AAAA,IACzC,KAAK;AACH,aAAO,SAAS,GAAG,GAAG,OAAO,GAAG,MAAM;AAAA,IACxC,KAAK;AACH,aAAO,QAAQ,GAAG,UAAU;AAAA,IAC9B,KAAK;AACH,aAAO,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK;AAAA,IACtC,KAAK;AACH,aAAO,YAAY,eAAe,GAAG,MAAM,CAAC;AAAA,IAC9C,KAAK;AACH,aAAO,YAAY,eAAe,GAAG,MAAM,CAAC;AAAA,IAC9C,KAAK;AACH,aAAO,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;AAAA,IAC5D,KAAK;AACH,aAAO,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC;AAAA,IACpC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAQ,GAAyB;AAAA,EACrC;AACF;AAEA,SAAS,eAAe,QAA2B;AACjD,MAAI,OAAO,SAAS,OAAQ,QAAO;AACnC,MAAI,OAAO,SAAS,WAAY,QAAO,OAAO,OAAO,KAAK;AAC1D,MAAI,OAAO,SAAS,WAAY,QAAO,OAAO,OAAO,KAAK;AAC1D,SAAO;AACT;AAEA,SAAS,kBAAkB,MAA4B;AACrD,MAAI,KAAK,cAAc,SAAS,YAAY;AAC1C,WAAO,iBAAiB,aAAa,KAAK,cAAc,KAAK,CAAC;AAAA,EAChE;AAIA,aAAW,MAAM,KAAK,YAAY;AAChC,QAAI,YAAY,MAAO,GAA6B,OAAO,SAAS,YAAY;AAC9E,YAAM,IAAK,GAA6B;AACxC,UAAI,EAAE,SAAS,YAAY;AACzB,eAAO,iBAAiB,aAAa,EAAE,KAAK,CAAC;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,QAAmB,MAA4B;AACtE,MAAI,OAAO,SAAS,YAAY;AAC9B,WAAO,iBAAiB,aAAa,OAAO,KAAK,CAAC;AAAA,EACpD;AACA,MAAI,OAAO,SAAS,QAAQ;AAC1B,WAAO,kBAAkB,IAAI;AAAA,EAC/B;AAEA,SAAO,kBAAkB,IAAI;AAC/B;AAEA,SAAS,oBAAoB,QAA2B;AACtD,MAAI,OAAO,SAAS,WAAY,QAAO,OAAO;AAC9C,MAAI,OAAO,SAAS,OAAQ,QAAO;AACnC,SAAO;AACT;AAEA,SAAS,cAAc,MAA4B;AACjD,QAAM,QAAQ,KAAK,QAAQ;AAC3B,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,4BAA4B,aAAa,KAAK,CAAC;AAAA,EAC1D;AACF;AAEA,SAAS,SAAS,MAAsB;AACtC,SAAO;AAAA;AAAA;AAAA,EAAoC,IAAI;AAAA;AAAA;AACjD;AAEA,SAAS,aAAa,GAAmB;AACvC,SAAO,EAAE,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AACrD;AAEA,SAAS,eAAe,GAAmB;AACzC,SAAO,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,SAAS,MAAM;AACvD;;;ACngBO,SAAS,WAAW,GAAmB;AAC5C,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC;AAC9C;AAEO,SAASA,cAAa,GAAmB;AAC9C,SAAO,EAAE,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AACrD;AAEO,SAAS,UAAU,GAAoB;AAC5C,SAAO,kBAAkB,KAAK,CAAC;AACjC;AAEO,SAAS,aAAa,MAAsB;AACjD,SAAO,KAAK,QAAQ,MAAM,EAAE,EAAE,QAAQ,iBAAiB,EAAE;AAC3D;AAMO,SAAS,UAAU,QAA2B;AACnD,MAAI,OAAO,SAAS,OAAQ,QAAO;AACnC,SAAO,OAAO;AAChB;AAEO,SAAS,SAAS,QAAgB,MAAc,QAA2B;AAChF,SAAO,GAAG,MAAM,IAAI,IAAI,IAAI,UAAU,MAAM,CAAC;AAC/C;AAEO,SAAS,gBAAgB,QAAmB,QAAwB;AACzE,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS,EAAE;AAC9C,WAAO,QAAQ;AAAA,EACjB;AACA,SAAO,OAAO,YAAY;AAC5B;AAEO,SAAS,cAAc,QAA2B;AACvD,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS,EAAE;AAC9C,WAAO,QAAQ;AAAA,EACjB;AACA,SAAO;AACT;AAMO,SAAS,UAAU,OAAuB;AAC/C,MAAI,UAAU,KAAK,EAAG,QAAO;AAC7B,MAAI,UAAU,UAAU,UAAU,QAAS,QAAO;AAClD,SAAO;AACT;AAEO,SAAS,aAAa,OAAe,SAAyB;AACnE,MAAI,YAAY,WAAY,QAAO,UAAU,KAAK,IAAI,QAAQ;AAC9D,MAAI,YAAY,YAAa,QAAO,UAAU,SAAS,SAAS;AAChE,SAAO,IAAIA,cAAa,KAAK,CAAC;AAChC;AAMO,SAAS,cAAc,UAA0B;AACtD,MAAI,SAAS,WAAW,GAAG,GAAG;AAC5B,UAAM,KAAK,SAAS,MAAM,CAAC,EAAE,YAAY;AACzC,QAAI,CAAC,OAAO,UAAU,UAAU,SAAS,EAAE,SAAS,EAAE,EAAG,QAAO;AAChE,QAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,OAAO,EAAE,SAAS,EAAE,EAAG,QAAO;AACvE,QAAI,CAAC,QAAQ,UAAU,OAAO,EAAE,SAAS,EAAE,EAAG,QAAO;AACrD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,MAA4B;AAC1D,MAAI,KAAK,cAAc,SAAS,YAAY;AAC1C,WAAO,cAAc,KAAK,cAAc,KAAK;AAAA,EAC/C;AACA,MAAI,KAAK,QAAQ,UAAU,SAAU,QAAO;AAC5C,MAAI,KAAK,QAAQ,UAAU,WAAW,KAAK,QAAQ,UAAU,SAAU,QAAO;AAC9E,SAAO;AACT;AAEO,SAAS,oBAAoB,MAA4B;AAC9D,QAAM,MAAM,gBAAgB,IAAI;AAChC,MAAI,QAAQ,WAAW,QAAQ,OAAQ,QAAO;AAC9C,MAAI,KAAK,cAAc,SAAS,YAAY;AAC1C,UAAM,KAAK,KAAK,cAAc,MAAM,QAAQ,SAAS,EAAE;AACvD,WAAO,WAAW,EAAE;AAAA,EACtB;AACA,SAAO;AACT;AAMO,SAAS,sBAAsB,MAA4B;AAChE,MAAI,KAAK,WAAW,WAAW,EAAG,QAAO;AAEzC,QAAM,QAAkB,CAAC;AACzB,QAAM,UAAU,KAAK,WAAW,CAAC;AAEjC,UAAQ,QAAQ,IAAI;AAAA,IAClB,KAAK;AACH,YAAM,KAAK,UAAU,WAAW,QAAQ,SAAS,CAAC;AAClD;AAAA,IACF,KAAK;AACH,YAAM,KAAK,OAAO,WAAW,QAAQ,SAAS,CAAC;AAC/C;AAAA,IACF,KAAK;AACH,YAAM,KAAK,UAAU,WAAW,QAAQ,SAAS,CAAC;AAClD;AAAA,IACF,KAAK;AACH,YAAM,KAAK,MAAM;AACjB,uBAAiB,OAAO,QAAQ,MAAM;AACtC;AAAA,IACF,KAAK;AACH,YAAM,KAAK,MAAM;AACjB,uBAAiB,OAAO,QAAQ,MAAM;AACtC;AAAA,IACF,KAAK;AACH,YAAM,KAAK,YAAY;AACvB,uBAAiB,OAAO,QAAQ,MAAM;AACtC;AAAA,IACF,KAAK;AACH,YAAM,KAAK,YAAY;AACvB,YAAM,KAAK,WAAW,QAAQ,IAAI,QAAQ,iBAAiB,EAAE,CAAC,CAAC;AAC/D;AAAA,IACF,KAAK;AACH,YAAM,KAAK,WAAW;AACtB;AAAA,IACF,KAAK;AACH,YAAM,KAAK,WAAW;AACtB,uBAAiB,OAAO,QAAQ,MAAM;AACtC;AAAA,IACF,KAAK;AACH,YAAM,KAAK,WAAW;AACtB,uBAAiB,OAAO,QAAQ,MAAM;AACtC;AAAA,IACF,KAAK;AACH,YAAM,KAAK,OAAO;AAClB,uBAAiB,OAAO,QAAQ,MAAM;AACtC;AAAA,IACF;AACE,YAAM,KAAK,WAAW;AAAA,EAC1B;AAEA,MAAI,KAAK,QAAQ,UAAU,SAAS;AAClC,UAAM,KAAK,MAAM,WAAW,KAAK,QAAQ,KAAK,CAAC;AAAA,EACjD;AAEA,SAAO,MAAM,KAAK,EAAE,KAAK;AAC3B;AAEA,SAAS,iBAAiB,OAAiB,QAAyB;AAClE,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS,EAAE;AAC9C,UAAM,KAAK,WAAW,KAAK,CAAC;AAAA,EAC9B;AACF;AAUO,SAAS,mBACd,MACA,UAC4C;AAC5C,QAAM,SAAqD,CAAC;AAC5D,aAAW,MAAM,KAAK,YAAY;AAChC,SACG,GAAG,OAAO,iBAAiB,GAAG,OAAO,cAAc,GAAG,OAAO,kBAC9D,GAAG,OAAO,SAAS,QACnB;AACA,YAAM,WAAW,SAAS,IAAI,gBAAgB,GAAG,SAAS;AAC1D,UAAI,UAAU;AACZ,eAAO,KAAK,EAAE,WAAW,UAAU,WAAW,GAAG,UAAU,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ACxKO,IAAM,gBAAN,MAAiD;AAAA,EAAjD;AACL,SAAS,YAAY;AAAA;AAAA,EAErB,OAAO,MAAoB,UAAkC,CAAC,GAAuB;AACnF,UAAM,gBAAgB,QAAQ,iBAAiB,sBAAsB,IAAI;AACzE,UAAM,KAAK,QAAQ,eAAe;AAGlC,UAAM,WAAW,kBAAkB,IAAI;AAEvC,UAAM,QAAkB,CAAC;AAGzB,UAAM,YAAY,CAAC,GAAG,SAAS,KAAK;AACpC,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM,KAAK,YAAY,UAAU,KAAK,IAAI,CAAC,kBAAkB;AAAA,IAC/D;AACA,UAAM,KAAK,EAAE;AAGb,UAAM,YAAY,KAAK,OAAO;AAC9B,UAAM,KAAK,mBAAmB,aAAa,GAAG,SAAS,IAAI;AAG3D,eAAW,SAAS,SAAS,QAAQ;AACnC,YAAM,UAAU,KAAK,MAAM,iBAAiB;AAC5C,YAAM;AAAA,QACJ,YAAY,MAAM,IAAI,KAAK,MAAM,MAAM,eAAe,OAAO,IAAI,MAAM,YAAY;AAAA,MACrF;AAAA,IACF;AAGA,eAAW,OAAO,SAAS,MAAM;AAC/B,YAAM,UAAU,KAAK,IAAI,iBAAiB;AAC1C,YAAM,KAAK,WAAW,IAAI,IAAI,YAAY,OAAO,SAAS;AAAA,IAC5D;AAEA,QAAI,SAAS,OAAO,SAAS,KAAK,SAAS,KAAK,SAAS,GAAG;AAC1D,YAAM,KAAK,EAAE;AAAA,IACf;AAGA,UAAM,cAAc,SAAS,WAAW,KAAK,QAAQ,KAAK,CAAC;AAC3D,UAAM,cAAc,KAAK,QAAQ,WAAW;AAC5C,UAAM,KAAK,WAAW,WAAW,kBAAkB,WAAW,SAAS;AAEvE,eAAW,MAAM,KAAK,YAAY;AAChC,YAAM,UAAU,sBAAsB,IAAI,QAAQ;AAClD,iBAAW,KAAK,SAAS;AACvB,cAAM,KAAK,OAAO,CAAC,EAAE;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,KAAK,WAAW;AACtB,UAAM,KAAK,EAAE;AAGb,UAAM,KAAK,YAAY;AACvB,UAAM,MAAM,YAAY,MAAM,UAAU,WAAW;AACnD,eAAW,KAAK,KAAK;AACnB,YAAM,KAAK,OAAO,CAAC,EAAE;AAAA,IACvB;AACA,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,GAAG;AACd,UAAM,KAAK,EAAE;AAEb,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,OAAO;AAAA,IACT;AAAA,EACF;AACF;AA+BA,SAAS,kBAAkB,MAAuC;AAChE,QAAM,QAAQ,oBAAI,IAAY;AAC9B,QAAM,SAAsB,CAAC;AAC7B,QAAM,OAAkB,CAAC;AACzB,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,SAAS,oBAAI,IAAoB;AACvC,QAAM,aAAa,oBAAI,IAAY;AAGnC,QAAM,IAAI,aAAa;AAEvB,aAAW,MAAM,KAAK,YAAY;AAChC,YAAQ,GAAG,IAAI;AAAA,MACb,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,OAAO,GAAG,WAAW,GAAG,MAAM;AACnD,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,IAAI,UAAU;AACpB,gBAAM,OAAO,MAAM,WAAW,GAAG,SAAS,CAAC;AAC3C,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,QAAQ,MAAM,WAAW,IAAI,CAAC;AAAA,YAC9B,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW,UAAU,GAAG,MAAM;AAAA,UAChC,CAAC;AACD,mBAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,WAAW,IAAI;AAAA,QACpE;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,OAAO,GAAG,WAAW,GAAG,MAAM;AACnD,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,IAAI,UAAU;AACpB,gBAAM,OAAO,MAAM,WAAW,GAAG,SAAS,CAAC;AAC3C,gBAAM,UAAU,GAAG,OAAO,gBAAgB,SAAS;AACnD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,QAAQ,MAAM,WAAW,IAAI,CAAC;AAAA,YAC9B,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW,UAAU,GAAG,MAAM;AAAA,UAChC,CAAC;AACD,mBAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,WAAW,IAAI;AAAA,QACpE;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,aAAa;AACzB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,IAAI,UAAU;AACpB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,QAAQ,MAAM,WAAW,IAAI,CAAC;AAAA,YAC9B,gBAAgB;AAAA,YAChB,cAAc,GAAG,OAAO,SAAS,SAAS;AAAA,YAC1C,WAAW;AAAA,UACb,CAAC;AACD,mBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,QACpC;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,iBAAiB;AACpB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,aAAa;AACzB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,IAAI,UAAU;AACpB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,QAAQ,MAAM,WAAW,IAAI,CAAC;AAAA,YAC9B,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW;AAAA,UACb,CAAC;AACD,mBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,QACpC;AACA;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,GAAG;AACxB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,IAAI,UAAU;AACpB,gBAAM,OAAO,aAAa,GAAG,IAAI;AACjC,gBAAM,UAAU,UAAU,GAAG,KAAK;AAClC,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,QAAQ,MAAM,WAAW,IAAI,CAAC;AAAA,YAC9B,gBAAgB;AAAA,YAChB,cAAc,aAAa,GAAG,OAAO,OAAO;AAAA,YAC5C,WAAW,SAAS,GAAG;AAAA,UACzB,CAAC;AACD,mBAAS,IAAI,SAAS,GAAG,MAAM,IAAI;AAAA,QACrC;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,aAAa;AAChB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,SAAS;AACrB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,IAAI,UAAU;AACpB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,OAAO;AAC/C,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,QAAQ,MAAM,WAAW,IAAI,CAAC;AAAA,YAC9B,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW;AAAA,UACb,CAAC;AACD,mBAAS,IAAI,KAAK,QAAQ,IAAI;AAAA,QAChC;AACA;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AAEZ,YAAI,GAAG,QAAQ;AACb,gBAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,gBAAM,MAAM,aAAa;AACzB,cAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,uBAAW,IAAI,GAAG;AAClB,kBAAM,IAAI,UAAU;AACpB,kBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,mBAAO,KAAK;AAAA,cACV;AAAA,cACA,QAAQ,MAAM,WAAW,IAAI,CAAC;AAAA,cAC9B,gBAAgB;AAAA,cAChB,cAAc;AAAA,cACd,WAAW;AAAA,YACb,CAAC;AACD,qBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,UACpC;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,YAAI,CAAC,OAAO,IAAI,EAAE,GAAG;AACnB,gBAAM,IAAI,QAAQ;AAClB,gBAAM,OAAO,cAAc,GAAG,MAAM;AACpC,eAAK,KAAK;AAAA,YACR;AAAA,YACA,gBAAgB;AAAA,YAChB,WAAW;AAAA,UACb,CAAC;AACD,iBAAO,IAAI,IAAI,IAAI;AAAA,QACrB;AACA;AAAA,MACF;AAAA,MAEA,KAAK,gBAAgB;AACnB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,YAAI,CAAC,OAAO,IAAI,EAAE,GAAG;AACnB,gBAAM,IAAI,QAAQ;AAClB,gBAAM,OAAO,cAAc,GAAG,MAAM;AACpC,eAAK,KAAK;AAAA,YACR;AAAA,YACA,gBAAgB;AAAA,YAChB,WAAW;AAAA,UACb,CAAC;AACD,iBAAO,IAAI,IAAI,IAAI;AAAA,QACrB;AACA;AAAA,MACF;AAAA,IAGF;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,QAAQ,MAAM,UAAU,OAAO;AACjD;AAMA,SAAS,sBAAsB,IAAuB,UAAuC;AAC3F,UAAQ,GAAG,IAAI;AAAA,IACb,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,kBAAkB;AAAA,IACrC;AAAA,IAEA,KAAK,YAAY;AACf,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,SAAS;AAAA,IAC5B;AAAA,IAEA,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,UAAU;AAAA,IAC7B;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,SAAS;AAAA,IAC5B;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,UAAU;AAAA,IAC7B;AAAA,IAEA,KAAK,cAAc;AACjB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,KAAKC,cAAa,GAAG,OAAO,CAAC,KAAK;AAAA,IACrD;AAAA,IAEA,KAAK,iBAAiB;AACpB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,oBAAoBA,cAAa,GAAG,OAAO,CAAC,KAAK;AAAA,IACpE;AAAA,IAEA,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,SAAS,GAAG,IAAI;AACvD,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,YAAM,MAAM,UAAU,GAAG,KAAK,IAAI,GAAG,QAAQ,IAAIA,cAAa,GAAG,KAAK,CAAC;AACvE,aAAO,CAAC,GAAG,MAAM,IAAI,GAAG,IAAI;AAAA,IAC9B;AAAA,IAEA,KAAK,aAAa;AAChB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,MAAM;AACpE,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,mBAAmB,GAAG,MAAM,IAAI;AAAA,IACnD;AAAA,IAEA,KAAK,aAAa;AAChB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,MAAM;AACpE,YAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,aAAO,CAAC,GAAG,MAAM,mBAAmB,GAAG,MAAM,IAAI;AAAA,IACnD;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,2BAA2BA,cAAa,GAAG,GAAG,CAAC,IAAI;AAAA,IAE7D,KAAK;AACH,aAAO,CAAC,wBAAwB;AAAA,IAElC,KAAK;AACH,aAAO,CAAC,2BAA2B;AAAA,IAErC,KAAK,SAAS;AACZ,YAAM,QAAkB,CAAC;AACzB,YAAM,KAAK,iCAAiCA,cAAa,GAAG,GAAG,CAAC,KAAK;AACrE,UAAI,GAAG,WAAW,QAAQ;AACxB,cAAM,KAAK,qCAAqC;AAAA,MAClD,WAAW,GAAG,WAAW,QAAQ;AAC/B,cAAM,KAAK,qCAAqC;AAAA,MAClD,OAAO;AACL,cAAM,KAAK,qCAAqC;AAAA,MAClD;AACA,UAAI,GAAG,QAAQ;AACb,cAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,cAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,CAAC,KAAK;AACzD,YAAI,GAAG,WAAW,QAAQ;AACxB,gBAAM,KAAK,GAAG,MAAM,yBAAyB;AAAA,QAC/C,OAAO;AACL,gBAAM,KAAK,GAAG,MAAM,SAAS;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,oDAAoD,GAAG,UAAU,KAAK;AAAA,IAEhF,KAAK,SAAS;AACZ,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO,CAAC,GAAG,WAAW,KAAK,qBAAqB;AAAA,IAClD;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO,CAAC,GAAG,WAAW,KAAK,oBAAoB;AAAA,IACjD;AAAA,IAEA,KAAK,gBAAgB;AACnB,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO;AAAA,QACL,GAAG,WAAW,KAAK,6CAA6CA,cAAa,GAAG,SAAS,CAAC;AAAA,MAC5F;AAAA,IACF;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,eAAe,GAAG,OAAO,IAAI,OAAK,IAAIA,cAAa,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,IAAI;AAAA,IAElF;AACE,aAAO,CAAC,mBAAoB,GAAyB,EAAE,EAAE;AAAA,EAC7D;AACF;AAMA,SAAS,YACP,MACA,UACA,aACU;AACV,QAAM,QAAkB,CAAC;AACzB,QAAM,WAAW,mBAAmB,MAAM,QAAQ;AAClD,QAAM,YAAY,iBAAiB,KAAK,QAAQ,KAAK;AAErD,QAAM,gBAAgB,SAAS,SAAS,KAAK,SAAS,WAAW;AAEjE,MAAI,cAAe,OAAM,KAAK,IAAI;AAGlC,QAAM,aAAa,gBAAgB,IAAI;AACvC,QAAM,eAAyB,CAAC,GAAG,SAAS,KAAK,WAAW,GAAG;AAG/D,QAAM,kBAAkB,mBAAmB,MAAM,SAAS,QAAQ;AAClE,MAAI,gBAAgB,SAAS,GAAG;AAC9B,UAAM,YAAY,gBACf,IAAI,OAAK,MAAM,EAAE,SAAS,OAAO,EAAE,SAAS,SAAS,EACrD,KAAK,GAAG,EACR,KAAK;AACR,iBAAa,KAAK,gBAAgB,SAAS,YAAY;AAAA,EACzD;AAEA,QAAM,SAAS,gBAAgB,OAAO;AACtC,QAAM;AAAA,IACJ,GAAG,MAAM,IAAI,UAAU,IAAI,aAAa,KAAK,GAAG,CAAC,IAAI,oBAAoB,IAAI,CAAC,KAAK,UAAU;AAAA,EAC/F;AAGA,aAAW,MAAM,UAAU;AACzB,UAAM,UAAU,iBAAiB,IAAI,QAAQ;AAC7C,eAAW,KAAK,SAAS;AACvB,YAAM,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE;AAAA,IAC5B;AAAA,EACF;AAEA,MAAI,cAAe,OAAM,KAAK,KAAK;AAEnC,SAAO;AACT;AAYA,SAAS,mBAAmB,MAAoB,WAA4C;AAC1F,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,WAAyB,CAAC;AAEhC,aAAW,MAAM,KAAK,YAAY;AAChC,QAAI,EAAE,YAAY,IAAK;AACvB,UAAM,SAAU,GAA6B;AAC7C,QAAI,OAAO,SAAS,WAAY;AAGhC,QAAI,KAAK,cAAc,SAAS,cAAc,KAAK,cAAc,UAAU,OAAO;AAChF;AAEF,UAAM,MAAM,OAAO;AACnB,QAAI,KAAK,IAAI,GAAG,GAAG;AAEjB,YAAM,WAAW,SAAS,KAAK,OAAK,EAAE,aAAa,GAAG;AACtD,UAAI,SAAU,UAAS,IAAI,KAAK,EAAE;AAClC;AAAA,IACF;AACA,SAAK,IAAI,GAAG;AAEZ,UAAM,MAAM,cAAc,GAAG;AAC7B,UAAM,KAAK,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAChD,UAAM,MAAM,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAEjD,aAAS,KAAK;AAAA,MACZ,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,KAAK,CAAC,EAAE;AAAA,IACV,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,IAAgB,UAAuC;AAC/E,QAAM,QAAkB,CAAC;AACzB,QAAM,QAAkB,CAAC;AAEzB,MAAI,GAAG,GAAI,OAAM,KAAK,OAAO,GAAG,EAAE,GAAG;AAGrC,QAAM,cAA0D,CAAC;AACjE,aAAW,MAAM,GAAG,KAAK;AACvB,QAAI,GAAG,OAAO,iBAAiB,GAAG,OAAO,cAAc,GAAG,OAAO,eAAe;AAC9E,YAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,YAAY,GAAG,SAAS;AAC7E,UAAI,UAAU;AACZ,oBAAY,KAAK,EAAE,WAAW,UAAU,WAAW,GAAG,UAAU,CAAC;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,QAAQ,YAAY,IAAI,OAAK,MAAM,EAAE,SAAS,OAAO,EAAE,SAAS,SAAS;AAC/E,QAAI,GAAG,WAAW;AAChB,YAAM,KAAK,gBAAgB,GAAG,SAAS,IAAI,MAAM,KAAK,GAAG,CAAC,YAAY;AAAA,IACxE,OAAO;AACL,YAAM,KAAK,gBAAgB,MAAM,KAAK,GAAG,CAAC,YAAY;AAAA,IACxD;AAAA,EACF,WAAW,GAAG,WAAW;AACvB,UAAM,KAAK,cAAc,GAAG,SAAS,GAAG;AAAA,EAC1C;AAGA,QAAM,UAAU,SAAS,OAAO,IAAI,GAAG,QAAQ;AAC/C,MAAI,SAAS;AACX,UAAM,KAAK,QAAQ,OAAO,GAAG;AAAA,EAC/B;AAGA,QAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,UAAU;AAG/D,QAAM,eAAe,SAAS,SAAS,IAAI,GAAG,WAAW,UAAU;AAGnE,QAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,MAAM;AAE3D,QAAM,UAAU,MAAM,SAAS,IAAI,MAAM,MAAM,KAAK,GAAG,IAAI;AAC3D,QAAM,UAAU,eACZ,IAAI,YAAY,MAChB,WACE,IAAI,QAAQ,MACX,GAAG,WAAW,GAAG,MAAM;AAE9B,QAAM,cAAc,IAAI,GAAG,GAAG,GAAG,OAAO,IAAI,OAAO,KAAK,GAAG,GAAG;AAE9D,MAAI,UAAU;AACZ,UAAM,KAAK,IAAI,QAAQ,OAAO,WAAW,GAAG;AAAA,EAC9C,OAAO;AACL,UAAM,KAAK,WAAW;AAAA,EACxB;AAEA,SAAO;AACT;AAMA,SAAS,iBAAiB,OAAuB;AAC/C,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,KAAK,WAAW,KAAK,CAAC;AAAA,EACjC;AACF;;;ACrmBO,IAAM,cAAN,MAA+C;AAAA,EAA/C;AACL,SAAS,YAAY;AAAA;AAAA,EAErB,OAAO,MAAoB,UAAkC,CAAC,GAAuB;AACnF,UAAM,gBAAgB,QAAQ,iBAAiB,sBAAsB,IAAI;AACzE,UAAM,KAAK,QAAQ,eAAe;AAElC,UAAM,WAAWC,mBAAkB,IAAI;AAGvC,UAAM,cAAwB,CAAC;AAG/B,UAAM,aAAuB,CAAC;AAC9B,QAAI,SAAS,OAAO,SAAS,KAAK,SAAS,KAAK,SAAS,GAAG;AAC1D,iBAAW,KAAK,KAAK;AAAA,IACvB;AACA,QAAI,WAAW,SAAS,GAAG;AACzB,kBAAY,KAAK,YAAY,WAAW,KAAK,IAAI,CAAC,eAAe;AACjE,kBAAY,KAAK,EAAE;AAAA,IACrB;AAGA,eAAW,SAAS,SAAS,QAAQ;AACnC,UAAI,IAAI;AACN,oBAAY,KAAK,SAAS,MAAM,IAAI,SAAS,MAAM,cAAc,IAAI,MAAM,YAAY,GAAG;AAAA,MAC5F,OAAO;AACL,oBAAY,KAAK,SAAS,MAAM,IAAI,UAAU,MAAM,YAAY,GAAG;AAAA,MACrE;AAAA,IACF;AAGA,eAAW,KAAK,SAAS,MAAM;AAC7B,UAAI,IAAI;AACN,oBAAY,KAAK,SAAS,EAAE,IAAI,kCAAkC;AAAA,MACpE,OAAO;AACL,oBAAY,KAAK,SAAS,EAAE,IAAI,cAAc;AAAA,MAChD;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,SAAS,KAAK,SAAS,KAAK,SAAS,GAAG;AAC1D,kBAAY,KAAK,EAAE;AAAA,IACrB;AAGA,UAAM,cAAc,SAAS,WAAW,KAAK,QAAQ,KAAK,CAAC;AAC3D,UAAM,cAAc,KAAK,QAAQ,WAAW;AAC5C,gBAAY,KAAK,GAAG,WAAW,YAAY,WAAW,MAAM;AAE5D,eAAW,MAAM,KAAK,YAAY;AAChC,YAAM,UAAUC,uBAAsB,IAAI,QAAQ;AAClD,iBAAW,KAAK,SAAS;AACvB,oBAAY,KAAK,KAAK,CAAC,EAAE;AAAA,MAC3B;AAAA,IACF;AAEA,gBAAY,KAAK,GAAG;AAGpB,UAAM,gBAAgB,iBAAiB,MAAM,UAAU,WAAW;AAGlE,UAAM,WAAW,KAAK,eAAe;AACrC,UAAM,QAAkB,CAAC;AACzB,UAAM,KAAK,gBAAgB,QAAQ,GAAG;AACtC,eAAW,KAAK,aAAa;AAC3B,YAAM,KAAK,CAAC;AAAA,IACd;AACA,UAAM,KAAK,WAAW;AACtB,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,YAAY;AACvB,eAAW,KAAK,eAAe;AAC7B,YAAM,KAAK,KAAK,CAAC,EAAE;AAAA,IACrB;AACA,UAAM,KAAK,aAAa;AACxB,UAAM,KAAK,EAAE;AAEb,UAAM,QAAQ,WAAW,SAAS,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC;AAEzD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACF;AAyBA,SAASD,mBAAkB,MAAiC;AAC1D,QAAM,SAAyB,CAAC;AAChC,QAAM,OAAqB,CAAC;AAC5B,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,SAAS,oBAAI,IAAoB;AACvC,QAAM,aAAa,oBAAI,IAAY;AAEnC,aAAW,MAAM,KAAK,YAAY;AAChC,YAAQ,GAAG,IAAI;AAAA,MACb,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,OAAO,GAAG,WAAW,GAAG,MAAM;AACnD,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,MAAM,WAAW,GAAG,SAAS,CAAC;AAC3C,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW,UAAU,GAAG,MAAM;AAAA,UAChC,CAAC;AACD,mBAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,WAAW,IAAI;AAAA,QACpE;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,OAAO,GAAG,WAAW,GAAG,MAAM;AACnD,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,MAAM,WAAW,GAAG,SAAS,CAAC;AAC3C,gBAAM,UAAU,GAAG,OAAO,gBAAgB,SAAS;AACnD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW,UAAU,GAAG,MAAM;AAAA,UAChC,CAAC;AACD,mBAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,WAAW,IAAI;AAAA,QACpE;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,aAAa;AACzB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,gBAAgB;AAAA,YAChB,cAAc,GAAG,OAAO,SAAS,SAAS;AAAA,YAC1C,WAAW;AAAA,UACb,CAAC;AACD,mBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,QACpC;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,iBAAiB;AACpB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,aAAa;AACzB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW;AAAA,UACb,CAAC;AACD,mBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,QACpC;AACA;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,GAAG;AACxB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,aAAa,GAAG,IAAI;AACjC,gBAAM,UAAU,UAAU,GAAG,KAAK;AAClC,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,gBAAgB;AAAA,YAChB,cAAc,aAAa,GAAG,OAAO,OAAO;AAAA,YAC5C,WAAW,SAAS,GAAG;AAAA,UACzB,CAAC;AACD,mBAAS,IAAI,SAAS,GAAG,MAAM,IAAI;AAAA,QACrC;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,aAAa;AAChB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,SAAS;AACrB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,OAAO;AAC/C,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW;AAAA,UACb,CAAC;AACD,mBAAS,IAAI,KAAK,QAAQ,IAAI;AAAA,QAChC;AACA;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,YAAI,GAAG,QAAQ;AACb,gBAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,gBAAM,MAAM,aAAa;AACzB,cAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,uBAAW,IAAI,GAAG;AAClB,kBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,mBAAO,KAAK;AAAA,cACV;AAAA,cACA,gBAAgB;AAAA,cAChB,cAAc;AAAA,cACd,WAAW;AAAA,YACb,CAAC;AACD,qBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,UACpC;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,YAAI,CAAC,OAAO,IAAI,EAAE,GAAG;AACnB,gBAAM,OAAO,cAAc,GAAG,MAAM;AACpC,eAAK,KAAK,EAAE,MAAM,WAAW,GAAG,CAAC;AACjC,iBAAO,IAAI,IAAI,IAAI;AAAA,QACrB;AACA;AAAA,MACF;AAAA,MAEA,KAAK,gBAAgB;AACnB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,YAAI,CAAC,OAAO,IAAI,EAAE,GAAG;AACnB,gBAAM,OAAO,cAAc,GAAG,MAAM;AACpC,eAAK,KAAK,EAAE,MAAM,WAAW,GAAG,CAAC;AACjC,iBAAO,IAAI,IAAI,IAAI;AAAA,QACrB;AACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,MAAM,UAAU,OAAO;AAC1C;AAMA,SAASC,uBAAsB,IAAuB,UAAiC;AACrF,UAAQ,GAAG,IAAI;AAAA,IACb,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,aAAO,CAAC,GAAG,YAAY,OAAO,aAAa,YAAY,OAAO,QAAQ;AAAA,IACxE;AAAA,IAEA,KAAK,YAAY;AACf,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,aAAO,CAAC,GAAG,YAAY,OAAO,eAAe;AAAA,IAC/C;AAAA,IAEA,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,aAAO,CAAC,GAAG,YAAY,OAAO,gBAAgB;AAAA,IAChD;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,eAAe;AAAA,IACjD;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,gBAAgB;AAAA,IAClD;AAAA,IAEA,KAAK,cAAc;AACjB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,aAAaC,cAAa,GAAG,OAAO,CAAC,GAAG;AAAA,IAC1E;AAAA,IAEA,KAAK,iBAAiB;AACpB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,cAAcA,cAAa,GAAG,OAAO,CAAC,GAAG;AAAA,IAC3E;AAAA,IAEA,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,SAAS,GAAG,IAAI;AACvD,YAAM,MAAM,UAAU,GAAG,KAAK,IAAI,GAAG,QAAQ,IAAIA,cAAa,GAAG,KAAK,CAAC;AACvE,aAAO,CAAC,GAAG,YAAY,OAAO,YAAY,GAAG,EAAE;AAAA,IACjD;AAAA,IAEA,KAAK,aAAa;AAChB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,MAAM;AACpE,aAAO,CAAC,GAAG,YAAY,OAAO,aAAa,GAAG,MAAM,EAAE;AAAA,IACxD;AAAA,IAEA,KAAK,aAAa;AAChB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,MAAM;AACpE,aAAO,CAAC,GAAG,YAAY,OAAO,aAAa,GAAG,MAAM,EAAE;AAAA,IACxD;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,2BAA2BA,cAAa,GAAG,GAAG,CAAC,GAAG;AAAA,IAE5D,KAAK;AACH,aAAO,CAAC,uBAAuB;AAAA,IAEjC,KAAK;AACH,aAAO,CAAC,0BAA0B;AAAA,IAEpC,KAAK,SAAS;AACZ,YAAM,QAAkB,CAAC;AACzB,YAAM,KAAK,iCAAiCA,cAAa,GAAG,GAAG,CAAC,IAAI;AACpE,UAAI,GAAG,WAAW,QAAQ;AACxB,cAAM,KAAK,oCAAoC;AAAA,MACjD,OAAO;AACL,cAAM,KAAK,oCAAoC;AAAA,MACjD;AACA,UAAI,GAAG,QAAQ;AACb,cAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,YAAI,GAAG,WAAW,QAAQ;AACxB,gBAAM,KAAK,GAAG,YAAY,SAAS,+BAA+B;AAAA,QACpE,OAAO;AACL,gBAAM,KAAK,GAAG,YAAY,SAAS,eAAe;AAAA,QACpD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,oDAAoD,GAAG,UAAU,IAAI;AAAA,IAE/E,KAAK,SAAS;AACZ,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO,CAAC,GAAG,WAAW,KAAK,iBAAiB;AAAA,IAC9C;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO,CAAC,GAAG,WAAW,KAAK,gBAAgB;AAAA,IAC7C;AAAA,IAEA,KAAK,gBAAgB;AACnB,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO;AAAA,QACL,GAAG,WAAW,KAAK,0CAA0CA,cAAa,GAAG,SAAS,CAAC;AAAA,MACzF;AAAA,IACF;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,eAAe,GAAG,OAAO,IAAI,OAAK,IAAIA,cAAa,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG;AAAA,IAEjF;AACE,aAAO,CAAC,mBAAoB,GAAyB,EAAE,EAAE;AAAA,EAC7D;AACF;AAMA,SAAS,iBACP,MACA,UACA,aACU;AACV,QAAM,QAAkB,CAAC;AACzB,QAAM,WAAW,sBAAsB,IAAI;AAC3C,QAAM,iBAAiB,IAAI,KAAK,QAAQ,KAAK;AAG7C,QAAM,aAAa,gBAAgB,IAAI;AACvC,QAAM,eAAyB,CAAC,GAAG,cAAc,KAAK,WAAW,GAAG;AAGpE,QAAM,kBAAkB,mBAAmB,MAAM,SAAS,QAAQ;AAClE,MAAI,gBAAgB,SAAS,GAAG;AAC9B,UAAM,WAAW,gBAAgB,IAAI,OAAK,GAAG,EAAE,SAAS,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,IAAI;AACrF,iBAAa,KAAK,aAAa,QAAQ,KAAK;AAAA,EAC9C;AAEA,QAAM,iBAAiB,oBAAoB,IAAI;AAC/C,QAAM,KAAK,IAAI,UAAU,IAAI,aAAa,KAAK,GAAG,CAAC,IAAI,cAAc,KAAK,UAAU,GAAG;AAGvF,aAAW,MAAM,UAAU;AACzB,UAAM,UAAU,iBAAiB,IAAI,QAAQ;AAC7C,eAAW,KAAK,SAAS;AACvB,YAAM,KAAK,CAAC;AAAA,IACd;AAAA,EACF;AAEA,SAAO;AACT;AAUA,SAAS,sBAAsB,MAAuC;AACpE,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,WAA8B,CAAC;AAErC,aAAW,MAAM,KAAK,YAAY;AAChC,QAAI,EAAE,YAAY,IAAK;AACvB,UAAM,SAAU,GAA6B;AAC7C,QAAI,OAAO,SAAS,WAAY;AAEhC,QAAI,KAAK,cAAc,SAAS,cAAc,KAAK,cAAc,UAAU,OAAO;AAChF;AAEF,UAAM,MAAM,OAAO;AACnB,QAAI,KAAK,IAAI,GAAG,GAAG;AACjB,YAAM,WAAW,SAAS,KAAK,OAAK,EAAE,aAAa,GAAG;AACtD,UAAI,SAAU,UAAS,IAAI,KAAK,EAAE;AAClC;AAAA,IACF;AACA,SAAK,IAAI,GAAG;AAEZ,UAAM,MAAM,cAAc,GAAG;AAC7B,UAAM,KAAK,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAChD,UAAM,MAAM,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAEjD,aAAS,KAAK,EAAE,UAAU,KAAK,KAAK,IAAI,WAAW,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;AAAA,EACrE;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,IAAqB,UAAiC;AAC9E,QAAM,QAAkB,CAAC;AACzB,QAAM,QAAkB,CAAC;AAEzB,MAAI,GAAG,GAAI,OAAM,KAAK,OAAO,GAAG,EAAE,GAAG;AAGrC,QAAM,cAA0D,CAAC;AACjE,aAAW,MAAM,GAAG,KAAK;AACvB,QAAI,GAAG,OAAO,iBAAiB,GAAG,OAAO,cAAc,GAAG,OAAO,eAAe;AAC9E,YAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,YAAY,GAAG,SAAS;AAC7E,UAAI,UAAU;AACZ,oBAAY,KAAK,EAAE,WAAW,UAAU,WAAW,GAAG,UAAU,CAAC;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,WAAW,YAAY,IAAI,OAAK,GAAG,EAAE,SAAS,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,IAAI;AACjF,QAAI,GAAG,WAAW;AAChB,YAAM,KAAK,UAAU,GAAG,SAAS,GAAG;AACpC,YAAM,KAAK,aAAa,QAAQ,KAAK;AAAA,IACvC,OAAO;AACL,YAAM,KAAK,aAAa,QAAQ,KAAK;AAAA,IACvC;AAAA,EACF,WAAW,GAAG,WAAW;AACvB,UAAM,KAAK,UAAU,GAAG,SAAS,GAAG;AAAA,EACtC;AAGA,QAAM,UAAU,SAAS,OAAO,IAAI,GAAG,QAAQ;AAC/C,MAAI,SAAS;AACX,UAAM,KAAK,QAAQ,OAAO,GAAG;AAAA,EAC/B;AAGA,QAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,UAAU;AAG/D,QAAM,eAAe,SAAS,SAAS,IAAI,GAAG,WAAW,UAAU;AACnE,QAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,MAAM;AAE3D,QAAM,UAAU,MAAM,SAAS,IAAI,MAAM,MAAM,KAAK,GAAG,IAAI;AAC3D,QAAM,UAAU,eACZ,MAAM,YAAY,QAClB,WACE,MAAM,QAAQ,QACb,GAAG,MAAM;AAEhB,MAAI,UAAU;AACZ,UAAM,KAAK,IAAI,GAAG,GAAG,GAAG,OAAO,UAAU,QAAQ,KAAK,OAAO,KAAK,GAAG,GAAG,GAAG;AAAA,EAC7E,OAAO;AACL,UAAM,KAAK,IAAI,GAAG,GAAG,GAAG,OAAO,IAAI,OAAO,KAAK,GAAG,GAAG,GAAG;AAAA,EAC1D;AAEA,SAAO;AACT;;;ACpgBO,IAAM,iBAAN,MAAkD;AAAA,EAAlD;AACL,SAAS,YAAY;AAAA;AAAA,EAErB,OAAO,MAAoB,UAAkC,CAAC,GAAuB;AACnF,UAAM,gBAAgB,QAAQ,iBAAiB,sBAAsB,IAAI;AACzE,UAAM,KAAK,QAAQ,eAAe;AAElC,UAAM,WAAWC,mBAAkB,MAAM,EAAE;AAG3C,UAAM,cAAwB,CAAC;AAG/B,eAAW,SAAS,SAAS,QAAQ;AACnC,kBAAY,KAAK,OAAO,MAAM,IAAI,aAAa,MAAM,YAAY,GAAG;AAAA,IACtE;AAGA,eAAW,KAAK,SAAS,MAAM;AAC7B,UAAI,IAAI;AACN,oBAAY,KAAK,OAAO,EAAE,IAAI,eAAe;AAAA,MAC/C,OAAO;AACL,oBAAY,KAAK,OAAO,EAAE,IAAI,EAAE;AAAA,MAClC;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,SAAS,KAAK,SAAS,KAAK,SAAS,GAAG;AAC1D,kBAAY,KAAK,EAAE;AAAA,IACrB;AAGA,UAAM,cAAc,SAAS,WAAW,KAAK,QAAQ,KAAK,CAAC;AAC3D,UAAM,cAAc,KAAK,QAAQ,WAAW;AAC5C,gBAAY,KAAK,GAAG,WAAW,YAAY,WAAW,MAAM;AAE5D,eAAW,MAAM,KAAK,YAAY;AAChC,YAAM,UAAUC,uBAAsB,IAAI,QAAQ;AAClD,iBAAW,KAAK,SAAS;AACvB,oBAAY,KAAK,KAAK,CAAC,EAAE;AAAA,MAC3B;AAAA,IACF;AAEA,gBAAY,KAAK,GAAG;AAGpB,UAAM,gBAAgBC,kBAAiB,MAAM,UAAU,WAAW;AAGlE,UAAM,WAAW,KAAK,eAAe;AACrC,UAAM,QAAkB,CAAC;AACzB,UAAM,KAAK,UAAU,QAAQ,GAAG;AAChC,eAAW,KAAK,aAAa;AAC3B,YAAM,KAAK,KAAK,CAAC,EAAE;AAAA,IACrB;AACA,UAAM,KAAK,WAAW;AACtB,UAAM,KAAK,EAAE;AACb,eAAW,KAAK,eAAe;AAC7B,YAAM,KAAK,CAAC;AAAA,IACd;AACA,UAAM,KAAK,EAAE;AAGb,UAAM,QAAkB,CAAC;AACzB,QAAI,SAAS,OAAO,SAAS,EAAG,OAAM,KAAK,QAAQ;AAEnD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB,WAAW;AAAA,MACX,YAAY,KAAK;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AACF;AAyBA,SAASF,mBAAkB,MAAoB,IAA6B;AAC1E,QAAM,SAA4B,CAAC;AACnC,QAAM,OAAwB,CAAC;AAC/B,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,SAAS,oBAAI,IAAoB;AACvC,QAAM,aAAa,oBAAI,IAAY;AAEnC,aAAW,MAAM,KAAK,YAAY;AAChC,YAAQ,GAAG,IAAI;AAAA,MACb,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,OAAO,GAAG,WAAW,GAAG,MAAM;AACnD,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,MAAM,WAAW,GAAG,SAAS,CAAC;AAC3C,iBAAO,KAAK,EAAE,MAAM,cAAc,SAAS,WAAW,UAAU,GAAG,MAAM,EAAE,CAAC;AAC5E,mBAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,WAAW,IAAI;AAAA,QACpE;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,OAAO,GAAG,WAAW,GAAG,MAAM;AACnD,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,MAAM,WAAW,GAAG,SAAS,CAAC;AAC3C,gBAAM,UAAU,GAAG,OAAO,gBAAgB,SAAS;AACnD,iBAAO,KAAK,EAAE,MAAM,cAAc,SAAS,WAAW,UAAU,GAAG,MAAM,EAAE,CAAC;AAC5E,mBAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,WAAW,IAAI;AAAA,QACpE;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,aAAa;AACzB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,cAAc,GAAG,OAAO,SAAS,SAAS;AAAA,YAC1C,WAAW;AAAA,UACb,CAAC;AACD,mBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,QACpC;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,iBAAiB;AACpB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,aAAa;AACzB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,iBAAO,KAAK,EAAE,MAAM,cAAc,MAAM,WAAW,GAAG,CAAC;AACvD,mBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,QACpC;AACA;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,cAAM,MAAM,SAAS,GAAG;AACxB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,aAAa,GAAG,IAAI;AACjC,gBAAM,UAAU,UAAU,GAAG,KAAK;AAClC,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,cAAc,aAAa,GAAG,OAAO,OAAO;AAAA,YAC5C,WAAW,SAAS,GAAG;AAAA,UACzB,CAAC;AACD,mBAAS,IAAI,SAAS,GAAG,MAAM,IAAI;AAAA,QACrC;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,aAAa;AAChB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,cAAM,MAAM,SAAS;AACrB,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,qBAAW,IAAI,GAAG;AAClB,gBAAM,OAAO,gBAAgB,GAAG,QAAQ,OAAO;AAC/C,iBAAO,KAAK,EAAE,MAAM,cAAc,KAAK,WAAW,GAAG,CAAC;AACtD,mBAAS,IAAI,KAAK,QAAQ,IAAI;AAAA,QAChC;AACA;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,YAAI,GAAG,QAAQ;AACb,gBAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,gBAAM,MAAM,aAAa;AACzB,cAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,uBAAW,IAAI,GAAG;AAClB,kBAAM,OAAO,gBAAgB,GAAG,QAAQ,SAAS;AACjD,mBAAO,KAAK,EAAE,MAAM,cAAc,MAAM,WAAW,GAAG,CAAC;AACvD,qBAAS,IAAI,KAAK,YAAY,IAAI;AAAA,UACpC;AAAA,QACF;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,YAAI,CAAC,OAAO,IAAI,EAAE,GAAG;AACnB,gBAAM,OAAO,cAAc,GAAG,MAAM;AACpC,eAAK,KAAK,EAAE,MAAM,WAAW,GAAG,CAAC;AACjC,iBAAO,IAAI,IAAI,IAAI;AAAA,QACrB;AACA;AAAA,MACF;AAAA,MAEA,KAAK,gBAAgB;AACnB,cAAM,KAAK,UAAU,GAAG,MAAM;AAC9B,YAAI,CAAC,OAAO,IAAI,EAAE,GAAG;AACnB,gBAAM,OAAO,cAAc,GAAG,MAAM;AACpC,eAAK,KAAK,EAAE,MAAM,WAAW,GAAG,CAAC;AACjC,iBAAO,IAAI,IAAI,IAAI;AAAA,QACrB;AACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,MAAM,UAAU,QAAQ,GAAG;AAC9C;AAMA,SAASC,uBAAsB,IAAuB,UAAoC;AACxF,UAAQ,GAAG,IAAI;AAAA,IACb,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,aAAO,CAAC,GAAG,YAAY,OAAO,OAAO,YAAY,OAAO,EAAE;AAAA,IAC5D;AAAA,IAEA,KAAK,YAAY;AACf,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,aAAO,CAAC,GAAG,YAAY,OAAO,SAAS;AAAA,IACzC;AAAA,IAEA,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,GAAG,SAAS;AACtF,aAAO,CAAC,GAAG,YAAY,OAAO,UAAU;AAAA,IAC1C;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,SAAS;AAAA,IAC3C;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,UAAU;AAAA,IAC5C;AAAA,IAEA,KAAK,cAAc;AACjB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,OAAOE,cAAa,GAAG,OAAO,CAAC,GAAG;AAAA,IACpE;AAAA,IAEA,KAAK,iBAAiB;AACpB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,aAAO,CAAC,GAAG,YAAY,SAAS,QAAQA,cAAa,GAAG,OAAO,CAAC,GAAG;AAAA,IACrE;AAAA,IAEA,KAAK,eAAe;AAClB,YAAM,WAAW,SAAS,SAAS,IAAI,SAAS,GAAG,IAAI;AACvD,YAAM,MAAM,UAAU,GAAG,KAAK,IAAI,GAAG,QAAQ,IAAIA,cAAa,GAAG,KAAK,CAAC;AACvE,aAAO,CAAC,GAAG,YAAY,OAAO,MAAM,GAAG,EAAE;AAAA,IAC3C;AAAA,IAEA,KAAK,aAAa;AAChB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,MAAM;AACpE,aAAO,CAAC,GAAG,YAAY,OAAO,OAAO,GAAG,MAAM,EAAE;AAAA,IAClD;AAAA,IAEA,KAAK,aAAa;AAChB,YAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,MAAM;AACpE,aAAO,CAAC,GAAG,YAAY,OAAO,OAAO,GAAG,MAAM,EAAE;AAAA,IAClD;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,2BAA2BA,cAAa,GAAG,GAAG,CAAC,GAAG;AAAA,IAE5D,KAAK;AACH,aAAO,CAAC,uBAAuB;AAAA,IAEjC,KAAK;AACH,aAAO,CAAC,0BAA0B;AAAA,IAEpC,KAAK,SAAS;AACZ,YAAM,QAAkB,CAAC;AACzB,YAAM,KAAK,iCAAiCA,cAAa,GAAG,GAAG,CAAC,IAAI;AACpE,UAAI,GAAG,WAAW,QAAQ;AACxB,cAAM,KAAK,oCAAoC;AAAA,MACjD,OAAO;AACL,cAAM,KAAK,oCAAoC;AAAA,MACjD;AACA,UAAI,GAAG,QAAQ;AACb,cAAM,WAAW,SAAS,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,UAAU;AACxE,YAAI,GAAG,WAAW,QAAQ;AACxB,gBAAM,KAAK,GAAG,YAAY,SAAS,yBAAyB;AAAA,QAC9D,OAAO;AACL,gBAAM,KAAK,GAAG,YAAY,SAAS,SAAS;AAAA,QAC9C;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,oDAAoD,GAAG,UAAU,IAAI;AAAA,IAE/E,KAAK,SAAS;AACZ,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO,CAAC,GAAG,WAAW,KAAK,WAAW;AAAA,IACxC;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO,CAAC,GAAG,WAAW,KAAK,UAAU;AAAA,IACvC;AAAA,IAEA,KAAK,gBAAgB;AACnB,YAAM,UAAU,SAAS,OAAO,IAAI,UAAU,GAAG,MAAM,CAAC;AACxD,aAAO;AAAA,QACL,GAAG,WAAW,KAAK,oCAAoCA,cAAa,GAAG,SAAS,CAAC;AAAA,MACnF;AAAA,IACF;AAAA,IAEA,KAAK;AACH,aAAO,CAAC,eAAe,GAAG,OAAO,IAAI,OAAK,IAAIA,cAAa,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG;AAAA,IAEjF;AACE,aAAO,CAAC,mBAAoB,GAAyB,EAAE,EAAE;AAAA,EAC7D;AACF;AAMA,SAASD,kBACP,MACA,UACA,aACU;AACV,QAAM,QAAkB,CAAC;AACzB,QAAM,WAAWE,uBAAsB,IAAI;AAC3C,QAAM,YAAY,KAAK,KAAK,QAAQ,KAAK;AAGzC,QAAM,aAAa,gBAAgB,IAAI;AACvC,QAAM,eAAyB,CAAC,GAAG,SAAS,KAAK,WAAW,GAAG;AAG/D,QAAM,kBAAkB,mBAAmB,MAAM,SAAS,QAAQ;AAClE,aAAW,KAAK,iBAAiB;AAC/B,iBAAa,KAAK,SAAS,EAAE,SAAS,KAAK,EAAE,SAAS,GAAG;AAAA,EAC3D;AAEA,QAAM,iBAAiB,oBAAoB,IAAI;AAC/C,QAAM,KAAK,IAAI,UAAU,IAAI,aAAa,KAAK,GAAG,CAAC,IAAI,cAAc,KAAK,UAAU,GAAG;AAGvF,aAAW,MAAM,UAAU;AACzB,UAAM,UAAU,oBAAoB,IAAI,QAAQ;AAChD,eAAW,KAAK,SAAS;AACvB,YAAM,KAAK,CAAC;AAAA,IACd;AAAA,EACF;AAEA,SAAO;AACT;AAUA,SAASA,uBAAsB,MAAuC;AACpE,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,WAA8B,CAAC;AAErC,aAAW,MAAM,KAAK,YAAY;AAChC,QAAI,EAAE,YAAY,IAAK;AACvB,UAAM,SAAU,GAA6B;AAC7C,QAAI,OAAO,SAAS,WAAY;AAEhC,QAAI,KAAK,cAAc,SAAS,cAAc,KAAK,cAAc,UAAU,OAAO;AAChF;AAEF,UAAM,MAAM,OAAO;AACnB,QAAI,KAAK,IAAI,GAAG,GAAG;AACjB,YAAM,WAAW,SAAS,KAAK,OAAK,EAAE,aAAa,GAAG;AACtD,UAAI,SAAU,UAAS,IAAI,KAAK,EAAE;AAClC;AAAA,IACF;AACA,SAAK,IAAI,GAAG;AAEZ,UAAM,MAAM,cAAc,GAAG;AAC7B,UAAM,KAAK,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAChD,UAAM,MAAM,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAEjD,aAAS,KAAK,EAAE,UAAU,KAAK,KAAK,IAAI,WAAW,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;AAAA,EACrE;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,IAAqB,UAAoC;AACpF,QAAM,QAAkB,CAAC;AACzB,QAAM,QAAkB,CAAC;AAEzB,MAAI,GAAG,GAAI,OAAM,KAAK,OAAO,GAAG,EAAE,GAAG;AAGrC,QAAM,cAA0D,CAAC;AACjE,aAAW,MAAM,GAAG,KAAK;AACvB,QAAI,GAAG,OAAO,iBAAiB,GAAG,OAAO,cAAc,GAAG,OAAO,eAAe;AAC9E,YAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,YAAY,GAAG,SAAS;AAC7E,UAAI,UAAU;AACZ,oBAAY,KAAK,EAAE,WAAW,UAAU,WAAW,GAAG,UAAU,CAAC;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,GAAG,WAAW;AAChB,UAAM,KAAK,UAAU,GAAG,SAAS,GAAG;AAAA,EACtC;AACA,aAAW,KAAK,aAAa;AAC3B,UAAM,KAAK,SAAS,EAAE,SAAS,KAAK,EAAE,SAAS,GAAG;AAAA,EACpD;AAGA,QAAM,UAAU,SAAS,OAAO,IAAI,GAAG,QAAQ;AAC/C,MAAI,SAAS;AACX,UAAM,KAAK,cAAc,OAAO,GAAG;AAAA,EACrC;AAGA,QAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,UAAU;AAG/D,QAAM,eAAe,SAAS,SAAS,IAAI,GAAG,WAAW,UAAU;AACnE,QAAM,WAAW,SAAS,SAAS,IAAI,GAAG,WAAW,MAAM;AAE3D,QAAM,UAAU,MAAM,SAAS,IAAI,MAAM,MAAM,KAAK,GAAG,IAAI;AAC3D,QAAM,UAAU,eAAe,IAAI,YAAY,MAAM,WAAW,IAAI,QAAQ,MAAO,GAAG,MAAM;AAE5F,QAAM,cAAc,IAAI,GAAG,GAAG,GAAG,OAAO,IAAI,OAAO,KAAK,GAAG,GAAG;AAE9D,MAAI,UAAU;AACZ,UAAM,KAAK,QAAQ,QAAQ,GAAG;AAC9B,UAAM,KAAK,KAAK,WAAW,EAAE;AAC7B,UAAM,KAAK,OAAO;AAAA,EACpB,OAAO;AACL,UAAM,KAAK,WAAW;AAAA,EACxB;AAEA,SAAO;AACT;;;AC7bO,IAAM,qBAAN,MAAM,oBAAmB;AAAA,EActB,YAAY,UAA0B,CAAC,GAAG;AAZlD,SAAQ,cAA2E;AACnF,SAAQ,0BAA0D;AAElE;AAAA,SAAQ,WAAiE;AAKzE;AAAA;AAAA;AAAA;AAAA,SAAQ,cAA0D;AAKhE,SAAK,sBAAsB,QAAQ,uBAAuB;AAG1D,SAAK,gBAAgB,IAAI;AAAA,MACvB,OAAO,QAAQ,QAAQ,iBAAiB,EAAE,YAAY,IAAI,mBAAmB,EAAE,CAAC;AAAA,IAClF;AACA,SAAK,qBAAqB,IAAI;AAAA,MAC5B,OAAO;AAAA,QACL,QAAQ,sBAAsB;AAAA,UAC5B,OAAO,IAAI,cAAc;AAAA,UACzB,KAAK,IAAI,YAAY;AAAA,UACrB,QAAQ,IAAI,eAAe;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,WAAmB,UAA8B;AACpE,SAAK,cAAc,IAAI,WAAW,QAAQ;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,0BAA0B,WAAmB,UAAmC;AAC9E,SAAK,mBAAmB,IAAI,WAAW,QAAQ;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,OAAO,UAA0B,CAAC,GAAgC;AAC7E,UAAM,UAAU,IAAI,oBAAmB,OAAO;AAG9C,UAAM,WAAW,MAAM,OAAO,sBAAsB;AAGpD,mBAAe;AAAA,MACb,eAAe,SAAS;AAAA,MACxB,eAAe,SAAS;AAAA,MACxB,kBAAkB,SAAS;AAAA,IAC7B,CAAC;AAID,mBAAe;AAAA,MACb,wBACE,SAAS;AAAA,IACb,CAAC;AAGD,YAAQ,cAAc,SAAS;AAC/B,YAAQ,0BAA0B,SAAS;AAC3C,YAAQ,WAAW,SAAS;AAK5B,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,mBAAmB;AAC/C,aAAO,SAAS,GAAG,OAAO,UAAU;AACpC,cAAQ,cAAc,YAAU;AAC9B,YAAI;AACF,iBAAO,OAAO,IAAI,MAAM,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC,KAAK;AAAA,QACvE,SAAS,GAAG;AACV,kBAAQ,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC,KAAK;AAAA,QACxE;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,iBACN,SACA,YACmB;AACnB,QAAI,CAAC,KAAK,eAAe,WAAW,WAAW,aAAa,CAAC,QAAQ,KAAM,QAAO;AAClF,UAAM,WAAW,QAAQ,YAAY;AACrC,UAAM,UAAU,aAAa,QAAQ,SAAS,WAAW,KAAK;AAC9D,QAAI,SAAS,QAAQ;AACrB,QAAI,CAAC,SAAS;AACZ,UAAI,CAAC,KAAK,YAAY,CAAC,WAAW,KAAM,QAAO;AAC/C,UAAI;AACF,iBAAS,KAAK,SAAS,WAAW,MAAM,IAAI;AAAA,MAC9C,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,YAAY,MAAM;AACrC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS,UACL,uCAAuC,KAAK,KAC5C,8CAA8C,MAAM,MAAM,KAAK;AAAA,MACnE,YACE;AAAA,IAEJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAS,SAA6C;AACpD,UAAM,cAA4B,CAAC;AAGnC,UAAM,aAAa,UAAU,OAAO;AACpC,gBAAY,KAAK,GAAG,WAAW,WAAW;AAE1C,QAAI,CAAC,WAAW,MAAM;AACpB,aAAO,EAAE,IAAI,OAAO,YAAY;AAAA,IAClC;AAGA,UAAM,YAAY,QAAQ,cAAc,KAAK;AAC7C,UAAM,aAAa,mBAAmB,WAAW,MAAM,WAAW,YAAY,SAAS;AACvF,gBAAY,KAAK,GAAG,WAAW,WAAW;AAE1C,UAAM,gBAAgB,WAAW,OAAO,KAAK,iBAAiB,SAAS,UAAU,IAAI;AACrF,QAAI,cAAe,aAAY,KAAK,aAAa;AACjD,UAAM,KAAK,WAAW,QAAQ,CAAC;AAE/B,UAAM,eAAe,KAAK,mBAAmB,WAAW,IAAI,IAAI;AAEhE,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV,YAAY,WAAW;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,SAA8C;AACtD,QAAI,CAAC,KAAK,aAAa;AACrB,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,aAAa;AAAA,UACX;AAAA,YACE,UAAU;AAAA,YACV,MAAM;AAAA,YACN,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,KAAK,YAAY,QAAQ,MAAM,QAAQ,MAAM,QAAQ,EAAE;AAKtE,UAAI;AACJ,UAAI,QAAQ,WAAW,OAAO;AAC5B,uBAAe,KAAK,cAAc;AAAA,UAChC,WAAW,EAAE,MAAM,QAAQ,MAAM,UAAU,QAAQ,KAAK;AAAA,UACxD,WAAW,EAAE,MAAM,QAAQ,UAAU,QAAQ,GAAG;AAAA,QAClD,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,GAAI,iBAAiB,SAAY,EAAE,aAAa,IAAI,CAAC;AAAA,QACrD,aAAa,KAAK,sBAAsB,OAAO;AAAA,MACjD;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,aAAa;AAAA,UACX;AAAA,YACE,UAAU;AAAA,YACV,MAAM;AAAA,YACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAChE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,sBAAsB,SAAyC;AACrE,UAAM,WAAW,KAAK,0BAA0B,QAAQ,MAAM,QAAQ,MAAM,QAAQ,EAAE,KAAK,CAAC;AAC5F,WAAO,SAAS,IAAI,cAAY;AAAA,MAC9B,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS,QAAQ;AAAA,MACjB,YAAY,QAAQ,SAChB,YAAY,QAAQ,IAAI,WAAW,QAAQ,MAAM,qBAAqB,QAAQ,YAAY,MAAM,gCAChG,YAAY,QAAQ,IAAI;AAAA,IAC9B,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,SAAoC;AAChD,UAAM,cAA4B,CAAC;AAGnC,UAAM,aAAa,UAAU;AAAA,MAC3B,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,YAAY,QAAQ;AAAA,IACtB,CAAC;AACD,gBAAY,KAAK,GAAG,WAAW,WAAW;AAE1C,QAAI,CAAC,WAAW,MAAM;AACpB,aAAO,EAAE,IAAI,OAAO,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,YAAY;AAAA,IAC7D;AAGA,UAAM,YAAY,QAAQ,cAAc,KAAK;AAC7C,UAAM,aAAa,mBAAmB,WAAW,MAAM,WAAW,YAAY,SAAS;AACvF,gBAAY,KAAK,GAAG,WAAW,WAAW;AAE1C,QAAI,CAAC,WAAW,MAAM;AACpB,aAAO,EAAE,IAAI,OAAO,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,YAAY;AAAA,IAC7D;AAGA,UAAM,OAAO,kBAAkB,WAAW,IAAI;AAE9C,QAAI,KAAK,WAAW,WAAW,GAAG;AAChC,kBAAY,KAAK;AAAA,QACf,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AACD,aAAO,EAAE,IAAI,OAAO,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,YAAY;AAAA,IAC7D;AAGA,QAAI,CAAC,KAAK,UAAU,QAAQ,MAAM;AAChC,WAAK,SAAS,QAAQ;AAAA,IACxB;AAGA,UAAM,gBAAgB,QAAQ,aAAa;AAC3C,UAAM,WAAW,KAAK,cAAc,IAAI,aAAa;AACrD,QAAI,CAAC,UAAU;AACb,kBAAY,KAAK;AAAA,QACf,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,8CAA8C,aAAa,iBAAiB,CAAC,GAAG,KAAK,cAAc,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MAChI,CAAC;AACD,aAAO,EAAE,IAAI,OAAO,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,YAAY;AAAA,IAC7D;AAEA,UAAM,YAAY,SAAS,OAAO,MAAM;AAAA,MACtC,UAAU,QAAQ;AAAA,MAClB,YAAY,QAAQ;AAAA,MACpB,aAAa,QAAQ,QAAQ,QAAQ;AAAA,IACvC,CAAC;AAED,UAAM,eAAe,mBAAmB,WAAW,IAAI;AAEvD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,QACL;AAAA,UACE,MAAM,UAAU;AAAA,UAChB,MAAM,UAAU;AAAA,UAChB,MAAM,UAAU;AAAA,UAChB,WAAW,UAAU;AAAA,QACvB;AAAA,MACF;AAAA,MACA,YAAY,KAAK;AAAA,MACjB,UAAU;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAkB,SAA8C;AAC9D,UAAM,cAA4B,CAAC;AAGnC,UAAM,aAAa,UAAU;AAAA,MAC3B,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,YAAY,QAAQ;AAAA,IACtB,CAAC;AACD,gBAAY,KAAK,GAAG,WAAW,WAAW;AAE1C,QAAI,CAAC,WAAW,MAAM;AACpB,aAAO,EAAE,IAAI,OAAO,YAAY,CAAC,GAAG,YAAY;AAAA,IAClD;AAGA,UAAM,YAAY,QAAQ,cAAc,KAAK;AAC7C,UAAM,aAAa,mBAAmB,WAAW,MAAM,WAAW,YAAY,SAAS;AACvF,gBAAY,KAAK,GAAG,WAAW,WAAW;AAE1C,QAAI,CAAC,WAAW,MAAM;AACpB,aAAO,EAAE,IAAI,OAAO,YAAY,CAAC,GAAG,YAAY;AAAA,IAClD;AAGA,UAAM,OAAO,kBAAkB,WAAW,IAAI;AAE9C,QAAI,KAAK,WAAW,WAAW,GAAG;AAChC,kBAAY,KAAK;AAAA,QACf,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AACD,aAAO,EAAE,IAAI,OAAO,YAAY,CAAC,GAAG,YAAY;AAAA,IAClD;AAEA,QAAI,CAAC,KAAK,UAAU,QAAQ,MAAM;AAChC,WAAK,SAAS,QAAQ;AAAA,IACxB;AAGA,UAAM,gBAAgB,QAAQ,aAAa;AAC3C,UAAM,WAAW,KAAK,mBAAmB,IAAI,aAAa;AAC1D,QAAI,CAAC,UAAU;AACb,kBAAY,KAAK;AAAA,QACf,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,mDAAmD,aAAa,iBAAiB,CAAC,GAAG,KAAK,mBAAmB,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MAC1I,CAAC;AACD,aAAO,EAAE,IAAI,OAAO,YAAY,CAAC,GAAG,YAAY;AAAA,IAClD;AACA,UAAM,YAAY,SAAS,OAAO,MAAM;AAAA,MACtC,eAAe,QAAQ;AAAA,MACvB,YAAY,QAAQ;AAAA,IACtB,CAAC;AAED,UAAM,eAAe,mBAAmB,WAAW,IAAI;AAEvD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,WAAW;AAAA,QACT,MAAM,UAAU;AAAA,QAChB,MAAM,UAAU;AAAA,QAChB,OAAO,UAAU;AAAA,QACjB,WAAW,UAAU;AAAA,MACvB;AAAA,MACA,YAAY,KAAK;AAAA,MACjB,UAAU;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAK,SAAoC;AACvC,UAAM,cAA4B,CAAC;AACnC,UAAM,YAAY,QAAQ,cAAc,KAAK;AAG7C,UAAM,QAAQ,UAAU;AAAA,MACtB,MAAM,QAAQ,EAAE;AAAA,MAChB,UAAU,QAAQ,EAAE;AAAA,MACpB,UAAU,QAAQ,EAAE;AAAA,MACpB,UAAU,QAAQ,EAAE;AAAA,MACpB,YAAY,QAAQ;AAAA,IACtB,CAAC;AACD,gBAAY,KAAK,GAAG,MAAM,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,OAAO,EAAE,OAAO,GAAG,EAAE,CAAC;AAEvF,UAAM,QAAQ,UAAU;AAAA,MACtB,MAAM,QAAQ,EAAE;AAAA,MAChB,UAAU,QAAQ,EAAE;AAAA,MACpB,UAAU,QAAQ,EAAE;AAAA,MACpB,UAAU,QAAQ,EAAE;AAAA,MACpB,YAAY,QAAQ;AAAA,IACtB,CAAC;AACD,gBAAY,KAAK,GAAG,MAAM,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,OAAO,EAAE,OAAO,GAAG,EAAE,CAAC;AAEvF,QAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,MAAM;AAC9B,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY,CAAC;AAAA,QACb,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,UAAM,QAAQ,mBAAmB,MAAM,MAAM,MAAM,YAAY,SAAS;AACxE,gBAAY,KAAK,GAAG,MAAM,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,OAAO,EAAE,OAAO,GAAG,EAAE,CAAC;AAEvF,UAAM,QAAQ,mBAAmB,MAAM,MAAM,MAAM,YAAY,SAAS;AACxE,gBAAY,KAAK,GAAG,MAAM,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,OAAO,EAAE,OAAO,GAAG,EAAE,CAAC;AAEvF,QAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,MAAM;AAC9B,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY,CAAC;AAAA,QACb,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,UAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,UAAM,QAAQ,kBAAkB,MAAM,IAAI;AAG1C,UAAM,SAAS,cAAc,OAAO,KAAK;AAEzC,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,WAAW,OAAO;AAAA,MAClB,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,MACnB,SAAS,OAAO;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cAAc,SAAsC;AAClD,UAAM,cAA4B,CAAC;AACnC,UAAM,YAAY,QAAQ,cAAc,KAAK;AAE7C,UAAM,UAAU,UAAU,EAAE,GAAG,QAAQ,WAAW,YAAY,QAAQ,WAAW,CAAC;AAClF,gBAAY;AAAA,MACV,GAAG,QAAQ,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,eAAe,EAAE,OAAO,GAAG,EAAE;AAAA,IACjF;AACA,UAAM,WAAW,UAAU,EAAE,GAAG,QAAQ,WAAW,YAAY,QAAQ,WAAW,CAAC;AACnF,gBAAY;AAAA,MACV,GAAG,SAAS,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,eAAe,EAAE,OAAO,GAAG,EAAE;AAAA,IAClF;AAEA,QAAI,CAAC,QAAQ,QAAQ,CAAC,SAAS,MAAM;AACnC,aAAO,EAAE,IAAI,OAAO,YAAY;AAAA,IAClC;AAEA,UAAM,UAAU,mBAAmB,QAAQ,MAAM,QAAQ,YAAY,SAAS;AAC9E,UAAM,WAAW,mBAAmB,SAAS,MAAM,SAAS,YAAY,SAAS;AACjF,gBAAY;AAAA,MACV,GAAG,QAAQ,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,eAAe,EAAE,OAAO,GAAG,EAAE;AAAA,IACjF;AACA,gBAAY;AAAA,MACV,GAAG,SAAS,YAAY,IAAI,QAAM,EAAE,GAAG,GAAG,SAAS,eAAe,EAAE,OAAO,GAAG,EAAE;AAAA,IAClF;AACA,QAAI,CAAC,QAAQ,QAAQ,CAAC,SAAS,MAAM;AACnC,aAAO,EAAE,IAAI,OAAO,YAAY;AAAA,IAClC;AAQA,UAAM,YAAY,IAAI,UACpB,MAAM,KAAK,QAAM,GAAG,KAAK,OAAK,EAAE,SAAS,kBAAkB,CAAC;AAC9D,UAAM,oBAAoB,CAAC,UAAU,QAAQ,aAAa,QAAQ,WAAW;AAC7E,UAAM,oBAAoB,CAAC,UAAU,SAAS,aAAa,SAAS,WAAW;AAC/E,QAAI,CAAC,qBAAqB,CAAC,mBAAmB;AAC5C,YAAM,QAAQ,CAAC,CAAC,qBAAqB,aAAa,CAAC,qBAAqB,WAAW,EAChF,OAAO,OAAO,EACd,KAAK,OAAO;AACf,kBAAY,KAAK;AAAA,QACf,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,OAAO,KAAK;AAAA,QACrB,YACE;AAAA,MAEJ,CAAC;AAAA,IACH;AAEA,UAAM,aAAS,4BAAW,QAAQ,MAAM,SAAS,IAAI;AACrD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,MACH,UAAU,OAAO,YAAY,qBAAqB;AAAA,MAClD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,SAAS,SAAqD;AAClE,UAAM,EAAE,KAAK,QAAQ,KAAK,IAAI;AAC9B,UAAM,cAA4B,CAAC;AAEnC,UAAM,SAAS,IAAI,UAAU,EAAE,WAAW,GAAG;AAG7C,QAAI,WAAW,kBAAkB;AAC/B,UAAI;AACF,cAAM,EAAE,eAAe,gBAAgB,sBAAAC,uBAAsB,kBAAAC,kBAAiB,IAC5E,MAAM,OAAO,uBAAuB;AAEtC,YAAI,OAA4D;AAEhE,YAAI,QAAQ;AACV,cAAI;AACJ,cAAI;AACF,qBAAS,KAAK,MAAM,GAAG;AAAA,UACzB,QAAQ;AACN,mBAAO;AAAA,cACL,IAAI;AAAA,cACJ,aAAa;AAAA,gBACX,EAAE,UAAU,SAAS,MAAM,gBAAgB,SAAS,wBAAwB;AAAA,cAC9E;AAAA,YACF;AAAA,UACF;AACA,gBAAM,aAAaD,sBAAqB,MAAiC;AACzE,qBAAW,KAAK,YAAY;AAC1B,wBAAY,KAAK;AAAA,cACf,UAAU,EAAE;AAAA,cACZ,MAAM,EAAE;AAAA,cACR,SAAS,EAAE;AAAA,YACb,CAAC;AAAA,UACH;AACA,cAAI,CAAC,WAAW,KAAK,OAAK,EAAE,aAAa,OAAO,GAAG;AACjD,mBAAOC,kBAAiB,MAAgD;AAAA,UAC1E;AAAA,QACF,OAAO;AACL,cAAI;AACF,mBAAO,cAAc,GAAG;AAAA,UAC1B,SAAS,GAAG;AACV,mBAAO;AAAA,cACL,IAAI;AAAA,cACJ,aAAa;AAAA,gBACX;AAAA,kBACE,UAAU;AAAA,kBACV,MAAM;AAAA,kBACN,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,gBACpD;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,CAAC,MAAM;AACT,iBAAO,EAAE,IAAI,OAAO,YAAY;AAAA,QAClC;AAEA,cAAM,WAAW,eAAe,IAAI;AACpC,cAAM,cAAc,KAAK,UAAU,UAAU,MAAM,CAAC;AACpD,cAAM,cAAc,OAAO,cAAc,KAAK,QAAQ,QAAQ,OAAO,CAAC;AAAA,IAAW;AAUjF,YAAI,cAAc;AAClB,YAAI,KAAK,SAAS,iBAAiB;AACjC,gBAAM,aAAa,KAAK,MAAM,IAAI,OAAO;AACzC,cACE,cACA,WAAW,SAAS,aACpB,OAAO,WAAW,UAAU,YAC5B,WAAW,MAAM,SAAS,GAC1B;AACA,0BAAc,WAAW;AAAA,UAC3B;AAAA,QACF;AACA,cAAM,iBAAiB,YAAY,QAAQ,MAAM,QAAQ;AAEzD,cAAM,SAAS;AAAA,UACb,GAAG,WAAW,wBAAwB,cAAc;AAAA,UACpD;AAAA,UACA,YACG,MAAM,IAAI,EACV,IAAI,OAAK,OAAO,CAAC,EAAE,EACnB,KAAK,IAAI;AAAA,UACZ;AAAA,UACA;AAAA,QACF,EAAE,KAAK,IAAI;AAEX,cAAM,eAAe,mBAAmB,IAAI;AAE5C,eAAO,EAAE,IAAI,MAAM,QAAQ,UAAU,cAAc,YAAY;AAAA,MACjE,SAAS,GAAG;AACV,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,YACX;AAAA,cACE,UAAU;AAAA,cACV,MAAM;AAAA,cACN,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,YACpD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAIA,UAAM,mBAAmB,CAAC,SAAS,OAAO,QAAQ;AAGlD,QAAK,iBAAuC,SAAS,MAAM,GAAG;AAC5D,YAAM,mBAAqC,SACvC,EAAE,UAAU,KAAK,MAAM,GAAG,EAAkB,IAC5C,EAAE,UAAU,IAAI;AACpB,YAAM,SAAS,KAAK,kBAAkB;AAAA,QACpC,GAAG;AAAA,QACH,WAAW;AAAA,MACb,CAAC;AACD,aAAO;AAAA,QACL,IAAI,OAAO;AAAA,QACX,QAAQ,OAAO,WAAW;AAAA,QAC1B,UAAU,OAAO;AAAA,QACjB,aAAa,OAAO;AAAA,MACtB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,aAAa;AAAA,QACX;AAAA,UACE,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS,mBAAmB,OAAO,MAAM,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AASA,SAAS,2BAA2B,GAAoB;AACtD,MAAI,CAAC,KAAK,OAAO,MAAM,SAAU,QAAO;AACxC,QAAM,KAAK;AAOX,MAAI,GAAG,SAAS,iBAAiB;AAC/B,WAAO,GAAG,2BAA2B,GAAG,MAAM,CAAC,IAAI,GAAG,YAAY,EAAE;AAAA,EACtE;AACA,SAAO,OAAO,GAAG,SAAS,GAAG,OAAO,EAAE;AACxC;AAKA,SAAS,mBAAmB,MAAyC;AACnE,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAE9C,QAAM,IAAI;AAQV,MAAI,CAAC,EAAE,OAAQ,QAAO;AAEtB,QAAM,QAA2C,CAAC;AAElD,MAAI,EAAE,SAAS,OAAO,EAAE,MAAM,YAAY,YAAY;AACpD,eAAW,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,QAAQ,GAAG;AAC7C,UAAI,SAAS,QAAS;AACtB,YAAM,IAAI;AACV,UAAI,KAAK,EAAE,MAAM;AACf,YAAI,EAAE,SAAS,iBAAiB;AAC9B,gBAAM,IAAI,IAAI;AAAA,YACZ,MAAM;AAAA,YACN,OAAO,2BAA2B,CAAC;AAAA,UACrC;AAAA,QACF,OAAO;AACL,gBAAM,YAAY,EAAE;AACpB,gBAAM,IAAI,IAAI;AAAA,YACZ,MAAO,CAAC,YAAY,WAAW,aAAa,YAAY,EAAE,SAAS,SAAS,IACxE,YACA;AAAA,YACJ,OAAQ,EAAE,SAAS,EAAE,OAAO;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,EAAE,SAAS,mBAAmB,EAAE,WAAW,MAAM;AACnD,UAAM,YACJ,EAAE,SAAS,OAAO,EAAE,MAAM,QAAQ,aAC7B,EAAE,MAAM,IAAI,OAAO,IACpB;AAGN,QAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,GAAG;AAC/B,YAAM,WAAW,mBAAmB,EAAE,KAAK,CAAC,CAAC;AAC7C,UAAI,UAAU;AACZ,iBAAS,UAAU;AAAA,UACjB,OAAO,YAAY,SAAS;AAAA,UAC5B,WAAW,EAAE;AAAA,QACf;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ,EAAE;AAAA,MACV;AAAA,MACA,SAAS;AAAA,QACP,OAAO,YAAY,SAAS;AAAA,QAC5B,WAAW,EAAE;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,EAAE,QAAQ,MAAM;AACnC;AAQO,SAAS,YAAY,WAAmE;AAC7F,QAAM,OAAO,WAAW,SAAS,WAAW;AAC5C,SAAO,OAAO,SAAS,YAAY,KAAK,SAAS,IAAI,OAAO;AAC9D;;;ACj2BO,SAAS,UAAU,WAAmB,KAAK,MAAyB;AACzE,SAAO,OAAO,GAAG,SAAS;AACxB,UAAM,gBAAgB,EAAE,IAAI,OAAO,gBAAgB;AACnD,QAAI,iBAAiB,SAAS,eAAe,EAAE,IAAI,UAAU;AAC3D,aAAO,EAAE;AAAA,QACP;AAAA,UACE,IAAI;AAAA,UACJ,aAAa;AAAA,YACX;AAAA,cACE,UAAU;AAAA,cACV,MAAM;AAAA,cACN,SAAS,wBAAwB,QAAQ;AAAA,YAC3C;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACF;;;ACpBO,SAAS,QAAQ,KAAa,KAA2B;AAC9D,SAAO,OAAO,GAAG,SAAS;AACxB,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,EAAE;AAErD,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,KAAK;AAAA,QAChC,KAAK;AAAA,QACL,IAAI,QAAe,CAAC,GAAG,WAAW;AAChC,qBAAW,OAAO,iBAAiB,SAAS,MAAM;AAChD,mBAAO,IAAI,MAAM,iBAAiB,CAAC;AAAA,UACrC,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AACD,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,UAAI,eAAe,SAAS,IAAI,YAAY,mBAAmB;AAC7D,eAAO,EAAE;AAAA,UACP;AAAA,YACE,IAAI;AAAA,YACJ,aAAa;AAAA,cACX;AAAA,gBACE,UAAU;AAAA,gBACV,MAAM;AAAA,gBACN,SAAS,2BAA2B,EAAE;AAAA,cACxC;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM;AAAA,IACR,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AACF;;;AC5BO,SAAS,mBAAsC;AACpD,SAAO,OAAO,GAAG,SAAS;AACxB,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,KAAK;AACX,UAAM,aAAa,KAAK,IAAI,IAAI;AAEhC,UAAM,QAAkB;AAAA,MACtB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,QAAQ,EAAE,IAAI;AAAA,MACd,MAAM,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE;AAAA,MACzB,QAAQ,EAAE,IAAI;AAAA,MACd;AAAA,IACF;AAEA,YAAQ,IAAI,KAAK,UAAU,KAAK,CAAC;AAAA,EACnC;AACF;;;AjB0BO,SAAS,UAAU,UAAuB,CAAC,GAAS;AACzD,QAAM,MAAM,IAAI,iBAAK;AAGrB,MAAI,UAAqC,QAAQ,WAAW;AAC5D,MAAI,cAAkD;AAEtD,iBAAe,aAA0C;AACvD,QAAI,QAAS,QAAO;AACpB,QAAI,CAAC,aAAa;AAChB,oBAAc,mBAAmB,OAAO,EAAE,KAAK,OAAK;AAClD,kBAAU;AACV,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAIA,MAAI,IAAI,SAAK,kBAAK,EAAE,QAAQ,QAAQ,cAAc,IAAI,CAAC,CAAC;AAGxD,MAAI,QAAQ,YAAY;AACtB,QAAI,IAAI,KAAK,UAAU,QAAQ,YAAY,CAAC;AAC5C,QAAI,IAAI,KAAK,QAAQ,QAAQ,SAAS,CAAC;AACvC,QAAI,IAAI,KAAK,iBAAiB,CAAC;AAAA,EACjC;AAGA,MAAI,QAAQ,QAAQ;AAClB,QAAI,IAAI,KAAK,OAAO,GAAG,SAAS;AAE9B,UAAI,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE,aAAa,WAAW;AAC7C,eAAO,KAAK;AAAA,MACd;AACA,YAAM,OAAO,EAAE,IAAI,OAAO,eAAe;AACzC,UAAI,SAAS,UAAU,QAAQ,MAAM,IAAI;AACvC,eAAO,EAAE,KAAK,EAAE,IAAI,OAAO,OAAO,eAAe,GAAG,GAAG;AAAA,MACzD;AACA,aAAO,KAAK;AAAA,IACd,CAAC;AAAA,EACH;AAIA,MAAI,IAAI,WAAW,OAAM,MAAK;AAC5B,UAAM,QAAQ,YAAY;AAC1B,WAAO,EAAE,KAAK,EAAE,IAAI,MAAM,SAAS,SAAS,OAAO,QAAQ,QAAQ,OAAO,EAAE,CAAC;AAAA,EAC/E,CAAC;AAED,MAAI,KAAK,aAAa,OAAM,MAAK;AAC/B,UAAM,MAAM,MAAM,WAAW;AAC7B,UAAM,OAAO,MAAM,EAAE,IAAI,KAAqB;AAC9C,UAAM,SAAS,IAAI,SAAS,IAAI;AAChC,WAAO,EAAE,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG;AAAA,EAC7C,CAAC;AAED,MAAI,KAAK,cAAc,OAAM,MAAK;AAChC,UAAM,MAAM,MAAM,WAAW;AAC7B,UAAM,OAAO,MAAM,EAAE,IAAI,KAAuB;AAChD,UAAM,SAAS,IAAI,UAAU,IAAI;AACjC,WAAO,EAAE,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG;AAAA,EAC7C,CAAC;AAED,MAAI,KAAK,mBAAmB,OAAM,MAAK;AACrC,UAAM,MAAM,MAAM,WAAW;AAC7B,UAAM,OAAO,MAAM,EAAE,IAAI,KAAkB;AAC3C,UAAM,SAAS,IAAI,cAAc,IAAI;AACrC,WAAO,EAAE,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG;AAAA,EAC7C,CAAC;AAED,MAAI,KAAK,uBAAuB,OAAM,MAAK;AACzC,UAAM,MAAM,MAAM,WAAW;AAC7B,UAAM,OAAO,MAAM,EAAE,IAAI,KAAuB;AAChD,UAAM,SAAS,IAAI,kBAAkB,IAAI;AACzC,WAAO,EAAE,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG;AAAA,EAC7C,CAAC;AAED,MAAI,KAAK,SAAS,OAAM,MAAK;AAC3B,UAAM,MAAM,MAAM,WAAW;AAC7B,UAAM,OAAO,MAAM,EAAE,IAAI,KAAkB;AAC3C,UAAM,SAAS,IAAI,KAAK,IAAI;AAC5B,WAAO,EAAE,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG;AAAA,EAC7C,CAAC;AAWD,MAAI,KAAK,aAAa,OAAM,MAAK;AAC/B,UAAM,MAAM,MAAM,WAAW;AAC7B,UAAM,OAAO,MAAM,EAAE,IAAI,KAAsB;AAC/C,QAAI,CAAC,KAAK,OAAO,OAAO,KAAK,QAAQ,UAAU;AAC7C,aAAO,EAAE;AAAA,QACP;AAAA,UACE,IAAI;AAAA,UACJ,aAAa;AAAA,YACX;AAAA,cACE,UAAU;AAAA,cACV,MAAM;AAAA,cACN,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,MAAM,IAAI,SAAS,IAAI;AACtC,WAAO,EAAE,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG;AAAA,EAC7C,CAAC;AAID,MAAI,QAAQ,CAAC,KAAK,MAAM;AACtB,WAAO,EAAE;AAAA,MACP;AAAA,QACE,IAAI;AAAA,QACJ,aAAa;AAAA,UACX;AAAA,YACE,UAAU;AAAA,YACV,MAAM;AAAA,YACN,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAUA,eAAsB,MAAM,UAAuB,CAAC,GAAkB;AACpE,QAAM,EAAE,OAAO,UAAU,IAAI,MAAM,OAAO,mBAAmB;AAC7D,QAAM,MAAM,UAAU,OAAO;AAC7B,QAAM,OAAO,QAAQ,QAAQ;AAE7B,YAAU,EAAE,OAAO,IAAI,OAAO,KAAK,CAAC;AACpC,UAAQ,IAAI,gEAAgE,IAAI,EAAE;AACpF;","names":["escapeString","escapeString","analyzeOperations","generateOperationCode","escapeString","analyzeOperations","generateOperationCode","generateTemplate","escapeString","collectTargetElements","validateProtocolJSON","fromProtocolJSON"]}
1
+ {"version":3,"sources":["../src/http.ts","../src/diff/diff.ts","../src/scoring/score.ts","../src/input/detect.ts","../src/input/normalize.ts","../src/validation/inert-shapes.ts","../src/validation/gates.ts","../src/operations/extract.ts","../src/renderers/html-fixture.ts","../src/renderers/playwright.ts","../src/renderers/renderer-helpers.ts","../src/renderers/react.ts","../src/renderers/vue.ts","../src/renderers/svelte.ts","../src/service.ts","../src/middleware/body-limit.ts","../src/middleware/timeout.ts","../src/middleware/logger.ts"],"sourcesContent":["/**\n * HTTP/Edge Wrapper for CompilationService\n *\n * Thin Hono server exposing CompilationService over HTTP.\n * Works on Node, Deno, Bun, and Cloudflare Workers.\n *\n * Usage:\n * import { createApp } from '@lokascript/compilation-service/http';\n * const app = createApp();\n * // Use with any Hono-compatible server\n *\n * import { serve } from '@lokascript/compilation-service/http';\n * serve({ port: 3001 }); // Starts Node server\n */\n\nimport { Hono } from 'hono';\nimport { cors } from 'hono/cors';\nimport { CompilationService } from './service.js';\nimport type {\n CompileRequest,\n TranslateRequest,\n TestRequest,\n ComponentRequest,\n DiffRequest,\n GenerateRequest,\n} from './types.js';\nimport { bodyLimit } from './middleware/body-limit.js';\nimport { timeout } from './middleware/timeout.js';\nimport { structuredLogger } from './middleware/logger.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface HttpOptions {\n /** API key for authentication (optional — skips /health) */\n apiKey?: string;\n /** CORS origin (default '*') */\n corsOrigin?: string;\n /** Port for serve() (default 3001) */\n port?: number;\n /** Pre-created service instance (skips lazy init) */\n service?: CompilationService;\n /** Enable production middleware (body limit, timeout, logger) */\n production?: boolean;\n /** Max request body in bytes (default 50KB, requires production: true) */\n maxBodyBytes?: number;\n /** Request timeout in ms (default 10000, requires production: true) */\n timeoutMs?: number;\n}\n\n// =============================================================================\n// App Factory\n// =============================================================================\n\n/**\n * Create a Hono app wrapping CompilationService.\n * Testable without starting a server — use `app.request()`.\n */\nexport function createApp(options: HttpOptions = {}): Hono {\n const app = new Hono();\n\n // Lazy-init service on first request\n let service: CompilationService | null = options.service ?? null;\n let initPromise: Promise<CompilationService> | null = null;\n\n async function getService(): Promise<CompilationService> {\n if (service) return service;\n if (!initPromise) {\n initPromise = CompilationService.create().then(s => {\n service = s;\n return s;\n });\n }\n return initPromise;\n }\n\n // --- Middleware ---\n\n app.use('*', cors({ origin: options.corsOrigin ?? '*' }));\n\n // Production middleware (body limit, timeout, structured logging)\n if (options.production) {\n app.use('*', bodyLimit(options.maxBodyBytes));\n app.use('*', timeout(options.timeoutMs));\n app.use('*', structuredLogger());\n }\n\n // API key auth (optional)\n if (options.apiKey) {\n app.use('*', async (c, next) => {\n // Skip auth for health check\n if (new URL(c.req.url).pathname === '/health') {\n return next();\n }\n const auth = c.req.header('Authorization');\n if (auth !== `Bearer ${options.apiKey}`) {\n return c.json({ ok: false, error: 'Unauthorized' }, 401);\n }\n return next();\n });\n }\n\n // --- Routes ---\n\n app.get('/health', async c => {\n const ready = service !== null;\n return c.json({ ok: true, version: '1.4.0', ready, uptime: process.uptime() });\n });\n\n app.post('/validate', async c => {\n const svc = await getService();\n const body = await c.req.json<CompileRequest>();\n const result = svc.validate(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/translate', async c => {\n const svc = await getService();\n const body = await c.req.json<TranslateRequest>();\n const result = svc.translate(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/generate-tests', async c => {\n const svc = await getService();\n const body = await c.req.json<TestRequest>();\n const result = svc.generateTests(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/generate-component', async c => {\n const svc = await getService();\n const body = await c.req.json<ComponentRequest>();\n const result = svc.generateComponent(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n app.post('/diff', async c => {\n const svc = await getService();\n const body = await c.req.json<DiffRequest>();\n const result = svc.diff(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n /**\n * POST /generate — convert LSE to a target-specific output.\n *\n * Accepts bracket syntax or protocol JSON produced by an LLM\n * (e.g. via the `lse_generate_with_correction` MCP tool) and renders\n * it to the requested target format.\n *\n * Body: { lse: string, target: 'react'|'vue'|'svelte'|'intent-element', task?: string }\n */\n app.post('/generate', async c => {\n const svc = await getService();\n const body = await c.req.json<GenerateRequest>();\n if (!body.lse || typeof body.lse !== 'string') {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'MISSING_LSE',\n message: 'Request body must include a non-empty `lse` string.',\n },\n ],\n },\n 400\n );\n }\n const result = await svc.generate(body);\n return c.json(result, result.ok ? 200 : 422);\n });\n\n // --- Error handler ---\n\n app.onError((err, c) => {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'INTERNAL_ERROR',\n message: err instanceof Error ? err.message : String(err),\n },\n ],\n },\n 500\n );\n });\n\n return app;\n}\n\n// =============================================================================\n// Node Server\n// =============================================================================\n\n/**\n * Start a Node HTTP server with the compilation service.\n * Convenience for CLI usage; for production, use createApp() with your server.\n */\nexport async function serve(options: HttpOptions = {}): Promise<void> {\n const { serve: honoServe } = await import('@hono/node-server');\n const app = createApp(options);\n const port = options.port ?? 3001;\n\n honoServe({ fetch: app.fetch, port });\n console.log(`LokaScript Compilation Service listening on http://localhost:${port}`);\n}\n","/**\n * Semantic Diff Engine\n *\n * Compares two BehaviorSpecs at the abstract operation level.\n * Uses LCS (longest common subsequence) for operation-level diffing\n * and post-processes to detect reorderings.\n */\n\nimport type { AbstractOperation, BehaviorSpec } from '../operations/types.js';\nimport type { TriggerDiff, OperationDiff, OperationChangeKind } from './types.js';\n\n// =============================================================================\n// Public API\n// =============================================================================\n\nexport interface DiffResult {\n identical: boolean;\n trigger: TriggerDiff | null;\n operations: OperationDiff[];\n summary: string;\n}\n\n/**\n * Compare two BehaviorSpecs and produce a structured diff.\n */\nexport function diffBehaviors(a: BehaviorSpec, b: BehaviorSpec): DiffResult {\n const triggerDiff = diffTrigger(a, b);\n const opDiffs = diffOperations(a.operations, b.operations);\n\n const identical = triggerDiff === null && opDiffs.every(d => d.kind === 'unchanged');\n const summary = generateSummary(triggerDiff, opDiffs);\n\n return { identical, trigger: triggerDiff, operations: opDiffs, summary };\n}\n\n// =============================================================================\n// Trigger Comparison\n// =============================================================================\n\nfunction diffTrigger(a: BehaviorSpec, b: BehaviorSpec): TriggerDiff | null {\n const changes: string[] = [];\n\n if (a.trigger.event !== b.trigger.event) {\n changes.push(`event: ${a.trigger.event} → ${b.trigger.event}`);\n }\n\n // Compare modifiers\n const aModKeys = Object.keys(a.trigger.modifiers ?? {}).sort();\n const bModKeys = Object.keys(b.trigger.modifiers ?? {}).sort();\n const aMods = a.trigger.modifiers ?? {};\n const bMods = b.trigger.modifiers ?? {};\n\n for (const key of new Set([...aModKeys, ...bModKeys])) {\n const aVal = aMods[key];\n const bVal = bMods[key];\n if (aVal === undefined) {\n changes.push(`added modifier: ${key}`);\n } else if (bVal === undefined) {\n changes.push(`removed modifier: ${key}`);\n } else if (JSON.stringify(aVal) !== JSON.stringify(bVal)) {\n changes.push(`modifier ${key}: ${JSON.stringify(aVal)} → ${JSON.stringify(bVal)}`);\n }\n }\n\n if (changes.length === 0) return null;\n\n return {\n a: { event: a.trigger.event, modifiers: a.trigger.modifiers },\n b: { event: b.trigger.event, modifiers: b.trigger.modifiers },\n changes,\n };\n}\n\n// =============================================================================\n// Operation Comparison (LCS-based)\n// =============================================================================\n\nfunction diffOperations(a: AbstractOperation[], b: AbstractOperation[]): OperationDiff[] {\n const aKeys = a.map(canonicalizeOp);\n const bKeys = b.map(canonicalizeOp);\n\n // Build LCS table\n const lcs = computeLCS(aKeys, bKeys);\n\n // Walk the LCS to produce diffs\n const rawDiffs = buildDiffFromLCS(a, b, aKeys, bKeys, lcs);\n\n // Post-process: detect reorderings among added/removed pairs\n return detectReorderings(rawDiffs);\n}\n\n/**\n * Compute LCS length table.\n */\nfunction computeLCS(a: string[], b: string[]): number[][] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n\n return dp;\n}\n\n/**\n * Walk the LCS table backwards to produce raw diffs.\n */\nfunction buildDiffFromLCS(\n a: AbstractOperation[],\n b: AbstractOperation[],\n aKeys: string[],\n bKeys: string[],\n dp: number[][]\n): OperationDiff[] {\n const diffs: OperationDiff[] = [];\n let i = a.length;\n let j = b.length;\n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && aKeys[i - 1] === bKeys[j - 1]) {\n // Match — unchanged\n diffs.push({\n kind: 'unchanged',\n index: { a: i - 1, b: j - 1 },\n a: a[i - 1],\n b: b[j - 1],\n });\n i--;\n j--;\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n // Added in b\n diffs.push({\n kind: 'added',\n index: { b: j - 1 },\n b: b[j - 1],\n });\n j--;\n } else {\n // Removed from a\n diffs.push({\n kind: 'removed',\n index: { a: i - 1 },\n a: a[i - 1],\n });\n i--;\n }\n }\n\n return diffs.reverse();\n}\n\n/**\n * Post-process raw diffs to detect reorderings and field-level changes.\n *\n * A reordering is when an operation appears in both sides but at different\n * positions (shows as removed+added pair with the same canonical key).\n *\n * A change is when an operation at the same position has the same op type\n * but different fields (shows as removed+added pair with the same op type).\n */\nfunction detectReorderings(diffs: OperationDiff[]): OperationDiff[] {\n const removed: OperationDiff[] = [];\n const added: OperationDiff[] = [];\n const result: OperationDiff[] = [];\n\n // Separate removed and added\n for (const d of diffs) {\n if (d.kind === 'removed') removed.push(d);\n else if (d.kind === 'added') added.push(d);\n else result.push(d);\n }\n\n // Match removed/added pairs\n const usedRemoved = new Set<number>();\n const usedAdded = new Set<number>();\n\n // First pass: exact matches (reorderings)\n for (let ri = 0; ri < removed.length; ri++) {\n if (usedRemoved.has(ri)) continue;\n const rKey = canonicalizeOp(removed[ri].a!);\n for (let ai = 0; ai < added.length; ai++) {\n if (usedAdded.has(ai)) continue;\n const aKey = canonicalizeOp(added[ai].b!);\n if (rKey === aKey) {\n usedRemoved.add(ri);\n usedAdded.add(ai);\n result.push({\n kind: 'reordered',\n index: { a: removed[ri].index.a, b: added[ai].index.b },\n a: removed[ri].a,\n b: added[ai].b,\n });\n break;\n }\n }\n }\n\n // Second pass: same op type → changed\n for (let ri = 0; ri < removed.length; ri++) {\n if (usedRemoved.has(ri)) continue;\n for (let ai = 0; ai < added.length; ai++) {\n if (usedAdded.has(ai)) continue;\n if (removed[ri].a!.op === added[ai].b!.op) {\n usedRemoved.add(ri);\n usedAdded.add(ai);\n result.push({\n kind: 'changed',\n index: { a: removed[ri].index.a, b: added[ai].index.b },\n a: removed[ri].a,\n b: added[ai].b,\n changes: describeChanges(removed[ri].a!, added[ai].b!),\n });\n break;\n }\n }\n }\n\n // Remaining unmatched\n for (let ri = 0; ri < removed.length; ri++) {\n if (!usedRemoved.has(ri)) result.push(removed[ri]);\n }\n for (let ai = 0; ai < added.length; ai++) {\n if (!usedAdded.has(ai)) result.push(added[ai]);\n }\n\n // Sort by position for stable output\n result.sort((x, y) => {\n const xPos = x.index.a ?? x.index.b ?? 0;\n const yPos = y.index.a ?? y.index.b ?? 0;\n return xPos - yPos;\n });\n\n return result;\n}\n\n// =============================================================================\n// Canonicalization\n// =============================================================================\n\n/**\n * Produce a deterministic string key for an AbstractOperation.\n * Two operations with the same key are semantically identical.\n */\nexport function canonicalizeOp(op: AbstractOperation): string {\n const parts: string[] = [op.op];\n\n switch (op.op) {\n case 'toggleClass':\n case 'addClass':\n case 'removeClass':\n parts.push(op.className, canonicalizeTarget(op.target));\n break;\n case 'setContent':\n parts.push(op.content, canonicalizeTarget(op.target), op.position);\n break;\n case 'appendContent':\n parts.push(op.content, canonicalizeTarget(op.target));\n break;\n case 'show':\n case 'hide':\n case 'focus':\n case 'blur':\n parts.push(canonicalizeTarget(op.target));\n break;\n case 'setVariable':\n parts.push(op.name, op.value, op.scope);\n break;\n case 'increment':\n case 'decrement':\n parts.push(canonicalizeTarget(op.target), String(op.amount));\n break;\n case 'navigate':\n parts.push(op.url);\n break;\n case 'historyBack':\n case 'historyForward':\n break;\n case 'fetch':\n parts.push(op.url, op.format, op.target ? canonicalizeTarget(op.target) : '');\n break;\n case 'wait':\n parts.push(String(op.durationMs));\n break;\n case 'triggerEvent':\n parts.push(op.eventName, canonicalizeTarget(op.target), op.detail ?? '');\n break;\n case 'log':\n parts.push(...op.values);\n break;\n }\n\n return parts.join('|');\n}\n\nfunction canonicalizeTarget(t: { kind: string; value?: string }): string {\n return t.kind === 'self' ? 'self' : `${t.kind}:${(t as { value?: string }).value ?? ''}`;\n}\n\n// =============================================================================\n// Change Description\n// =============================================================================\n\nfunction describeChanges(a: AbstractOperation, b: AbstractOperation): string[] {\n const changes: string[] = [];\n const aObj = a as unknown as Record<string, unknown>;\n const bObj = b as unknown as Record<string, unknown>;\n\n // Compare all fields except 'op'\n const allKeys = new Set([...Object.keys(aObj), ...Object.keys(bObj)]);\n for (const key of allKeys) {\n if (key === 'op') continue;\n const aVal = JSON.stringify(aObj[key]);\n const bVal = JSON.stringify(bObj[key]);\n if (aVal !== bVal) {\n changes.push(`${key}: ${formatValue(aObj[key])} → ${formatValue(bObj[key])}`);\n }\n }\n\n return changes;\n}\n\nfunction formatValue(v: unknown): string {\n if (v === undefined) return '(none)';\n if (typeof v === 'object' && v !== null) {\n const obj = v as Record<string, unknown>;\n if ('kind' in obj) return obj.kind === 'self' ? 'self' : `${obj.kind}:${obj.value ?? ''}`;\n return JSON.stringify(v);\n }\n return String(v);\n}\n\n// =============================================================================\n// Summary Generation\n// =============================================================================\n\nfunction generateSummary(trigger: TriggerDiff | null, opDiffs: OperationDiff[]): string {\n const parts: string[] = [];\n\n if (!trigger && opDiffs.every(d => d.kind === 'unchanged')) {\n return 'No semantic change';\n }\n\n if (trigger) {\n parts.push(`Trigger: ${trigger.changes.join(', ')}`);\n }\n\n const counts: Record<OperationChangeKind, number> = {\n added: 0,\n removed: 0,\n changed: 0,\n reordered: 0,\n unchanged: 0,\n };\n for (const d of opDiffs) counts[d.kind]++;\n\n const opParts: string[] = [];\n if (counts.added > 0) opParts.push(`${counts.added} added`);\n if (counts.removed > 0) opParts.push(`${counts.removed} removed`);\n if (counts.changed > 0) opParts.push(`${counts.changed} changed`);\n if (counts.reordered > 0) opParts.push(`${counts.reordered} reordered`);\n\n if (opParts.length > 0) {\n parts.push(`Operations: ${opParts.join(', ')}`);\n }\n\n return parts.join('. ');\n}\n","/**\n * Structural fidelity scoring — `scoreFidelity()` (agent-era arc 4).\n *\n * The scorer itself (`scoreNodes` and its report types) lives in\n * `@lokascript/semantic/fidelity` since arc 5 slice 2, so the language\n * server's translate-with-verification request and this service share ONE\n * implementation; this module re-exports it for API compatibility and adds\n * the service-level request/response shapes. See that module for signal\n * semantics; docs/FIDELITY.md for the methodology.\n */\n\nimport type { Diagnostic } from '../types.js';\nimport type { DiffInput } from '../diff/types.js';\nimport type { FidelityReport } from '@lokascript/semantic/fidelity';\n\nexport { scoreNodes } from '@lokascript/semantic/fidelity';\nexport type { FidelityReport, FidelityScores } from '@lokascript/semantic/fidelity';\n\n/** Score request — a candidate scored against a reference. Sides accept the\n * same input formats as diff/validate and may be in different languages. */\nexport interface ScoreRequest {\n reference: DiffInput;\n candidate: DiffInput;\n /** Minimum confidence for natural language parsing (default 0.7) */\n confidence?: number;\n}\n\nexport interface ScoreResponse extends Partial<FidelityReport> {\n /** Whether both sides parsed successfully. */\n ok: boolean;\n diagnostics: Diagnostic[];\n /**\n * False when the reference parse left tokens unconsumed (UNCONSUMED_INPUT):\n * the scores then compare only what parsed, and `faithful` is false.\n */\n referenceComplete?: boolean;\n /** The same, for the candidate. */\n candidateComplete?: boolean;\n}\n","/**\n * Input format detection.\n *\n * Determines whether input is natural language, explicit syntax, or LLM JSON.\n */\n\nimport type { InputFormat } from '../types.js';\n\n/**\n * Detect the input format from a string.\n */\nexport function detectFormat(input: string): InputFormat {\n const trimmed = input.trim();\n\n // Explicit syntax: [command role:value ...]\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return 'explicit';\n }\n\n // LLM JSON: { \"action\": \"...\", ... }\n if (trimmed.startsWith('{')) {\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === 'object' && typeof parsed.action === 'string') {\n return 'json';\n }\n } catch {\n // Not valid JSON — fall through to natural language\n }\n }\n\n return 'natural';\n}\n","/**\n * Input normalization.\n *\n * Converts any input format (natural language, explicit syntax, LLM JSON)\n * to a SemanticNode for downstream validation, translation and rendering.\n */\n\nimport type { CompileRequest, NormalizeResult, SemanticJSON, Diagnostic } from '../types.js';\nimport { detectFormat } from './detect.js';\nimport { validateProtocolJSON, fromProtocolJSON } from '@lokascript/framework';\n\n// =============================================================================\n// Dynamic imports (resolved at service creation time)\n// =============================================================================\n\n/** Semantic package functions, injected by CompilationService.create() */\nexport interface SemanticFunctions {\n parseSemantic: (\n code: string,\n language: string\n ) => { node: unknown; confidence: number; error?: string };\n parseExplicit: (input: string) => unknown;\n isExplicitSyntax: (input: string) => boolean;\n}\n\nlet _semantic: SemanticFunctions | null = null;\n\n/** Initialize with semantic package functions. */\nexport function initNormalizer(semantic: SemanticFunctions): void {\n _semantic = semantic;\n}\n\n// =============================================================================\n// Normalization\n// =============================================================================\n\n/**\n * Normalize any input format to a SemanticNode.\n */\nexport function normalize(request: CompileRequest): NormalizeResult {\n if (!_semantic) {\n throw new Error('Normalizer not initialized. Call initNormalizer() first.');\n }\n\n // Determine which input format we're working with\n if (request.semantic) {\n return normalizeJSON(request.semantic);\n }\n\n const input = request.code ?? request.explicit;\n if (!input) {\n return {\n node: null,\n confidence: 0,\n format: 'natural',\n diagnostics: [\n {\n severity: 'error',\n code: 'NO_INPUT',\n message: 'No input provided. Supply one of: code, explicit, or semantic.',\n },\n ],\n };\n }\n\n const format = request.explicit ? 'explicit' : detectFormat(input);\n\n switch (format) {\n case 'explicit':\n return normalizeExplicit(input);\n case 'json':\n return normalizeJSON(JSON.parse(input.trim()) as SemanticJSON);\n case 'natural':\n return normalizeNatural(input, request.language ?? 'en');\n }\n}\n\n// =============================================================================\n// Format-Specific Normalization\n// =============================================================================\n\n/** Shape of the diagnostics the semantic parser attaches to its nodes. */\ninterface NodeDiagnostic {\n severity?: string;\n code?: string;\n message?: string;\n}\n\n/**\n * Lift warning/error diagnostics off the parsed node into the response.\n *\n * The semantic parser deliberately parses leniently — it records problems as\n * node-level diagnostics instead of failing (e.g. `unconsumed-input` when\n * `add .x #el` drops `#el` and the destination silently defaults to `me`,\n * hoisted to the top node from any depth). Until 2026-08 this function never\n * read them, so `validate()` reported ok with ZERO diagnostics for parses the\n * parser itself had flagged — the agent-bench probe measured 18/37 plausible\n * phrasings misbehaving with nothing for the validate/repair loop to react to\n * (arc 3b, AGENT_ERA_ROADMAP.md). `info` entries stay behind: they are match\n * commentary (\"pattern matched: …\"), not actionable signal.\n */\nfunction liftNodeDiagnostics(node: unknown, diagnostics: Diagnostic[]): void {\n const nodeDiags = (node as { diagnostics?: NodeDiagnostic[] }).diagnostics;\n if (!Array.isArray(nodeDiags)) return;\n for (const d of nodeDiags) {\n if (d.severity !== 'warning' && d.severity !== 'error') continue;\n // A clause the parser keeps as written is read by no role either: for a\n // validate/repair loop it is the same signal as a dropped one.\n const unread = d.code === 'unconsumed-input' || d.code === 'verbatim-clause';\n const diag: Diagnostic = {\n severity: d.severity,\n // Parser codes are kebab-case; this surface uses UPPER_SNAKE (PARSE_ERROR &c).\n code: unread\n ? 'UNCONSUMED_INPUT'\n : (d.code ?? 'PARSE_DIAGNOSTIC').replace(/-/g, '_').toUpperCase(),\n message: d.message ?? 'parser diagnostic',\n };\n if (unread) {\n diag.suggestion =\n 'Dropped tokens were parsed but bound to no role — usually a missing role ' +\n \"marker (e.g. 'to'/'on'/'from' before the target), so the role fell back to \" +\n 'a default like `me`. Compare the returned roles against your intent.';\n }\n diagnostics.push(diag);\n }\n}\n\nfunction normalizeNatural(code: string, language: string): NormalizeResult {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const result = _semantic!.parseSemantic(code, language);\n\n if (result.error) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_ERROR',\n message: result.error,\n });\n }\n\n if (!result.node) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_FAILED',\n message: `Failed to parse \"${code}\" as ${language} hyperscript.`,\n suggestion: 'Check syntax or try explicit syntax: [command role:value ...]',\n });\n return { node: null, confidence: result.confidence, format: 'natural', diagnostics };\n }\n\n liftNodeDiagnostics(result.node, diagnostics);\n\n return {\n node: result.node,\n confidence: result.confidence,\n format: 'natural',\n diagnostics,\n };\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_EXCEPTION',\n message: error instanceof Error ? error.message : String(error),\n });\n return { node: null, confidence: 0, format: 'natural', diagnostics };\n }\n}\n\nfunction normalizeExplicit(input: string): NormalizeResult {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const node = _semantic!.parseExplicit(input);\n return {\n node,\n confidence: 1.0,\n format: 'explicit',\n diagnostics,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const hasRoleGuidance =\n message.includes('Valid roles') || message.includes('Missing required role');\n diagnostics.push({\n severity: 'error',\n code: 'EXPLICIT_PARSE_ERROR',\n message,\n suggestion: hasRoleGuidance\n ? undefined\n : 'Use format: [command role:value ...] e.g. [toggle patient:.active]. Use get_command_docs(command) to see valid roles.',\n });\n return { node: null, confidence: 0, format: 'explicit', diagnostics };\n }\n}\n\nfunction normalizeJSON(input: SemanticJSON): NormalizeResult {\n // Validate structure (unified protocol JSON validator accepts optional kind + trigger)\n const validationErrors = validateProtocolJSON(input);\n if (validationErrors.some(d => d.severity === 'error')) {\n return {\n node: null,\n confidence: 0,\n format: 'json',\n diagnostics: validationErrors,\n };\n }\n\n // Convert to SemanticNode (unified path accepts optional kind + trigger)\n const node = fromProtocolJSON(input as any);\n return {\n node,\n confidence: 1.0,\n format: 'json',\n diagnostics: validationErrors, // May contain warnings\n };\n}\n","/**\n * Inert-shape heuristics — Gate 4 of the validation pipeline (arc 3b).\n *\n * A parse can consume every token at confidence 1.0 and still be provably\n * useless at runtime: the agent-bench probe found five plausible phrasings\n * that do exactly that (silent no-op, or effect on the wrong element) with\n * nothing in the response for the validate/repair loop to react to. Each left\n * a distinctive fingerprint in the IR; this gate matches those fingerprints\n * and emits WARNINGS — never errors, and never a confidence change, so parse\n * outcomes are byte-identical and only the diagnostics array grows (the same\n * contract as the arc-3b unconsumed-input propagation).\n *\n * Checks are deliberately narrow — a fingerprint each, not a general theory of\n * inertness — because a false warning teaches an agent to distrust warnings.\n * The known-remaining silent phrasings these do NOT cover are valid code with\n * different intent (e.g. `add .hidden to #menu`), which no compile-time check\n * can catch; that is IR-vs-intent review's job.\n */\n\nimport type { Diagnostic } from '../types.js';\n\n/** Quantifier words that read as \"the matched set\" in English but parse as a\n * bare identifier, making `all.todo` an undefined property access at runtime.\n * Spaced (`all .todo`), the target is the identifier `all` alone and the\n * selector is left unread (both engines read a spaced `.todo` as a class). */\nconst QUANTIFIER = /^(all|every|each)\\.(\\S+)$/;\nconst BARE_QUANTIFIER = /^(all|every|each)$/;\n\n/** Predicate words that, mis-tokenized as class selectors inside a condition\n * (`#box .has class .danger`), silently make the condition falsy. The pattern\n * requires the word to stand alone — real utility classes like `.is-active`\n * do not match. */\nconst PREDICATE_AS_CLASS = /(^|\\s)\\.(has|is|contains|matches|includes)(\\s|$)/;\n\ninterface RoleValueLike {\n type?: string;\n value?: unknown;\n raw?: string;\n /** property-path values carry object + property instead of value. */\n property?: string;\n}\n\ninterface NodeLike {\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n body?: unknown[];\n}\n\nfunction valueString(v: RoleValueLike): string {\n return String(v.value ?? v.raw ?? '');\n}\n\n/**\n * Walk a SemanticNode (recursing into command bodies) and return warnings for\n * shapes that are known to execute as no-ops or mis-bindings.\n */\nexport function checkInertShapes(node: unknown): Diagnostic[] {\n const out: Diagnostic[] = [];\n walk(node, out);\n return out;\n}\n\nfunction walk(node: unknown, out: Diagnostic[]): void {\n if (!node || typeof node !== 'object') return;\n const n = node as NodeLike;\n\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, raw] of n.roles.entries()) {\n const v = (raw ?? {}) as RoleValueLike;\n const s = valueString(v);\n\n // `add .done to all .todo` → destination expression `all.todo`:\n // identifier `all` is undefined at runtime, so the effect lands on the\n // default target (usually `me`) or nowhere.\n const q = v.type === 'expression' ? QUANTIFIER.exec(s) : null;\n if (q && (role === 'destination' || role === 'source')) {\n out.push({\n severity: 'warning',\n code: 'INERT_QUANTIFIER_TARGET',\n message: `${role} parsed as property access \"${s}\" — \"${q[1]}\" is an undefined identifier at runtime, so this ${role} will not resolve.`,\n suggestion: `Selectors already address every match: write the bare selector (e.g. \".${q[2]}\") without \"${q[1]}\".`,\n });\n continue;\n }\n if (\n v.type === 'expression' &&\n BARE_QUANTIFIER.test(s) &&\n (role === 'destination' || role === 'source')\n ) {\n out.push({\n severity: 'warning',\n code: 'INERT_QUANTIFIER_TARGET',\n message: `${role} parsed as the identifier \"${s}\", which is undefined at runtime, so this ${role} will not resolve; the selector after it is not read.`,\n suggestion: `Selectors already address every match: write the selector alone, without \"${s}\".`,\n });\n continue;\n }\n\n // `if #box has class .danger` → condition `#box .has class .danger`:\n // the predicate word became a class selector, the condition evaluates\n // falsy, and the body silently never runs.\n if (role === 'condition' && v.type === 'expression' && PREDICATE_AS_CLASS.test(s)) {\n const word = PREDICATE_AS_CLASS.exec(s)?.[2];\n out.push({\n severity: 'warning',\n code: 'HALF_PARSED_CONDITION',\n message: `condition parsed \".${word}\" as a class selector (full condition: \"${s}\") — it will evaluate falsy and the body will never run.`,\n suggestion: 'For class tests use `matches`: `if #box matches .danger`.',\n });\n continue;\n }\n\n // (`UNSUPPORTED_QUERY_LITERAL`, for `add .x to <body/>`, retired with the AOT\n // compiler in 4.0: on its path `<body/>` reached querySelector verbatim, but the\n // engine reads query literals, as upstream does.)\n\n // `set the text of #output to \"…\"` → property-path `#output.text`:\n // `.text` is not a DOM-visible property on ordinary elements, so the\n // write is an invisible expando.\n if (n.action === 'set' && v.type === 'property-path' && v.property === 'text') {\n out.push({\n severity: 'warning',\n code: 'INERT_PROPERTY_WRITE',\n message: `set targets property \"text\" — on most elements this is not a DOM property, so the write usually changes nothing visible.`,\n suggestion:\n 'Use `textContent` (`set the textContent of #el to …`) or `put \"…\" into #el`.',\n });\n }\n }\n }\n\n if (Array.isArray(n.body)) for (const child of n.body) walk(child, out);\n}\n","/**\n * Validation pipeline.\n *\n * Sequential gates that validate a parsed SemanticNode.\n * Each gate can add diagnostics; an error fails validation.\n */\n\nimport type { Diagnostic } from '../types.js';\nimport { checkInertShapes } from './inert-shapes.js';\n\n// =============================================================================\n// Dynamic imports\n// =============================================================================\n\n/** Semantic validation functions, injected by CompilationService.create() */\nexport interface ValidationFunctions {\n validateSemanticResult: (result: unknown) => {\n valid: boolean;\n errors: Array<{ code: string; message: string; role?: string; severity: string }>;\n warnings: Array<{ code: string; message: string; role?: string; severity: string }>;\n confidenceAdjustment: number;\n suggestions: string[];\n };\n}\n\nlet _validators: ValidationFunctions | null = null;\n\n/** Initialize with validation functions. */\nexport function initValidation(validators: ValidationFunctions): void {\n _validators = validators;\n}\n\n// =============================================================================\n// Validation Pipeline\n// =============================================================================\n\nexport interface GateResult {\n pass: boolean;\n diagnostics: Diagnostic[];\n adjustedConfidence: number;\n}\n\n/**\n * Run all validation gates on a parsed semantic node.\n */\nexport function runValidationGates(\n node: unknown,\n confidence: number,\n confidenceThreshold: number\n): GateResult {\n const diagnostics: Diagnostic[] = [];\n let adjustedConfidence = confidence;\n\n // Gate 1: Parse success\n if (!node) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_FAILED',\n message: 'No semantic node produced from input.',\n });\n return { pass: false, diagnostics, adjustedConfidence: 0 };\n }\n\n // Gate 2: Confidence threshold\n if (confidence < confidenceThreshold) {\n diagnostics.push({\n severity: 'error',\n code: 'LOW_CONFIDENCE',\n message: `Parse confidence ${confidence.toFixed(2)} is below threshold ${confidenceThreshold.toFixed(2)}.`,\n suggestion: 'Try explicit syntax [command role:value ...] for unambiguous input.',\n });\n return { pass: false, diagnostics, adjustedConfidence: confidence };\n }\n\n // Gate 3: Schema validation\n if (_validators) {\n const semanticResult = nodeToParseResult(node);\n if (semanticResult) {\n const validation = _validators.validateSemanticResult(semanticResult);\n\n // Convert errors\n for (const err of validation.errors) {\n diagnostics.push({\n severity: 'error',\n code: err.code,\n message: err.message,\n });\n }\n\n // Convert warnings\n for (const warn of validation.warnings) {\n diagnostics.push({\n severity: 'warning',\n code: warn.code,\n message: warn.message,\n });\n }\n\n // Add suggestions\n for (const suggestion of validation.suggestions) {\n diagnostics.push({\n severity: 'info',\n code: 'SUGGESTION',\n message: suggestion,\n });\n }\n\n // Adjust confidence\n adjustedConfidence = Math.max(0, Math.min(1, confidence + validation.confidenceAdjustment));\n\n if (!validation.valid) {\n return { pass: false, diagnostics, adjustedConfidence };\n }\n }\n }\n\n // Gate 4: inert-shape heuristics (arc 3b). Warnings only — a parse that\n // consumed everything at full confidence can still be provably useless at\n // runtime, and without a diagnostic the validate/repair loop never hears\n // about it. Never affects pass/confidence.\n diagnostics.push(...checkInertShapes(node));\n\n return { pass: true, diagnostics, adjustedConfidence };\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Convert a SemanticNode to the SemanticParseResult format expected by\n * validateSemanticResult(). The validator expects { action, arguments, confidence }.\n */\nfunction nodeToParseResult(node: unknown): unknown {\n const n = node as {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n };\n\n if (!n.action) return null;\n\n // For event handlers, validate the body commands instead\n const action = n.action === 'on' ? null : n.action;\n if (!action) return null;\n\n // Convert roles map to arguments array\n const args: unknown[] = [];\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, value] of n.roles.entries()) {\n args.push({ role, ...(value as Record<string, unknown>) });\n }\n }\n\n return {\n action,\n arguments: args,\n confidence: 1.0,\n };\n}\n","/**\n * Operation Extraction\n *\n * Converts a SemanticNode (from the parsing pipeline) into a BehaviorSpec\n * containing abstract operations. This is the bridge between semantic roles\n * and framework-agnostic behavior descriptions.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from './types.js';\n\n// =============================================================================\n// Internal Types (mirrors SemanticNode shape without importing semantic types)\n// =============================================================================\n\ninterface RoleValue {\n type?: string;\n value?: unknown;\n raw?: string;\n selectorKind?: string;\n dataType?: string;\n scope?: string;\n}\n\ninterface NodeLike {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, RoleValue>;\n body?: NodeLike[];\n eventModifiers?: Record<string, unknown>;\n metadata?: { sourceText?: string };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Extract abstract operations from a semantic node.\n *\n * Handles event handlers (extracts trigger + recurses into body)\n * and standalone commands.\n */\nexport function extractOperations(node: unknown): BehaviorSpec {\n const n = node as NodeLike;\n if (!n || typeof n !== 'object') {\n return emptySpec();\n }\n\n // Event handler: extract trigger and recurse into body\n if (n.kind === 'event-handler' || n.action === 'on') {\n return extractEventHandler(n);\n }\n\n // Standalone command: wrap with default trigger\n const ops = extractCommand(n);\n return {\n trigger: { event: 'click' },\n triggerTarget: { kind: 'self' },\n operations: ops,\n async: ops.some(isAsyncOp),\n source: n.metadata?.sourceText,\n };\n}\n\n// =============================================================================\n// Event Handler Extraction\n// =============================================================================\n\nfunction extractEventHandler(n: NodeLike): BehaviorSpec {\n // A colon-qualified event is an expression (`raw`), not a literal (`value`).\n const eventRole = n.roles?.get('event') as (RoleValue & { raw?: unknown }) | undefined;\n const named = eventRole?.value ?? eventRole?.raw;\n const eventName = typeof named === 'string' && named.length > 0 ? named : 'click';\n\n const operations: AbstractOperation[] = [];\n\n if (n.body && Array.isArray(n.body)) {\n for (const child of n.body) {\n operations.push(...extractCommand(child));\n }\n }\n\n return {\n trigger: {\n event: eventName,\n modifiers: n.eventModifiers,\n },\n triggerTarget: { kind: 'self' },\n operations,\n async: operations.some(isAsyncOp),\n source: n.metadata?.sourceText,\n };\n}\n\n// =============================================================================\n// Command Extraction\n// =============================================================================\n\nfunction extractCommand(n: NodeLike): AbstractOperation[] {\n const action = n.action;\n if (!action || action === 'on') return [];\n\n const roles = n.roles;\n\n switch (action) {\n // --- DOM Class ---\n case 'toggle':\n return extractClassOp('toggleClass', roles);\n case 'add':\n return extractClassOp('addClass', roles);\n case 'remove':\n return extractClassOp('removeClass', roles);\n\n // --- DOM Content ---\n case 'put':\n return extractPut(roles);\n case 'append':\n return extractAppend(roles);\n\n // --- DOM Visibility ---\n case 'show':\n return extractVisibility('show', roles);\n case 'hide':\n return extractVisibility('hide', roles);\n\n // --- Variables ---\n case 'set':\n return extractSet(roles);\n case 'increment':\n return extractIncrDecr('increment', roles);\n case 'decrement':\n return extractIncrDecr('decrement', roles);\n\n // --- Navigation ---\n case 'go':\n return extractGo(roles);\n\n // --- Async ---\n case 'fetch':\n return extractFetch(roles);\n case 'wait':\n return extractWait(roles);\n\n // --- Events ---\n case 'send':\n case 'trigger':\n return extractTriggerEvent(roles);\n\n // --- Focus ---\n case 'focus':\n return [{ op: 'focus', target: resolveTarget(roles, 'patient') }];\n case 'blur':\n return [{ op: 'blur', target: resolveTarget(roles, 'patient') }];\n\n // --- Utility ---\n case 'log':\n return extractLog(roles);\n\n default:\n return [];\n }\n}\n\n// =============================================================================\n// Per-Command Extractors\n// =============================================================================\n\nfunction extractClassOp(\n op: 'toggleClass' | 'addClass' | 'removeClass',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const value = String(patient.value ?? '');\n const className = value.startsWith('.') ? value.slice(1) : value;\n if (!className) return [];\n\n const target = resolveTarget(roles, op === 'removeClass' ? 'source' : 'destination');\n\n return [{ op, className, target }];\n}\n\nfunction extractPut(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const content = String(patient.value ?? patient.raw ?? '');\n const target = resolveTarget(roles, 'destination');\n\n // Determine position from method role\n const method = roles?.get('method');\n let position: 'into' | 'before' | 'after' | 'start' | 'end' = 'into';\n if (method?.value) {\n const m = String(method.value);\n if (m === 'before') position = 'before';\n else if (m === 'after') position = 'after';\n else if (m === 'start' || m === 'at start of') position = 'start';\n else if (m === 'end' || m === 'at end of') position = 'end';\n }\n\n return [{ op: 'setContent', content, target, position }];\n}\n\nfunction extractAppend(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const content = String(patient.value ?? patient.raw ?? '');\n const target = resolveTarget(roles, 'destination');\n\n return [{ op: 'appendContent', content, target }];\n}\n\nfunction extractVisibility(\n op: 'show' | 'hide',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const target = resolveTarget(roles, 'patient');\n return [{ op, target }];\n}\n\nfunction extractSet(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const destination = roles?.get('destination');\n const patient = roles?.get('patient');\n\n if (!destination && !patient) return [];\n\n // Variable assignment: set :count to 5\n const targetRole = destination ?? patient;\n const valueRole = destination ? patient : undefined;\n\n const name = String(targetRole?.value ?? '');\n const value = valueRole ? String(valueRole.value ?? '') : '';\n const scope = (targetRole?.scope ?? 'local') as 'local' | 'element' | 'global';\n\n return [{ op: 'setVariable', name, value, scope }];\n}\n\nfunction extractIncrDecr(\n op: 'increment' | 'decrement',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const target = resolveTarget(roles, 'patient');\n\n // Amount from quantity role\n const quantity = roles?.get('quantity');\n const amount = quantity?.value ? Number(quantity.value) : 1;\n\n return [{ op, target, amount }];\n}\n\nfunction extractGo(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const destination = roles?.get('destination');\n if (!destination) return [];\n\n const url = String(destination.value ?? '');\n\n if (url === 'back') return [{ op: 'historyBack' }];\n if (url === 'forward') return [{ op: 'historyForward' }];\n\n return [{ op: 'navigate', url }];\n}\n\nfunction extractFetch(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const source = roles?.get('source');\n if (!source) return [];\n\n const url = String(source.value ?? source.raw ?? '');\n\n const responseType = roles?.get('responseType');\n let format: 'json' | 'text' | 'html' = 'text';\n if (responseType?.value) {\n const f = String(responseType.value);\n if (f === 'json') format = 'json';\n else if (f === 'html') format = 'html';\n }\n\n const destRole = roles?.get('destination');\n const target = destRole ? resolveTargetFromRole(destRole) : undefined;\n\n return [{ op: 'fetch', url, format, target }];\n}\n\nfunction extractWait(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const duration = roles?.get('duration') ?? roles?.get('patient');\n if (!duration) return [];\n\n let ms = 0;\n const val = duration.value;\n if (typeof val === 'number') {\n ms = val;\n } else if (typeof val === 'string') {\n ms = parseDurationMs(val);\n }\n\n return [{ op: 'wait', durationMs: ms }];\n}\n\nfunction extractTriggerEvent(\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const eventName = String(patient.value ?? '');\n const target = resolveTarget(roles, 'destination');\n\n return [{ op: 'triggerEvent', eventName, target }];\n}\n\nfunction extractLog(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n const values: string[] = [];\n\n if (patient) {\n values.push(String(patient.value ?? patient.raw ?? ''));\n }\n\n return [{ op: 'log', values }];\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Resolve a target reference from the roles map.\n * Falls back to { kind: 'self' } if the role is missing or defaults to 'me'.\n */\nfunction resolveTarget(\n roles: ReadonlyMap<string, RoleValue> | undefined,\n roleName: string\n): TargetRef {\n const role = roles?.get(roleName);\n if (!role) return { kind: 'self' };\n return resolveTargetFromRole(role);\n}\n\nfunction resolveTargetFromRole(role: RoleValue): TargetRef {\n const value = String(role.value ?? '');\n\n // Reference to self\n if (role.type === 'reference' && (value === 'me' || value === 'it')) {\n return { kind: 'self' };\n }\n\n // Variable reference\n if (value.startsWith(':') || role.scope) {\n return { kind: 'variable', value };\n }\n\n // CSS selector\n if (\n role.type === 'selector' ||\n value.startsWith('#') ||\n value.startsWith('.') ||\n value.startsWith('[')\n ) {\n return { kind: 'selector', value };\n }\n\n // Literal URL or other value — treat as selector if it looks like one\n if (value) {\n return { kind: 'selector', value };\n }\n\n return { kind: 'self' };\n}\n\nfunction isAsyncOp(op: AbstractOperation): boolean {\n return op.op === 'fetch' || op.op === 'wait';\n}\n\nfunction parseDurationMs(value: string): number {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)?$/);\n if (!match) return 0;\n\n const num = parseFloat(match[1]);\n const unit = match[2] ?? 'ms';\n\n switch (unit) {\n case 'ms':\n return num;\n case 's':\n return num * 1000;\n case 'm':\n return num * 60000;\n case 'h':\n return num * 3600000;\n default:\n return num;\n }\n}\n\nfunction emptySpec(): BehaviorSpec {\n return {\n trigger: { event: 'click' },\n triggerTarget: { kind: 'self' },\n operations: [],\n async: false,\n };\n}\n","/**\n * HTML Fixture Generator\n *\n * Generates minimal HTML pages that contain all elements referenced\n * by a BehaviorSpec. Used by test renderers to create test fixtures.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Generate a minimal HTML fixture for a behavior spec.\n *\n * @param spec - The behavior to create a fixture for\n * @param hyperscript - Original hyperscript source to embed as `_=\"...\"` attribute\n */\nexport function generateFixture(spec: BehaviorSpec, hyperscript?: string): string {\n const elements = collectElements(spec);\n const triggerSelector = targetToSelector(spec.triggerTarget);\n\n // When trigger is 'self', the hyperscript attribute goes on the first\n // operation target (since 'self' means the element the script is on).\n // When trigger is a specific selector, check if it matches an operation target.\n const triggerIsSeparate =\n triggerSelector !== null && !elements.some(e => e.selector === triggerSelector);\n\n // Track whether the _= attribute has been placed on an element\n let hyperscriptPlaced = false;\n\n const lines: string[] = [];\n\n // Add initial styles for visibility tests\n if (needsInitialStyles(spec.operations)) {\n lines.push('<style>');\n for (const op of spec.operations) {\n if (op.op === 'hide') {\n const sel = targetToSelector(op.target);\n if (sel) lines.push(` ${sel} { display: block; }`);\n }\n if (op.op === 'show') {\n const sel = targetToSelector(op.target);\n if (sel) lines.push(` ${sel} { display: none; }`);\n }\n }\n lines.push('</style>');\n }\n\n // Generate elements\n if (triggerIsSeparate) {\n // Trigger element is separate from targets\n const triggerEl = createTriggerElement(triggerSelector!, hyperscript);\n lines.push(triggerEl);\n hyperscriptPlaced = true;\n }\n\n for (const el of elements) {\n // Place _= attribute on this element if:\n // 1. It matches the trigger selector, OR\n // 2. Trigger is 'self' and this is the first element (hasn't been placed yet)\n const isTrigger =\n (!triggerIsSeparate && el.selector === triggerSelector) ||\n (triggerSelector === null && !hyperscriptPlaced);\n const attrs = isTrigger && hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n if (isTrigger && hyperscript) hyperscriptPlaced = true;\n const extraClasses = getInitialClasses(el.selector, spec.operations);\n\n let tag = el.tag;\n let className = el.className;\n if (extraClasses.length > 0) {\n className = className ? `${className} ${extraClasses.join(' ')}` : extraClasses.join(' ');\n }\n\n const classAttr = className ? ` class=\"${className}\"` : '';\n const idAttr = el.id ? ` id=\"${el.id}\"` : '';\n\n if (tag === 'input') {\n lines.push(`<${tag}${idAttr}${classAttr}${attrs} />`);\n } else {\n const content = el.defaultContent ?? '';\n lines.push(`<${tag}${idAttr}${classAttr}${attrs}>${content}</${tag}>`);\n }\n }\n\n // If trigger is self and no explicit elements, create a self-targeting button\n if (elements.length === 0 && spec.triggerTarget.kind === 'self') {\n const attr = hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n lines.push(`<button id=\"trigger\"${attr}>Click me</button>`);\n }\n\n return lines.join('\\n');\n}\n\n// =============================================================================\n// Element Collection\n// =============================================================================\n\ninterface FixtureElement {\n selector: string;\n id?: string;\n className?: string;\n tag: string;\n defaultContent?: string;\n}\n\nfunction collectElements(spec: BehaviorSpec): FixtureElement[] {\n const seen = new Set<string>();\n const elements: FixtureElement[] = [];\n\n for (const op of spec.operations) {\n for (const ref of getTargetRefs(op)) {\n if (ref.kind !== 'selector') continue;\n if (seen.has(ref.value)) continue;\n seen.add(ref.value);\n\n elements.push(selectorToElement(ref.value));\n }\n }\n\n return elements;\n}\n\nfunction getTargetRefs(op: AbstractOperation): TargetRef[] {\n const refs: TargetRef[] = [];\n\n if ('target' in op && op.target) {\n refs.push(op.target as TargetRef);\n }\n\n return refs;\n}\n\nfunction selectorToElement(selector: string): FixtureElement {\n // ID selector: #foo\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return {\n selector,\n id,\n tag: inferTagFromId(id),\n defaultContent: inferContent(id),\n };\n }\n\n // Class selector: .foo\n if (selector.startsWith('.')) {\n const className = selector.slice(1);\n return {\n selector,\n className,\n tag: 'div',\n defaultContent: className,\n };\n }\n\n // Attribute or complex selector — use div\n return {\n selector,\n tag: 'div',\n defaultContent: '',\n };\n}\n\n// =============================================================================\n// Smart Element Type Inference\n// =============================================================================\n\nconst BUTTON_IDS = new Set(['btn', 'button', 'submit', 'trigger', 'action']);\nconst INPUT_IDS = new Set(['input', 'search', 'email', 'text', 'field', 'query']);\nconst FORM_IDS = new Set(['form', 'signup', 'login']);\nconst DIALOG_IDS = new Set(['modal', 'dialog', 'popup', 'overlay']);\nconst LIST_IDS = new Set(['list', 'items', 'results', 'options']);\n\nfunction inferTagFromId(id: string): string {\n const lower = id.toLowerCase();\n if (BUTTON_IDS.has(lower)) return 'button';\n if (INPUT_IDS.has(lower)) return 'input';\n if (FORM_IDS.has(lower)) return 'form';\n if (DIALOG_IDS.has(lower)) return 'div';\n if (LIST_IDS.has(lower)) return 'ul';\n return 'div';\n}\n\nfunction inferContent(id: string): string {\n const lower = id.toLowerCase();\n if (BUTTON_IDS.has(lower)) return 'Click';\n if (INPUT_IDS.has(lower)) return '';\n if (LIST_IDS.has(lower)) return '';\n // Capitalize first letter\n return id.charAt(0).toUpperCase() + id.slice(1);\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction createTriggerElement(selector: string, hyperscript?: string): string {\n const attr = hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n // If the trigger selector refers to an existing element type, use it\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return `<button id=\"${id}\"${attr}>Click</button>`;\n }\n return `<button id=\"trigger\"${attr}>Click</button>`;\n}\n\nfunction targetToSelector(ref: TargetRef): string | null {\n if (ref.kind === 'selector') return ref.value;\n if (ref.kind === 'self') return null;\n return null;\n}\n\nfunction needsInitialStyles(ops: AbstractOperation[]): boolean {\n return ops.some(op => op.op === 'hide' || op.op === 'show');\n}\n\nfunction getInitialClasses(selector: string, ops: AbstractOperation[]): string[] {\n const classes: string[] = [];\n for (const op of ops) {\n if (op.op === 'removeClass' && 'target' in op) {\n const targetSel = targetToSelector(op.target);\n if (targetSel === selector || (op.target.kind === 'self' && selector === null)) {\n classes.push(op.className);\n }\n }\n }\n return classes;\n}\n\nfunction escapeAttr(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n","/**\n * Playwright Test Renderer\n *\n * Generates complete Playwright test files from BehaviorSpecs.\n * Each generated test creates an HTML fixture, triggers the behavior,\n * and asserts the expected DOM changes.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type { TestRenderer, TestRenderOptions, GeneratedTest } from './types.js';\nimport { generateFixture } from './html-fixture.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class PlaywrightRenderer implements TestRenderer {\n readonly framework = 'playwright';\n\n render(spec: BehaviorSpec, options: TestRenderOptions = {}): GeneratedTest {\n const testName = options.testName ?? generateTestName(spec);\n const html = generateFixture(spec, options.hyperscript);\n\n const lines: string[] = [];\n\n // Import\n lines.push(\"import { test, expect } from '@playwright/test';\");\n lines.push('');\n\n // Test\n lines.push(`test('${escapeString(testName)}', async ({ page }) => {`);\n\n // Setup fixture\n lines.push(` await page.setContent(\\`${escapeTemplate(wrapHtml(html))}\\`);`);\n\n // Load the engine's script-tag bundle. (Until 4.0 this named core's\n // `lokascript-browser.js`, an alias of `hyperfixi.js`, which is the engine's file since\n // Phase C3; a 'compiled' mode loaded AOT output instead, until the AOT compiler retired.)\n const bundlePath =\n options.bundlePath ?? './node_modules/@hyperfixi/engine/dist/hyperfixi-hs.js';\n lines.push(` await page.addScriptTag({ path: '${escapeString(bundlePath)}' });`);\n lines.push(\" await page.waitForFunction(() => document.querySelector('[_]') !== null);\");\n // Wait for the engine to process attributes\n lines.push(' await page.waitForTimeout(100);');\n lines.push('');\n\n // Determine trigger locator\n const triggerLocator = getTriggerLocator(spec);\n\n // Generate assertions for each operation\n for (const op of spec.operations) {\n const assertions = generateAssertions(op, spec, triggerLocator);\n lines.push(...assertions.map(l => ` ${l}`));\n }\n\n lines.push('});');\n lines.push('');\n\n return {\n name: testName,\n code: lines.join('\\n'),\n html,\n framework: 'playwright',\n operations: spec.operations,\n };\n }\n}\n\n// =============================================================================\n// Assertion Generation\n// =============================================================================\n\nfunction generateAssertions(\n op: AbstractOperation,\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n switch (op.op) {\n case 'toggleClass':\n return generateToggleClassAssertions(op, spec, triggerLocator);\n case 'addClass':\n return generateAddClassAssertions(op, spec, triggerLocator);\n case 'removeClass':\n return generateRemoveClassAssertions(op, spec, triggerLocator);\n case 'setContent':\n return generateSetContentAssertions(op, spec, triggerLocator);\n case 'appendContent':\n return generateAppendContentAssertions(op, spec, triggerLocator);\n case 'show':\n return generateShowAssertions(op, spec, triggerLocator);\n case 'hide':\n return generateHideAssertions(op, spec, triggerLocator);\n case 'navigate':\n return generateNavigateAssertions(op, spec, triggerLocator);\n case 'focus':\n return generateFocusAssertions(op, spec, triggerLocator);\n case 'blur':\n return generateBlurAssertions(op, spec, triggerLocator);\n case 'triggerEvent':\n return generateTriggerEventAssertions(op, spec, triggerLocator);\n case 'fetch':\n return generateFetchAssertions(op, spec, triggerLocator);\n case 'wait':\n return generateWaitAssertions(op);\n case 'setVariable':\n case 'increment':\n case 'decrement':\n return generateVariableAssertions(op, spec, triggerLocator);\n case 'log':\n return generateLogAssertions(op, spec, triggerLocator);\n default:\n return [`// Unsupported operation: ${(op as AbstractOperation).op}`];\n }\n}\n\n// --- DOM Class ---\n\nfunction generateToggleClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n const lines: string[] = [];\n\n lines.push(`// Toggle .${op.className}`);\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n if (spec.async) lines.push('await page.waitForTimeout(100);');\n lines.push(`await expect(${locator}).toHaveClass(/${op.className}/);`);\n lines.push('');\n lines.push(`// Toggle back`);\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n if (spec.async) lines.push('await page.waitForTimeout(100);');\n lines.push(`await expect(${locator}).not.toHaveClass(/${op.className}/);`);\n\n return lines;\n}\n\nfunction generateAddClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Add .${op.className}`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toHaveClass(/${op.className}/);`,\n ];\n}\n\nfunction generateRemoveClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Remove .${op.className} (should have it initially)`,\n `await expect(${locator}).toHaveClass(/${op.className}/);`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toHaveClass(/${op.className}/);`,\n ];\n}\n\n// --- DOM Content ---\n\nfunction generateSetContentAssertions(\n op: { content: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Put \"${op.content}\" into element`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toContainText('${escapeString(op.content)}');`,\n ];\n}\n\nfunction generateAppendContentAssertions(\n op: { content: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Append \"${op.content}\"`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toContainText('${escapeString(op.content)}');`,\n ];\n}\n\n// --- DOM Visibility ---\n\nfunction generateShowAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Show element (initially hidden)',\n `await expect(${locator}).not.toBeVisible();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toBeVisible();`,\n ];\n}\n\nfunction generateHideAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Hide element (initially visible)',\n `await expect(${locator}).toBeVisible();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toBeVisible();`,\n ];\n}\n\n// --- Navigation ---\n\nfunction generateNavigateAssertions(\n op: { url: string },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Navigate to ${op.url}`,\n `// Note: Navigation will change the page URL`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n `await page.waitForURL('**${op.url}**');`,\n ];\n}\n\n// --- Focus ---\n\nfunction generateFocusAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Focus element',\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toBeFocused();`,\n ];\n}\n\nfunction generateBlurAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Blur element',\n `await ${locator}.focus();`,\n `await expect(${locator}).toBeFocused();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toBeFocused();`,\n ];\n}\n\n// --- Events ---\n\nfunction generateTriggerEventAssertions(\n op: { eventName: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Trigger '${op.eventName}' event`,\n `const eventReceived = page.evaluate((sel) => {`,\n ` return new Promise<boolean>((resolve) => {`,\n ` const el = document.querySelector(sel) ?? document.body;`,\n ` el.addEventListener('${escapeString(op.eventName)}', () => resolve(true), { once: true });`,\n ` setTimeout(() => resolve(false), 2000);`,\n ` });`,\n `}, '${escapeString(targetToCssSelector(op.target))}');`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n `expect(await eventReceived).toBe(true);`,\n ];\n}\n\n// --- Async ---\n\nfunction generateFetchAssertions(\n op: { url: string; format: string; target?: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const lines: string[] = [];\n\n lines.push(`// Fetch ${op.url} as ${op.format}`);\n\n // Mock the network request\n if (op.format === 'json') {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'application/json',`);\n lines.push(` body: JSON.stringify({ data: 'mock' }),`);\n lines.push(` });`);\n lines.push(`});`);\n } else if (op.format === 'html') {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'text/html',`);\n lines.push(` body: '<div>Mock HTML</div>',`);\n lines.push(` });`);\n lines.push(`});`);\n } else {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'text/plain',`);\n lines.push(` body: 'Mock response',`);\n lines.push(` });`);\n lines.push(`});`);\n }\n\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n lines.push('await page.waitForTimeout(500);');\n\n // If there's a target, verify content was placed\n if (op.target) {\n const locator = targetToLocator(op.target, spec);\n lines.push(`await expect(${locator}).not.toBeEmpty();`);\n }\n\n return lines;\n}\n\nfunction generateWaitAssertions(op: { durationMs: number }): string[] {\n return [`// Wait ${op.durationMs}ms`, `// (no assertion — wait is a timing operation)`];\n}\n\n// --- Variables ---\n\nfunction generateVariableAssertions(\n op: AbstractOperation,\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n // Variable operations don't have direct DOM assertions\n // but we can verify the behavior executed without errors\n return [\n `// ${op.op} (variable operation — verify no errors)`,\n 'const errors: string[] = [];',\n \"page.on('pageerror', (err) => errors.push(err.message));\",\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n 'expect(errors).toHaveLength(0);',\n ];\n}\n\n// --- Utility ---\n\nfunction generateLogAssertions(\n op: { values: string[] },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Log: ${op.values.join(', ')}`,\n 'const logs: string[] = [];',\n \"page.on('console', msg => { if (msg.type() === 'log') logs.push(msg.text()); });\",\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n 'expect(logs.length).toBeGreaterThan(0);',\n ];\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction generateTestName(spec: BehaviorSpec): string {\n if (spec.source) return spec.source;\n\n const parts: string[] = [];\n parts.push(`on ${spec.trigger.event}`);\n\n for (const op of spec.operations) {\n parts.push(describeOp(op));\n }\n\n return parts.join(' ');\n}\n\nfunction describeOp(op: AbstractOperation): string {\n switch (op.op) {\n case 'toggleClass':\n return `toggle .${op.className}${describeTarget(op.target)}`;\n case 'addClass':\n return `add .${op.className}${describeTarget(op.target)}`;\n case 'removeClass':\n return `remove .${op.className}${describeTarget(op.target)}`;\n case 'setContent':\n return `put \"${op.content}\"${describeTarget(op.target)}`;\n case 'appendContent':\n return `append \"${op.content}\"${describeTarget(op.target)}`;\n case 'show':\n return `show${describeTarget(op.target)}`;\n case 'hide':\n return `hide${describeTarget(op.target)}`;\n case 'navigate':\n return `go to ${op.url}`;\n case 'focus':\n return `focus${describeTarget(op.target)}`;\n case 'blur':\n return `blur${describeTarget(op.target)}`;\n case 'fetch':\n return `fetch ${op.url} as ${op.format}`;\n case 'wait':\n return `wait ${op.durationMs}ms`;\n case 'setVariable':\n return `set ${op.name} to ${op.value}`;\n case 'increment':\n return `increment${describeTarget(op.target)}`;\n case 'decrement':\n return `decrement${describeTarget(op.target)}`;\n case 'triggerEvent':\n return `trigger ${op.eventName}${describeTarget(op.target)}`;\n case 'log':\n return `log ${op.values.join(', ')}`;\n case 'historyBack':\n return 'go back';\n case 'historyForward':\n return 'go forward';\n default:\n return (op as AbstractOperation).op;\n }\n}\n\nfunction describeTarget(target: TargetRef): string {\n if (target.kind === 'self') return '';\n if (target.kind === 'selector') return ` on ${target.value}`;\n if (target.kind === 'variable') return ` on ${target.value}`;\n return '';\n}\n\nfunction getTriggerLocator(spec: BehaviorSpec): string {\n if (spec.triggerTarget.kind === 'selector') {\n return `page.locator('${escapeString(spec.triggerTarget.value)}')`;\n }\n\n // Self — find the element with the _=\"...\" attribute\n // If operations have a target, use that; otherwise use a generic trigger\n for (const op of spec.operations) {\n if ('target' in op && (op as { target: TargetRef }).target.kind === 'selector') {\n const t = (op as { target: TargetRef }).target;\n if (t.kind === 'selector') {\n return `page.locator('${escapeString(t.value)}')`;\n }\n }\n }\n\n return \"page.locator('[_]')\";\n}\n\nfunction targetToLocator(target: TargetRef, spec: BehaviorSpec): string {\n if (target.kind === 'selector') {\n return `page.locator('${escapeString(target.value)}')`;\n }\n if (target.kind === 'self') {\n return getTriggerLocator(spec);\n }\n // Variable target — fall back to trigger\n return getTriggerLocator(spec);\n}\n\nfunction targetToCssSelector(target: TargetRef): string {\n if (target.kind === 'selector') return target.value;\n if (target.kind === 'self') return '[_]';\n return 'body';\n}\n\nfunction triggerAction(spec: BehaviorSpec): string {\n const event = spec.trigger.event;\n switch (event) {\n case 'click':\n return 'click()';\n case 'dblclick':\n return 'dblclick()';\n case 'mouseenter':\n return 'hover()';\n case 'mouseover':\n return 'hover()';\n case 'focus':\n return 'focus()';\n case 'blur':\n return 'blur()';\n case 'keydown':\n case 'keyup':\n case 'keypress':\n return \"press('Enter')\";\n case 'input':\n case 'change':\n return \"fill('test')\";\n case 'submit':\n return 'click()';\n default:\n return `dispatchEvent(new Event('${escapeString(event)}'))`;\n }\n}\n\nfunction wrapHtml(body: string): string {\n return `<!DOCTYPE html>\\n<html>\\n<body>\\n${body}\\n</body>\\n</html>`;\n}\n\nfunction escapeString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction escapeTemplate(s: string): string {\n return s.replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n","/**\n * Shared Renderer Helpers\n *\n * Pure utility functions used by React, Vue, and Svelte component renderers.\n * Framework-agnostic: naming, type inference, tag inference, string escaping.\n */\n\nimport type { BehaviorSpec, TargetRef } from '../operations/types.js';\n\n// =============================================================================\n// String Utilities\n// =============================================================================\n\nexport function capitalize(s: string): string {\n if (!s) return s;\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function escapeString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nexport function isNumeric(s: string): boolean {\n return /^-?\\d+(\\.\\d+)?$/.test(s);\n}\n\nexport function cleanVarName(name: string): string {\n return name.replace(/^:/, '').replace(/[^a-zA-Z0-9]/g, '');\n}\n\n// =============================================================================\n// Target Helpers\n// =============================================================================\n\nexport function targetKey(target: TargetRef): string {\n if (target.kind === 'self') return 'self';\n return target.value;\n}\n\nexport function stateKey(prefix: string, name: string, target: TargetRef): string {\n return `${prefix}:${name}:${targetKey(target)}`;\n}\n\nexport function targetStateName(target: TargetRef, suffix: string): string {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n return clean + suffix;\n }\n return suffix.toLowerCase();\n}\n\nexport function targetRefName(target: TargetRef): string {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n return clean + 'Ref';\n }\n return 'elementRef';\n}\n\n// =============================================================================\n// Type Inference\n// =============================================================================\n\nexport function inferType(value: string): string {\n if (isNumeric(value)) return '<number>';\n if (value === 'true' || value === 'false') return '<boolean>';\n return '<string>';\n}\n\nexport function inferInitial(value: string, typeAnn: string): string {\n if (typeAnn === '<number>') return isNumeric(value) ? value : '0';\n if (typeAnn === '<boolean>') return value === 'true' ? 'true' : 'false';\n return `'${escapeString(value)}'`;\n}\n\n// =============================================================================\n// Tag and Selector Inference\n// =============================================================================\n\nexport function selectorToTag(selector: string): string {\n if (selector.startsWith('#')) {\n const id = selector.slice(1).toLowerCase();\n if (['btn', 'button', 'submit', 'trigger'].includes(id)) return 'button';\n if (['input', 'search', 'email', 'text', 'field'].includes(id)) return 'input';\n if (['form', 'signup', 'login'].includes(id)) return 'form';\n return 'div';\n }\n return 'div';\n}\n\nexport function inferTriggerTag(spec: BehaviorSpec): string {\n if (spec.triggerTarget.kind === 'selector') {\n return selectorToTag(spec.triggerTarget.value);\n }\n if (spec.trigger.event === 'submit') return 'form';\n if (spec.trigger.event === 'input' || spec.trigger.event === 'change') return 'input';\n return 'button';\n}\n\nexport function inferTriggerContent(spec: BehaviorSpec): string {\n const tag = inferTriggerTag(spec);\n if (tag === 'input' || tag === 'form') return '';\n if (spec.triggerTarget.kind === 'selector') {\n const id = spec.triggerTarget.value.replace(/^[#.]/, '');\n return capitalize(id);\n }\n return 'Click';\n}\n\n// =============================================================================\n// Component Naming\n// =============================================================================\n\nexport function generateComponentName(spec: BehaviorSpec): string {\n if (spec.operations.length === 0) return 'Component';\n\n const parts: string[] = [];\n const firstOp = spec.operations[0];\n\n switch (firstOp.op) {\n case 'toggleClass':\n parts.push('Toggle', capitalize(firstOp.className));\n break;\n case 'addClass':\n parts.push('Add', capitalize(firstOp.className));\n break;\n case 'removeClass':\n parts.push('Remove', capitalize(firstOp.className));\n break;\n case 'show':\n parts.push('Show');\n appendTargetName(parts, firstOp.target);\n break;\n case 'hide':\n parts.push('Hide');\n appendTargetName(parts, firstOp.target);\n break;\n case 'setContent':\n parts.push('SetContent');\n appendTargetName(parts, firstOp.target);\n break;\n case 'navigate':\n parts.push('NavigateTo');\n parts.push(capitalize(firstOp.url.replace(/[^a-zA-Z0-9]/g, '')));\n break;\n case 'fetch':\n parts.push('FetchData');\n break;\n case 'increment':\n parts.push('Increment');\n appendTargetName(parts, firstOp.target);\n break;\n case 'decrement':\n parts.push('Decrement');\n appendTargetName(parts, firstOp.target);\n break;\n case 'focus':\n parts.push('Focus');\n appendTargetName(parts, firstOp.target);\n break;\n default:\n parts.push('Component');\n }\n\n if (spec.trigger.event !== 'click') {\n parts.push('On', capitalize(spec.trigger.event));\n }\n\n return parts.join('') || 'Component';\n}\n\nfunction appendTargetName(parts: string[], target: TargetRef): void {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n parts.push(capitalize(clean));\n }\n}\n\n// =============================================================================\n// Class State Extraction\n// =============================================================================\n\n/**\n * Find class operations on the trigger element ('self') and look up their state variable names.\n * Works with any renderer's stateMap as long as keys follow the `target:class:className` pattern.\n */\nexport function getSelfClassStates(\n spec: BehaviorSpec,\n stateMap: Map<string, string>\n): { stateName: string; className: string }[] {\n const result: { stateName: string; className: string }[] = [];\n for (const op of spec.operations) {\n if (\n (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') &&\n op.target.kind === 'self'\n ) {\n const stateVar = stateMap.get('self:class:' + op.className);\n if (stateVar) {\n result.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n return result;\n}\n","/**\n * React Component Renderer\n *\n * Generates complete React functional components from BehaviorSpecs.\n * Maps abstract operations to React hooks (useState, useRef, useCallback) and JSX.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class ReactRenderer implements ComponentRenderer {\n readonly framework = 'react';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n // Pre-pass: analyze what hooks and state we need\n const analysis = analyzeOperations(spec);\n\n const lines: string[] = [];\n\n // Imports\n const hooksList = [...analysis.hooks];\n if (hooksList.length > 0) {\n lines.push(`import { ${hooksList.join(', ')} } from 'react';`);\n }\n lines.push('');\n\n // Component function\n const propsType = ts ? '()' : '()';\n lines.push(`export function ${componentName}${propsType} {`);\n\n // State declarations\n for (const state of analysis.states) {\n const typeAnn = ts ? state.typeAnnotation : '';\n lines.push(\n ` const [${state.name}, ${state.setter}] = useState${typeAnn}(${state.initialValue});`\n );\n }\n\n // Ref declarations\n for (const ref of analysis.refs) {\n const typeAnn = ts ? ref.typeAnnotation : '';\n lines.push(` const ${ref.name} = useRef${typeAnn}(null);`);\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n lines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n lines.push(` const ${handlerName} = useCallback(${asyncPrefix}() => {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n lines.push(` ${l}`);\n }\n }\n\n lines.push(' }, []);');\n lines.push('');\n\n // JSX return\n lines.push(' return (');\n const jsx = generateJSX(spec, analysis, handlerName);\n for (const l of jsx) {\n lines.push(` ${l}`);\n }\n lines.push(' );');\n lines.push('}');\n lines.push('');\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'react',\n operations: spec.operations,\n hooks: hooksList,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis (pre-pass)\n// =============================================================================\n\ninterface StateDecl {\n name: string;\n setter: string;\n typeAnnotation: string;\n initialValue: string;\n /** The target selector this state is associated with */\n targetKey: string;\n}\n\ninterface RefDecl {\n name: string;\n typeAnnotation: string;\n targetKey: string;\n}\n\ninterface OperationAnalysis {\n hooks: Set<string>;\n states: StateDecl[];\n refs: RefDecl[];\n /** Map from target key → state variable name */\n stateMap: Map<string, string>;\n /** Map from target key → ref variable name */\n refMap: Map<string, string>;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec): OperationAnalysis {\n const hooks = new Set<string>();\n const states: StateDecl[] = [];\n const refs: RefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n // Always need useCallback for the handler\n hooks.add('useCallback');\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = `has${capitalize(op.className)}`;\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: 'false',\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: initial,\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: typeAnn,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Count');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<number>',\n initialValue: '0',\n targetKey: tk,\n });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n // Need state for the fetched data\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n hooks.add('useRef');\n const name = targetRefName(op.target);\n refs.push({\n name,\n typeAnnotation: '<HTMLElement>',\n targetKey: tk,\n });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n hooks.add('useRef');\n const name = targetRefName(op.target);\n refs.push({\n name,\n typeAnnotation: '<HTMLElement>',\n targetKey: tk,\n });\n refMap.set(tk, name);\n }\n break;\n }\n\n // navigate, historyBack, historyForward, wait, log — no state/refs needed\n }\n }\n\n return { hooks, states, refs, stateMap, refMap };\n}\n\n// =============================================================================\n// Operation Code Generation\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: OperationAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(prev => !prev);`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(true);`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(false);`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setVisible';\n return [`${setter}(true);`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setVisible';\n return [`${setter}(false);`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n return [`${setter}('${escapeString(op.content)}');`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n return [`${setter}(prev => prev + '${escapeString(op.content)}');`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setValue';\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${setter}(${val});`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setCount';\n return [`${setter}(prev => prev + ${op.amount});`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setCount';\n return [`${setter}(prev => prev - ${op.amount});`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}';`];\n\n case 'historyBack':\n return ['window.history.back();'];\n\n case 'historyForward':\n return ['window.history.forward();'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}');`);\n if (op.format === 'json') {\n lines.push('const data = await response.json();');\n } else if (op.format === 'html') {\n lines.push('const data = await response.text();');\n } else {\n lines.push('const data = await response.text();');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n if (op.format === 'json') {\n lines.push(`${setter}(JSON.stringify(data));`);\n } else {\n lines.push(`${setter}(data);`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}));`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.current?.focus();`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.current?.blur();`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}?.current?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }));`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')});`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// JSX Generation\n// =============================================================================\n\nfunction generateJSX(\n spec: BehaviorSpec,\n analysis: OperationAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectJSXElements(spec, analysis);\n const eventProp = eventToReactProp(spec.trigger.event);\n\n const needsFragment = elements.length > 1 || elements.length === 0;\n\n if (needsFragment) lines.push('<>');\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventProp}={${handlerName}}`];\n\n // If trigger is 'self' and there are class operations on self, add className\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n if (selfClassStates.length > 0) {\n const classExpr = selfClassStates\n .map(s => `\\${${s.stateName} ? '${s.className}' : ''}`)\n .join(' ')\n .trim();\n triggerAttrs.push(`className={\\`${classExpr}\\`.trim()}`);\n }\n\n const indent = needsFragment ? ' ' : '';\n lines.push(\n `${indent}<${triggerTag} ${triggerAttrs.join(' ')}>${inferTriggerContent(spec)}</${triggerTag}>`\n );\n\n // Target elements (that aren't the trigger)\n for (const el of elements) {\n const elLines = renderJSXElement(el, analysis);\n for (const l of elLines) {\n lines.push(`${indent}${l}`);\n }\n }\n\n if (needsFragment) lines.push('</>');\n\n return lines;\n}\n\ninterface JSXElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n content?: string;\n /** Operations targeting this element */\n ops: AbstractOperation[];\n}\n\nfunction collectJSXElements(spec: BehaviorSpec, _analysis: OperationAnalysis): JSXElement[] {\n const seen = new Set<string>();\n const elements: JSXElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n // Skip if this is the trigger element (it's rendered separately)\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n // Add op to existing element\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({\n selector: sel,\n tag,\n id,\n className: cls,\n ops: [op],\n });\n }\n\n return elements;\n}\n\nfunction renderJSXElement(el: JSXElement, analysis: OperationAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Check for class state on this element\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (classStates.length > 0) {\n const parts = classStates.map(s => `\\${${s.stateName} ? '${s.className}' : ''}`);\n if (el.className) {\n attrs.push(`className={\\`${el.className} ${parts.join(' ')}\\`.trim()}`);\n } else {\n attrs.push(`className={\\`${parts.join(' ')}\\`.trim()}`);\n }\n } else if (el.className) {\n attrs.push(`className=\"${el.className}\"`);\n }\n\n // Check for ref on this element\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`ref={${refName}}`);\n }\n\n // Check for visibility state\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Check for content state\n const contentState = analysis.stateMap.get(el.selector + ':content');\n\n // Check for numeric state\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState\n ? `{${contentState}}`\n : numState\n ? `{${numState}}`\n : (el.content ?? el.id ?? '');\n\n const elementLine = `<${el.tag}${attrStr}>${content}</${el.tag}>`;\n\n if (visState) {\n lines.push(`{${visState} && ${elementLine}}`);\n } else {\n lines.push(elementLine);\n }\n\n return lines;\n}\n\n// =============================================================================\n// React-specific Helpers\n// =============================================================================\n\nfunction eventToReactProp(event: string): string {\n switch (event) {\n case 'click':\n return 'onClick';\n case 'dblclick':\n return 'onDoubleClick';\n case 'mouseenter':\n return 'onMouseEnter';\n case 'mouseover':\n return 'onMouseOver';\n case 'mouseleave':\n return 'onMouseLeave';\n case 'focus':\n return 'onFocus';\n case 'blur':\n return 'onBlur';\n case 'keydown':\n return 'onKeyDown';\n case 'keyup':\n return 'onKeyUp';\n case 'keypress':\n return 'onKeyPress';\n case 'input':\n return 'onInput';\n case 'change':\n return 'onChange';\n case 'submit':\n return 'onSubmit';\n default:\n return `on${capitalize(event)}`;\n }\n}\n","/**\n * Vue 3 Component Renderer\n *\n * Generates Vue 3 Single File Components (SFC) with Composition API\n * (<script setup>) from BehaviorSpecs.\n * Maps abstract operations to Vue refs and template directives.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class VueRenderer implements ComponentRenderer {\n readonly framework = 'vue';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n const analysis = analyzeOperations(spec);\n\n // -- <script setup> block --\n const scriptLines: string[] = [];\n\n // Imports\n const vueImports: string[] = [];\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n vueImports.push('ref');\n }\n if (vueImports.length > 0) {\n scriptLines.push(`import { ${vueImports.join(', ')} } from 'vue'`);\n scriptLines.push('');\n }\n\n // State declarations\n for (const state of analysis.states) {\n if (ts) {\n scriptLines.push(`const ${state.name} = ref${state.typeAnnotation}(${state.initialValue})`);\n } else {\n scriptLines.push(`const ${state.name} = ref(${state.initialValue})`);\n }\n }\n\n // Ref declarations\n for (const r of analysis.refs) {\n if (ts) {\n scriptLines.push(`const ${r.name} = ref<HTMLElement | null>(null)`);\n } else {\n scriptLines.push(`const ${r.name} = ref(null)`);\n }\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n scriptLines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n scriptLines.push(`${asyncPrefix}function ${handlerName}() {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n scriptLines.push(` ${l}`);\n }\n }\n\n scriptLines.push('}');\n\n // -- <template> block --\n const templateLines = generateTemplate(spec, analysis, handlerName);\n\n // -- Combine SFC --\n const langAttr = ts ? ' lang=\"ts\"' : '';\n const lines: string[] = [];\n lines.push(`<script setup${langAttr}>`);\n for (const l of scriptLines) {\n lines.push(l);\n }\n lines.push('</script>');\n lines.push('');\n lines.push('<template>');\n for (const l of templateLines) {\n lines.push(` ${l}`);\n }\n lines.push('</template>');\n lines.push('');\n\n const hooks = vueImports.length > 0 ? [...vueImports] : [];\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'vue',\n operations: spec.operations,\n hooks,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis\n// =============================================================================\n\ninterface VueStateDecl {\n name: string;\n typeAnnotation: string;\n initialValue: string;\n targetKey: string;\n}\n\ninterface VueRefDecl {\n name: string;\n targetKey: string;\n}\n\ninterface VueAnalysis {\n states: VueStateDecl[];\n refs: VueRefDecl[];\n stateMap: Map<string, string>;\n refMap: Map<string, string>;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec): VueAnalysis {\n const states: VueStateDecl[] = [];\n const refs: VueRefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: 'false',\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: initial,\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n typeAnnotation: typeAnn,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Count');\n states.push({\n name,\n typeAnnotation: '<number>',\n initialValue: '0',\n targetKey: tk,\n });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n }\n }\n\n return { states, refs, stateMap, refMap };\n}\n\n// =============================================================================\n// Operation Code Generation (Vue: .value mutation)\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: VueAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = !${stateVar ?? 'state'}.value`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = true`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = false`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'}.value = true`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'}.value = false`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'}.value = '${escapeString(op.content)}'`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'}.value += '${escapeString(op.content)}'`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${stateVar ?? 'value'}.value = ${val}`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'}.value += ${op.amount}`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'}.value -= ${op.amount}`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}'`];\n\n case 'historyBack':\n return ['window.history.back()'];\n\n case 'historyForward':\n return ['window.history.forward()'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}')`);\n if (op.format === 'json') {\n lines.push('const data = await response.json()');\n } else {\n lines.push('const data = await response.text()');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n if (op.format === 'json') {\n lines.push(`${stateVar ?? 'content'}.value = JSON.stringify(data)`);\n } else {\n lines.push(`${stateVar ?? 'content'}.value = data`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}))`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}.value?.focus()`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}.value?.blur()`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}.value?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }))`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')})`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// Template Generation\n// =============================================================================\n\nfunction generateTemplate(\n spec: BehaviorSpec,\n analysis: VueAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectTargetElements(spec);\n const eventDirective = `@${spec.trigger.event}`;\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventDirective}=\"${handlerName}\"`];\n\n // Class bindings on trigger\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n if (selfClassStates.length > 0) {\n const classObj = selfClassStates.map(s => `${s.className}: ${s.stateName}`).join(', ');\n triggerAttrs.push(`:class=\"{ ${classObj} }\"`);\n }\n\n const triggerContent = inferTriggerContent(spec);\n lines.push(`<${triggerTag} ${triggerAttrs.join(' ')}>${triggerContent}</${triggerTag}>`);\n\n // Target elements\n for (const el of elements) {\n const elLines = renderVueElement(el, analysis);\n for (const l of elLines) {\n lines.push(l);\n }\n }\n\n return lines;\n}\n\ninterface TemplateElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n ops: AbstractOperation[];\n}\n\nfunction collectTargetElements(spec: BehaviorSpec): TemplateElement[] {\n const seen = new Set<string>();\n const elements: TemplateElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({ selector: sel, tag, id, className: cls, ops: [op] });\n }\n\n return elements;\n}\n\nfunction renderVueElement(el: TemplateElement, analysis: VueAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Class bindings\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (classStates.length > 0) {\n const classObj = classStates.map(s => `${s.className}: ${s.stateName}`).join(', ');\n if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n attrs.push(`:class=\"{ ${classObj} }\"`);\n } else {\n attrs.push(`:class=\"{ ${classObj} }\"`);\n }\n } else if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n }\n\n // Ref binding\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`ref=\"${refName}\"`);\n }\n\n // Visibility\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Content\n const contentState = analysis.stateMap.get(el.selector + ':content');\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState\n ? `{{ ${contentState} }}`\n : numState\n ? `{{ ${numState} }}`\n : (el.id ?? '');\n\n if (visState) {\n lines.push(`<${el.tag}${attrStr} v-if=\"${visState}\">${content}</${el.tag}>`);\n } else {\n lines.push(`<${el.tag}${attrStr}>${content}</${el.tag}>`);\n }\n\n return lines;\n}\n","/**\n * Svelte 5 Component Renderer\n *\n * Generates Svelte 5 components with runes ($state, $derived, $effect)\n * from BehaviorSpecs.\n * Maps abstract operations to direct state mutation and Svelte template syntax.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class SvelteRenderer implements ComponentRenderer {\n readonly framework = 'svelte';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n const analysis = analyzeOperations(spec, ts);\n\n // -- <script> block --\n const scriptLines: string[] = [];\n\n // State declarations ($state runes — no imports needed)\n for (const state of analysis.states) {\n scriptLines.push(`let ${state.name} = $state(${state.initialValue})`);\n }\n\n // Ref declarations (plain variables, bound via bind:this)\n for (const r of analysis.refs) {\n if (ts) {\n scriptLines.push(`let ${r.name}: HTMLElement`);\n } else {\n scriptLines.push(`let ${r.name}`);\n }\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n scriptLines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n scriptLines.push(`${asyncPrefix}function ${handlerName}() {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n scriptLines.push(` ${l}`);\n }\n }\n\n scriptLines.push('}');\n\n // -- Template --\n const templateLines = generateTemplate(spec, analysis, handlerName);\n\n // -- Combine --\n const langAttr = ts ? ' lang=\"ts\"' : '';\n const lines: string[] = [];\n lines.push(`<script${langAttr}>`);\n for (const l of scriptLines) {\n lines.push(` ${l}`);\n }\n lines.push('</script>');\n lines.push('');\n for (const l of templateLines) {\n lines.push(l);\n }\n lines.push('');\n\n // Track which runes are used\n const hooks: string[] = [];\n if (analysis.states.length > 0) hooks.push('$state');\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'svelte',\n operations: spec.operations,\n hooks,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis\n// =============================================================================\n\ninterface SvelteStateDecl {\n name: string;\n initialValue: string;\n targetKey: string;\n}\n\ninterface SvelteRefDecl {\n name: string;\n targetKey: string;\n}\n\ninterface SvelteAnalysis {\n states: SvelteStateDecl[];\n refs: SvelteRefDecl[];\n stateMap: Map<string, string>;\n refMap: Map<string, string>;\n ts: boolean;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec, ts: boolean): SvelteAnalysis {\n const states: SvelteStateDecl[] = [];\n const refs: SvelteRefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n states.push({ name, initialValue: 'false', targetKey: targetKey(op.target) });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({ name, initialValue: initial, targetKey: targetKey(op.target) });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({ name, initialValue: \"''\", targetKey: tk });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Count');\n states.push({ name, initialValue: '0', targetKey: tk });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({ name, initialValue: \"''\", targetKey: tk });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n }\n }\n\n return { states, refs, stateMap, refMap, ts };\n}\n\n// =============================================================================\n// Operation Code Generation (Svelte: direct mutation)\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: SvelteAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = !${stateVar ?? 'state'}`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = true`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = false`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'} = true`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'} = false`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'} = '${escapeString(op.content)}'`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'} += '${escapeString(op.content)}'`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${stateVar ?? 'value'} = ${val}`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'} += ${op.amount}`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'} -= ${op.amount}`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}'`];\n\n case 'historyBack':\n return ['window.history.back()'];\n\n case 'historyForward':\n return ['window.history.forward()'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}')`);\n if (op.format === 'json') {\n lines.push('const data = await response.json()');\n } else {\n lines.push('const data = await response.text()');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n if (op.format === 'json') {\n lines.push(`${stateVar ?? 'content'} = JSON.stringify(data)`);\n } else {\n lines.push(`${stateVar ?? 'content'} = data`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}))`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.focus()`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.blur()`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }))`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')})`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// Template Generation\n// =============================================================================\n\nfunction generateTemplate(\n spec: BehaviorSpec,\n analysis: SvelteAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectTargetElements(spec);\n const eventAttr = `on${spec.trigger.event}`;\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventAttr}={${handlerName}}`];\n\n // Class directives on trigger\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n for (const s of selfClassStates) {\n triggerAttrs.push(`class:${s.className}={${s.stateName}}`);\n }\n\n const triggerContent = inferTriggerContent(spec);\n lines.push(`<${triggerTag} ${triggerAttrs.join(' ')}>${triggerContent}</${triggerTag}>`);\n\n // Target elements\n for (const el of elements) {\n const elLines = renderSvelteElement(el, analysis);\n for (const l of elLines) {\n lines.push(l);\n }\n }\n\n return lines;\n}\n\ninterface TemplateElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n ops: AbstractOperation[];\n}\n\nfunction collectTargetElements(spec: BehaviorSpec): TemplateElement[] {\n const seen = new Set<string>();\n const elements: TemplateElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({ selector: sel, tag, id, className: cls, ops: [op] });\n }\n\n return elements;\n}\n\nfunction renderSvelteElement(el: TemplateElement, analysis: SvelteAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Class directives\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n }\n for (const s of classStates) {\n attrs.push(`class:${s.className}={${s.stateName}}`);\n }\n\n // Ref binding\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`bind:this={${refName}}`);\n }\n\n // Visibility\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Content\n const contentState = analysis.stateMap.get(el.selector + ':content');\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState ? `{${contentState}}` : numState ? `{${numState}}` : (el.id ?? '');\n\n const elementLine = `<${el.tag}${attrStr}>${content}</${el.tag}>`;\n\n if (visState) {\n lines.push(`{#if ${visState}}`);\n lines.push(` ${elementLine}`);\n lines.push('{/if}');\n } else {\n lines.push(elementLine);\n }\n\n return lines;\n}\n","/**\n * CompilationService — the main orchestrator.\n *\n * Accepts hyperscript in three formats (natural language, explicit syntax, LLM JSON),\n * validates it through semantic schemas and the engine, and translates, diffs, scores, and\n * renders it as components and tests. (It compiled to JavaScript through\n * `@hyperfixi/aot-compiler` until 4.0, when the AOT compiler retired.)\n */\n\nimport type {\n CompileRequest,\n ValidationResponse,\n TranslateRequest,\n TranslateResponse,\n TestRequest,\n TestResponse,\n ComponentRequest,\n ComponentResponse,\n DiffRequest,\n DiffResponse,\n GenerateRequest,\n GenerateResponse,\n ServiceOptions,\n SemanticJSON,\n SemanticJSONValue,\n Diagnostic,\n NormalizeResult,\n} from './types.js';\nimport { diffBehaviors } from './diff/diff.js';\nimport { scoreNodes, type ScoreRequest, type ScoreResponse } from './scoring/score.js';\nimport { normalize, initNormalizer } from './input/normalize.js';\nimport {\n runValidationGates,\n initValidation,\n type ValidationFunctions,\n} from './validation/gates.js';\nimport { extractOperations } from './operations/extract.js';\nimport { PlaywrightRenderer } from './renderers/playwright.js';\nimport { ReactRenderer } from './renderers/react.js';\nimport { VueRenderer } from './renderers/vue.js';\nimport { SvelteRenderer } from './renderers/svelte.js';\nimport type { TestRenderer } from './renderers/types.js';\nimport type { ComponentRenderer } from './renderers/component-types.js';\n\n// =============================================================================\n// Service\n// =============================================================================\n\n/** semantic's `findTranslationCollisions`, as the service calls it. */\ntype TranslationCollisionsFn = (\n code: string,\n from: string,\n to: string\n) => ReadonlyArray<{\n readonly name: string;\n readonly occurrences: ReadonlyArray<unknown>;\n readonly rename: string | undefined;\n readonly message: string;\n}>;\n\n/** `@lokascript/semantic`'s refusal, by name (the service loads semantic dynamically). */\ninterface LossyTranslation {\n name: 'LossyTranslationError';\n message: string;\n partial: string;\n loss: { kind: string; lost: readonly string[] };\n}\n\nfunction isLossyTranslation(error: unknown): error is LossyTranslation {\n return (\n error instanceof Error &&\n error.name === 'LossyTranslationError' &&\n typeof (error as Partial<LossyTranslation>).partial === 'string'\n );\n}\n\nexport class CompilationService {\n private confidenceThreshold: number;\n private translateFn: ((code: string, from: string, to: string) => string) | null = null;\n private translationCollisionsFn: TranslationCollisionsFn | null = null;\n /** semantic's `render`, for the English a translation runs as. */\n private renderFn: ((node: unknown, language: string) => string) | null = null;\n /**\n * `@hyperfixi/engine`'s first parse error for a source (null: it parses). Set by create()\n * when the engine is installed (an optional peer); without it there is no engine check.\n */\n private engineError: ((source: string) => string | null) | null = null;\n private testRenderers: Map<string, TestRenderer>;\n private componentRenderers: Map<string, ComponentRenderer>;\n\n private constructor(options: ServiceOptions = {}) {\n this.confidenceThreshold = options.confidenceThreshold ?? 0.7;\n\n // Initialize renderer registries with defaults\n this.testRenderers = new Map<string, TestRenderer>(\n Object.entries(options.testRenderers ?? { playwright: new PlaywrightRenderer() })\n );\n this.componentRenderers = new Map<string, ComponentRenderer>(\n Object.entries(\n options.componentRenderers ?? {\n react: new ReactRenderer(),\n vue: new VueRenderer(),\n svelte: new SvelteRenderer(),\n }\n )\n );\n }\n\n /**\n * Register a test renderer for a given framework.\n */\n registerTestRenderer(framework: string, renderer: TestRenderer): void {\n this.testRenderers.set(framework, renderer);\n }\n\n /**\n * Register a component renderer for a given framework.\n */\n registerComponentRenderer(framework: string, renderer: ComponentRenderer): void {\n this.componentRenderers.set(framework, renderer);\n }\n\n /**\n * Create a CompilationService by dynamically importing dependencies.\n *\n * This async factory resolves @lokascript/semantic (and, when it is installed,\n * @hyperfixi/engine) at runtime.\n */\n static async create(options: ServiceOptions = {}): Promise<CompilationService> {\n const service = new CompilationService(options);\n\n // Import semantic package\n const semantic = await import('@lokascript/semantic');\n\n // Initialize normalizer with semantic parsing functions\n initNormalizer({\n parseSemantic: semantic.parseSemantic,\n parseExplicit: semantic.parseExplicit,\n isExplicitSyntax: semantic.isExplicitSyntax,\n });\n\n // Initialize validation with schema validator\n // Cast needed: our interface uses `unknown` to avoid importing semantic types\n initValidation({\n validateSemanticResult:\n semantic.validateSemanticResult as ValidationFunctions['validateSemanticResult'],\n });\n\n // Store translate function\n service.translateFn = semantic.translate;\n service.translationCollisionsFn = semantic.findTranslationCollisions;\n service.renderFn = semantic.render as (node: unknown, language: string) => string;\n\n // The engine the product runs (hyperfixi-hs.js), when it is installed. Natural-language\n // input has to be English it reads: semantic's grammar is more permissive than the\n // engine's, and a source only semantic accepts does nothing on a page.\n try {\n const engine = await import('@hyperfixi/engine');\n engine.register(...engine.everything);\n service.engineError = source => {\n try {\n return engine.api.parse(source).errors[0]?.message.split('\\n')[0] ?? null;\n } catch (e) {\n return (e instanceof Error ? e.message : String(e)).split('\\n')[0] ?? 'parse error';\n }\n };\n } catch {\n /* @hyperfixi/engine is not installed: validation is semantic's alone */\n }\n\n return service;\n }\n\n /**\n * The engine's verdict on natural-language input: its parse of the English the page would\n * run — the source as written, or a translation's English render (what\n * `@lokascript/hyperscript-adapter` hands the engine). Null when it parses, or when there is\n * nothing to check (explicit / JSON input, or no engine installed).\n */\n private engineDiagnostic(\n request: CompileRequest,\n normalized: NormalizeResult\n ): Diagnostic | null {\n if (!this.engineError || normalized.format !== 'natural' || !request.code) return null;\n const language = request.language ?? 'en';\n const english = language === 'en' || language.startsWith('en-');\n let source = request.code;\n if (!english) {\n if (!this.renderFn || !normalized.node) return null;\n try {\n source = this.renderFn(normalized.node, 'en');\n } catch {\n return null;\n }\n }\n const error = this.engineError(source);\n if (!error) return null;\n return {\n severity: 'error',\n code: 'ENGINE_PARSE_ERROR',\n message: english\n ? `@hyperfixi/engine cannot read this: ${error}`\n : `@hyperfixi/engine cannot read its English (${source}): ${error}`,\n suggestion:\n \"The engine reads upstream _hyperscript's grammar: check the command's syntax \" +\n '(get_command_docs) and rewrite the part the error names.',\n };\n }\n\n // ===========================================================================\n // Public API\n // ===========================================================================\n\n /**\n * Validate input: semantic's parse and schemas, and (for natural-language input) the\n * engine's parse of the English the page would run.\n * Returns semantic representation and diagnostics.\n */\n validate(request: CompileRequest): ValidationResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Normalize\n const normalized = normalize(request);\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, diagnostics };\n }\n\n // Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n const engineRejects = gateResult.pass ? this.engineDiagnostic(request, normalized) : null;\n if (engineRejects) diagnostics.push(engineRejects);\n const ok = gateResult.pass && !engineRejects;\n\n const semanticJSON = ok ? nodeToSemanticJSON(normalized.node) : undefined;\n\n return {\n ok,\n semantic: semanticJSON,\n confidence: gateResult.adjustedConfidence,\n diagnostics,\n };\n }\n\n /**\n * Translate hyperscript between languages.\n */\n translate(request: TranslateRequest): TranslateResponse {\n if (!this.translateFn) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'NOT_INITIALIZED',\n message: 'Translation not available.',\n },\n ],\n };\n }\n\n try {\n const result = this.translateFn(request.code, request.from, request.to);\n\n // Arc 5's verified-translation badge: score the rendering against its\n // source (cross-language scoreFidelity). Advisory — verification can\n // fail to parse without flipping ok, and its diagnostics stay inside it.\n let verification: ScoreResponse | undefined;\n if (request.verify !== false) {\n verification = this.scoreFidelity({\n reference: { code: request.code, language: request.from },\n candidate: { code: result, language: request.to },\n });\n }\n\n return {\n ok: true,\n code: result,\n ...(verification !== undefined ? { verification } : {}),\n diagnostics: this.translationCollisions(request),\n };\n } catch (error) {\n // A translation that would lose part of the script is refused: say what\n // it loses, and keep the partial text out of `code`.\n if (isLossyTranslation(error)) {\n return {\n ok: false,\n partial: error.partial,\n loss: { kind: error.loss.kind, lost: [...error.loss.lost] },\n diagnostics: [\n {\n severity: 'error',\n code: 'LOSSY_TRANSLATION',\n message: error.message,\n suggestion:\n 'The translation would drop the part listed in `loss.lost`. ' +\n 'Rewrite that part of the source, or translate the rest without it.',\n },\n ],\n };\n }\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'TRANSLATE_ERROR',\n message: error instanceof Error ? error.message : String(error),\n },\n ],\n };\n }\n }\n\n /**\n * A variable of the source that the target language reads as a value word\n * (tl `ako` is `me`): the translation reads the value, and no spelling of\n * the name tells them apart, so the fix is a rename before translating.\n */\n private translationCollisions(request: TranslateRequest): Diagnostic[] {\n const findings = this.translationCollisionsFn?.(request.code, request.from, request.to) ?? [];\n return findings.map(finding => ({\n severity: 'warning' as const,\n code: 'NAME_COLLISION',\n message: finding.message,\n suggestion: finding.rename\n ? `Rename \\`${finding.name}\\` to \\`${finding.rename}\\` in the source (${finding.occurrences.length} place(s)), then translate.`\n : `Rename \\`${finding.name}\\` in the source, then translate.`,\n }));\n }\n\n /**\n * Generate behavior-level tests from hyperscript.\n *\n * Parses the input, extracts abstract operations (what the behavior does),\n * and renders them as test code in the requested framework.\n */\n generateTests(request: TestRequest): TestResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Step 1: Normalize input to SemanticNode (reuse existing pipeline)\n const normalized = normalize({\n code: request.code,\n explicit: request.explicit,\n semantic: request.semantic,\n language: request.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Step 2: Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n if (!gateResult.pass) {\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Step 3: Extract abstract operations\n const spec = extractOperations(normalized.node);\n\n if (spec.operations.length === 0) {\n diagnostics.push({\n severity: 'warning',\n code: 'NO_OPERATIONS',\n message: 'No testable operations extracted from the input.',\n });\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Attach source hyperscript for test naming\n if (!spec.source && request.code) {\n spec.source = request.code;\n }\n\n // Step 4: Render tests\n const frameworkName = request.framework ?? 'playwright';\n const renderer = this.testRenderers.get(frameworkName);\n if (!renderer) {\n diagnostics.push({\n severity: 'error',\n code: 'UNKNOWN_FRAMEWORK',\n message: `No test renderer registered for framework '${frameworkName}'. Available: ${[...this.testRenderers.keys()].join(', ')}`,\n });\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n const generated = renderer.render(spec, {\n testName: request.testName,\n bundlePath: request.bundlePath,\n hyperscript: request.code ?? request.explicit,\n });\n\n const semanticJSON = nodeToSemanticJSON(normalized.node);\n\n return {\n ok: true,\n tests: [\n {\n name: generated.name,\n code: generated.code,\n html: generated.html,\n framework: generated.framework,\n },\n ],\n operations: spec.operations,\n semantic: semanticJSON,\n diagnostics,\n };\n }\n\n /**\n * Generate a framework component from hyperscript.\n *\n * Parses the input, extracts abstract operations, and renders\n * them as a framework-specific component (React, Vue, or Svelte).\n */\n generateComponent(request: ComponentRequest): ComponentResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Step 1: Normalize input to SemanticNode\n const normalized = normalize({\n code: request.code,\n explicit: request.explicit,\n semantic: request.semantic,\n language: request.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, operations: [], diagnostics };\n }\n\n // Step 2: Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n if (!gateResult.pass) {\n return { ok: false, operations: [], diagnostics };\n }\n\n // Step 3: Extract abstract operations\n const spec = extractOperations(normalized.node);\n\n if (spec.operations.length === 0) {\n diagnostics.push({\n severity: 'warning',\n code: 'NO_OPERATIONS',\n message: 'No operations extracted from the input.',\n });\n return { ok: false, operations: [], diagnostics };\n }\n\n if (!spec.source && request.code) {\n spec.source = request.code;\n }\n\n // Step 4: Render component\n const frameworkName = request.framework ?? 'react';\n const renderer = this.componentRenderers.get(frameworkName);\n if (!renderer) {\n diagnostics.push({\n severity: 'error',\n code: 'UNKNOWN_FRAMEWORK',\n message: `No component renderer registered for framework '${frameworkName}'. Available: ${[...this.componentRenderers.keys()].join(', ')}`,\n });\n return { ok: false, operations: [], diagnostics };\n }\n const generated = renderer.render(spec, {\n componentName: request.componentName,\n typescript: request.typescript,\n });\n\n const semanticJSON = nodeToSemanticJSON(normalized.node);\n\n return {\n ok: true,\n component: {\n name: generated.name,\n code: generated.code,\n hooks: generated.hooks,\n framework: generated.framework,\n },\n operations: spec.operations,\n semantic: semanticJSON,\n diagnostics,\n };\n }\n\n /**\n * Compare two hyperscript inputs at the behavior level.\n *\n * Both sides are independently normalized and validated, then compared\n * as abstract operations. Same behavior in different languages → identical.\n */\n diff(request: DiffRequest): DiffResponse {\n const diagnostics: Diagnostic[] = [];\n const threshold = request.confidence ?? this.confidenceThreshold;\n\n // Normalize both sides independently\n const normA = normalize({\n code: request.a.code,\n explicit: request.a.explicit,\n semantic: request.a.semantic,\n language: request.a.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normA.diagnostics.map(d => ({ ...d, message: `[a] ${d.message}` })));\n\n const normB = normalize({\n code: request.b.code,\n explicit: request.b.explicit,\n semantic: request.b.semantic,\n language: request.b.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normB.diagnostics.map(d => ({ ...d, message: `[b] ${d.message}` })));\n\n if (!normA.node || !normB.node) {\n return {\n ok: false,\n identical: false,\n trigger: null,\n operations: [],\n summary: 'Parse failed',\n diagnostics,\n };\n }\n\n // Validate both sides\n const gateA = runValidationGates(normA.node, normA.confidence, threshold);\n diagnostics.push(...gateA.diagnostics.map(d => ({ ...d, message: `[a] ${d.message}` })));\n\n const gateB = runValidationGates(normB.node, normB.confidence, threshold);\n diagnostics.push(...gateB.diagnostics.map(d => ({ ...d, message: `[b] ${d.message}` })));\n\n if (!gateA.pass || !gateB.pass) {\n return {\n ok: false,\n identical: false,\n trigger: null,\n operations: [],\n summary: 'Validation failed',\n diagnostics,\n };\n }\n\n // Extract operations from both\n const specA = extractOperations(normA.node);\n const specB = extractOperations(normB.node);\n\n // Diff\n const result = diffBehaviors(specA, specB);\n\n return {\n ok: true,\n identical: result.identical,\n trigger: result.trigger,\n operations: result.operations,\n summary: result.summary,\n diagnostics,\n };\n }\n\n /**\n * Score a candidate against a reference for structural fidelity — the\n * multilingual ratchet's scorers (docs/FIDELITY.md) applied to one pair of\n * inputs. Sides accept any input format and may be in different languages;\n * see src/scoring/score.ts for signal semantics. Complementary to diff():\n * diff answers \"identical, and where not?\", this answers \"how faithful, and\n * what exactly is missing or hallucinated?\".\n */\n scoreFidelity(request: ScoreRequest): ScoreResponse {\n const diagnostics: Diagnostic[] = [];\n const threshold = request.confidence ?? this.confidenceThreshold;\n\n const normRef = normalize({ ...request.reference, confidence: request.confidence });\n diagnostics.push(\n ...normRef.diagnostics.map(d => ({ ...d, message: `[reference] ${d.message}` }))\n );\n const normCand = normalize({ ...request.candidate, confidence: request.confidence });\n diagnostics.push(\n ...normCand.diagnostics.map(d => ({ ...d, message: `[candidate] ${d.message}` }))\n );\n\n if (!normRef.node || !normCand.node) {\n return { ok: false, diagnostics };\n }\n\n const gateRef = runValidationGates(normRef.node, normRef.confidence, threshold);\n const gateCand = runValidationGates(normCand.node, normCand.confidence, threshold);\n diagnostics.push(\n ...gateRef.diagnostics.map(d => ({ ...d, message: `[reference] ${d.message}` }))\n );\n diagnostics.push(\n ...gateCand.diagnostics.map(d => ({ ...d, message: `[candidate] ${d.message}` }))\n );\n if (!gateRef.pass || !gateCand.pass) {\n return { ok: false, diagnostics };\n }\n\n // A side whose parse left tokens unconsumed was scored on a TRUNCATED\n // node, so every score compares less than was written. Scoring a\n // translation against a truncated reference is how `on load click() me`\n // → `ロード を で` came out faithful 1.0 on every axis: both sides had\n // dropped the same command. The scores stay as measured; `faithful` — the\n // claim \"this rendering is structurally exact\" — needs both parses whole.\n const truncated = (...lists: Diagnostic[][]): boolean =>\n lists.some(ds => ds.some(d => d.code === 'UNCONSUMED_INPUT'));\n const referenceComplete = !truncated(normRef.diagnostics, gateRef.diagnostics);\n const candidateComplete = !truncated(normCand.diagnostics, gateCand.diagnostics);\n if (!referenceComplete || !candidateComplete) {\n const sides = [!referenceComplete && 'reference', !candidateComplete && 'candidate']\n .filter(Boolean)\n .join(' and ');\n diagnostics.push({\n severity: 'warning',\n code: 'INCOMPLETE_PARSE',\n message: `The ${sides} parse left tokens unconsumed, so the scores compare only what parsed; not faithful.`,\n suggestion:\n 'The unconsumed tokens are named in the UNCONSUMED_INPUT diagnostics above. ' +\n 'If the reference is truncated, a translation of it drops the same clause.',\n });\n }\n\n const report = scoreNodes(normRef.node, normCand.node);\n return {\n ok: true,\n diagnostics,\n ...report,\n faithful: report.faithful && referenceComplete && candidateComplete,\n referenceComplete,\n candidateComplete,\n };\n }\n\n /**\n * Generate a target-specific output from LSE (bracket syntax or protocol JSON).\n *\n * Accepts LSE produced by an LLM (via `lse_generate_with_correction` MCP tool),\n * validates it, and renders to the requested target format.\n *\n * Targets (`target` is required):\n * - 'react' — React component\n * - 'vue' — Vue component\n * - 'svelte' — Svelte component\n * - 'intent-element' — HTML snippet with embedded `<lse-intent>` JSON\n */\n async generate(request: GenerateRequest): Promise<GenerateResponse> {\n const { lse, target, task } = request;\n const diagnostics: Diagnostic[] = [];\n\n const isJSON = lse.trimStart().startsWith('{');\n\n // ── intent-element: validate via @lokascript/intent, render HTML ───────\n if (target === 'intent-element') {\n try {\n const { parseExplicit, toProtocolJSON, validateProtocolJSON, fromProtocolJSON } =\n await import('@lokascript/framework');\n\n let node: import('@lokascript/framework').SemanticNode | null = null;\n\n if (isJSON) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(lse);\n } catch {\n return {\n ok: false,\n diagnostics: [\n { severity: 'error', code: 'INVALID_JSON', message: 'LSE is not valid JSON' },\n ],\n };\n }\n const protoDiags = validateProtocolJSON(parsed as Record<string, unknown>);\n for (const d of protoDiags) {\n diagnostics.push({\n severity: d.severity as 'error' | 'warning' | 'info',\n code: d.code,\n message: d.message,\n });\n }\n if (!protoDiags.some(d => d.severity === 'error')) {\n node = fromProtocolJSON(parsed as Parameters<typeof fromProtocolJSON>[0]);\n }\n } else {\n try {\n node = parseExplicit(lse);\n } catch (e) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'PARSE_ERROR',\n message: e instanceof Error ? e.message : String(e),\n },\n ],\n };\n }\n }\n\n if (!node) {\n return { ok: false, diagnostics };\n }\n\n const protocol = toProtocolJSON(node);\n const protocolStr = JSON.stringify(protocol, null, 2);\n const taskComment = task ? `<!-- Task: ${task.replace(/-->/g, '-\\\\->')} -->\\n` : '';\n\n // Infer a declarative trigger attribute from the node.\n //\n // - event-handler nodes carry their event name in roles.get('event')\n // as a literal (wire-format trigger sugar is unwrapped into this\n // shape by fromProtocolJSON). Emit trigger=\"<event>\".\n // - Everything else gets trigger=\"load\" — the element fires\n // validation+execution on connect. This matches the default\n // behavior and is the safest choice when no event is specified.\n let triggerAttr = 'load';\n if (node.kind === 'event-handler') {\n const eventValue = node.roles.get('event');\n if (\n eventValue &&\n eventValue.type === 'literal' &&\n typeof eventValue.value === 'string' &&\n eventValue.value.length > 0\n ) {\n triggerAttr = eventValue.value;\n }\n }\n const escapedTrigger = triggerAttr.replace(/\"/g, '&quot;');\n\n const output = [\n `${taskComment}<lse-intent trigger=\"${escapedTrigger}\">`,\n ` <script type=\"application/lse+json\">`,\n protocolStr\n .split('\\n')\n .map(l => ` ${l}`)\n .join('\\n'),\n ` </script>`,\n `</lse-intent>`,\n ].join('\\n');\n\n const semanticJSON = nodeToSemanticJSON(node);\n\n return { ok: true, output, protocol: semanticJSON, diagnostics };\n } catch (e) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'INTERNAL_ERROR',\n message: e instanceof Error ? e.message : String(e),\n },\n ],\n };\n }\n }\n\n // ── framework targets: delegate to existing pipeline ───────────────────\n\n const componentTargets = ['react', 'vue', 'svelte'] as const;\n type ComponentTarget = (typeof componentTargets)[number];\n\n if ((componentTargets as readonly string[]).includes(target)) {\n const componentRequest: ComponentRequest = isJSON\n ? { semantic: JSON.parse(lse) as SemanticJSON }\n : { explicit: lse };\n const result = this.generateComponent({\n ...componentRequest,\n framework: target as ComponentTarget,\n });\n return {\n ok: result.ok,\n output: result.component?.code,\n protocol: result.semantic,\n diagnostics: result.diagnostics,\n };\n }\n\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'UNKNOWN_TARGET',\n message: `Unknown target '${String(target)}'. Available: react, vue, svelte, intent-element`,\n },\n ],\n };\n }\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Flatten a SemanticValue (possibly nested property-path) to a string.\n */\nfunction extractSemanticValueString(v: unknown): string {\n if (!v || typeof v !== 'object') return '';\n const sv = v as {\n type?: string;\n value?: unknown;\n raw?: string;\n object?: unknown;\n property?: string;\n };\n if (sv.type === 'property-path') {\n return `${extractSemanticValueString(sv.object)}.${sv.property ?? ''}`;\n }\n return String(sv.value ?? sv.raw ?? '');\n}\n\n/**\n * Convert a SemanticNode to SemanticJSON for the response.\n */\nfunction nodeToSemanticJSON(node: unknown): SemanticJSON | undefined {\n if (!node || typeof node !== 'object') return undefined;\n\n const n = node as {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n body?: unknown[];\n eventModifiers?: Record<string, unknown>;\n };\n\n if (!n.action) return undefined;\n\n const roles: Record<string, SemanticJSONValue> = {};\n\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, value] of n.roles.entries()) {\n if (role === 'event') continue; // Handled via trigger\n const v = value as { type?: string; value?: unknown; raw?: string };\n if (v && v.type) {\n if (v.type === 'property-path') {\n roles[role] = {\n type: 'property-path',\n value: extractSemanticValueString(v),\n };\n } else {\n const valueType = v.type as SemanticJSONValue['type'];\n roles[role] = {\n type: (['selector', 'literal', 'reference', 'expression'].includes(valueType)\n ? valueType\n : 'literal') as SemanticJSONValue['type'],\n value: (v.value ?? v.raw ?? '') as string | number | boolean,\n };\n }\n }\n }\n }\n\n // Handle event handlers\n if (n.kind === 'event-handler' || n.action === 'on') {\n const eventRole =\n n.roles && typeof n.roles.get === 'function'\n ? (n.roles.get('event') as { value?: unknown; raw?: unknown } | undefined)\n : undefined;\n\n // For event handlers, return the body command's semantic JSON\n if (n.body && n.body.length > 0) {\n const bodyJSON = nodeToSemanticJSON(n.body[0]);\n if (bodyJSON) {\n bodyJSON.trigger = {\n event: eventNameOf(eventRole),\n modifiers: n.eventModifiers,\n };\n return bodyJSON;\n }\n }\n\n return {\n action: n.action,\n roles,\n trigger: {\n event: eventNameOf(eventRole),\n modifiers: n.eventModifiers,\n },\n };\n }\n\n return { action: n.action, roles };\n}\n\n/**\n * The event name of a handler's `event` role. A colon-qualified event\n * (`htmx:beforeRequest`, `draggable:start`) arrives as an `expression` with\n * `raw`, not a literal with `value`, and reading `value` alone reported every\n * one of them as `click`.\n */\nexport function eventNameOf(eventRole: { value?: unknown; raw?: unknown } | undefined): string {\n const name = eventRole?.value ?? eventRole?.raw;\n return typeof name === 'string' && name.length > 0 ? name : 'click';\n}\n","/**\n * Body Limit Middleware\n *\n * Rejects requests with Content-Length exceeding the configured limit.\n * Returns 413 Payload Too Large.\n */\n\nimport type { MiddlewareHandler } from 'hono';\n\nexport function bodyLimit(maxBytes: number = 50 * 1024): MiddlewareHandler {\n return async (c, next) => {\n const contentLength = c.req.header('Content-Length');\n if (contentLength && parseInt(contentLength, 10) > maxBytes) {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'PAYLOAD_TOO_LARGE',\n message: `Request body exceeds ${maxBytes} bytes`,\n },\n ],\n },\n 413\n );\n }\n return next();\n };\n}\n","/**\n * Timeout Middleware\n *\n * Aborts request processing after the configured duration.\n * Returns 504 Gateway Timeout.\n */\n\nimport type { MiddlewareHandler } from 'hono';\n\nexport function timeout(ms: number = 10_000): MiddlewareHandler {\n return async (c, next) => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), ms);\n\n try {\n const result = await Promise.race([\n next(),\n new Promise<never>((_, reject) => {\n controller.signal.addEventListener('abort', () => {\n reject(new Error('Request timeout'));\n });\n }),\n ]);\n return result;\n } catch (err) {\n if (err instanceof Error && err.message === 'Request timeout') {\n return c.json(\n {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'REQUEST_TIMEOUT',\n message: `Request timed out after ${ms}ms`,\n },\n ],\n },\n 504\n );\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n };\n}\n","/**\n * Structured Logger Middleware\n *\n * Emits JSON log lines to stdout for each request.\n * Format: { timestamp, method, path, status, durationMs }\n */\n\nimport type { MiddlewareHandler } from 'hono';\n\nexport interface LogEntry {\n timestamp: string;\n method: string;\n path: string;\n status: number;\n durationMs: number;\n}\n\nexport function structuredLogger(): MiddlewareHandler {\n return async (c, next) => {\n const start = Date.now();\n await next();\n const durationMs = Date.now() - start;\n\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n method: c.req.method,\n path: new URL(c.req.url).pathname,\n status: c.res.status,\n durationMs,\n };\n\n console.log(JSON.stringify(entry));\n };\n}\n"],"mappings":"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","names":["escapeString","escapeString","analyzeOperations","generateOperationCode","escapeString","analyzeOperations","generateOperationCode","generateTemplate","escapeString","collectTargetElements","validateProtocolJSON","fromProtocolJSON"]}