@sebastianwessel/isostate 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/animation/animation-engine.d.ts +2 -0
  2. package/dist/animation/animation-engine.d.ts.map +1 -1
  3. package/dist/animation/controller.d.ts +9 -2
  4. package/dist/animation/controller.d.ts.map +1 -1
  5. package/dist/assets/software-architecture/IMAGEGEN-PROMPTS.md +66 -0
  6. package/dist/assets/software-architecture/LICENSE +21 -0
  7. package/dist/assets/software-architecture/NOTICE.md +17 -0
  8. package/dist/assets/software-architecture/README.md +105 -0
  9. package/dist/assets/software-architecture/agentic/AGENT-VISUAL-PROMPTS.md +42 -0
  10. package/dist/assets/software-architecture/agentic/HANDOFF-PROMPTS.md +19 -0
  11. package/dist/assets/software-architecture/agentic/PROCESS-VISUAL-PROMPTS.md +109 -0
  12. package/dist/assets/software-architecture/agentic/agents-sprites.png +0 -0
  13. package/dist/assets/software-architecture/agentic/ai-capabilities-sprites.png +0 -0
  14. package/dist/assets/software-architecture/agentic/ai-to-human-handoff.png +0 -0
  15. package/dist/assets/software-architecture/agentic/channels-sprites.png +0 -0
  16. package/dist/assets/software-architecture/agentic/human-to-ai-handoff.png +0 -0
  17. package/dist/assets/software-architecture/agentic/humans-sprites.png +0 -0
  18. package/dist/assets/software-architecture/agentic/infrastructure-sprites.png +0 -0
  19. package/dist/assets/software-architecture/agentic/lifecycle-sprites.png +0 -0
  20. package/dist/assets/software-architecture/agentic/orchestration-sprites.png +0 -0
  21. package/dist/assets/software-architecture/agentic/providers-sprites.png +0 -0
  22. package/dist/assets/software-architecture/agentic/servicenow-sprites.png +0 -0
  23. package/dist/assets/software-architecture/architecture/architecture-sprites.png +0 -0
  24. package/dist/assets/software-architecture/manifest.json +2095 -0
  25. package/dist/assets/software-architecture/workflow/workflow-process-sprites.png +0 -0
  26. package/dist/browser/isostate.runtime.js +4 -4
  27. package/dist/browser/isostate.runtime.js.map +9 -8
  28. package/dist/chunks/errors-2yA81Vfb.js +23 -0
  29. package/dist/chunks/{errors-DyqEkrm5.js.map → errors-2yA81Vfb.js.map} +1 -1
  30. package/dist/chunks/index-C_7KbR4v.js +1701 -0
  31. package/dist/chunks/index-C_7KbR4v.js.map +1 -0
  32. package/dist/chunks/rendering-engine-DLaM1XbU.js +1425 -0
  33. package/dist/chunks/rendering-engine-DLaM1XbU.js.map +1 -0
  34. package/dist/chunks/scene-parser-D_0OCHLL.js +3033 -0
  35. package/dist/chunks/scene-parser-D_0OCHLL.js.map +1 -0
  36. package/dist/chunks/sha256-BkgWUdh1.js +123 -0
  37. package/dist/chunks/sha256-BkgWUdh1.js.map +1 -0
  38. package/dist/dsl/browser.js +3 -3
  39. package/dist/dsl/index.js +3 -3
  40. package/dist/dsl/scene-parser.d.ts.map +1 -1
  41. package/dist/dsl/scene-validator.d.ts.map +1 -1
  42. package/dist/dsl/workflow-effects-validation.d.ts +8 -0
  43. package/dist/dsl/workflow-effects-validation.d.ts.map +1 -0
  44. package/dist/editor-support/adapter.d.ts.map +1 -1
  45. package/dist/editor-support/index.js +347 -394
  46. package/dist/editor-support/index.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +356 -424
  50. package/dist/index.js.map +1 -1
  51. package/dist/rendering/animation-css.d.ts.map +1 -1
  52. package/dist/rendering/rendering-engine.d.ts +2 -0
  53. package/dist/rendering/rendering-engine.d.ts.map +1 -1
  54. package/dist/rendering/scene-effects.d.ts +15 -0
  55. package/dist/rendering/scene-effects.d.ts.map +1 -0
  56. package/dist/runtime/index.js +4 -4
  57. package/dist/runtime/interactivity.d.ts.map +1 -1
  58. package/dist/types/asset-registry.d.ts.map +1 -1
  59. package/dist/types/errors.d.ts.map +1 -1
  60. package/dist/types/index.d.ts +1 -1
  61. package/dist/types/index.d.ts.map +1 -1
  62. package/dist/types/node.d.ts +40 -1
  63. package/dist/types/node.d.ts.map +1 -1
  64. package/package.json +9 -8
  65. package/dist/chunks/errors-DyqEkrm5.js +0 -29
  66. package/dist/chunks/index-CB6XEsbY.js +0 -1756
  67. package/dist/chunks/index-CB6XEsbY.js.map +0 -1
  68. package/dist/chunks/rendering-engine-nkqYx0qc.js +0 -1303
  69. package/dist/chunks/rendering-engine-nkqYx0qc.js.map +0 -1
  70. package/dist/chunks/scene-parser-F69XGE0l.js +0 -2743
  71. package/dist/chunks/scene-parser-F69XGE0l.js.map +0 -1
  72. package/dist/chunks/sha256-4JuurR-b.js +0 -69
  73. package/dist/chunks/sha256-4JuurR-b.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-parser-D_0OCHLL.js","sources":["../../src/dsl/workflow-effects-validation.ts","../../src/dsl/scene-validator.ts","../../src/dsl/compiler.ts","../../src/dsl/scene-parser.ts"],"sourcesContent":["import type { ConnectorMessage, ElementActivity, ValidationError } from \"../types/index.ts\";\n\n/** Apply the same safe color token rules used by text and connector strokes. */\nexport function isSafeEffectColor(value: string): boolean {\n\treturn (\n\t\ttypeof value === \"string\" &&\n\t\tvalue.trim().length > 0 &&\n\t\t!/[<>]/.test(value) &&\n\t\t![...value].some((character) => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127) &&\n\t\t!/url\\(|javascript:/i.test(value)\n\t);\n}\n\n/** Validate an optional activity replacement without adding runtime dependencies. */\nexport function validateActivity(\n\tactivity: ElementActivity | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tif (activity === undefined) return;\n\tif (\n\t\t![\"idle\", \"processing\", \"waiting\", \"complete\", \"error\"].includes(activity.state) ||\n\t\t(activity.color !== undefined && !isSafeEffectColor(activity.color))\n\t) {\n\t\terrors.push({\n\t\t\tcode: \"INVALID_ELEMENT_ACTIVITY\",\n\t\t\tmessage: \"Activity requires a known state and a safe optional color\",\n\t\t\tsceneId,\n\t\t\telementId,\n\t\t\tfield: \"activity\",\n\t\t});\n\t}\n}\n\n/** Validate a complete connector-message replacement, including disabled configurations. */\nexport function validateMessage(\n\tmessage: ConnectorMessage | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tif (message === undefined) return;\n\tconst invalid =\n\t\t(message.kind !== undefined && ![\"packet\", \"orb\", \"envelope\"].includes(message.kind)) ||\n\t\t(message.color !== undefined && !isSafeEffectColor(message.color)) ||\n\t\t(message.enabled !== undefined && typeof message.enabled !== \"boolean\") ||\n\t\t!optionalRange(message.size, 2, 32) ||\n\t\t!optionalRange(message.duration, 200, 30000) ||\n\t\t!optionalRange(message.count, 1, 4) ||\n\t\t(message.count !== undefined && !Number.isInteger(message.count));\n\tif (invalid)\n\t\terrors.push({\n\t\t\tcode: \"INVALID_CONNECTOR_MESSAGE\",\n\t\t\tmessage:\n\t\t\t\t\"Message requires a known kind, safe color, size 2..32, duration 200..30000, count integer 1..4, and boolean enabled\",\n\t\t\tsceneId,\n\t\t\telementId,\n\t\t\tfield: \"message\",\n\t\t});\n}\n\nfunction optionalRange(value: number | undefined, minimum: number, maximum: number): boolean {\n\treturn value === undefined || (Number.isFinite(value) && value >= minimum && value <= maximum);\n}\n","import type {\n\tAmbientAnimation,\n\tAssetCatalogEntry,\n\tCameraFocus,\n\tConnectionPatch,\n\tConnectionPlacement,\n\tConnectionRemoval,\n\tConnectorEndpointRef,\n\tConnectorRouting,\n\tConnectorStyle,\n\tElementPatch,\n\tElementPlacement,\n\tElementRemoval,\n\tPrimitiveContent,\n\tPrimitiveContentPatch,\n\tRuntimeCameraFocus,\n\tRuntimeConnectorState,\n\tRuntimeConnectorStyle,\n\tRuntimeElementState,\n\tSceneDocument,\n\tSceneStep,\n\tTextContent,\n\tValidationError,\n\tValidationReport,\n\tValidationWarning,\n} from \"../types/index.ts\";\nimport type { SpriteDefinition } from \"../types/scene.ts\";\nimport { validateActivity, validateMessage } from \"./workflow-effects-validation.ts\";\n\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\nconst MAX_TEXT_CHARACTERS = 1000;\nconst MAX_TEXT_LINES = 20;\nconst MAX_PRIMITIVE_POINTS = 100;\n\nconst VALID_ENTRY_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"fade-in\",\n\t\"fade-in-grow\",\n\t\"fall-in\",\n\t\"rise-from-ground\",\n\t\"slide-in-left\",\n\t\"slide-in-right\",\n\t\"flip-in\",\n\t\"none\",\n]);\n\nconst VALID_EXIT_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"fade-out\",\n\t\"fade-out-shrink\",\n\t\"fall-through-ground\",\n\t\"rise-away\",\n\t\"slide-out-left\",\n\t\"slide-out-right\",\n\t\"flip-out\",\n\t\"none\",\n]);\n\nconst VALID_AMBIENT_ANIMATIONS: ReadonlySet<string> = new Set([\n\t\"pulse\",\n\t\"float\",\n\t\"shake\",\n\t\"glow\",\n\t\"spin\",\n\t\"blink\",\n\t\"bounce\",\n]);\nconst VALID_CONNECTOR_AMBIENT_ANIMATIONS: ReadonlySet<string> = new Set([...VALID_AMBIENT_ANIMATIONS, \"flow\"]);\n\nconst VALID_CONNECTOR_PATTERNS: ReadonlySet<string> = new Set([\"solid\", \"dashed\", \"dotted\"]);\nconst VALID_CONNECTOR_VARIANTS: ReadonlySet<string> = new Set([\"line\", \"road\", \"beam\"]);\nconst VALID_CONNECTOR_ENDPOINTS: ReadonlySet<string> = new Set([\"none\", \"arrow\", \"dot\", \"circle\", \"diamond\", \"bar\"]);\nconst VALID_CONNECTOR_DIRECTIONS: ReadonlySet<string> = new Set([\"route\", \"reverse\"]);\nconst VALID_CONNECTOR_SIDES: ReadonlySet<string> = new Set([\"auto\", \"top\", \"right\", \"bottom\", \"left\", \"front\", \"back\"]);\nconst VALID_CONNECTOR_ROUTING_MODES: ReadonlySet<string> = new Set([\"straight\", \"orthogonal\", \"manual\"]);\nconst VALID_CONNECTOR_ROUTING_PREFERENCES: ReadonlySet<string> = new Set([\"direct\", \"fewest-bends\", \"shortest\"]);\nconst VALID_CONNECTOR_LANES: ReadonlySet<string> = new Set([\"none\", \"center-dashed\"]);\nconst VALID_CAMERA_EASINGS: ReadonlySet<string> = new Set([\"linear\", \"ease-in-out\", \"ease-out\"]);\nconst VALID_SPRITE_SHEET_EXTENSIONS = new Set([\".png\", \".webp\", \".jpg\", \".jpeg\", \".svg\"]);\n\nconst VALID_TEXT_ALIGN: ReadonlySet<string> = new Set([\"start\", \"middle\", \"end\"]);\nconst VALID_TEXT_PLACEMENT: ReadonlySet<string> = new Set([\"cell\", \"caption\"]);\nconst VALID_TEXT_WEIGHT: ReadonlySet<string> = new Set([\"normal\", \"bold\"]);\nconst VALID_LINE_CAPS: ReadonlySet<string> = new Set([\"butt\", \"round\", \"square\"]);\nconst VALID_LINE_JOINS: ReadonlySet<string> = new Set([\"miter\", \"round\", \"bevel\"]);\n\ninterface ResolvedElementRecord {\n\tid: string;\n\tasset: string;\n\tat: [number, number];\n\tsize?: number;\n\tlayer?: string;\n\tenter?: ElementPlacement[\"enter\"];\n\texit?: ElementPlacement[\"exit\"];\n\tambient?: AmbientAnimation[];\n\ttext?: TextContent;\n\tprimitive?: PrimitiveContent;\n\tactivity?: ElementPlacement[\"activity\"];\n}\n\nexport interface ResolvedSceneSnapshot {\n\tid: string;\n\tprogress: number;\n\telements: RuntimeElementState[];\n\tconnectors: RuntimeConnectorState[];\n\tcamera?: RuntimeCameraFocus;\n}\n\ninterface ResolvedConnectorRecord {\n\tid: string;\n\troute?: [number, number][];\n\tfrom?: ConnectorEndpointRef;\n\tto?: ConnectorEndpointRef;\n\trouting?: ConnectionPlacement[\"routing\"];\n\tlayer?: string;\n\tstyle?: ConnectorStyle;\n\tstart?: ConnectionPlacement[\"start\"];\n\tend?: ConnectionPlacement[\"end\"];\n\tdirection?: ConnectionPlacement[\"direction\"];\n\tenter?: ConnectionPlacement[\"enter\"];\n\texit?: ConnectionPlacement[\"exit\"];\n\tambient?: AmbientAnimation[];\n\tmessage?: ConnectionPlacement[\"message\"];\n}\n\nfunction issue(code: string, message: string, extras: Partial<ValidationError> = {}): ValidationError {\n\treturn { code, message, ...extras };\n}\n\nfunction isValidIdentifier(value: string): boolean {\n\treturn /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(value);\n}\n\nfunction isValidPosition(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isFinite(part) && part >= 0);\n}\n\nfunction isValidPositiveNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction defaultElementLayer(document: SceneDocument): string {\n\tconst structures = document.header.layers.find((layer) => layer.name === \"structures\");\n\treturn structures?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction defaultFloorLayer(document: SceneDocument): string {\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction defaultConnectorLayer(document: SceneDocument): string {\n\tconst connectors = document.header.layers.find((layer) => layer.name === \"connectors\");\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn connectors?.name ?? ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction hasUrlAssetSource(document: SceneDocument, assetId: string): boolean {\n\treturn Boolean(\n\t\tdocument.header.assetBaseUrl &&\n\t\t\tdocument.header.assets.some((asset) => asset.id === assetId && !isSpriteSheetAsset(asset)),\n\t);\n}\n\nfunction isBuiltInAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID || BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction isPrimitiveAsset(assetId: string): boolean {\n\treturn BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction hasExternalAssetReferences(document: SceneDocument): boolean {\n\tif (document.header.floor?.asset && !isBuiltInAsset(document.header.floor.asset)) {\n\t\treturn true;\n\t}\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of [...(scene.elements ?? []), ...(scene.add?.elements ?? [])]) {\n\t\t\tif (!isBuiltInAsset(element.asset)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\ninterface AssetIndex {\n\turlAssetIds: Set<string>;\n\tsheetAssetIds: Set<string>;\n\tspriteAssetIds: Set<string>;\n\tplaceableAssetIds: Set<string>;\n}\n\nfunction isSpriteSheetAsset(asset: AssetCatalogEntry): asset is Extract<AssetCatalogEntry, { type: \"sprite-sheet\" }> {\n\treturn \"type\" in asset && asset.type === \"sprite-sheet\";\n}\n\nfunction buildAssetIndex(document: SceneDocument): AssetIndex {\n\tconst urlAssetIds = new Set<string>();\n\tconst sheetAssetIds = new Set<string>();\n\tconst spriteAssetIds = new Set<string>();\n\tfor (const asset of document.header.assets) {\n\t\tif (isSpriteSheetAsset(asset)) {\n\t\t\tsheetAssetIds.add(asset.id);\n\t\t\tfor (const spriteId of Object.keys(asset.sprites ?? {})) spriteAssetIds.add(spriteId);\n\t\t} else {\n\t\t\turlAssetIds.add(asset.id);\n\t\t}\n\t}\n\treturn {\n\t\turlAssetIds,\n\t\tsheetAssetIds,\n\t\tspriteAssetIds,\n\t\tplaceableAssetIds: new Set([...urlAssetIds, ...spriteAssetIds]),\n\t};\n}\n\nfunction hasBuiltInElements(document: SceneDocument): boolean {\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of [...(scene.elements ?? []), ...(scene.add?.elements ?? [])]) {\n\t\t\tif (isBuiltInAsset(element.asset)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction declaredLayerNames(document: SceneDocument): Set<string> {\n\treturn new Set(document.header.layers.map((layer) => layer.name));\n}\n\nfunction validateHeader(document: SceneDocument, errors: ValidationError[]): void {\n\tconst assets = document.header.assets;\n\tif (assets.length === 0 && (hasExternalAssetReferences(document) || !hasBuiltInElements(document))) {\n\t\terrors.push(issue(\"NO_ASSETS\", \"Header must declare at least one asset\"));\n\t}\n\n\tconst assetIndex = buildAssetIndex(document);\n\tconst assetNames = new Set<string>();\n\tconst spriteNames = new Set<string>();\n\tfor (const asset of assets) {\n\t\tif (!isValidIdentifier(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Asset \"${asset.id}\" must be kebab-case`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (assetNames.has(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_ASSET_ID\", `Duplicate asset \"${asset.id}\"`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tassetNames.add(asset.id);\n\t\tif (spriteNames.has(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"SPRITE_ASSET_ID_COLLISION\", `Asset \"${asset.id}\" collides with a sprite id`, { assetName: asset.id }),\n\t\t\t);\n\t\t}\n\t\tif (\"type\" in asset && asset.type !== \"sprite-sheet\") {\n\t\t\terrors.push(\n\t\t\t\tissue(\"ASSET_TYPE_UNSUPPORTED\", `Asset \"${asset.id}\" declares an unsupported type`, { assetName: asset.id }),\n\t\t\t);\n\t\t}\n\t\tif (isBuiltInAsset(asset.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"BUILTIN_ASSET_ID_RESERVED\", `Asset \"${asset.id}\" is reserved for a built-in asset`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (isSpriteSheetAsset(asset)) {\n\t\t\tif (!document.header.assetBaseUrl) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ASSET_URL_REQUIRED\", `Sprite sheet \"${asset.id}\" has no URL source`, {\n\t\t\t\t\t\tassetName: asset.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tvalidateSpriteSheetAsset(asset, assetNames, spriteNames, errors);\n\t\t} else {\n\t\t\tif (!hasUrlAssetSource(document, asset.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ASSET_URL_REQUIRED\", `Asset \"${asset.id}\" has no URL source`, {\n\t\t\t\t\t\tassetName: asset.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tasset.anchor !== undefined &&\n\t\t\t(!isValidPosition(asset.anchor) || asset.anchor.some((part) => part < 0 || part > 1))\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_ASSET_ANCHOR\", `Asset \"${asset.id}\" anchor must use normalized values from 0 to 1`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst layers = document.header.layers;\n\tif (layers.length === 0) {\n\t\terrors.push(issue(\"NO_LAYERS\", \"Header must declare at least one layer\"));\n\t}\n\n\tconst layerNames = new Set<string>();\n\tfor (const layer of layers) {\n\t\tif (!isValidIdentifier(layer.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Layer \"${layer.name}\" must be kebab-case`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (layerNames.has(layer.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_LAYER_NAME\", `Duplicate layer \"${layer.name}\"`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tlayerNames.add(layer.name);\n\t\tif (layer.order !== undefined && (!Number.isFinite(layer.order) || !Number.isInteger(layer.order))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_LAYER_ORDER\", \"Layer order must be a finite integer\", {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst grid = document.header.grid;\n\tif (grid?.cellSize !== undefined && !(Number.isFinite(grid.cellSize) && grid.cellSize > 0)) {\n\t\terrors.push(issue(\"INVALID_GRID_CELL_SIZE\", \"Grid cellSize must be a positive finite number\"));\n\t}\n\n\tconst floor = document.header.floor;\n\tif (floor) {\n\t\tif (floor.size !== undefined && !isValidPositiveTuple(floor.size)) {\n\t\t\terrors.push(issue(\"INVALID_FLOOR_SIZE\", \"Floor size must be positive\"));\n\t\t}\n\t\tif (floor.origin !== undefined && !floor.origin.every((part) => Number.isFinite(part))) {\n\t\t\terrors.push(issue(\"INVALID_FLOOR_ORIGIN\", \"Floor origin must contain finite numbers\"));\n\t\t}\n\t\tif (floor.layer !== undefined && !layerNames.has(floor.layer)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"LAYER_NOT_FOUND\", `Floor layer \"${floor.layer}\" is not declared`, {\n\t\t\t\t\tlayerName: floor.layer,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (floor.asset !== undefined && !assetNames.has(floor.asset)) {\n\t\t\tif (assetIndex.spriteAssetIds.has(floor.asset)) {\n\t\t\t\t// Sprite ids are placeable through their containing sheet.\n\t\t\t} else {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ASSET_NOT_DECLARED\", `Floor asset \"${floor.asset}\" is not declared`, {\n\t\t\t\t\t\tassetName: floor.asset,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (floor.asset !== undefined && assetIndex.sheetAssetIds.has(floor.asset)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"SPRITE_SHEET_NOT_PLACEABLE\", `Floor asset \"${floor.asset}\" is a sprite sheet namespace`, {\n\t\t\t\t\tassetName: floor.asset,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (floor.asset !== undefined && isBuiltInAsset(floor.asset)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_FLOOR_ASSET\", \"Floor asset cannot use a built-in generated asset\", { assetName: floor.asset }),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateSpriteSheetAsset(\n\tasset: Extract<AssetCatalogEntry, { type: \"sprite-sheet\" }>,\n\tassetNames: Set<string>,\n\tspriteNames: Set<string>,\n\terrors: ValidationError[],\n): void {\n\tif (!hasSupportedSpriteSheetExtension(asset.path)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SPRITE_SHEET_PATH\", `Sprite sheet \"${asset.id}\" path is unsupported`, { assetName: asset.id }),\n\t\t);\n\t}\n\tif (!isPositiveIntegerTuple(asset.sheetSize)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SPRITE_SHEET_SIZE\", `Sprite sheet \"${asset.id}\" sheetSize is invalid`, { assetName: asset.id }),\n\t\t);\n\t}\n\tconst sprites = asset.sprites ?? {};\n\tif (Object.keys(sprites).length === 0) {\n\t\terrors.push(issue(\"NO_SPRITES\", `Sprite sheet \"${asset.id}\" must declare sprites`, { assetName: asset.id }));\n\t}\n\tconst needsTileSize = Object.values(sprites).some(\n\t\t(sprite) => Array.isArray(sprite) || (isSpriteObject(sprite) && sprite.at !== undefined),\n\t);\n\tif (needsTileSize && !isPositiveIntegerTuple(asset.tileSize)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SPRITE_TILE_SIZE\", `Sprite sheet \"${asset.id}\" tileSize is required`, { assetName: asset.id }),\n\t\t);\n\t}\n\tfor (const [spriteId, sprite] of Object.entries(sprites)) {\n\t\tif (!isValidIdentifier(spriteId) || isBuiltInAsset(spriteId)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_SPRITE_ID\", `Sprite \"${spriteId}\" must be kebab-case and not reserved`, { assetName: spriteId }),\n\t\t\t);\n\t\t}\n\t\tif (spriteNames.has(spriteId)) {\n\t\t\terrors.push(issue(\"DUPLICATE_SPRITE_ID\", `Duplicate sprite \"${spriteId}\"`, { assetName: spriteId }));\n\t\t}\n\t\tspriteNames.add(spriteId);\n\t\tif (assetNames.has(spriteId)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"SPRITE_ASSET_ID_COLLISION\", `Sprite \"${spriteId}\" collides with an asset id`, { assetName: spriteId }),\n\t\t\t);\n\t\t}\n\t\tconst rect = compileSpriteRectForValidation(sprite, asset.tileSize);\n\t\tif (!rect) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_SPRITE_DEFINITION\", `Sprite \"${spriteId}\" definition is invalid`, { assetName: spriteId }),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isRectInsideSheet(rect, asset.sheetSize)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_SPRITE_RECT\", `Sprite \"${spriteId}\" rect is outside sheet bounds`, { assetName: spriteId }),\n\t\t\t);\n\t\t}\n\t\tconst anchor = isSpriteObject(sprite) ? sprite.anchor : undefined;\n\t\tif (anchor !== undefined && (!isValidPosition(anchor) || anchor.some((part) => part < 0 || part > 1))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_ASSET_ANCHOR\", `Sprite \"${spriteId}\" anchor must use normalized values`, {\n\t\t\t\t\tassetName: spriteId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction hasSupportedSpriteSheetExtension(path: string): boolean {\n\tconst extension = path.slice(path.lastIndexOf(\".\")).toLowerCase();\n\treturn VALID_SPRITE_SHEET_EXTENSIONS.has(extension);\n}\n\nfunction isPositiveIntegerTuple(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isInteger(part) && part > 0);\n}\n\nfunction isSpriteObject(value: SpriteDefinition): value is {\n\tat?: [number, number];\n\trect?: [number, number, number, number];\n\tanchor?: [number, number];\n} {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction compileSpriteRectForValidation(\n\tsprite: SpriteDefinition,\n\ttileSize: [number, number] | undefined,\n): [number, number, number, number] | undefined {\n\tif (Array.isArray(sprite)) {\n\t\tif (!tileSize || !isNonNegativeIntegerTuple(sprite)) return undefined;\n\t\treturn [sprite[0] * tileSize[0], sprite[1] * tileSize[1], tileSize[0], tileSize[1]];\n\t}\n\tconst hasAt = sprite.at !== undefined;\n\tconst hasRect = sprite.rect !== undefined;\n\tif (hasAt === hasRect) return undefined;\n\tif (hasAt) {\n\t\tif (!tileSize || !isNonNegativeIntegerTuple(sprite.at)) return undefined;\n\t\treturn [sprite.at[0] * tileSize[0], sprite.at[1] * tileSize[1], tileSize[0], tileSize[1]];\n\t}\n\tif (!isSpriteRect(sprite.rect)) return undefined;\n\treturn sprite.rect;\n}\n\nfunction isNonNegativeIntegerTuple(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isInteger(part) && part >= 0);\n}\n\nfunction isSpriteRect(value: unknown): value is [number, number, number, number] {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 4 &&\n\t\tNumber.isInteger(value[0]) &&\n\t\tNumber.isInteger(value[1]) &&\n\t\tNumber.isInteger(value[2]) &&\n\t\tNumber.isInteger(value[3]) &&\n\t\tvalue[0] >= 0 &&\n\t\tvalue[1] >= 0 &&\n\t\tvalue[2] > 0 &&\n\t\tvalue[3] > 0\n\t);\n}\n\nfunction isRectInsideSheet(rect: [number, number, number, number], sheetSize: [number, number]): boolean {\n\tif (!isPositiveIntegerTuple(sheetSize)) return false;\n\treturn rect[0] + rect[2] <= sheetSize[0] && rect[1] + rect[3] <= sheetSize[1];\n}\n\nfunction isValidPositiveTuple(value: unknown): value is [number, number] {\n\treturn Array.isArray(value) && value.length === 2 && value.every((part) => Number.isFinite(part) && part > 0);\n}\n\nfunction validateTimelineShape(document: SceneDocument, errors: ValidationError[]): void {\n\tif (document.scenes.length === 0) {\n\t\terrors.push(issue(\"NO_SCENES\", \"Document must contain at least one scene\"));\n\t\treturn;\n\t}\n\n\tconst sceneIds = new Set<string>();\n\tfor (const scene of document.scenes) {\n\t\tif (!isValidIdentifier(scene.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_IDENTIFIER\", `Scene \"${scene.id}\" must be kebab-case`, {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (sceneIds.has(scene.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_SCENE_ID\", `Duplicate scene \"${scene.id}\"`, {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tsceneIds.add(scene.id);\n\t}\n\n\tconst first = document.scenes[0];\n\tif (\n\t\tfirst.elements === undefined ||\n\t\tfirst.add !== undefined ||\n\t\tfirst.update !== undefined ||\n\t\tfirst.remove !== undefined\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_INITIAL_SCENE\", \"Initial scene must use elements and no delta operations\", { sceneId: first.id }),\n\t\t);\n\t}\n\n\tfor (const scene of document.scenes.slice(1)) {\n\t\tif (scene.elements !== undefined || scene.connections !== undefined) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_SCENE_DELTA\", \"Delta scenes may not use top-level elements or connections\", {\n\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validatePlacement(\n\tplacement: ElementPlacement,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\twarnings: ValidationWarning[],\n\tsceneId: string,\n): void {\n\tvalidateElementCommon(placement, document, errors, sceneId);\n\tvalidateGeneratedContentForAsset(placement, placement.asset, errors, warnings, sceneId);\n\tconst assetIndex = buildAssetIndex(document);\n\tif (!isBuiltInAsset(placement.asset) && assetIndex.sheetAssetIds.has(placement.asset)) {\n\t\terrors.push(\n\t\t\tissue(\"SPRITE_SHEET_NOT_PLACEABLE\", `Asset \"${placement.asset}\" is a sprite sheet namespace`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: placement.id,\n\t\t\t\tassetName: placement.asset,\n\t\t\t\tfield: \"asset\",\n\t\t\t\tvalue: placement.asset,\n\t\t\t}),\n\t\t);\n\t} else if (!isBuiltInAsset(placement.asset) && !assetIndex.placeableAssetIds.has(placement.asset)) {\n\t\terrors.push(\n\t\t\tissue(\"ASSET_NOT_DECLARED\", `Asset \"${placement.asset}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: placement.id,\n\t\t\t\tassetName: placement.asset,\n\t\t\t\tfield: \"asset\",\n\t\t\t\tvalue: placement.asset,\n\t\t\t}),\n\t\t);\n\t}\n\tif (!isValidPosition(placement.at)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_POSITION\", \"Element at must be finite and non-negative\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: placement.id,\n\t\t\t\tfield: \"at\",\n\t\t\t\tvalue: placement.at,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validatePatch(\n\tpatch: ElementPatch,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\twarnings: ValidationWarning[],\n\tsceneId: string,\n\tcurrentAsset?: string,\n): void {\n\tvalidateElementCommon(patch, document, errors, sceneId, true);\n\tif (patch.asset !== undefined) validateAssetSwap(patch, currentAsset, document, errors, sceneId);\n\tif (currentAsset !== undefined) {\n\t\tvalidateGeneratedContentForAsset(patch, patch.asset ?? currentAsset, errors, warnings, sceneId, true);\n\t}\n\tif (patch.at !== undefined && !isValidPosition(patch.at)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_POSITION\", \"Element at must be finite and non-negative\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: patch.id,\n\t\t\t\tfield: \"at\",\n\t\t\t\tvalue: patch.at,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateAssetSwap(\n\tpatch: ElementPatch,\n\tcurrentAsset: string | undefined,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tconst target = patch.asset;\n\tif (target === undefined) return;\n\tconst extras = { sceneId, elementId: patch.id, assetName: target, field: \"asset\", value: target };\n\tif (isBuiltInAsset(target) || (currentAsset !== undefined && isBuiltInAsset(currentAsset))) {\n\t\terrors.push(\n\t\t\tissue(\n\t\t\t\t\"INVALID_ELEMENT_ASSET_SWAP\",\n\t\t\t\t\"Asset updates only support external images or sprites; generated content cannot change asset type\",\n\t\t\t\textras,\n\t\t\t),\n\t\t);\n\t\treturn;\n\t}\n\tconst index = buildAssetIndex(document);\n\tif (index.sheetAssetIds.has(target))\n\t\terrors.push(issue(\"SPRITE_SHEET_NOT_PLACEABLE\", \"A sprite sheet namespace cannot be placed\", extras));\n\telse if (!index.placeableAssetIds.has(target))\n\t\terrors.push(issue(\"ASSET_NOT_DECLARED\", `Asset \"${target}\" is not declared`, extras));\n}\n\nfunction validateElementCommon(\n\telement: ElementPlacement | ElementPatch,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\tallowZeroSize = false,\n): void {\n\tif (!isValidIdentifier(element.id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Element \"${element.id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t}),\n\t\t);\n\t}\n\tconst minSize = allowZeroSize ? 0 : 1;\n\tif (element.size !== undefined && (!Number.isFinite(element.size) || element.size < minSize)) {\n\t\terrors.push(\n\t\t\tissue(\n\t\t\t\t\"INVALID_SIZE\",\n\t\t\t\tallowZeroSize ? \"Element size must be zero or greater\" : \"Element size must be greater than zero\",\n\t\t\t\t{\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tfield: \"size\",\n\t\t\t\t\tvalue: element.size,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t}\n\tif (element.size !== undefined && (!Number.isInteger(element.size) || element.size < minSize)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_SIZE\", \"Element size must be a whole grid cell count\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tfield: \"size\",\n\t\t\t\tvalue: element.size,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.layer !== undefined && !declaredLayerNames(document).has(element.layer)) {\n\t\terrors.push(\n\t\t\tissue(\"LAYER_NOT_FOUND\", `Layer \"${element.layer}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tlayerName: element.layer,\n\t\t\t\tfield: \"layer\",\n\t\t\t\tvalue: element.layer,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.enter !== undefined && !VALID_ENTRY_ANIMATIONS.has(element.enter)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown entry animation \"${element.enter}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tfield: \"enter\",\n\t\t\t\tvalue: element.enter,\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(element.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${element.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tfield: \"exit\",\n\t\t\t\tvalue: element.exit,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateActivity(element.activity, errors, sceneId, element.id);\n\tvalidateAmbient(element.ambient, errors, sceneId, element.id);\n}\n\nfunction validateGeneratedContentForAsset(\n\telement: ElementPlacement | ElementPatch,\n\tassetId: string,\n\terrors: ValidationError[],\n\twarnings: ValidationWarning[],\n\tsceneId: string,\n\tallowSparse = false,\n): void {\n\tif (isBuiltInAsset(assetId)) {\n\t\tif (assetId === BUILT_IN_TEXT_ASSET_ID) {\n\t\t\tvalidateTextForAsset(element, errors, warnings, sceneId, allowSparse);\n\t\t\treturn;\n\t\t}\n\t\tvalidatePrimitiveForAsset(element, assetId, errors, sceneId, allowSparse);\n\t\treturn;\n\t}\n\n\tif (element.text !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_FOR_NON_TEXT_ASSET\", \"Only built-in text elements may define text content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t\tfield: \"text\",\n\t\t\t}),\n\t\t);\n\t}\n\tif (element.primitive !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"GENERATED_CONTENT_FOR_EXTERNAL_ASSET\", \"Only built-in generated assets may define primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t\tfield: \"primitive\",\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateTextForAsset(\n\telement: ElementPlacement | ElementPatch,\n\terrors: ValidationError[],\n\twarnings: ValidationWarning[],\n\tsceneId: string,\n\tallowSparse: boolean,\n): void {\n\tif (element.primitive !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_FOR_TEXT_ASSET\", \"Built-in text elements may not define primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tfield: \"primitive\",\n\t\t\t}),\n\t\t);\n\t}\n\tif (!element.text) {\n\t\tif (allowSparse) return;\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_REQUIRED\", \"Built-in text elements require text content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tfield: \"text\",\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\tvalidateTextContent(element.text as TextContent, errors, warnings, sceneId, element.id, allowSparse);\n}\n\nfunction validatePrimitiveForAsset(\n\telement: ElementPlacement | ElementPatch,\n\tassetId: string,\n\terrors: ValidationError[],\n\tsceneId: string,\n\tallowSparse: boolean,\n): void {\n\tif (!isPrimitiveAsset(assetId)) return;\n\tif (element.text !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"TEXT_CONTENT_FOR_PRIMITIVE_ASSET\", \"Primitive elements may not define text content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tfield: \"text\",\n\t\t\t}),\n\t\t);\n\t}\n\tconst primitive = element.primitive;\n\tif (!primitive) {\n\t\tif (allowSparse) return;\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_REQUIRED\", \"Built-in primitive elements require primitive content\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t\tfield: \"primitive\",\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst activeKeys = Object.entries(primitive)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key]) => key);\n\tif (activeKeys.length !== 1 || activeKeys[0] !== assetId) {\n\t\terrors.push(\n\t\t\tissue(\"PRIMITIVE_CONTENT_MISMATCH\", \"Primitive content must define exactly the payload matching its asset id\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: element.id,\n\t\t\t\tassetName: assetId,\n\t\t\t\tfield: \"primitive\",\n\t\t\t\tvalue: activeKeys,\n\t\t\t}),\n\t\t);\n\t\treturn;\n\t}\n\n\tconst payload = primitive[assetId as keyof PrimitiveContent];\n\tvalidatePrimitiveStyle(payload, errors, sceneId, element.id, `primitive.${assetId}`);\n\tif (assetId === \"rectangle\") {\n\t\tconst rx = primitive.rectangle?.rx;\n\t\tif (rx !== undefined && (!Number.isFinite(rx) || rx < 0 || rx > 0.5)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Rectangle rx must be from 0 to 0.5\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tfield: \"primitive.rectangle.rx\",\n\t\t\t\t\tvalue: rx,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (assetId === \"polygon\" && (!allowSparse || primitive.polygon?.points !== undefined)) {\n\t\tvalidatePrimitivePoints(primitive.polygon?.points, 3, errors, sceneId, element.id);\n\t}\n\tif (assetId === \"line\") {\n\t\tif (!allowSparse || primitive.line?.points !== undefined) {\n\t\t\tvalidatePrimitivePoints(primitive.line?.points, 2, errors, sceneId, element.id);\n\t\t}\n\t\tif (primitive.line?.lineCap !== undefined && !VALID_LINE_CAPS.has(primitive.line.lineCap)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Line cap is invalid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tfield: \"primitive.line.lineCap\",\n\t\t\t\t\tvalue: primitive.line.lineCap,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (primitive.line?.lineJoin !== undefined && !VALID_LINE_JOINS.has(primitive.line.lineJoin)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Line join is invalid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tfield: \"primitive.line.lineJoin\",\n\t\t\t\t\tvalue: primitive.line.lineJoin,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validatePrimitiveStyle(\n\tstyle: PrimitiveContent[keyof PrimitiveContent] | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n\tfieldPrefix: string,\n): void {\n\tif (!style) return;\n\tconst colorFields = [\n\t\t[\"stroke\", style.stroke],\n\t\t[\"fill\", \"fill\" in style ? style.fill : undefined],\n\t] as const;\n\tfor (const [name, token] of colorFields) {\n\t\tif (token !== undefined && !isSafeTextStyleToken(token)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive color token is unsafe\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t\tfield: `${fieldPrefix}.${name}`,\n\t\t\t\t\tvalue: token,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (style.strokeWidth !== undefined && (!Number.isFinite(style.strokeWidth) || style.strokeWidth < 0)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive strokeWidth is invalid\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: `${fieldPrefix}.strokeWidth`,\n\t\t\t\tvalue: style.strokeWidth,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.opacity !== undefined && (!Number.isFinite(style.opacity) || style.opacity < 0 || style.opacity > 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive opacity must be 0..1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: `${fieldPrefix}.opacity`,\n\t\t\t\tvalue: style.opacity,\n\t\t\t}),\n\t\t);\n\t}\n\tif (\n\t\tstyle.dash !== undefined &&\n\t\t(!isValidPositiveTuple(style.dash) || style.dash.some((part) => !Number.isFinite(part)))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_STYLE\", \"Primitive dash is invalid\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: `${fieldPrefix}.dash`,\n\t\t\t\tvalue: style.dash,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validatePrimitivePoints(\n\tpoints: [number, number][] | undefined,\n\tminCount: number,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tif (\n\t\t!points ||\n\t\tpoints.length < minCount ||\n\t\tpoints.length > MAX_PRIMITIVE_POINTS ||\n\t\tpoints.some((point) => !isValidPosition(point) || point.some((part) => part < 0 || part > 1))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_PRIMITIVE_POINTS\", \"Primitive points must use normalized coordinates from 0 to 1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: \"primitive.points\",\n\t\t\t\tvalue: points,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateTextContent(\n\ttext: Partial<TextContent>,\n\terrors: ValidationError[],\n\twarnings: ValidationWarning[],\n\tsceneId: string,\n\telementId: string,\n\tallowSparse = false,\n): void {\n\tif (text.value === undefined) {\n\t\tif (!allowSparse) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_TEXT_CONTENT\", \"Text content must define a value\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t\tfield: \"text.value\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t} else {\n\t\tconst value = normalizeTextValue(text.value);\n\t\tconst lines = value.split(\"\\n\");\n\t\tif (value.length === 0 || lines.every((line) => line.trim().length === 0)) {\n\t\t\twarnings.push(\n\t\t\t\tissue(\"EMPTY_TEXT_CONTENT\", \"Text value is empty and will render no visible label\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t\tfield: \"text.value\",\n\t\t\t\t\tvalue: text.value,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (value.length > MAX_TEXT_CHARACTERS || lines.length > MAX_TEXT_LINES) {\n\t\t\terrors.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"INVALID_TEXT_CONTENT\",\n\t\t\t\t\t`Text content must be at most ${MAX_TEXT_CHARACTERS} characters and at most ${MAX_TEXT_LINES} lines`,\n\t\t\t\t\t{ sceneId, elementId, field: \"text.value\" },\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tif (text.align !== undefined && !VALID_TEXT_ALIGN.has(text.align)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text align must be start, middle, or end\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: \"text.align\",\n\t\t\t\tvalue: text.align,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.placement !== undefined && !VALID_TEXT_PLACEMENT.has(text.placement)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text placement must be cell or caption\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: \"text.placement\",\n\t\t\t\tvalue: text.placement,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fontSize !== undefined && !isValidPositiveNumber(text.fontSize)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fontSize must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: \"text.fontSize\",\n\t\t\t\tvalue: text.fontSize,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.lineHeight !== undefined && !isValidPositiveNumber(text.lineHeight)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text lineHeight must be greater than zero\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: \"text.lineHeight\",\n\t\t\t\tvalue: text.lineHeight,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fontWeight !== undefined && !isValidTextWeight(text.fontWeight)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fontWeight must be normal, bold, or a positive finite number\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: \"text.fontWeight\",\n\t\t\t\tvalue: text.fontWeight,\n\t\t\t}),\n\t\t);\n\t}\n\tif (text.fill !== undefined && !isSafeTextStyleToken(text.fill)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_TEXT_STYLE\", \"Text fill contains unsafe CSS syntax\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId,\n\t\t\t\tfield: \"text.fill\",\n\t\t\t\tvalue: text.fill,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction normalizeTextValue(value: string): string {\n\treturn value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nfunction isValidTextWeight(value: TextContent[\"fontWeight\"]): boolean {\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) && value > 0;\n\t}\n\treturn typeof value === \"string\" && VALID_TEXT_WEIGHT.has(value);\n}\n\nfunction isSafeTextStyleToken(value: string): boolean {\n\tconst normalized = value.trim().toLowerCase();\n\treturn (\n\t\tnormalized.length > 0 &&\n\t\t!normalized.includes(\"url(\") &&\n\t\t!normalized.includes(\"javascript:\") &&\n\t\t!value.includes(\"<\") &&\n\t\t!value.includes(\">\") &&\n\t\t!hasControlCharacters(value)\n\t);\n}\n\nfunction hasControlCharacters(value: string): boolean {\n\tfor (const char of value) {\n\t\tconst code = char.charCodeAt(0);\n\t\tif (code < 32 || code === 127) return true;\n\t}\n\treturn false;\n}\n\nfunction validateRemoval(removal: ElementRemoval, errors: ValidationError[], sceneId: string): void {\n\tif (!isValidIdentifier(removal.id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Element \"${removal.id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (removal.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(removal.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${removal.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateAmbient(\n\tambient: AmbientAnimation[] | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tvalidateAmbientWithSet(ambient, VALID_AMBIENT_ANIMATIONS, errors, sceneId, elementId);\n}\n\nfunction validateAmbientWithSet(\n\tambient: AmbientAnimation[] | undefined,\n\tvalidAnimations: ReadonlySet<string>,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telementId: string,\n): void {\n\tfor (const animation of ambient ?? []) {\n\t\tif (!validAnimations.has(animation.name)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"UNKNOWN_AMBIENT_ANIMATION\", `Unknown ambient animation \"${animation.name}\"`, { sceneId, elementId }),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tanimation.infinite === false &&\n\t\t\t(animation.iterations === undefined || !Number.isInteger(animation.iterations) || animation.iterations <= 0)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_AMBIENT_ITERATIONS\", \"Ambient iterations must be positive when infinite is false\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateSceneObjectDeltas(\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\twarnings: ValidationWarning[],\n): void {\n\tconst elements = new Map<string, ResolvedElementRecord>();\n\tconst connectors = new Map<string, ResolvedConnectorRecord>();\n\tconst documentElementIds = collectDocumentElementIds(document);\n\tconst first = document.scenes[0];\n\tif (!first?.elements) return;\n\n\tfor (const element of first.elements) {\n\t\tvalidatePlacement(element, document, errors, warnings, first.id);\n\t\tif (elements.has(element.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_ELEMENT_ID\", `Duplicate element \"${element.id}\"`, {\n\t\t\t\t\tsceneId: first.id,\n\t\t\t\t\telementId: element.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\telements.set(element.id, normalizePlacement(document, element));\n\t}\n\n\tfor (const connection of first.connections ?? []) {\n\t\tvalidateConnectionPlacement(connection, document, errors, first.id, elements, documentElementIds);\n\t\tif (connectors.has(connection.id)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"DUPLICATE_CONNECTOR_ID\", `Duplicate connection \"${connection.id}\"`, {\n\t\t\t\t\tsceneId: first.id,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t}\n\n\tvalidateCamera(first.camera, first.id, elements, connectors, errors);\n\n\tfor (const scene of document.scenes.slice(1)) {\n\t\tconst updateIds = new Set<string>();\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elements.get(update.id)?.asset;\n\t\t\tvalidatePatch(update, document, errors, warnings, scene.id, existing);\n\t\t\tupdateIds.add(update.id);\n\t\t\tif (!elements.has(update.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_NOT_PRESENT\", `Element \"${update.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: update.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\tvalidateRemoval(removal, errors, scene.id);\n\t\t\tif (updateIds.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_DELTA_CONFLICT\", `Element \"${removal.id}\" cannot be updated and removed in one scene`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!elements.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_NOT_PRESENT\", `Element \"${removal.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst addedElementIds = new Set<string>();\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\tvalidatePlacement(add, document, errors, warnings, scene.id);\n\t\t\tif (addedElementIds.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"DUPLICATE_ELEMENT_ID\", `Duplicate element \"${add.id}\"`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\taddedElementIds.add(add.id);\n\t\t\tif (elements.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"ELEMENT_ALREADY_PRESENT\", `Element \"${add.id}\" is already present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst elementsForConnections = new Map(elements);\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elementsForConnections.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\telementsForConnections.set(update.id, mergeElementPatch(existing, update));\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\telementsForConnections.set(add.id, normalizePlacement(document, add));\n\t\t}\n\n\t\tvalidateEndpointRemovalRule(scene, connectors, errors);\n\t\tconst removedElementIds = new Set((scene.remove?.elements ?? []).map((removal) => removal.id));\n\n\t\tconst connectorUpdateIds = new Set<string>();\n\t\tfor (const update of scene.update?.connections ?? []) {\n\t\t\tvalidateConnectionRemovalLikeId(update.id, errors, scene.id);\n\t\t\tconnectorUpdateIds.add(update.id);\n\t\t\tconst existing = connectors.get(update.id);\n\t\t\tif (!existing) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_NOT_PRESENT\", `Connection \"${update.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: update.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tvalidateConnectionPatch(update, document, errors, scene.id, elementsForConnections, documentElementIds);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst merged = {\n\t\t\t\t...existing,\n\t\t\t\t...update,\n\t\t\t\tstyle: mergeStyle(existing.style, update.style),\n\t\t\t};\n\t\t\tvalidateConnectionPatch(merged, document, errors, scene.id, elementsForConnections, documentElementIds);\n\t\t\tvalidateEndpointsAgainstRemovals(merged, removedElementIds, errors, scene.id);\n\t\t}\n\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tvalidateConnectionRemoval(removal, errors, scene.id);\n\t\t\tif (connectorUpdateIds.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_DELTA_CONFLICT\", `Connection \"${removal.id}\" cannot be updated and removed in one scene`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!connectors.has(removal.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_NOT_PRESENT\", `Connection \"${removal.id}\" is not present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: removal.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst addedConnectorIds = new Set<string>();\n\t\tfor (const add of scene.add?.connections ?? []) {\n\t\t\tvalidateConnectionPlacement(add, document, errors, scene.id, elementsForConnections, documentElementIds);\n\t\t\tvalidateEndpointsAgainstRemovals(add, removedElementIds, errors, scene.id);\n\t\t\tif (addedConnectorIds.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"DUPLICATE_CONNECTOR_ID\", `Duplicate connection \"${add.id}\"`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\taddedConnectorIds.add(add.id);\n\t\t\tif (connectors.has(add.id)) {\n\t\t\t\terrors.push(\n\t\t\t\t\tissue(\"CONNECTOR_ALREADY_PRESENT\", `Connection \"${add.id}\" is already present`, {\n\t\t\t\t\t\tsceneId: scene.id,\n\t\t\t\t\t\telementId: add.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tvalidateCamera(scene.camera, scene.id, elementsForConnections, connectors, errors);\n\n\t\tfor (const update of scene.update?.elements ?? []) {\n\t\t\tconst existing = elements.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\telements.set(update.id, mergeElementPatch(existing, update));\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.elements ?? []) {\n\t\t\telements.set(add.id, normalizePlacement(document, add));\n\t\t}\n\t\tfor (const update of scene.update?.connections ?? []) {\n\t\t\tconst existing = connectors.get(update.id);\n\t\t\tif (existing) {\n\t\t\t\tconnectors.set(update.id, {\n\t\t\t\t\t...existing,\n\t\t\t\t\t...update,\n\t\t\t\t\tstyle: mergeStyle(existing.style, update.style),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfor (const add of scene.add?.connections ?? []) {\n\t\t\tconnectors.set(add.id, normalizeConnectionPlacement(document, add));\n\t\t}\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tconnectors.delete(removal.id);\n\t\t}\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\telements.delete(removal.id);\n\t\t}\n\t}\n}\n\nfunction collectDocumentElementIds(document: SceneDocument): Set<string> {\n\tconst ids = new Set<string>();\n\tfor (const scene of document.scenes) {\n\t\tfor (const element of scene.elements ?? []) ids.add(element.id);\n\t\tfor (const element of scene.add?.elements ?? []) ids.add(element.id);\n\t}\n\treturn ids;\n}\n\nfunction validateCamera(\n\tcamera: CameraFocus | undefined,\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tconnectors: Map<string, ResolvedConnectorRecord>,\n\terrors: ValidationError[],\n): void {\n\tif (!camera) return;\n\tconst target = camera.target;\n\tconst hasElement = \"element\" in target && target.element !== undefined;\n\tconst hasArea = \"area\" in target && target.area !== undefined;\n\tconst hasReset = \"reset\" in target && target.reset !== undefined;\n\tconst targetCount = Number(hasElement) + Number(hasArea) + Number(hasReset);\n\tif (targetCount !== 1) {\n\t\terrors.push(issue(\"INVALID_CAMERA_TARGET\", \"Camera target must use exactly one target kind\", { sceneId }));\n\t}\n\tif (hasElement) {\n\t\tif (!isValidIdentifier(target.element)) {\n\t\t\terrors.push(issue(\"INVALID_CAMERA_TARGET\", \"Camera element target must be kebab-case\", { sceneId }));\n\t\t} else if (connectors.has(target.element)) {\n\t\t\terrors.push(issue(\"INVALID_CAMERA_TARGET\", \"Camera element target cannot reference a connector\", { sceneId }));\n\t\t} else if (!elements.has(target.element)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"CAMERA_TARGET_NOT_FOUND\", `Camera target \"${target.element}\" was not found`, {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: target.element,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (hasArea) {\n\t\tif (!isValidPosition(target.area.at) || !isValidPositiveTuple(target.area.size)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CAMERA_OPTIONS\", \"Camera area must use non-negative at and positive size\", { sceneId }),\n\t\t\t);\n\t\t}\n\t}\n\tif (hasReset && target.reset !== true) {\n\t\terrors.push(issue(\"INVALID_CAMERA_TARGET\", \"Camera reset target must be true\", { sceneId }));\n\t}\n\tif (camera.padding !== undefined) {\n\t\tif (hasReset) {\n\t\t\terrors.push(issue(\"INVALID_CAMERA_OPTIONS\", \"Camera reset must not define padding\", { sceneId }));\n\t\t}\n\t\tif (!Number.isFinite(camera.padding) || camera.padding < 0 || camera.padding > 2048) {\n\t\t\terrors.push(issue(\"INVALID_CAMERA_OPTIONS\", \"Camera padding is invalid\", { sceneId }));\n\t\t}\n\t}\n\tif (\n\t\tcamera.duration !== undefined &&\n\t\t(!Number.isInteger(camera.duration) || camera.duration < 0 || camera.duration > 10000)\n\t) {\n\t\terrors.push(issue(\"INVALID_CAMERA_OPTIONS\", \"Camera duration is invalid\", { sceneId }));\n\t}\n\tif (camera.easing !== undefined && !VALID_CAMERA_EASINGS.has(camera.easing)) {\n\t\terrors.push(issue(\"INVALID_CAMERA_OPTIONS\", \"Camera easing is invalid\", { sceneId }));\n\t}\n}\n\nfunction validateEndpointRemovalRule(\n\tscene: SceneStep,\n\tconnectors: Map<string, ResolvedConnectorRecord>,\n\terrors: ValidationError[],\n): void {\n\tconst removedElements = new Set((scene.remove?.elements ?? []).map((removal) => removal.id));\n\tif (removedElements.size === 0) return;\n\tconst removedConnections = new Set((scene.remove?.connections ?? []).map((removal) => removal.id));\n\t// Connectors updated in this scene are checked against their merged\n\t// endpoints in the update loop instead.\n\tconst updatedConnections = new Set((scene.update?.connections ?? []).map((update) => update.id));\n\tfor (const connection of connectors.values()) {\n\t\tif (removedConnections.has(connection.id) || updatedConnections.has(connection.id)) continue;\n\t\tconst endpointIds = [connection.from?.element, connection.to?.element];\n\t\tif (endpointIds.some((id) => id !== undefined && removedElements.has(id))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\n\t\t\t\t\t\"CONNECTION_ENDPOINT_REMOVED\",\n\t\t\t\t\t`Connection \"${connection.id}\" references an element removed in the same scene`,\n\t\t\t\t\t{ sceneId: scene.id, elementId: connection.id },\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateEndpointsAgainstRemovals(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\tremovedElementIds: Set<string>,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tif (removedElementIds.size === 0) return;\n\tconst endpointIds = [connection.from?.element, connection.to?.element];\n\tif (endpointIds.some((id) => id !== undefined && removedElementIds.has(id))) {\n\t\terrors.push(\n\t\t\tissue(\n\t\t\t\t\"CONNECTION_ENDPOINT_REMOVED\",\n\t\t\t\t`Connection \"${connection.id}\" references an element removed in the same scene`,\n\t\t\t\t{ sceneId, elementId: connection.id },\n\t\t\t),\n\t\t);\n\t}\n}\n\nfunction validateConnectionPlacement(\n\tconnection: ConnectionPlacement,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionCommon(connection, document, errors, sceneId, elements, documentElementIds);\n}\n\nfunction validateConnectionPatch(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionCommon(connection, document, errors, sceneId, elements, documentElementIds);\n}\n\nfunction validateConnectionCommon(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\tdocument: SceneDocument,\n\terrors: ValidationError[],\n\tsceneId: string,\n\telements: Map<string, ResolvedElementRecord>,\n\tdocumentElementIds: Set<string>,\n): void {\n\tvalidateConnectionRemovalLikeId(connection.id, errors, sceneId);\n\tif (documentElementIds.has(connection.id)) {\n\t\terrors.push(\n\t\t\tissue(\"DUPLICATE_SCENE_OBJECT_ID\", `Connection \"${connection.id}\" collides with an element id`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.layer !== undefined && !declaredLayerNames(document).has(connection.layer)) {\n\t\terrors.push(\n\t\t\tissue(\"LAYER_NOT_FOUND\", `Layer \"${connection.layer}\" is not declared`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t\tlayerName: connection.layer,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.enter !== undefined && !VALID_ENTRY_ANIMATIONS.has(connection.enter)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown entry animation \"${connection.enter}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(connection.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${connection.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tvalidateAmbientWithSet(connection.ambient, VALID_CONNECTOR_AMBIENT_ANIMATIONS, errors, sceneId, connection.id);\n\tvalidateConnectionRouteSource(connection, errors, sceneId);\n\tvalidateConnectionEndpoints(connection, elements, errors, sceneId);\n\tvalidateConnectionRouting(connection, errors, sceneId);\n\tvalidateConnectorStyle(connection.style, errors, sceneId, connection.id);\n\tvalidateMessage(connection.message, errors, sceneId, connection.id);\n\tif (connection.start !== undefined && !VALID_CONNECTOR_ENDPOINTS.has(connection.start)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ENDPOINT\", \"Invalid connector start endpoint\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.end !== undefined && !VALID_CONNECTOR_ENDPOINTS.has(connection.end)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ENDPOINT\", \"Invalid connector end endpoint\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.direction !== undefined && !VALID_CONNECTOR_DIRECTIONS.has(connection.direction)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_DIRECTION\", \"Invalid connector direction\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectionRouteSource(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tconst hasRoute = connection.route !== undefined;\n\tconst hasEndpointRoute = connection.from !== undefined || connection.to !== undefined;\n\tif (hasRoute === hasEndpointRoute || (hasEndpointRoute && (!connection.from || !connection.to))) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Connection must use either route or both from and to\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (connection.route !== undefined) {\n\t\tif (\n\t\t\tconnection.route.length < 2 ||\n\t\t\tconnection.route.some(\n\t\t\t\t(point) => !isValidPosition(point) || point.some((coordinate) => !Number.isInteger(coordinate)),\n\t\t\t)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Manual connection route must contain at least two whole-grid points\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (!isGridAxisRoute(connection.route)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Manual connection route segments must follow one grid axis at a time\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionEndpoints(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tfor (const key of [\"from\", \"to\"] as const) {\n\t\tconst endpoint = connection[key];\n\t\tif (endpoint === undefined) continue;\n\t\tconst hasElement = endpoint.element !== undefined;\n\t\tconst hasAt = endpoint.at !== undefined;\n\t\tif (hasElement === hasAt) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Connection endpoint must use exactly one of element or at\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.element !== undefined && !elements.has(endpoint.element)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"CONNECTOR_ENDPOINT_NOT_FOUND\", `Connection endpoint \"${endpoint.element}\" was not found`, {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.at !== undefined && !isValidPosition(endpoint.at)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Endpoint at must be non-negative\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (endpoint.side !== undefined && !VALID_CONNECTOR_SIDES.has(endpoint.side)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Invalid endpoint side\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tendpoint.offset !== undefined &&\n\t\t\t(!Number.isFinite(endpoint.offset) || endpoint.offset < -0.5 || endpoint.offset > 0.5)\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTE\", \"Invalid endpoint offset\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionRouting(\n\tconnection: ConnectionPatch | ResolvedConnectorRecord,\n\terrors: ValidationError[],\n\tsceneId: string,\n): void {\n\tconst routing = connection.routing;\n\tif (routing === undefined) return;\n\tif (connection.route !== undefined) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Routing config is valid only with endpoint-routed connections\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (routing.mode !== undefined && !VALID_CONNECTOR_ROUTING_MODES.has(routing.mode)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing mode\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n\tif (routing.avoid !== undefined) {\n\t\tconst avoid = routing.avoid;\n\t\tif (!(avoid === \"objects\" || avoid === \"none\" || Array.isArray(avoid))) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing avoid\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connection.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tfor (const [name, value] of [\n\t\t[\"clearance\", routing.clearance],\n\t\t[\"gridStep\", routing.gridStep],\n\t\t[\"maxBends\", routing.maxBends],\n\t] as const) {\n\t\tif (value !== undefined && (!Number.isFinite(value) || value < 0)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", `Invalid connector routing ${name}`, { sceneId, elementId: connection.id }),\n\t\t\t);\n\t\t}\n\t}\n\tif (routing.prefer !== undefined && !VALID_CONNECTOR_ROUTING_PREFERENCES.has(routing.prefer)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_ROUTING\", \"Invalid connector routing preference\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connection.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectorStyle(\n\tstyle: ConnectorStyle | undefined,\n\terrors: ValidationError[],\n\tsceneId: string,\n\tconnectionId: string,\n): void {\n\tif (style === undefined) return;\n\tif (style.pattern !== undefined && !VALID_CONNECTOR_PATTERNS.has(style.pattern)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector pattern\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.variant !== undefined && !VALID_CONNECTOR_VARIANTS.has(style.variant)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector variant\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.lane !== undefined && !VALID_CONNECTOR_LANES.has(style.lane)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector lane\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tfor (const [name, value] of [\n\t\t[\"strokeWidth\", style.strokeWidth],\n\t\t[\"outlineWidth\", style.outlineWidth],\n\t\t[\"glowWidth\", style.glowWidth],\n\t] as const) {\n\t\tif (value !== undefined && !isValidPositiveNumber(value)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", `Invalid connector ${name}`, {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connectionId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\tif (style.opacity !== undefined && (!Number.isFinite(style.opacity) || style.opacity < 0 || style.opacity > 1)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Connector opacity must be 0..1\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (\n\t\tstyle.dash !== undefined &&\n\t\t(!isValidPositiveTuple(style.dash) || style.dash.some((part) => !Number.isFinite(part)))\n\t) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Invalid connector dash\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t}),\n\t\t);\n\t}\n\tif (style.cornerRadius !== undefined && (!Number.isFinite(style.cornerRadius) || style.cornerRadius < 0)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Corner radius must be finite and non-negative\", {\n\t\t\t\tsceneId,\n\t\t\t\telementId: connectionId,\n\t\t\t\tfield: \"style.cornerRadius\",\n\t\t\t}),\n\t\t);\n\t}\n\tfor (const token of [style.stroke, style.outline, style.glow]) {\n\t\tif (token !== undefined && !isSafeTextStyleToken(token)) {\n\t\t\terrors.push(\n\t\t\t\tissue(\"INVALID_CONNECTOR_STYLE\", \"Connector color token is unsafe\", {\n\t\t\t\t\tsceneId,\n\t\t\t\t\telementId: connectionId,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction validateConnectionRemoval(removal: ConnectionRemoval, errors: ValidationError[], sceneId: string): void {\n\tvalidateConnectionRemovalLikeId(removal.id, errors, sceneId);\n\tif (removal.exit !== undefined && !VALID_EXIT_ANIMATIONS.has(removal.exit)) {\n\t\terrors.push(\n\t\t\tissue(\"UNKNOWN_ANIMATION\", `Unknown exit animation \"${removal.exit}\"`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: removal.id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction validateConnectionRemovalLikeId(id: string, errors: ValidationError[], sceneId: string): void {\n\tif (!isValidIdentifier(id)) {\n\t\terrors.push(\n\t\t\tissue(\"INVALID_IDENTIFIER\", `Connection \"${id}\" must be kebab-case`, {\n\t\t\t\tsceneId,\n\t\t\t\telementId: id,\n\t\t\t}),\n\t\t);\n\t}\n}\n\nfunction mergeStyle(base: ConnectorStyle | undefined, patch: ConnectorStyle | undefined): ConnectorStyle | undefined {\n\tif (base === undefined) return patch;\n\tif (patch === undefined) return base;\n\treturn { ...base, ...patch };\n}\n\nfunction mergeText(base: TextContent | undefined, patch: Partial<TextContent> | undefined): TextContent | undefined {\n\tif (base === undefined) return patch as TextContent | undefined;\n\tif (patch === undefined) return base;\n\treturn { ...base, ...patch };\n}\n\nfunction mergePrimitive(\n\tbase: PrimitiveContent | undefined,\n\tpatch: PrimitiveContentPatch | undefined,\n): PrimitiveContent | undefined {\n\tif (base === undefined) return patch as PrimitiveContent | undefined;\n\tif (patch === undefined) return base;\n\tconst merged: PrimitiveContent = {};\n\tif (base.rectangle || patch.rectangle) merged.rectangle = { ...(base.rectangle ?? {}), ...(patch.rectangle ?? {}) };\n\tif (base.circle || patch.circle) merged.circle = { ...(base.circle ?? {}), ...(patch.circle ?? {}) };\n\tif (base.polygon || patch.polygon) merged.polygon = { ...(base.polygon ?? {}), ...(patch.polygon ?? {}) } as never;\n\tif (base.line || patch.line) merged.line = { ...(base.line ?? {}), ...(patch.line ?? {}) } as never;\n\treturn merged;\n}\n\nfunction mergeElementPatch(existing: ResolvedElementRecord, patch: ElementPatch): ResolvedElementRecord {\n\treturn {\n\t\t...existing,\n\t\t...patch,\n\t\ttext: mergeText(existing.text, patch.text),\n\t\tprimitive: mergePrimitive(existing.primitive, patch.primitive),\n\t};\n}\n\nfunction validateWarnings(document: SceneDocument, warnings: ValidationWarning[]): void {\n\tconst usedAssets = new Set<string>();\n\tconst usedLayers = new Set<string>();\n\tconst snapshots = resolveSceneSnapshots(document);\n\n\tif (document.header.floor?.asset && document.header.floor.visible !== false) {\n\t\tusedAssets.add(document.header.floor.asset);\n\t}\n\n\tconst floorBounds = document.header.floor?.size\n\t\t? {\n\t\t\t\tmin: document.header.floor.origin ?? [0, 0],\n\t\t\t\tsize: document.header.floor.size,\n\t\t\t}\n\t\t: undefined;\n\n\tfor (const snapshot of snapshots) {\n\t\tfor (const element of snapshot.elements) {\n\t\t\tusedAssets.add(element.asset);\n\t\t\tif (isBuiltInAsset(element.asset)) {\n\t\t\t\tusedAssets.delete(element.asset);\n\t\t\t}\n\t\t\tusedLayers.add(element.layer);\n\t\t\tif (floorBounds) {\n\t\t\t\tconst outside = [0, 1].some(\n\t\t\t\t\t(axis) =>\n\t\t\t\t\t\telement.pos[axis] < floorBounds.min[axis] ||\n\t\t\t\t\t\telement.pos[axis] + element.size > floorBounds.min[axis] + floorBounds.size[axis],\n\t\t\t\t);\n\t\t\t\tif (outside) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\tissue(\"ELEMENT_OUTSIDE_FLOOR\", `Element \"${element.id}\" is outside floor bounds`, {\n\t\t\t\t\t\t\tsceneId: snapshot.id,\n\t\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const connector of snapshot.connectors) {\n\t\t\tusedLayers.add(connector.layer);\n\t\t\tif (floorBounds) {\n\t\t\t\tconst outside = connector.route.some((point) =>\n\t\t\t\t\t[0, 1].some(\n\t\t\t\t\t\t(axis) =>\n\t\t\t\t\t\t\tpoint[axis] < floorBounds.min[axis] || point[axis] > floorBounds.min[axis] + floorBounds.size[axis],\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tif (outside) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\tissue(\"CONNECTOR_OUTSIDE_FLOOR\", `Connection \"${connector.id}\" is outside floor bounds`, {\n\t\t\t\t\t\t\tsceneId: snapshot.id,\n\t\t\t\t\t\t\telementId: connector.id,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const asset of document.header.assets) {\n\t\t// Sprite sheets are referenced through their sprite ids, never through\n\t\t// the sheet namespace id itself.\n\t\tconst isUsed = isSpriteSheetAsset(asset)\n\t\t\t? Object.keys(asset.sprites ?? {}).some((spriteId) => usedAssets.has(spriteId))\n\t\t\t: usedAssets.has(asset.id);\n\t\tif (!isUsed) {\n\t\t\twarnings.push(\n\t\t\t\tissue(\"UNREFERENCED_ASSET\", `Asset \"${asset.id}\" is not used`, {\n\t\t\t\t\tassetName: asset.id,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const layer of document.header.layers) {\n\t\tif (!usedLayers.has(layer.name) && layer.name !== defaultFloorLayer(document)) {\n\t\t\twarnings.push(\n\t\t\t\tissue(\"UNREFERENCED_LAYER\", `Layer \"${layer.name}\" is not used`, {\n\t\t\t\t\tlayerName: layer.name,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function validateScene(document: SceneDocument): ValidationReport {\n\tconst errors: ValidationError[] = [];\n\tconst warnings: ValidationWarning[] = [];\n\n\tvalidateHeader(document, errors);\n\tvalidateTimelineShape(document, errors);\n\tvalidateSceneObjectDeltas(document, errors, warnings);\n\n\tif (errors.length === 0) {\n\t\tvalidateWarnings(document, warnings);\n\t}\n\n\treturn {\n\t\terrors,\n\t\twarnings,\n\t\tisValid: errors.length === 0,\n\t};\n}\n\nexport function resolveSceneSnapshots(document: SceneDocument): ResolvedSceneSnapshot[] {\n\tconst progress = deriveProgresses(document.scenes);\n\tconst currentElements = new Map<string, ResolvedElementRecord>();\n\tconst currentConnectors = new Map<string, ResolvedConnectorRecord>();\n\tconst snapshots: ResolvedSceneSnapshot[] = [];\n\n\tfor (const [index, scene] of document.scenes.entries()) {\n\t\tconst exiting: RuntimeElementState[] = [];\n\t\tconst exitingConnectors: RuntimeConnectorState[] = [];\n\n\t\tif (index === 0) {\n\t\t\tfor (const element of scene.elements ?? []) {\n\t\t\t\tcurrentElements.set(element.id, normalizePlacement(document, element));\n\t\t\t}\n\t\t\tfor (const connection of scene.connections ?? []) {\n\t\t\t\tcurrentConnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const patch of scene.update?.elements ?? []) {\n\t\t\t\tconst existing = currentElements.get(patch.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcurrentElements.set(patch.id, mergeElementPatch(existing, patch));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const element of scene.add?.elements ?? []) {\n\t\t\t\tcurrentElements.set(element.id, normalizePlacement(document, element));\n\t\t\t}\n\n\t\t\tfor (const patch of scene.update?.connections ?? []) {\n\t\t\t\tconst existing = currentConnectors.get(patch.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tcurrentConnectors.set(patch.id, {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t...patch,\n\t\t\t\t\t\tstyle: mergeStyle(existing.style, patch.style),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const connection of scene.add?.connections ?? []) {\n\t\t\t\tcurrentConnectors.set(connection.id, normalizeConnectionPlacement(document, connection));\n\t\t\t}\n\n\t\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\t\tconst existing = currentElements.get(removal.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\texiting.push(toRuntimeState(existing, \"exiting\", removal.exit));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\t\tconst existing = currentConnectors.get(removal.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\texitingConnectors.push(toRuntimeConnectorState(document, existing, currentElements, \"exiting\", removal.exit));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst addedIds = new Set((scene.add?.elements ?? []).map((element) => element.id));\n\t\tconst addedConnectorIds = new Set((scene.add?.connections ?? []).map((connection) => connection.id));\n\t\tconst snapshotElements = Array.from(currentElements.values()).map((element) =>\n\t\t\ttoRuntimeState(element, index > 0 && addedIds.has(element.id) ? \"entering\" : \"present\"),\n\t\t);\n\t\tconst snapshotConnectors = Array.from(currentConnectors.values()).map((connection) =>\n\t\t\ttoRuntimeConnectorState(\n\t\t\t\tdocument,\n\t\t\t\tconnection,\n\t\t\t\tcurrentElements,\n\t\t\t\tindex > 0 && addedConnectorIds.has(connection.id) ? \"entering\" : \"present\",\n\t\t\t),\n\t\t);\n\t\tfor (const removed of exiting) {\n\t\t\tconst existingIndex = snapshotElements.findIndex((element) => element.id === removed.id);\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tsnapshotElements[existingIndex] = removed;\n\t\t\t} else {\n\t\t\t\tsnapshotElements.push(removed);\n\t\t\t}\n\t\t}\n\t\tfor (const removed of exitingConnectors) {\n\t\t\tconst existingIndex = snapshotConnectors.findIndex((connector) => connector.id === removed.id);\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tsnapshotConnectors[existingIndex] = removed;\n\t\t\t} else {\n\t\t\t\tsnapshotConnectors.push(removed);\n\t\t\t}\n\t\t}\n\n\t\tsnapshots.push({\n\t\t\tid: scene.id,\n\t\t\tprogress: progress[index],\n\t\t\telements: snapshotElements,\n\t\t\tconnectors: snapshotConnectors,\n\t\t\t...(scene.camera ? { camera: normalizeCamera(scene.camera) } : {}),\n\t\t});\n\n\t\tfor (const removal of scene.remove?.connections ?? []) {\n\t\t\tcurrentConnectors.delete(removal.id);\n\t\t}\n\t\tfor (const removal of scene.remove?.elements ?? []) {\n\t\t\tcurrentElements.delete(removal.id);\n\t\t}\n\t}\n\n\treturn snapshots;\n}\n\nfunction normalizeCamera(camera: CameraFocus): RuntimeCameraFocus {\n\tconst normalized: RuntimeCameraFocus =\n\t\t\"element\" in camera.target && camera.target.element !== undefined\n\t\t\t? {\n\t\t\t\t\ttarget: { type: \"element\", id: camera.target.element },\n\t\t\t\t\tpadding: camera.padding ?? 32,\n\t\t\t\t}\n\t\t\t: \"area\" in camera.target && camera.target.area !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\ttarget: { type: \"area\", at: camera.target.area.at, size: camera.target.area.size },\n\t\t\t\t\t\tpadding: camera.padding ?? 32,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\ttarget: { type: \"reset\" },\n\t\t\t\t\t};\n\tif (camera.duration !== undefined) normalized.duration = camera.duration;\n\tif (camera.easing !== undefined) normalized.easing = camera.easing;\n\treturn normalized;\n}\n\nexport function deriveProgresses(scenes: SceneStep[]): number[] {\n\tif (scenes.length <= 1) {\n\t\treturn scenes.map(() => 0);\n\t}\n\treturn scenes.map((_, index) => index / (scenes.length - 1));\n}\n\nfunction normalizePlacement(document: SceneDocument, element: ElementPlacement): ResolvedElementRecord {\n\treturn {\n\t\tid: element.id,\n\t\tasset: element.asset,\n\t\tat: element.at,\n\t\tsize: element.size,\n\t\tlayer: element.layer ?? defaultElementLayer(document),\n\t\tenter: element.enter,\n\t\texit: element.exit,\n\t\tambient: element.ambient,\n\t\ttext: element.text,\n\t\tprimitive: element.primitive,\n\t\tactivity: element.activity,\n\t};\n}\n\nfunction normalizeConnectionPlacement(\n\tdocument: SceneDocument,\n\tconnection: ConnectionPlacement,\n): ResolvedConnectorRecord {\n\treturn {\n\t\tid: connection.id,\n\t\troute: connection.route,\n\t\tfrom: connection.from,\n\t\tto: connection.to,\n\t\trouting: connection.routing,\n\t\tlayer: connection.layer ?? defaultConnectorLayer(document),\n\t\tstyle: connection.style,\n\t\tstart: connection.start,\n\t\tend: connection.end,\n\t\tdirection: connection.direction,\n\t\tenter: connection.enter,\n\t\texit: connection.exit,\n\t\tambient: connection.ambient,\n\t\tmessage: connection.message,\n\t};\n}\n\nfunction toRuntimeState(\n\telement: ResolvedElementRecord,\n\tpresence: RuntimeElementState[\"presence\"],\n\texit?: ElementRemoval[\"exit\"],\n): RuntimeElementState {\n\treturn {\n\t\tid: element.id,\n\t\tasset: element.asset,\n\t\tpos: element.at,\n\t\tsize: element.size ?? 1,\n\t\tlayer: element.layer ?? \"\",\n\t\tpresence,\n\t\tenter: presence === \"entering\" ? (element.enter ?? \"fade-in\") : element.enter,\n\t\texit: presence === \"exiting\" ? (exit ?? element.exit ?? \"fade-out\") : (exit ?? element.exit),\n\t\tambient: element.ambient,\n\t\ttext: element.text,\n\t\tprimitive: element.primitive,\n\t\tactivity: element.activity,\n\t};\n}\n\nfunction toRuntimeConnectorState(\n\tdocument: SceneDocument,\n\tconnection: ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n\tpresence: RuntimeConnectorState[\"presence\"],\n\texit?: ConnectionRemoval[\"exit\"],\n): RuntimeConnectorState {\n\treturn {\n\t\tid: connection.id,\n\t\troute: resolveConnectorRoute(connection, elements),\n\t\tlayer: connection.layer ?? defaultConnectorLayer(document),\n\t\tpresence,\n\t\tstyle: resolveConnectorStyle(connection.style),\n\t\tstart: connection.start ?? \"none\",\n\t\tend: connection.end ?? \"arrow\",\n\t\tdirection: connection.direction ?? \"route\",\n\t\tenter: presence === \"entering\" ? (connection.enter ?? \"fade-in\") : connection.enter,\n\t\texit: presence === \"exiting\" ? (exit ?? connection.exit ?? \"fade-out\") : (exit ?? connection.exit),\n\t\tambient: connection.ambient,\n\t\tmessage: connection.message,\n\t};\n}\n\nfunction resolveConnectorStyle(style: ConnectorStyle | undefined): RuntimeConnectorStyle {\n\tconst variant = style?.variant ?? \"line\";\n\tconst pattern = style?.pattern ?? \"solid\";\n\tconst resolved: RuntimeConnectorStyle = {\n\t\tvariant,\n\t\tpattern,\n\t\tstroke: style?.stroke ?? \"#2563eb\",\n\t\tstrokeWidth: style?.strokeWidth ?? (variant === \"road\" ? 14 : variant === \"beam\" ? 6 : 3),\n\t\topacity: style?.opacity ?? 1,\n\t\toutlineWidth: style?.outlineWidth ?? (variant === \"road\" || variant === \"beam\" ? 2 : 0),\n\t\tlane: style?.lane ?? \"none\",\n\t};\n\tif (style?.cornerRadius !== undefined) resolved.cornerRadius = style.cornerRadius;\n\tif (style?.glow !== undefined) resolved.glow = style.glow;\n\tif (style?.glowWidth !== undefined) resolved.glowWidth = style.glowWidth;\n\tconst dash = style?.dash ?? defaultDash(pattern);\n\tif (dash) {\n\t\tresolved.dash = dash;\n\t}\n\tconst outline = style?.outline ?? (variant === \"road\" ? \"#ffffff\" : variant === \"beam\" ? \"#263746\" : undefined);\n\tif (outline) {\n\t\tresolved.outline = outline;\n\t}\n\treturn resolved;\n}\n\nfunction defaultDash(pattern: RuntimeConnectorStyle[\"pattern\"]): [number, number] | undefined {\n\tif (pattern === \"dashed\") return [12, 8];\n\tif (pattern === \"dotted\") return [0, 8];\n\treturn undefined;\n}\n\nfunction resolveConnectorRoute(\n\tconnection: ResolvedConnectorRecord,\n\telements: Map<string, ResolvedElementRecord>,\n): [number, number][] {\n\tif (connection.route) return connection.route;\n\tif (!connection.from || !connection.to) return [];\n\n\tconst routing = connection.routing ?? {};\n\tconst avoid = routing.avoid ?? \"objects\";\n\tconst clearance = routing.clearance ?? 0.5;\n\tconst obstacles =\n\t\tavoid === \"none\" ? [] : collectObstacles(elements, connection.from, connection.to, avoid, clearance);\n\n\tconst starts = endpointCandidates(connection.from, elements);\n\tconst ends = endpointCandidates(connection.to, elements);\n\tlet best: [number, number][] | undefined;\n\tlet bestScore = Number.POSITIVE_INFINITY;\n\tfor (const start of starts) {\n\t\tfor (const end of ends) {\n\t\t\tconst route = routeBetween(start, end, obstacles, routing.mode ?? \"orthogonal\", clearance);\n\t\t\tconst score = routeScore(route, obstacles);\n\t\t\tif (score < bestScore) {\n\t\t\t\tbest = route;\n\t\t\t\tbestScore = score;\n\t\t\t}\n\t\t}\n\t}\n\treturn simplifyRoute(best ?? [starts[0]?.point ?? [0, 0], ends[0]?.point ?? [0, 0]]);\n}\n\ninterface RouteEndpointCandidate {\n\tpoint: [number, number];\n\tnormal?: [number, number];\n\tsideRank: number;\n}\n\ninterface ObstacleRect {\n\tminX: number;\n\tminY: number;\n\tmaxX: number;\n\tmaxY: number;\n}\n\nfunction endpointCandidates(\n\tendpoint: ConnectorEndpointRef,\n\telements: Map<string, ResolvedElementRecord>,\n): RouteEndpointCandidate[] {\n\tif (endpoint.at) return [{ point: endpoint.at, sideRank: 0 }];\n\tconst element = endpoint.element ? elements.get(endpoint.element) : undefined;\n\tif (!element) return [{ point: [0, 0], sideRank: 0 }];\n\tconst sides =\n\t\tendpoint.side && endpoint.side !== \"auto\"\n\t\t\t? [normalizeSide(endpoint.side)]\n\t\t\t: ([\"right\", \"left\", \"bottom\", \"top\"] as const);\n\treturn sides.map((side, index) => ({\n\t\tpoint: portForSide(element, side, endpoint.offset ?? 0),\n\t\tnormal: normalForSide(side),\n\t\tsideRank: index,\n\t}));\n}\n\nfunction normalizeSide(side: NonNullable<ConnectorEndpointRef[\"side\"]>): \"top\" | \"right\" | \"bottom\" | \"left\" {\n\tif (side === \"front\") return \"bottom\";\n\tif (side === \"back\") return \"top\";\n\tif (side === \"auto\") return \"right\";\n\treturn side;\n}\n\nfunction portForSide(\n\telement: ResolvedElementRecord,\n\tside: \"top\" | \"right\" | \"bottom\" | \"left\",\n\toffset: number,\n): [number, number] {\n\tconst x = element.at[0];\n\tconst y = element.at[1];\n\tconst size = element.size ?? 1;\n\tif (side === \"top\") return [x + size * (0.5 + offset), y];\n\tif (side === \"right\") return [x + size, y + size * (0.5 + offset)];\n\tif (side === \"bottom\") return [x + size * (0.5 - offset), y + size];\n\treturn [x, y + size * (0.5 - offset)];\n}\n\nfunction normalForSide(side: \"top\" | \"right\" | \"bottom\" | \"left\"): [number, number] {\n\tif (side === \"top\") return [0, -1];\n\tif (side === \"right\") return [1, 0];\n\tif (side === \"bottom\") return [0, 1];\n\treturn [-1, 0];\n}\n\nfunction collectObstacles(\n\telements: Map<string, ResolvedElementRecord>,\n\tfrom: ConnectorEndpointRef,\n\tto: ConnectorEndpointRef,\n\tavoid: \"objects\" | \"none\" | string[],\n\tclearance: number,\n): ObstacleRect[] {\n\tconst endpointIds = new Set([from.element, to.element].filter(Boolean));\n\tconst avoidIds = Array.isArray(avoid) ? new Set(avoid) : undefined;\n\tconst obstacles: ObstacleRect[] = [];\n\tfor (const element of elements.values()) {\n\t\tif (endpointIds.has(element.id) || element.asset === BUILT_IN_TEXT_ASSET_ID) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (avoidIds && !avoidIds.has(element.id)) continue;\n\t\tconst size = element.size ?? 1;\n\t\tobstacles.push({\n\t\t\tminX: element.at[0] - clearance,\n\t\t\tminY: element.at[1] - clearance,\n\t\t\tmaxX: element.at[0] + size + clearance,\n\t\t\tmaxY: element.at[1] + size + clearance,\n\t\t});\n\t}\n\treturn obstacles;\n}\n\nfunction routeBetween(\n\tstart: RouteEndpointCandidate,\n\tend: RouteEndpointCandidate,\n\tobstacles: ObstacleRect[],\n\tmode: NonNullable<ConnectorRouting[\"mode\"]> = \"orthogonal\",\n\tclearance = 0.5,\n): [number, number][] {\n\tconst startExit = offsetPort(start, clearance);\n\tconst endEntry = offsetPort(end, clearance);\n\tconst direct = [startExit, endEntry] as [number, number][];\n\tif (mode === \"straight\") return direct;\n\tif (isGridAxisRoute(direct) && !routeIntersectsObstacles(direct, obstacles)) {\n\t\treturn withEndpointPorts(start, end, direct);\n\t}\n\n\tconst candidates: [number, number][][] = [\n\t\t[startExit, [endEntry[0], startExit[1]], endEntry],\n\t\t[startExit, [startExit[0], endEntry[1]], endEntry],\n\t];\n\tconst blocking = obstacles.find((obstacle) => segmentIntersectsRect(startExit, endEntry, obstacle));\n\tif (blocking) {\n\t\tconst leftX = Math.max(0, blocking.minX);\n\t\tconst rightX = Math.max(0, blocking.maxX);\n\t\tconst topY = Math.max(0, blocking.minY);\n\t\tconst bottomY = Math.max(0, blocking.maxY);\n\t\tcandidates.push(\n\t\t\t[startExit, [leftX, startExit[1]], [leftX, endEntry[1]], endEntry],\n\t\t\t[startExit, [rightX, startExit[1]], [rightX, endEntry[1]], endEntry],\n\t\t\t[startExit, [startExit[0], topY], [endEntry[0], topY], endEntry],\n\t\t\t[startExit, [startExit[0], bottomY], [endEntry[0], bottomY], endEntry],\n\t\t);\n\t}\n\n\tconst route =\n\t\tcandidates\n\t\t\t.map((route) => simplifyRoute(route))\n\t\t\t.sort((a, b) => routeScore(a, obstacles) - routeScore(b, obstacles) || routeLength(a) - routeLength(b))[0] ??\n\t\tdirect;\n\treturn withEndpointPorts(start, end, route);\n}\n\nfunction offsetPort(endpoint: RouteEndpointCandidate, clearance: number): [number, number] {\n\tif (!endpoint.normal || clearance <= 0) return endpoint.point;\n\treturn [endpoint.point[0] + endpoint.normal[0] * clearance, endpoint.point[1] + endpoint.normal[1] * clearance];\n}\n\nfunction withEndpointPorts(\n\tstart: RouteEndpointCandidate,\n\tend: RouteEndpointCandidate,\n\troute: [number, number][],\n): [number, number][] {\n\treturn simplifyRoute([start.point, ...route, end.point]);\n}\n\nfunction routeScore(route: [number, number][], obstacles: ObstacleRect[]): number {\n\tconst intersections = routeIntersectsObstacles(route, obstacles) ? 1000 : 0;\n\treturn intersections + bendCount(route) * 10 + routeLength(route);\n}\n\nfunction routeLength(route: [number, number][]): number {\n\tlet length = 0;\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tlength += Math.abs(route[index][0] - route[index - 1][0]) + Math.abs(route[index][1] - route[index - 1][1]);\n\t}\n\treturn length;\n}\n\nfunction bendCount(route: [number, number][]): number {\n\tlet bends = 0;\n\tfor (let index = 2; index < route.length; index += 1) {\n\t\tconst a = route[index - 2];\n\t\tconst b = route[index - 1];\n\t\tconst c = route[index];\n\t\tif ((b[0] - a[0]) * (c[1] - b[1]) !== (b[1] - a[1]) * (c[0] - b[0])) {\n\t\t\tbends += 1;\n\t\t}\n\t}\n\treturn bends;\n}\n\nfunction routeIntersectsObstacles(route: [number, number][], obstacles: ObstacleRect[]): boolean {\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tif (obstacles.some((obstacle) => segmentIntersectsRect(route[index - 1], route[index], obstacle))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction segmentIntersectsRect(a: [number, number], b: [number, number], rect: ObstacleRect): boolean {\n\tif (\n\t\t(a[0] < rect.minX && b[0] < rect.minX) ||\n\t\t(a[0] > rect.maxX && b[0] > rect.maxX) ||\n\t\t(a[1] < rect.minY && b[1] < rect.minY) ||\n\t\t(a[1] > rect.maxY && b[1] > rect.maxY)\n\t) {\n\t\treturn false;\n\t}\n\tif (pointInsideRect(a, rect) || pointInsideRect(b, rect)) return true;\n\tconst corners: [number, number][] = [\n\t\t[rect.minX, rect.minY],\n\t\t[rect.maxX, rect.minY],\n\t\t[rect.maxX, rect.maxY],\n\t\t[rect.minX, rect.maxY],\n\t];\n\treturn [\n\t\t[corners[0], corners[1]],\n\t\t[corners[1], corners[2]],\n\t\t[corners[2], corners[3]],\n\t\t[corners[3], corners[0]],\n\t].some(([c, d]) => segmentsIntersect(a, b, c, d));\n}\n\nfunction pointInsideRect(point: [number, number], rect: ObstacleRect): boolean {\n\treturn point[0] > rect.minX && point[0] < rect.maxX && point[1] > rect.minY && point[1] < rect.maxY;\n}\n\nfunction segmentsIntersect(\n\ta: [number, number],\n\tb: [number, number],\n\tc: [number, number],\n\td: [number, number],\n): boolean {\n\tconst ccw = (p1: [number, number], p2: [number, number], p3: [number, number]) =>\n\t\t(p3[1] - p1[1]) * (p2[0] - p1[0]) > (p2[1] - p1[1]) * (p3[0] - p1[0]);\n\treturn ccw(a, c, d) !== ccw(b, c, d) && ccw(a, b, c) !== ccw(a, b, d);\n}\n\nfunction simplifyRoute(route: [number, number][]): [number, number][] {\n\tconst simplified: [number, number][] = [];\n\tfor (const point of route) {\n\t\tconst previous = simplified[simplified.length - 1];\n\t\tif (previous && previous[0] === point[0] && previous[1] === point[1]) {\n\t\t\tcontinue;\n\t\t}\n\t\tsimplified.push(point);\n\t\twhile (simplified.length >= 3) {\n\t\t\tconst a = simplified[simplified.length - 3];\n\t\t\tconst b = simplified[simplified.length - 2];\n\t\t\tconst c = simplified[simplified.length - 1];\n\t\t\tif ((b[0] - a[0]) * (c[1] - b[1]) === (b[1] - a[1]) * (c[0] - b[0])) {\n\t\t\t\tsimplified.splice(simplified.length - 2, 1);\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn simplified;\n}\n\nfunction isGridAxisRoute(route: [number, number][]): boolean {\n\tfor (let index = 1; index < route.length; index += 1) {\n\t\tconst previous = route[index - 1];\n\t\tconst current = route[index];\n\t\tif (previous[0] !== current[0] && previous[1] !== current[1]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n","import type {\n\tCompiledAsset,\n\tCompiledFloor,\n\tCompiledLayer,\n\tCompiledSprite,\n\tLayerDefinition,\n\tResolvedLayoutConfig,\n\tRuntimeBundle,\n\tRuntimeSceneStop,\n\tSceneDocument,\n} from \"../types/index.ts\";\nimport { ValidationErrorClass } from \"../types/index.ts\";\nimport type { SpriteDefinition } from \"../types/scene.ts\";\nimport { sha256 } from \"../utils/sha256.ts\";\nimport { resolveSceneSnapshots } from \"./scene-validator.ts\";\n\nexport interface CompileOptions {\n\tminify?: boolean;\n\tversion?: string;\n}\n\nconst DEFAULT_VERSION = \"0.6.1\";\nconst RUNTIME_BUNDLE_FORMAT = \"isostate-runtime-bundle\";\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\n\nexport function compileScene(document: SceneDocument, options: CompileOptions = {}): RuntimeBundle {\n\tconst { version = DEFAULT_VERSION } = options;\n\tconst scenes = resolveSceneSnapshots(document).map((scene) => normalizeValue(scene)) as RuntimeSceneStop[];\n\n\tconst bundleWithoutDigest: Omit<RuntimeBundle, \"_digest\"> = {\n\t\t_format: RUNTIME_BUNDLE_FORMAT,\n\t\t_version: version,\n\t\tgrid: { cellSize: document.header.grid?.cellSize ?? 64 },\n\t\tfloor: compileFloor(document, scenes),\n\t\tlayout: compileLayout(),\n\t\ttheme: document.header.theme ?? \"light\",\n\t\tlayers: compileLayers(document.header.layers),\n\t\tscenes,\n\t};\n\n\tif (document.header.className) {\n\t\tbundleWithoutDigest.className = document.header.className;\n\t}\n\n\tconst assets = compileExternalAssets(document, scenes);\n\tif (Object.keys(assets).length > 0) {\n\t\tbundleWithoutDigest.assets = assets;\n\t}\n\n\treturn {\n\t\t...bundleWithoutDigest,\n\t\t_digest: digestBundle(bundleWithoutDigest),\n\t};\n}\n\nfunction compileExternalAssets(document: SceneDocument, scenes: RuntimeSceneStop[]): Record<string, CompiledAsset> {\n\tconst assets: Record<string, CompiledAsset> = {};\n\tfor (const name of uniqueReferencedAssetNames(document, scenes)) {\n\t\tconst sprite = resolveSpriteAsset(document, name);\n\t\tif (sprite) {\n\t\t\tconst url = resolveAssetUrl(document, sprite.sheet.id);\n\t\t\tif (!url) {\n\t\t\t\tthrow new ValidationErrorClass(\n\t\t\t\t\t\"ASSET_URL_REQUIRED\",\n\t\t\t\t\t`Sprite sheet \"${sprite.sheet.id}\" must resolve through header.assetBaseUrl`,\n\t\t\t\t\t{\n\t\t\t\t\t\tasset: sprite.sheet.id,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tassets[name] = normalizeValue({\n\t\t\t\turl,\n\t\t\t\tsprite: sprite.compiled,\n\t\t\t\tanchor: sprite.anchor,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst url = resolveAssetUrl(document, name);\n\t\tif (!url) {\n\t\t\tthrow new ValidationErrorClass(\"ASSET_URL_REQUIRED\", `Asset \"${name}\" must resolve through header.assetBaseUrl`, {\n\t\t\t\tasset: name,\n\t\t\t});\n\t\t}\n\t\tconst entry = document.header.assets.find((asset) => asset.id === name);\n\t\tassets[name] = normalizeValue({\n\t\t\turl,\n\t\t\t...(entry?.anchor ? { anchor: entry.anchor } : {}),\n\t\t});\n\t}\n\treturn assets;\n}\n\nexport function toJs(bundle: RuntimeBundle, options: { minify?: boolean } = {}): string {\n\tconst { minify = true } = options;\n\tconst json = canonicalStringify(bundle, minify ? undefined : 2);\n\treturn `export default ${json};`;\n}\n\nexport function toJson(bundle: RuntimeBundle): string {\n\treturn canonicalStringify(bundle, 2);\n}\n\nexport function fromJs(moduleString: string): RuntimeBundle {\n\tif (!moduleString.startsWith(\"export default \") || !moduleString.endsWith(\";\")) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_MODULE\", \"Invalid JS module: expected exact default export\");\n\t}\n\n\tconst jsonString = moduleString.slice(\"export default \".length, -1);\n\tconst bundle = parseRuntimeBundleJson(jsonString, \"INVALID_RUNTIME_BUNDLE_MODULE\");\n\tconst minify = !jsonString.includes(\"\\n\");\n\tif (moduleString !== toJs(bundle, { minify })) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_MODULE\", \"Invalid JS module: non-canonical bundle export\");\n\t}\n\n\treturn bundle;\n}\n\nexport function fromJson(jsonString: string): RuntimeBundle {\n\tconst bundle = parseRuntimeBundleJson(jsonString, \"INVALID_RUNTIME_BUNDLE_JSON\");\n\tif (jsonString !== toJson(bundle)) {\n\t\tthrow new ValidationErrorClass(\"INVALID_RUNTIME_BUNDLE_JSON\", \"Invalid JSON bundle: non-canonical serialization\");\n\t}\n\n\treturn bundle;\n}\n\nfunction parseRuntimeBundleJson(\n\tjsonString: string,\n\tcode: \"INVALID_RUNTIME_BUNDLE_MODULE\" | \"INVALID_RUNTIME_BUNDLE_JSON\",\n): RuntimeBundle {\n\ttry {\n\t\treturn JSON.parse(jsonString) as RuntimeBundle;\n\t} catch {\n\t\tthrow new ValidationErrorClass(code, \"Invalid runtime bundle: expected valid JSON\");\n\t}\n}\n\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\nfunction compileFloor(document: SceneDocument, scenes: RuntimeSceneStop[]): CompiledFloor {\n\tconst floor = document.header.floor ?? {};\n\tconst origin = floor.origin ?? [0, 0];\n\tconst compiled: CompiledFloor = {\n\t\tsize: floor.size ?? deriveFloorSize(scenes, origin),\n\t\torigin,\n\t\tvisible: floor.visible ?? true,\n\t\tlayer: floor.layer ?? defaultFloorLayer(document),\n\t};\n\tif (floor.asset !== undefined) {\n\t\tcompiled.asset = floor.asset;\n\t}\n\treturn normalizeValue(compiled);\n}\n\nfunction deriveFloorSize(scenes: RuntimeSceneStop[], origin: [number, number]): [number, number] {\n\tlet maxX = origin[0] + 1;\n\tlet maxY = origin[1] + 1;\n\tfor (const scene of scenes) {\n\t\tfor (const element of scene.elements) {\n\t\t\tif (element.presence === \"removed\") continue;\n\t\t\tmaxX = Math.max(maxX, element.pos[0] + element.size);\n\t\t\tmaxY = Math.max(maxY, element.pos[1] + element.size);\n\t\t}\n\t\tfor (const connector of scene.connectors) {\n\t\t\tif (connector.presence === \"removed\") continue;\n\t\t\tfor (const point of connector.route) {\n\t\t\t\tmaxX = Math.max(maxX, point[0]);\n\t\t\t\tmaxY = Math.max(maxY, point[1]);\n\t\t\t}\n\t\t}\n\t}\n\treturn [Math.max(1, Math.ceil(maxX - origin[0])), Math.max(1, Math.ceil(maxY - origin[1]))];\n}\n\nfunction compileLayout(): ResolvedLayoutConfig {\n\treturn normalizeValue({\n\t\tfit: \"contain\",\n\t\talign: [0.5, 0.5],\n\t\tpadding: { x: 64, y: 64 },\n\t\tbounds: \"union\",\n\t});\n}\n\nfunction compileLayers(layers: LayerDefinition[]): CompiledLayer[] {\n\treturn layers\n\t\t.map((layer, index) => ({\n\t\t\tname: layer.name,\n\t\t\torder: layer.order ?? index,\n\t\t}))\n\t\t.sort((a, b) => a.order - b.order || compareCodePointOrder(a.name, b.name));\n}\n\n/** Locale-independent string comparator so tie-break order is byte-deterministic across hosts. */\nfunction compareCodePointOrder(a: string, b: string): number {\n\treturn a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction resolveAssetUrl(document: SceneDocument, assetId: string): string | undefined {\n\tconst base = document.header.assetBaseUrl;\n\tconst entry = document.header.assets.find((asset) => asset.id === assetId);\n\tif (!base || !entry) return undefined;\n\n\tconst path = entry.path ?? entry.id;\n\tconst file = \"type\" in entry && entry.type === \"sprite-sheet\" ? path : path.endsWith(\".svg\") ? path : `${path}.svg`;\n\treturn `${base.replace(/\\/+$/, \"\")}/${file.replace(/^\\/+/, \"\")}`;\n}\n\nfunction resolveSpriteAsset(\n\tdocument: SceneDocument,\n\tspriteId: string,\n):\n\t| {\n\t\t\tsheet: Extract<SceneDocument[\"header\"][\"assets\"][number], { type: \"sprite-sheet\" }>;\n\t\t\tcompiled: CompiledSprite;\n\t\t\tanchor: [number, number];\n\t }\n\t| undefined {\n\tfor (const asset of document.header.assets) {\n\t\tif (!(\"type\" in asset) || asset.type !== \"sprite-sheet\") continue;\n\t\tconst definition = asset.sprites[spriteId];\n\t\tif (!definition) continue;\n\t\tconst rect = compileSpriteRect(definition, asset.tileSize);\n\t\tif (!rect) {\n\t\t\tthrow new ValidationErrorClass(\"INVALID_SPRITE_DEFINITION\", `Sprite \"${spriteId}\" cannot be compiled`, {\n\t\t\t\tasset: spriteId,\n\t\t\t});\n\t\t}\n\t\tconst anchor = !Array.isArray(definition) && definition.anchor ? definition.anchor : (asset.anchor ?? [0.5, 1]);\n\t\treturn {\n\t\t\tsheet: asset,\n\t\t\tcompiled: {\n\t\t\t\tsheetSize: asset.sheetSize,\n\t\t\t\trect,\n\t\t\t},\n\t\t\tanchor,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction compileSpriteRect(\n\tsprite: SpriteDefinition,\n\ttileSize: [number, number] | undefined,\n): [number, number, number, number] | undefined {\n\tif (Array.isArray(sprite)) {\n\t\tif (!tileSize) return undefined;\n\t\treturn [sprite[0] * tileSize[0], sprite[1] * tileSize[1], tileSize[0], tileSize[1]];\n\t}\n\tif (sprite.rect) return sprite.rect;\n\tif (sprite.at && tileSize) {\n\t\treturn [sprite.at[0] * tileSize[0], sprite.at[1] * tileSize[1], tileSize[0], tileSize[1]];\n\t}\n\treturn undefined;\n}\n\nfunction uniqueReferencedAssetNames(document: SceneDocument, scenes: RuntimeSceneStop[]): string[] {\n\tconst names = new Set<string>();\n\tif (document.header.floor?.asset && document.header.floor.visible !== false) {\n\t\tnames.add(document.header.floor.asset);\n\t}\n\tfor (const scene of scenes) {\n\t\tfor (const element of scene.elements) {\n\t\t\tif (!isBuiltInGeneratedAsset(element.asset)) {\n\t\t\t\tnames.add(element.asset);\n\t\t\t}\n\t\t}\n\t}\n\treturn Array.from(names).sort();\n}\n\nfunction isBuiltInGeneratedAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID || BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction defaultFloorLayer(document: SceneDocument): string {\n\tconst ground = document.header.layers.find((layer) => layer.name === \"ground\");\n\treturn ground?.name ?? document.header.layers[0]?.name ?? \"\";\n}\n\nfunction digestBundle(bundle: Omit<RuntimeBundle, \"_digest\">): string {\n\treturn sha256(canonicalStringify(bundle));\n}\n\nfunction canonicalStringify(value: unknown, space?: number): string {\n\tconst normalized = normalizeValue(value);\n\treturn JSON.stringify(normalized, null, space);\n}\n\nfunction normalizeValue<T>(value: T): T {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => (item === undefined ? null : normalizeValue(item))) as T;\n\t}\n\n\tif (!isPlainObject(value)) return value;\n\n\tconst normalized: Record<string, JsonValue> = {};\n\tfor (const key of Object.keys(value).sort()) {\n\t\tconst child = (value as Record<string, unknown>)[key];\n\t\tif (child !== undefined) {\n\t\t\tnormalized[key] = normalizeValue(child) as JsonValue;\n\t\t}\n\t}\n\n\treturn normalized as T;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { ParseError } from \"../types/errors.ts\";\nimport type {\n\tAmbientAnimation,\n\tAssetCatalogEntry,\n\tCameraFocus,\n\tConnectionPatch,\n\tConnectionPlacement,\n\tConnectionRemoval,\n\tConnectorEndpointRef,\n\tConnectorMessage,\n\tConnectorRouting,\n\tConnectorStyle,\n\tElementActivity,\n\tElementPatch,\n\tElementPlacement,\n\tElementRemoval,\n\tFloorConfig,\n\tGridConfig,\n\tLayerDefinition,\n\tLinePrimitive,\n\tPrimitiveContent,\n\tPrimitiveContentPatch,\n\tSceneDocument,\n\tSceneHeader,\n\tSceneStep,\n\tTextContent,\n} from \"../types/index.ts\";\nimport type { SpriteDefinition } from \"../types/scene.ts\";\n\nconst IDENTIFIER_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst ASSET_PATH_PATTERN = /^[a-z0-9][a-z0-9-]*(?:\\/[a-z0-9][a-z0-9-]*)*(?:\\.svg)?$/;\nconst SPRITE_SHEET_PATH_PATTERN = /^[a-z0-9][a-z0-9-]*(?:\\/[a-z0-9][a-z0-9-]*)*\\.(?:png|webp|jpe?g|svg)$/;\n\nfunction fail(code: string, message: string): never {\n\tthrow new ParseError(code, message, { line: 0, column: 0 });\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertKnownFields(obj: Record<string, unknown>, allowed: ReadonlySet<string>, context: string): void {\n\tfor (const field of Object.keys(obj)) {\n\t\tif (!allowed.has(field)) {\n\t\t\tfail(\"UNKNOWN_FIELD\", `Unknown field \"${field}\" in ${context}`);\n\t\t}\n\t}\n}\n\nfunction requireObject(value: unknown, context: string): Record<string, unknown> {\n\tif (!isObject(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a mapping object`);\n\t}\n\treturn value;\n}\n\nfunction requireArray(value: unknown, context: string): unknown[] {\n\tif (!Array.isArray(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be an array`);\n\t}\n\treturn value;\n}\n\nfunction requireString(value: unknown, context: string): string {\n\tif (typeof value !== \"string\") {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a string`);\n\t}\n\treturn value;\n}\n\nfunction requireNumber(value: unknown, context: string): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a finite number`);\n\t}\n\treturn value;\n}\n\nfunction requireBoolean(value: unknown, context: string): boolean {\n\tif (typeof value !== \"boolean\") {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a boolean`);\n\t}\n\treturn value;\n}\n\nfunction requireIdentifier(value: unknown, context: string): string {\n\tconst identifier = requireString(value, context);\n\tif (!IDENTIFIER_PATTERN.test(identifier)) {\n\t\tfail(\"INVALID_IDENTIFIER\", `${context} must be kebab-case`);\n\t}\n\treturn identifier;\n}\n\nfunction parseTuple2(value: unknown, context: string): [number, number] {\n\tif (!Array.isArray(value) || value.length !== 2) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a two-number tuple`);\n\t}\n\treturn [requireNumber(value[0], `${context}[0]`), requireNumber(value[1], `${context}[1]`)];\n}\n\nfunction parseTuple4(value: unknown, context: string): [number, number, number, number] {\n\tif (!Array.isArray(value) || value.length !== 4) {\n\t\tfail(\"DSL_SCHEMA_TYPE_ERROR\", `${context} must be a four-number tuple`);\n\t}\n\treturn [\n\t\trequireNumber(value[0], `${context}[0]`),\n\t\trequireNumber(value[1], `${context}[1]`),\n\t\trequireNumber(value[2], `${context}[2]`),\n\t\trequireNumber(value[3], `${context}[3]`),\n\t];\n}\n\nfunction parseSpriteDefinition(value: unknown, context: string): SpriteDefinition {\n\tif (Array.isArray(value)) {\n\t\treturn parseTuple2(value, context);\n\t}\n\tconst sprite = requireObject(value, context);\n\tassertKnownFields(sprite, new Set([\"at\", \"rect\", \"anchor\"]), context);\n\tconst parsed: {\n\t\tat?: [number, number];\n\t\trect?: [number, number, number, number];\n\t\tanchor?: [number, number];\n\t} = {};\n\tif (sprite.at !== undefined) parsed.at = parseTuple2(sprite.at, `${context}.at`);\n\tif (sprite.rect !== undefined) parsed.rect = parseTuple4(sprite.rect, `${context}.rect`);\n\tif (sprite.anchor !== undefined) parsed.anchor = parseTuple2(sprite.anchor, `${context}.anchor`);\n\treturn parsed;\n}\n\nfunction parseAssets(raw: unknown): AssetCatalogEntry[] {\n\treturn requireArray(raw, \"header.assets\").map((item, index) => {\n\t\tconst asset = requireObject(item, `header.assets[${index}]`);\n\t\tconst assetType = asset.type === undefined ? undefined : requireString(asset.type, `header.assets[${index}].type`);\n\t\tif (assetType !== undefined && assetType !== \"sprite-sheet\") {\n\t\t\tfail(\"ASSET_TYPE_UNSUPPORTED\", `Unsupported asset type \"${assetType}\" in header.assets[${index}]`);\n\t\t}\n\t\tconst id = requireIdentifier(asset.id, `header.assets[${index}].id`);\n\t\tif (assetType === \"sprite-sheet\") {\n\t\t\tassertKnownFields(\n\t\t\t\tasset,\n\t\t\t\tnew Set([\"id\", \"type\", \"path\", \"sheetSize\", \"tileSize\", \"anchor\", \"sprites\"]),\n\t\t\t\t`header.assets[${index}]`,\n\t\t\t);\n\t\t\tconst path = requireString(asset.path, `header.assets[${index}].path`);\n\t\t\tif (!SPRITE_SHEET_PATH_PATTERN.test(path)) {\n\t\t\t\tfail(\"INVALID_SPRITE_SHEET_PATH\", `header.assets[${index}].path must include a supported image extension`);\n\t\t\t}\n\t\t\tconst sprites = requireObject(asset.sprites, `header.assets[${index}].sprites`);\n\t\t\tconst parsedSprites: Record<string, SpriteDefinition> = {};\n\t\t\tfor (const [spriteId, spriteValue] of Object.entries(sprites)) {\n\t\t\t\tif (!IDENTIFIER_PATTERN.test(spriteId)) {\n\t\t\t\t\tfail(\"INVALID_SPRITE_ID\", `Sprite id \"${spriteId}\" must be kebab-case`);\n\t\t\t\t}\n\t\t\t\tparsedSprites[spriteId] = parseSpriteDefinition(spriteValue, `header.assets[${index}].sprites.${spriteId}`);\n\t\t\t}\n\t\t\tconst parsed: AssetCatalogEntry = {\n\t\t\t\tid,\n\t\t\t\ttype: \"sprite-sheet\",\n\t\t\t\tpath,\n\t\t\t\tsheetSize: parseTuple2(asset.sheetSize, `header.assets[${index}].sheetSize`),\n\t\t\t\tsprites: parsedSprites,\n\t\t\t};\n\t\t\tif (asset.tileSize !== undefined)\n\t\t\t\tparsed.tileSize = parseTuple2(asset.tileSize, `header.assets[${index}].tileSize`);\n\t\t\tif (asset.anchor !== undefined) parsed.anchor = parseTuple2(asset.anchor, `header.assets[${index}].anchor`);\n\t\t\treturn parsed;\n\t\t}\n\t\tassertKnownFields(asset, new Set([\"id\", \"path\", \"anchor\"]), `header.assets[${index}]`);\n\t\tconst parsed: AssetCatalogEntry = { id };\n\t\tif (asset.path !== undefined) {\n\t\t\tconst path = requireString(asset.path, `header.assets[${index}].path`);\n\t\t\tif (!ASSET_PATH_PATTERN.test(path)) {\n\t\t\t\tfail(\"INVALID_ASSET_PATH\", `header.assets[${index}].path must be a relative SVG asset path`);\n\t\t\t}\n\t\t\tparsed.path = path;\n\t\t}\n\t\tif (asset.anchor !== undefined) {\n\t\t\tparsed.anchor = parseTuple2(asset.anchor, `header.assets[${index}].anchor`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parseGrid(raw: unknown): GridConfig | undefined {\n\tif (raw === undefined) return undefined;\n\tconst grid = requireObject(raw, \"header.grid\");\n\tassertKnownFields(grid, new Set([\"cellSize\"]), \"header.grid\");\n\treturn {\n\t\tcellSize: grid.cellSize === undefined ? undefined : requireNumber(grid.cellSize, \"header.grid.cellSize\"),\n\t};\n}\n\nfunction parseFloor(raw: unknown): FloorConfig | undefined {\n\tif (raw === undefined) return undefined;\n\tconst floor = requireObject(raw, \"header.floor\");\n\tassertKnownFields(floor, new Set([\"size\", \"origin\", \"layer\", \"visible\", \"asset\"]), \"header.floor\");\n\tconst parsed: FloorConfig = {};\n\tif (floor.size !== undefined) {\n\t\tparsed.size = parseTuple2(floor.size, \"header.floor.size\");\n\t}\n\tif (floor.origin !== undefined) {\n\t\tparsed.origin = parseTuple2(floor.origin, \"header.floor.origin\");\n\t}\n\tif (floor.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(floor.layer, \"header.floor.layer\");\n\t}\n\tif (floor.visible !== undefined) {\n\t\tparsed.visible = requireBoolean(floor.visible, \"header.floor.visible\");\n\t}\n\tif (floor.asset !== undefined) {\n\t\tparsed.asset = requireIdentifier(floor.asset, \"header.floor.asset\");\n\t}\n\treturn parsed;\n}\n\nfunction parseLayers(raw: unknown): LayerDefinition[] {\n\treturn requireArray(raw, \"header.layers\").map((item, index) => {\n\t\tconst layer = requireObject(item, `header.layers[${index}]`);\n\t\tassertKnownFields(layer, new Set([\"name\", \"order\"]), `header.layers[${index}]`);\n\t\tconst parsed: LayerDefinition = {\n\t\t\tname: requireIdentifier(layer.name, `header.layers[${index}].name`),\n\t\t};\n\t\tif (layer.order !== undefined) {\n\t\t\tparsed.order = requireNumber(layer.order, `header.layers[${index}].order`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parseHeader(raw: unknown): SceneHeader {\n\tconst header = requireObject(raw, \"header\");\n\tassertKnownFields(\n\t\theader,\n\t\tnew Set([\"version\", \"name\", \"className\", \"assetBaseUrl\", \"assets\", \"grid\", \"floor\", \"theme\", \"layers\"]),\n\t\t\"header\",\n\t);\n\n\tconst parsed: SceneHeader = {\n\t\tassets: parseAssets(header.assets),\n\t\tlayers: parseLayers(header.layers),\n\t};\n\tconst floor = parseFloor(header.floor);\n\tif (floor !== undefined) {\n\t\tparsed.floor = floor;\n\t}\n\tif (header.version !== undefined) {\n\t\tparsed.version = requireString(header.version, \"header.version\");\n\t}\n\tif (header.name !== undefined) {\n\t\tparsed.name = requireString(header.name, \"header.name\");\n\t}\n\tif (header.className !== undefined) {\n\t\tparsed.className = requireString(header.className, \"header.className\");\n\t}\n\tif (header.assetBaseUrl !== undefined) {\n\t\tparsed.assetBaseUrl = requireString(header.assetBaseUrl, \"header.assetBaseUrl\");\n\t}\n\tif (header.grid !== undefined) {\n\t\tparsed.grid = parseGrid(header.grid);\n\t}\n\tif (header.theme !== undefined) {\n\t\tparsed.theme = requireString(header.theme, \"header.theme\");\n\t}\n\treturn parsed;\n}\n\nfunction parseAmbient(raw: unknown, context: string): AmbientAnimation[] {\n\treturn requireArray(raw, context).map((item, index) => {\n\t\tconst ambient = requireObject(item, `${context}[${index}]`);\n\t\tassertKnownFields(ambient, new Set([\"name\", \"infinite\", \"iterations\"]), `${context}[${index}]`);\n\t\tconst parsed: AmbientAnimation = {\n\t\t\tname: requireIdentifier(ambient.name, `${context}[${index}].name`),\n\t\t};\n\t\tif (ambient.infinite !== undefined) {\n\t\t\tparsed.infinite = requireBoolean(ambient.infinite, `${context}[${index}].infinite`);\n\t\t}\n\t\tif (ambient.iterations !== undefined) {\n\t\t\tparsed.iterations = requireNumber(ambient.iterations, `${context}[${index}].iterations`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\nfunction parsePointArray(raw: unknown, context: string): [number, number][] {\n\treturn requireArray(raw, context).map((point, index) => parseTuple2(point, `${context}[${index}]`));\n}\n\nfunction parseTextContent(raw: unknown, context: string, requireValue = true): TextContent {\n\tconst text = requireObject(raw, context);\n\tassertKnownFields(\n\t\ttext,\n\t\tnew Set([\"value\", \"align\", \"placement\", \"fontSize\", \"fontWeight\", \"lineHeight\", \"fill\"]),\n\t\tcontext,\n\t);\n\tconst parsed: Partial<TextContent> = {};\n\tif (requireValue || text.value !== undefined) {\n\t\tparsed.value = requireString(text.value, `${context}.value`);\n\t}\n\tif (text.align !== undefined) {\n\t\tparsed.align = requireString(text.align, `${context}.align`) as never;\n\t}\n\tif (text.placement !== undefined) {\n\t\tparsed.placement = requireString(text.placement, `${context}.placement`) as never;\n\t}\n\tif (text.fontSize !== undefined) {\n\t\tparsed.fontSize = requireNumber(text.fontSize, `${context}.fontSize`);\n\t}\n\tif (text.fontWeight !== undefined) {\n\t\tif (typeof text.fontWeight === \"number\") {\n\t\t\tparsed.fontWeight = requireNumber(text.fontWeight, `${context}.fontWeight`);\n\t\t} else {\n\t\t\tparsed.fontWeight = requireString(text.fontWeight, `${context}.fontWeight`) as never;\n\t\t}\n\t}\n\tif (text.lineHeight !== undefined) {\n\t\tparsed.lineHeight = requireNumber(text.lineHeight, `${context}.lineHeight`);\n\t}\n\tif (text.fill !== undefined) {\n\t\tparsed.fill = requireString(text.fill, `${context}.fill`);\n\t}\n\treturn parsed as TextContent;\n}\n\nfunction parsePrimitiveStyle(\n\traw: Record<string, unknown>,\n\tcontext: string,\n\tallowed: string[],\n): Record<string, unknown> {\n\tassertKnownFields(raw, new Set(allowed), context);\n\tconst parsed: Record<string, unknown> = {};\n\tif (raw.fill !== undefined) parsed.fill = requireString(raw.fill, `${context}.fill`);\n\tif (raw.stroke !== undefined) parsed.stroke = requireString(raw.stroke, `${context}.stroke`);\n\tif (raw.strokeWidth !== undefined) {\n\t\tparsed.strokeWidth = requireNumber(raw.strokeWidth, `${context}.strokeWidth`);\n\t}\n\tif (raw.opacity !== undefined) {\n\t\tparsed.opacity = requireNumber(raw.opacity, `${context}.opacity`);\n\t}\n\tif (raw.dash !== undefined) parsed.dash = parseTuple2(raw.dash, `${context}.dash`);\n\treturn parsed;\n}\n\nfunction parsePrimitiveContent(raw: unknown, context: string, requireGeometry = true): PrimitiveContent {\n\tconst primitive = requireObject(raw, context);\n\tassertKnownFields(primitive, new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]), context);\n\tconst parsed: PrimitiveContentPatch = {};\n\tif (primitive.rectangle !== undefined) {\n\t\tconst rectangle = requireObject(primitive.rectangle, `${context}.rectangle`);\n\t\tparsed.rectangle = parsePrimitiveStyle(rectangle, `${context}.rectangle`, [\n\t\t\t\"fill\",\n\t\t\t\"stroke\",\n\t\t\t\"strokeWidth\",\n\t\t\t\"opacity\",\n\t\t\t\"dash\",\n\t\t\t\"rx\",\n\t\t]);\n\t\tif (rectangle.rx !== undefined) {\n\t\t\tparsed.rectangle.rx = requireNumber(rectangle.rx, `${context}.rectangle.rx`);\n\t\t}\n\t}\n\tif (primitive.circle !== undefined) {\n\t\tparsed.circle = parsePrimitiveStyle(requireObject(primitive.circle, `${context}.circle`), `${context}.circle`, [\n\t\t\t\"fill\",\n\t\t\t\"stroke\",\n\t\t\t\"strokeWidth\",\n\t\t\t\"opacity\",\n\t\t\t\"dash\",\n\t\t]);\n\t}\n\tif (primitive.polygon !== undefined) {\n\t\tconst polygon = requireObject(primitive.polygon, `${context}.polygon`);\n\t\tparsed.polygon = {\n\t\t\t...parsePrimitiveStyle(polygon, `${context}.polygon`, [\n\t\t\t\t\"points\",\n\t\t\t\t\"fill\",\n\t\t\t\t\"stroke\",\n\t\t\t\t\"strokeWidth\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"dash\",\n\t\t\t]),\n\t\t};\n\t\tif (requireGeometry || polygon.points !== undefined) {\n\t\t\tparsed.polygon.points = parsePointArray(polygon.points, `${context}.polygon.points`);\n\t\t}\n\t}\n\tif (primitive.line !== undefined) {\n\t\tconst line = requireObject(primitive.line, `${context}.line`);\n\t\tconst parsedLine: Partial<LinePrimitive> = {\n\t\t\t...parsePrimitiveStyle(line, `${context}.line`, [\n\t\t\t\t\"points\",\n\t\t\t\t\"stroke\",\n\t\t\t\t\"strokeWidth\",\n\t\t\t\t\"opacity\",\n\t\t\t\t\"dash\",\n\t\t\t\t\"lineCap\",\n\t\t\t\t\"lineJoin\",\n\t\t\t]),\n\t\t};\n\t\tif (requireGeometry || line.points !== undefined) {\n\t\t\tparsedLine.points = parsePointArray(line.points, `${context}.line.points`);\n\t\t}\n\t\tif (line.lineCap !== undefined) {\n\t\t\tparsedLine.lineCap = requireString(line.lineCap, `${context}.line.lineCap`) as never;\n\t\t}\n\t\tif (line.lineJoin !== undefined) {\n\t\t\tparsedLine.lineJoin = requireString(line.lineJoin, `${context}.line.lineJoin`) as never;\n\t\t}\n\t\tparsed.line = parsedLine as LinePrimitive;\n\t}\n\treturn parsed as PrimitiveContent;\n}\n\nfunction parseActivity(raw: unknown, context: string): ElementActivity {\n\tconst value = requireObject(raw, context);\n\tassertKnownFields(value, new Set([\"state\", \"color\"]), context);\n\tconst parsed: ElementActivity = { state: requireString(value.state, `${context}.state`) as ElementActivity[\"state\"] };\n\tif (value.color !== undefined) parsed.color = requireString(value.color, `${context}.color`);\n\treturn parsed;\n}\n\nfunction parseMessage(raw: unknown, context: string): ConnectorMessage {\n\tconst value = requireObject(raw, context);\n\tassertKnownFields(value, new Set([\"kind\", \"color\", \"size\", \"duration\", \"count\", \"enabled\"]), context);\n\tconst parsed: ConnectorMessage = {};\n\tif (value.kind !== undefined) parsed.kind = requireString(value.kind, `${context}.kind`) as ConnectorMessage[\"kind\"];\n\tif (value.color !== undefined) parsed.color = requireString(value.color, `${context}.color`);\n\tif (value.size !== undefined) parsed.size = requireNumber(value.size, `${context}.size`);\n\tif (value.duration !== undefined) parsed.duration = requireNumber(value.duration, `${context}.duration`);\n\tif (value.count !== undefined) parsed.count = requireNumber(value.count, `${context}.count`);\n\tif (value.enabled !== undefined) parsed.enabled = requireBoolean(value.enabled, `${context}.enabled`);\n\treturn parsed;\n}\n\nfunction parsePlacement(raw: unknown, context: string): ElementPlacement {\n\tconst element = requireObject(raw, context);\n\tassertKnownFields(\n\t\telement,\n\t\tnew Set([\"id\", \"asset\", \"at\", \"size\", \"layer\", \"enter\", \"exit\", \"ambient\", \"text\", \"primitive\", \"activity\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ElementPlacement = {\n\t\tid: requireIdentifier(element.id, `${context}.id`),\n\t\tasset: requireIdentifier(element.asset, `${context}.asset`),\n\t\tat: parseTuple2(element.at, `${context}.at`),\n\t};\n\tif (element.size !== undefined) {\n\t\tparsed.size = requireNumber(element.size, `${context}.size`);\n\t}\n\tif (element.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(element.layer, `${context}.layer`);\n\t}\n\tif (element.enter !== undefined) {\n\t\tparsed.enter = requireString(element.enter, `${context}.enter`) as never;\n\t}\n\tif (element.exit !== undefined) {\n\t\tparsed.exit = requireString(element.exit, `${context}.exit`) as never;\n\t}\n\tif (element.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(element.ambient, `${context}.ambient`);\n\t}\n\tif (element.text !== undefined) {\n\t\tparsed.text = parseTextContent(element.text, `${context}.text`);\n\t}\n\tif (element.activity !== undefined) parsed.activity = parseActivity(element.activity, `${context}.activity`);\n\tif (element.primitive !== undefined) {\n\t\tparsed.primitive = parsePrimitiveContent(element.primitive, `${context}.primitive`);\n\t}\n\treturn parsed;\n}\n\nfunction parsePatch(raw: unknown, context: string): ElementPatch {\n\tconst patch = requireObject(raw, context);\n\tassertKnownFields(\n\t\tpatch,\n\t\tnew Set([\"id\", \"asset\", \"at\", \"size\", \"layer\", \"enter\", \"exit\", \"ambient\", \"text\", \"primitive\", \"activity\"]),\n\t\tcontext,\n\t);\n\tconst parsed: ElementPatch = {\n\t\tid: requireIdentifier(patch.id, `${context}.id`),\n\t};\n\tif (patch.asset !== undefined) parsed.asset = requireIdentifier(patch.asset, `${context}.asset`);\n\tif (patch.activity !== undefined) parsed.activity = parseActivity(patch.activity, `${context}.activity`);\n\tif (patch.at !== undefined) {\n\t\tparsed.at = parseTuple2(patch.at, `${context}.at`);\n\t}\n\tif (patch.size !== undefined) {\n\t\tparsed.size = requireNumber(patch.size, `${context}.size`);\n\t}\n\tif (patch.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(patch.layer, `${context}.layer`);\n\t}\n\tif (patch.enter !== undefined) {\n\t\tparsed.enter = requireString(patch.enter, `${context}.enter`) as never;\n\t}\n\tif (patch.exit !== undefined) {\n\t\tparsed.exit = requireString(patch.exit, `${context}.exit`) as never;\n\t}\n\tif (patch.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(patch.ambient, `${context}.ambient`);\n\t}\n\tif (patch.text !== undefined) {\n\t\tparsed.text = parseTextContent(patch.text, `${context}.text`, false);\n\t}\n\tif (patch.primitive !== undefined) {\n\t\tparsed.primitive = parsePrimitiveContent(patch.primitive, `${context}.primitive`, false);\n\t}\n\treturn parsed;\n}\n\nfunction parseRemoval(raw: unknown, context: string): ElementRemoval {\n\tconst removal = requireObject(raw, context);\n\tassertKnownFields(removal, new Set([\"id\", \"exit\"]), context);\n\tconst parsed: ElementRemoval = {\n\t\tid: requireIdentifier(removal.id, `${context}.id`),\n\t};\n\tif (removal.exit !== undefined) {\n\t\tparsed.exit = requireString(removal.exit, `${context}.exit`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseRoute(raw: unknown, context: string): [number, number][] {\n\treturn requireArray(raw, context).map((point, index) => parseTuple2(point, `${context}[${index}]`));\n}\n\nfunction parseEndpointRef(raw: unknown, context: string): ConnectorEndpointRef {\n\tconst endpoint = requireObject(raw, context);\n\tassertKnownFields(endpoint, new Set([\"element\", \"at\", \"side\", \"offset\"]), context);\n\tconst parsed: ConnectorEndpointRef = {};\n\tif (endpoint.element !== undefined) {\n\t\tparsed.element = requireIdentifier(endpoint.element, `${context}.element`);\n\t}\n\tif (endpoint.at !== undefined) {\n\t\tparsed.at = parseTuple2(endpoint.at, `${context}.at`);\n\t}\n\tif (endpoint.side !== undefined) {\n\t\tparsed.side = requireString(endpoint.side, `${context}.side`) as never;\n\t}\n\tif (endpoint.offset !== undefined) {\n\t\tparsed.offset = requireNumber(endpoint.offset, `${context}.offset`);\n\t}\n\treturn parsed;\n}\n\nfunction parseRouting(raw: unknown, context: string): ConnectorRouting {\n\tconst routing = requireObject(raw, context);\n\tassertKnownFields(routing, new Set([\"mode\", \"avoid\", \"clearance\", \"gridStep\", \"maxBends\", \"prefer\"]), context);\n\tconst parsed: ConnectorRouting = {};\n\tif (routing.mode !== undefined) {\n\t\tparsed.mode = requireString(routing.mode, `${context}.mode`) as never;\n\t}\n\tif (routing.avoid !== undefined) {\n\t\tif (Array.isArray(routing.avoid)) {\n\t\t\tparsed.avoid = requireArray(routing.avoid, `${context}.avoid`).map((item, index) =>\n\t\t\t\trequireIdentifier(item, `${context}.avoid[${index}]`),\n\t\t\t);\n\t\t} else {\n\t\t\tparsed.avoid = requireString(routing.avoid, `${context}.avoid`) as never;\n\t\t}\n\t}\n\tif (routing.clearance !== undefined) {\n\t\tparsed.clearance = requireNumber(routing.clearance, `${context}.clearance`);\n\t}\n\tif (routing.gridStep !== undefined) {\n\t\tparsed.gridStep = requireNumber(routing.gridStep, `${context}.gridStep`);\n\t}\n\tif (routing.maxBends !== undefined) {\n\t\tparsed.maxBends = requireNumber(routing.maxBends, `${context}.maxBends`);\n\t}\n\tif (routing.prefer !== undefined) {\n\t\tparsed.prefer = requireString(routing.prefer, `${context}.prefer`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectorStyle(raw: unknown, context: string): ConnectorStyle {\n\tconst style = requireObject(raw, context);\n\tassertKnownFields(\n\t\tstyle,\n\t\tnew Set([\n\t\t\t\"variant\",\n\t\t\t\"pattern\",\n\t\t\t\"stroke\",\n\t\t\t\"strokeWidth\",\n\t\t\t\"opacity\",\n\t\t\t\"dash\",\n\t\t\t\"outline\",\n\t\t\t\"outlineWidth\",\n\t\t\t\"lane\",\n\t\t\t\"cornerRadius\",\n\t\t\t\"glow\",\n\t\t\t\"glowWidth\",\n\t\t]),\n\t\tcontext,\n\t);\n\tconst parsed: ConnectorStyle = {};\n\tif (style.cornerRadius !== undefined)\n\t\tparsed.cornerRadius = requireNumber(style.cornerRadius, `${context}.cornerRadius`);\n\tif (style.glowWidth !== undefined) parsed.glowWidth = requireNumber(style.glowWidth, `${context}.glowWidth`);\n\tif (style.glow !== undefined) parsed.glow = requireString(style.glow, `${context}.glow`);\n\tif (style.variant !== undefined) {\n\t\tparsed.variant = requireString(style.variant, `${context}.variant`) as never;\n\t}\n\tif (style.pattern !== undefined) {\n\t\tparsed.pattern = requireString(style.pattern, `${context}.pattern`) as never;\n\t}\n\tif (style.stroke !== undefined) {\n\t\tparsed.stroke = requireString(style.stroke, `${context}.stroke`);\n\t}\n\tif (style.strokeWidth !== undefined) {\n\t\tparsed.strokeWidth = requireNumber(style.strokeWidth, `${context}.strokeWidth`);\n\t}\n\tif (style.opacity !== undefined) {\n\t\tparsed.opacity = requireNumber(style.opacity, `${context}.opacity`);\n\t}\n\tif (style.dash !== undefined) {\n\t\tparsed.dash = parseTuple2(style.dash, `${context}.dash`);\n\t}\n\tif (style.outline !== undefined) {\n\t\tparsed.outline = requireString(style.outline, `${context}.outline`);\n\t}\n\tif (style.outlineWidth !== undefined) {\n\t\tparsed.outlineWidth = requireNumber(style.outlineWidth, `${context}.outlineWidth`);\n\t}\n\tif (style.lane !== undefined) {\n\t\tparsed.lane = requireString(style.lane, `${context}.lane`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectionCommon(raw: unknown, context: string): ConnectionPlacement | ConnectionPatch {\n\tconst connection = requireObject(raw, context);\n\tassertKnownFields(\n\t\tconnection,\n\t\tnew Set([\n\t\t\t\"id\",\n\t\t\t\"route\",\n\t\t\t\"from\",\n\t\t\t\"to\",\n\t\t\t\"routing\",\n\t\t\t\"layer\",\n\t\t\t\"style\",\n\t\t\t\"start\",\n\t\t\t\"end\",\n\t\t\t\"direction\",\n\t\t\t\"message\",\n\t\t\t\"enter\",\n\t\t\t\"exit\",\n\t\t\t\"ambient\",\n\t\t]),\n\t\tcontext,\n\t);\n\tconst parsed: ConnectionPlacement | ConnectionPatch = {\n\t\tid: requireIdentifier(connection.id, `${context}.id`),\n\t};\n\tif (connection.message !== undefined) parsed.message = parseMessage(connection.message, `${context}.message`);\n\tif (connection.route !== undefined) {\n\t\tparsed.route = parseRoute(connection.route, `${context}.route`);\n\t}\n\tif (connection.from !== undefined) {\n\t\tparsed.from = parseEndpointRef(connection.from, `${context}.from`);\n\t}\n\tif (connection.to !== undefined) {\n\t\tparsed.to = parseEndpointRef(connection.to, `${context}.to`);\n\t}\n\tif (connection.routing !== undefined) {\n\t\tparsed.routing = parseRouting(connection.routing, `${context}.routing`);\n\t}\n\tif (connection.layer !== undefined) {\n\t\tparsed.layer = requireIdentifier(connection.layer, `${context}.layer`);\n\t}\n\tif (connection.style !== undefined) {\n\t\tparsed.style = parseConnectorStyle(connection.style, `${context}.style`);\n\t}\n\tif (connection.start !== undefined) {\n\t\tparsed.start = requireString(connection.start, `${context}.start`) as never;\n\t}\n\tif (connection.end !== undefined) {\n\t\tparsed.end = requireString(connection.end, `${context}.end`) as never;\n\t}\n\tif (connection.direction !== undefined) {\n\t\tparsed.direction = requireString(connection.direction, `${context}.direction`) as never;\n\t}\n\tif (connection.enter !== undefined) {\n\t\tparsed.enter = requireString(connection.enter, `${context}.enter`) as never;\n\t}\n\tif (connection.exit !== undefined) {\n\t\tparsed.exit = requireString(connection.exit, `${context}.exit`) as never;\n\t}\n\tif (connection.ambient !== undefined) {\n\t\tparsed.ambient = parseAmbient(connection.ambient, `${context}.ambient`);\n\t}\n\treturn parsed;\n}\n\nfunction parseConnectionPlacement(raw: unknown, context: string): ConnectionPlacement {\n\treturn parseConnectionCommon(raw, context) as ConnectionPlacement;\n}\n\nfunction parseConnectionPatch(raw: unknown, context: string): ConnectionPatch {\n\treturn parseConnectionCommon(raw, context) as ConnectionPatch;\n}\n\nfunction parseConnectionRemoval(raw: unknown, context: string): ConnectionRemoval {\n\tconst removal = requireObject(raw, context);\n\tassertKnownFields(removal, new Set([\"id\", \"exit\"]), context);\n\tconst parsed: ConnectionRemoval = {\n\t\tid: requireIdentifier(removal.id, `${context}.id`),\n\t};\n\tif (removal.exit !== undefined) {\n\t\tparsed.exit = requireString(removal.exit, `${context}.exit`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseCamera(raw: unknown, context: string): CameraFocus {\n\tconst camera = requireObject(raw, context);\n\tassertKnownFields(camera, new Set([\"target\", \"padding\", \"duration\", \"easing\"]), context);\n\tconst target = requireObject(camera.target, `${context}.target`);\n\tassertKnownFields(target, new Set([\"element\", \"area\", \"reset\"]), `${context}.target`);\n\t// Collect every authored target kind so the validator can reject documents\n\t// that declare more than one of element/area/reset.\n\tconst parsedTarget: Record<string, unknown> = {};\n\tif (target.element !== undefined) {\n\t\tparsedTarget.element = requireIdentifier(target.element, `${context}.target.element`);\n\t}\n\tif (target.area !== undefined) {\n\t\tconst area = requireObject(target.area, `${context}.target.area`);\n\t\tassertKnownFields(area, new Set([\"at\", \"size\"]), `${context}.target.area`);\n\t\tparsedTarget.area = {\n\t\t\tat: parseTuple2(area.at, `${context}.target.area.at`),\n\t\t\tsize: parseTuple2(area.size, `${context}.target.area.size`),\n\t\t};\n\t}\n\tif (target.reset !== undefined) {\n\t\tparsedTarget.reset = requireBoolean(target.reset, `${context}.target.reset`) as true;\n\t}\n\tconst parsed: CameraFocus = { target: parsedTarget as CameraFocus[\"target\"] };\n\tif (camera.padding !== undefined) {\n\t\tparsed.padding = requireNumber(camera.padding, `${context}.padding`);\n\t}\n\tif (camera.duration !== undefined) {\n\t\tparsed.duration = requireNumber(camera.duration, `${context}.duration`);\n\t}\n\tif (camera.easing !== undefined) {\n\t\tparsed.easing = requireString(camera.easing, `${context}.easing`) as never;\n\t}\n\treturn parsed;\n}\n\nfunction parseScenes(raw: unknown): SceneStep[] {\n\treturn requireArray(raw, \"scenes\").map((item, index) => {\n\t\tconst scene = requireObject(item, `scenes[${index}]`);\n\t\tassertKnownFields(\n\t\t\tscene,\n\t\t\tnew Set([\"id\", \"elements\", \"connections\", \"add\", \"update\", \"remove\", \"camera\"]),\n\t\t\t`scenes[${index}]`,\n\t\t);\n\t\tconst parsed: SceneStep = {\n\t\t\tid: requireIdentifier(scene.id, `scenes[${index}].id`),\n\t\t};\n\t\tif (scene.elements !== undefined) {\n\t\t\tparsed.elements = requireArray(scene.elements, `scenes[${index}].elements`).map((element, elementIndex) =>\n\t\t\t\tparsePlacement(element, `scenes[${index}].elements[${elementIndex}]`),\n\t\t\t);\n\t\t}\n\t\tif (scene.connections !== undefined) {\n\t\t\tparsed.connections = requireArray(scene.connections, `scenes[${index}].connections`).map(\n\t\t\t\t(connection, connectionIndex) =>\n\t\t\t\t\tparseConnectionPlacement(connection, `scenes[${index}].connections[${connectionIndex}]`),\n\t\t\t);\n\t\t}\n\t\tif (scene.add !== undefined) {\n\t\t\tconst add = requireObject(scene.add, `scenes[${index}].add`);\n\t\t\tassertKnownFields(add, new Set([\"elements\", \"connections\"]), `scenes[${index}].add`);\n\t\t\tparsed.add = {};\n\t\t\tif (add.elements !== undefined) {\n\t\t\t\tparsed.add.elements = requireArray(add.elements, `scenes[${index}].add.elements`).map((element, elementIndex) =>\n\t\t\t\t\tparsePlacement(element, `scenes[${index}].add.elements[${elementIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (add.connections !== undefined) {\n\t\t\t\tparsed.add.connections = requireArray(add.connections, `scenes[${index}].add.connections`).map(\n\t\t\t\t\t(connection, connectionIndex) =>\n\t\t\t\t\t\tparseConnectionPlacement(connection, `scenes[${index}].add.connections[${connectionIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (scene.update !== undefined) {\n\t\t\tconst update = requireObject(scene.update, `scenes[${index}].update`);\n\t\t\tassertKnownFields(update, new Set([\"elements\", \"connections\"]), `scenes[${index}].update`);\n\t\t\tparsed.update = {};\n\t\t\tif (update.elements !== undefined) {\n\t\t\t\tparsed.update.elements = requireArray(update.elements, `scenes[${index}].update.elements`).map(\n\t\t\t\t\t(patch, patchIndex) => parsePatch(patch, `scenes[${index}].update.elements[${patchIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (update.connections !== undefined) {\n\t\t\t\tparsed.update.connections = requireArray(update.connections, `scenes[${index}].update.connections`).map(\n\t\t\t\t\t(patch, patchIndex) => parseConnectionPatch(patch, `scenes[${index}].update.connections[${patchIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (scene.remove !== undefined) {\n\t\t\tconst remove = requireObject(scene.remove, `scenes[${index}].remove`);\n\t\t\tassertKnownFields(remove, new Set([\"elements\", \"connections\"]), `scenes[${index}].remove`);\n\t\t\tparsed.remove = {};\n\t\t\tif (remove.elements !== undefined) {\n\t\t\t\tparsed.remove.elements = requireArray(remove.elements, `scenes[${index}].remove.elements`).map(\n\t\t\t\t\t(removal, removalIndex) => parseRemoval(removal, `scenes[${index}].remove.elements[${removalIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (remove.connections !== undefined) {\n\t\t\t\tparsed.remove.connections = requireArray(remove.connections, `scenes[${index}].remove.connections`).map(\n\t\t\t\t\t(removal, removalIndex) =>\n\t\t\t\t\t\tparseConnectionRemoval(removal, `scenes[${index}].remove.connections[${removalIndex}]`),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (scene.camera !== undefined) {\n\t\t\tparsed.camera = parseCamera(scene.camera, `scenes[${index}].camera`);\n\t\t}\n\t\treturn parsed;\n\t});\n}\n\n/**\n * Parse authored YAML into the v1 header + scene-delta document contract.\n */\nexport function parseScene(dsl: string): SceneDocument {\n\tlet raw: unknown;\n\ttry {\n\t\traw = parseYaml(dsl);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new ParseError(\"DSL_PARSE_SYNTAX_ERROR\", `YAML syntax error: ${message}`, { line: 0, column: 0 });\n\t}\n\n\tif (!isObject(raw)) {\n\t\tfail(\"DSL_PARSE_SYNTAX_ERROR\", \"DSL must be a YAML mapping at the top level\");\n\t}\n\tassertKnownFields(raw, new Set([\"header\", \"scenes\"]), \"top level\");\n\n\treturn {\n\t\theader: parseHeader(raw.header),\n\t\tscenes: parseScenes(raw.scenes),\n\t};\n}\n"],"names":["BUILT_IN_TEXT_ASSET_ID","BUILT_IN_PRIMITIVE_ASSET_IDS","defaultFloorLayer","route","url","parsed","parseYaml"],"mappings":"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"}