@opsydyn/effect-three 0.3.0 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +15 -1
  3. package/dist/{index-8cf8t6by.js → index-re3rrfwd.js} +2935 -104
  4. package/dist/index-re3rrfwd.js.map +56 -0
  5. package/dist/index-ttwy0znv.js +145 -0
  6. package/dist/index-ttwy0znv.js.map +12 -0
  7. package/dist/index.js +557 -147
  8. package/dist/index.js.map +8 -6
  9. package/dist/kernel/bodies.d.ts +20 -1
  10. package/dist/kernel/bodies.d.ts.map +1 -1
  11. package/dist/kernel/boxSelect.d.ts +22 -0
  12. package/dist/kernel/boxSelect.d.ts.map +1 -0
  13. package/dist/kernel/build.d.ts +165 -7
  14. package/dist/kernel/build.d.ts.map +1 -1
  15. package/dist/kernel/cameraShake.d.ts.map +1 -1
  16. package/dist/kernel/describeScene.d.ts +50 -0
  17. package/dist/kernel/describeScene.d.ts.map +1 -0
  18. package/dist/kernel/description.d.ts +223 -1
  19. package/dist/kernel/description.d.ts.map +1 -1
  20. package/dist/kernel/diff.d.ts +15 -0
  21. package/dist/kernel/diff.d.ts.map +1 -1
  22. package/dist/kernel/equality.d.ts +11 -1
  23. package/dist/kernel/equality.d.ts.map +1 -1
  24. package/dist/kernel/gizmo.d.ts +69 -0
  25. package/dist/kernel/gizmo.d.ts.map +1 -0
  26. package/dist/kernel/history.d.ts +61 -0
  27. package/dist/kernel/history.d.ts.map +1 -0
  28. package/dist/kernel/index.d.ts +19 -6
  29. package/dist/kernel/index.d.ts.map +1 -1
  30. package/dist/kernel/index.js +124 -3
  31. package/dist/kernel/index.js.map +1 -1
  32. package/dist/kernel/inspect.d.ts +85 -0
  33. package/dist/kernel/inspect.d.ts.map +1 -0
  34. package/dist/kernel/lineGeometry.d.ts +25 -0
  35. package/dist/kernel/lineGeometry.d.ts.map +1 -0
  36. package/dist/kernel/lockstep.d.ts +114 -0
  37. package/dist/kernel/lockstep.d.ts.map +1 -0
  38. package/dist/kernel/loop.d.ts.map +1 -1
  39. package/dist/kernel/materials.d.ts.map +1 -1
  40. package/dist/kernel/paintOrder.d.ts +53 -0
  41. package/dist/kernel/paintOrder.d.ts.map +1 -0
  42. package/dist/kernel/physics.d.ts +39 -0
  43. package/dist/kernel/physics.d.ts.map +1 -1
  44. package/dist/kernel/pivot.d.ts +54 -0
  45. package/dist/kernel/pivot.d.ts.map +1 -0
  46. package/dist/kernel/pointBuffers.d.ts +17 -0
  47. package/dist/kernel/pointBuffers.d.ts.map +1 -0
  48. package/dist/kernel/pointer.d.ts +31 -1
  49. package/dist/kernel/pointer.d.ts.map +1 -1
  50. package/dist/kernel/preview.d.ts +32 -0
  51. package/dist/kernel/preview.d.ts.map +1 -0
  52. package/dist/kernel/renderKit.d.ts +21 -1
  53. package/dist/kernel/renderKit.d.ts.map +1 -1
  54. package/dist/kernel/renderer.d.ts +6 -0
  55. package/dist/kernel/renderer.d.ts.map +1 -1
  56. package/dist/kernel/sceneChanges.d.ts +87 -0
  57. package/dist/kernel/sceneChanges.d.ts.map +1 -0
  58. package/dist/kernel/sceneGraph.d.ts +9 -1
  59. package/dist/kernel/sceneGraph.d.ts.map +1 -1
  60. package/dist/kernel/sceneIndex.d.ts +5 -0
  61. package/dist/kernel/sceneIndex.d.ts.map +1 -1
  62. package/dist/kernel/seeded.d.ts +9 -0
  63. package/dist/kernel/seeded.d.ts.map +1 -0
  64. package/dist/kernel/shots.d.ts +26 -0
  65. package/dist/kernel/shots.d.ts.map +1 -0
  66. package/dist/kernel/tape.d.ts +38 -0
  67. package/dist/kernel/tape.d.ts.map +1 -0
  68. package/dist/kernel/timeline.d.ts +60 -0
  69. package/dist/kernel/timeline.d.ts.map +1 -0
  70. package/dist/kernel/trail.d.ts +31 -0
  71. package/dist/kernel/trail.d.ts.map +1 -0
  72. package/dist/kernel/viewportGizmo.d.ts +25 -0
  73. package/dist/kernel/viewportGizmo.d.ts.map +1 -0
  74. package/dist/runtime/Inspector.d.ts +20 -0
  75. package/dist/runtime/Inspector.d.ts.map +1 -0
  76. package/dist/runtime/SceneFile.d.ts +462 -0
  77. package/dist/runtime/SceneFile.d.ts.map +1 -0
  78. package/dist/runtime/SceneSchema.d.ts +404 -0
  79. package/dist/runtime/SceneSchema.d.ts.map +1 -1
  80. package/dist/runtime/errors.d.ts +9 -0
  81. package/dist/runtime/errors.d.ts.map +1 -1
  82. package/dist/runtime/index.d.ts +3 -1
  83. package/dist/runtime/index.d.ts.map +1 -1
  84. package/dist/webgl/index.d.ts.map +1 -1
  85. package/dist/webgl/index.js +228 -3
  86. package/dist/webgl/index.js.map +6 -4
  87. package/dist/webgl/line.d.ts +4 -0
  88. package/dist/webgl/line.d.ts.map +1 -0
  89. package/dist/webgl/points.d.ts +4 -0
  90. package/dist/webgl/points.d.ts.map +1 -0
  91. package/dist/webgpu/index.d.ts.map +1 -1
  92. package/dist/webgpu/index.js +206 -26
  93. package/dist/webgpu/index.js.map +6 -4
  94. package/dist/webgpu/line.d.ts +4 -0
  95. package/dist/webgpu/line.d.ts.map +1 -0
  96. package/dist/webgpu/points.d.ts +4 -0
  97. package/dist/webgpu/points.d.ts.map +1 -0
  98. package/package.json +4 -2
  99. package/src/kernel/bodies.ts +299 -17
  100. package/src/kernel/boxSelect.ts +73 -0
  101. package/src/kernel/build.ts +374 -1
  102. package/src/kernel/cameraShake.ts +3 -13
  103. package/src/kernel/describeScene.ts +224 -0
  104. package/src/kernel/description.ts +243 -0
  105. package/src/kernel/diff.ts +39 -0
  106. package/src/kernel/equality.ts +123 -0
  107. package/src/kernel/gizmo.ts +478 -0
  108. package/src/kernel/history.ts +118 -0
  109. package/src/kernel/index.ts +110 -1
  110. package/src/kernel/inspect.ts +214 -0
  111. package/src/kernel/lineGeometry.ts +75 -0
  112. package/src/kernel/lockstep.ts +237 -0
  113. package/src/kernel/loop.ts +7 -0
  114. package/src/kernel/materials.ts +3 -0
  115. package/src/kernel/paintOrder.ts +274 -0
  116. package/src/kernel/physics.ts +86 -1
  117. package/src/kernel/pivot.ts +418 -0
  118. package/src/kernel/pointBuffers.ts +115 -0
  119. package/src/kernel/pointer.ts +98 -17
  120. package/src/kernel/preview.ts +467 -0
  121. package/src/kernel/renderKit.ts +23 -1
  122. package/src/kernel/renderer.ts +6 -0
  123. package/src/kernel/sceneChanges.ts +265 -0
  124. package/src/kernel/sceneGraph.ts +354 -11
  125. package/src/kernel/sceneIndex.ts +8 -0
  126. package/src/kernel/seeded.ts +18 -0
  127. package/src/kernel/shots.ts +167 -0
  128. package/src/kernel/tape.ts +124 -0
  129. package/src/kernel/timeline.ts +93 -0
  130. package/src/kernel/trail.ts +170 -0
  131. package/src/kernel/viewportGizmo.ts +194 -0
  132. package/src/runtime/Inspector.ts +43 -0
  133. package/src/runtime/SceneFile.ts +46 -0
  134. package/src/runtime/SceneSchema.ts +319 -0
  135. package/src/runtime/errors.ts +6 -0
  136. package/src/runtime/index.ts +3 -1
  137. package/src/webgl/index.ts +4 -0
  138. package/src/webgl/line.ts +66 -0
  139. package/src/webgl/points.ts +205 -0
  140. package/src/webgpu/index.ts +4 -0
  141. package/src/webgpu/line.ts +67 -0
  142. package/src/webgpu/points.ts +193 -0
  143. package/dist/index-8cf8t6by.js.map +0 -41
package/dist/index.js.map CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/runtime/errors.ts", "../src/runtime/FrameSource.ts", "../src/runtime/ResourceRegistry.ts", "../src/runtime/SceneRuntime.ts", "../src/runtime/SceneSchema.ts"],
3
+ "sources": ["../src/runtime/errors.ts", "../src/runtime/FrameSource.ts", "../src/runtime/Inspector.ts", "../src/runtime/SceneSchema.ts", "../src/runtime/ResourceRegistry.ts", "../src/runtime/SceneFile.ts", "../src/runtime/SceneRuntime.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Typed failures of the scene runtime.\n *\n * @module\n */\nimport { Data } from 'effect';\n\nimport type { DescriptionError } from '../kernel/index.ts';\n\n/** A scene description was rejected. Nothing was applied. */\nexport class InvalidScene extends Data.TaggedError('InvalidScene')<{\n readonly error: DescriptionError;\n}> {}\n\n/** The renderer backend could not be created (for example, no WebGL2 context). */\nexport class RendererUnavailable extends Data.TaggedError('RendererUnavailable')<{\n readonly cause: unknown;\n}> {}\n",
5
+ "/**\n * Typed failures of the scene runtime.\n *\n * @module\n */\nimport { Data } from 'effect';\n\nimport type { DescriptionError } from '../kernel/index.ts';\n\n/** A scene description was rejected. Nothing was applied. */\nexport class InvalidScene extends Data.TaggedError('InvalidScene')<{\n readonly error: DescriptionError;\n}> {}\n\n/** A scene file could not be read: not JSON, not a scene file, or not a scene. */\nexport class UnreadableScene extends Data.TaggedError('UnreadableScene')<{\n /** Where and why, as the schema reports it. */\n readonly issue: string;\n}> {}\n\n/** The renderer backend could not be created (for example, no WebGL2 context). */\nexport class RendererUnavailable extends Data.TaggedError('RendererUnavailable')<{\n readonly cause: unknown;\n}> {}\n",
6
6
  "/**\n * Where frames come from. Wraps a kernel `FrameScheduler` so a scene's per-frame callback\n * is registered for exactly the lifetime of its scope.\n *\n * @module\n */\nimport { Context, Effect, Layer } from 'effect';\n\nimport { createGatedFrames, type FrameControl, type FrameScheduler } from '../kernel/index.ts';\n\nconst registration = (scheduler: FrameScheduler, onFrame: () => void) => () => {\n const gate = createGatedFrames(scheduler);\n const unsubscribe = gate.subscribe(onFrame);\n const control: FrameControl = {\n wake: () => gate.setOpen(true),\n sleep: () => gate.setOpen(false),\n };\n return { control, unsubscribe };\n};\n\n/** The frame source service for `scheduler`, for providing directly with `provideService`. */\nexport const fromScheduler = (scheduler: FrameScheduler) => ({\n /**\n * Calls `onFrame` once per frame until the current scope closes, while awake. Returns\n * the control that puts the subscription to sleep and wakes it.\n */\n subscribe: (onFrame: () => void) => {\n const register = Effect.sync(registration(scheduler, onFrame));\n return Effect.acquireRelease(register, (registered) =>\n Effect.sync(registered.unsubscribe),\n ).pipe(Effect.map((registered) => registered.control));\n },\n});\n\nexport class FrameSource extends Context.Service<FrameSource, ReturnType<typeof fromScheduler>>()(\n 'effect-three/FrameSource',\n) {}\n\n/** Provides a frame source backed by `scheduler`. */\nexport const layer = (scheduler: FrameScheduler) =>\n Layer.succeed(FrameSource, fromScheduler(scheduler));\n",
7
+ "/**\n * An inspector generated from schemas (roadmap, \"Beyond parity\" 4): the fields of any\n * value with a schema (a scene node, a material, a Model's own records) as an inspector\n * shows them, and edits that are checked by the same schema, so an inspector can never\n * put a value the schema rejects into a Model.\n *\n * `fields(schema, value)` lists them (numbers, text, switches, choices, colours, vectors,\n * and read-only kinds and lists); `edit(schema, value, path, next)` puts `next` at\n * `path` and decodes the result, failing with the schema's own account of what is\n * wrong. Colours are fields typed `SceneSchema.Rgb`; vectors, `SceneSchema.Vec3`.\n *\n * @module\n */\nimport { Result, Schema } from 'effect';\n\nimport {\n type FieldPath,\n type InspectableAst,\n type InspectedField,\n inspectFields,\n setAt,\n} from '../kernel/inspect.ts';\nimport * as SceneSchema from './SceneSchema.ts';\n\nconst hints = { colours: [SceneSchema.Rgb.ast], vectors: [SceneSchema.Vec3.ast] };\n\n/** The AST, read through the shapes the inspector understands. */\nconst inspectable = (schema: Schema.Top): InspectableAst => schema.ast;\n\n/** The fields of `value`, as `schema` describes it, in the schema's order. */\nexport const fields = (schema: Schema.Top, value: unknown): ReadonlyArray<InspectedField> =>\n inspectFields(inspectable(schema), value, hints);\n\n/** `value` with `next` at `path`, if `schema` accepts the result; why not, if it does not. */\nexport const edit = <A>(\n schema: Schema.Decoder<A>,\n value: A,\n path: FieldPath,\n next: unknown,\n): Result.Result<A, string> =>\n Schema.decodeUnknownResult(schema)(setAt(value, path, next)).pipe(\n Result.mapError((error) => error.message),\n );\n",
8
+ "/**\n * Effect Schemas for scene descriptions.\n *\n * They validate untrusted descriptions at the boundary, type the Foldkit `scene`\n * property and derive property-test generators. Each decoded `Type` is checked at compile\n * time to be exactly the kernel's description type, so the two can't drift.\n *\n * @module\n */\nimport { Effect, Schema } from 'effect';\n\nimport { handJoints, type SceneNode as KernelSceneNode } from '../kernel/description.ts';\n\nconst NonNegative = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\nconst Positive = Schema.Finite.check(Schema.isGreaterThan(0));\nconst UnitInterval = Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 }));\n\n/** A three-component vector `[x, y, z]` of finite numbers. */\nexport const Vec3 = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite]);\n\n/** A rotation axis. */\nexport const Axis = Schema.Literals(['x', 'y', 'z']);\n\n/**\n * Fields added after 0.2.0 decode as their builder's default when absent, so descriptions\n * stored before them (a camera kept in a Model, say) still decode.\n */\nconst absentAsNull = <S extends Schema.Top>(schema: S) =>\n Schema.NullOr(schema).pipe(Schema.withDecodingDefaultKey(Effect.succeed(null)));\nconst absentAsFalse = Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect.succeed(false)));\n\n/** A 24-bit RGB colour, for example `0x3366ff`. */\nexport const Rgb = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 0xffffff }));\n\n/** Model-owned Euler angles, a spin behaviour, or facing the camera (a billboard). */\nexport const Rotation = Schema.Union([\n Schema.TaggedStruct('Fixed', { euler: Vec3 }),\n Schema.TaggedStruct('Spin', {\n axis: Axis,\n radiansPerSecond: Schema.Finite,\n phase: Schema.Finite,\n }),\n Schema.TaggedStruct('Billboard', {\n lockX: Schema.Boolean,\n lockY: Schema.Boolean,\n lockZ: Schema.Boolean,\n }),\n]);\n\n/** Box geometry parameters. */\nexport const BoxGeometry = Schema.TaggedStruct('Box', {\n width: Positive,\n height: Positive,\n depth: Positive,\n});\n\nconst Segments = Schema.Int.check(Schema.isGreaterThanOrEqualTo(3));\n\n/** Sphere geometry parameters. */\nexport const SphereGeometry = Schema.TaggedStruct('Sphere', {\n radius: Positive,\n widthSegments: Segments,\n heightSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(2)),\n});\n\n/** Plane geometry parameters. */\nexport const PlaneGeometry = Schema.TaggedStruct('Plane', { width: Positive, height: Positive });\n\n/** Cylinder geometry parameters. A zero radius makes a cone. */\nexport const CylinderGeometry = Schema.TaggedStruct('Cylinder', {\n radiusTop: NonNegative,\n radiusBottom: NonNegative,\n height: Positive,\n radialSegments: Segments,\n});\n\n/** Torus geometry parameters. */\nexport const TorusGeometry = Schema.TaggedStruct('Torus', {\n radius: Positive,\n tube: Positive,\n radialSegments: Segments,\n tubularSegments: Segments,\n});\n\n/** Cone geometry parameters. */\nexport const ConeGeometry = Schema.TaggedStruct('Cone', {\n radius: Positive,\n height: Positive,\n radialSegments: Segments,\n});\n\n/** Capsule geometry parameters. */\nexport const CapsuleGeometry = Schema.TaggedStruct('Capsule', {\n radius: Positive,\n height: NonNegative,\n capSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n radialSegments: Segments,\n});\n\n/** Rounded box geometry parameters (Drei's `RoundedBox`). */\nexport const RoundedBoxGeometry = Schema.TaggedStruct('RoundedBox', {\n width: Positive,\n height: Positive,\n depth: Positive,\n radius: NonNegative,\n smoothness: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n bevelSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n steps: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n creaseAngle: NonNegative,\n});\n\n/** Backdrop geometry parameters (Drei's `Backdrop`). */\nexport const BackdropGeometry = Schema.TaggedStruct('Backdrop', {\n floor: NonNegative,\n segments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n});\n\n/** Ring geometry parameters. */\nexport const RingGeometry = Schema.TaggedStruct('Ring', {\n innerRadius: NonNegative,\n outerRadius: Positive,\n thetaSegments: Segments,\n});\n\n/** Circle geometry parameters. */\nexport const CircleGeometry = Schema.TaggedStruct('Circle', {\n radius: Positive,\n segments: Segments,\n});\n\nconst Steps = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));\n\n/** Text from a lent typeface font. */\nexport const TextGeometry = Schema.TaggedStruct('Text', {\n text: Schema.String,\n font: Schema.String,\n size: Positive,\n depth: NonNegative,\n curveSegments: Steps,\n bevel: Schema.NullOr(\n Schema.Struct({\n thickness: NonNegative,\n size: NonNegative,\n offset: Schema.Finite,\n segments: Steps,\n }),\n ),\n center: Schema.Boolean,\n letterSpacing: Schema.Finite,\n lineHeight: NonNegative,\n align: Schema.Literals(['left', 'center', 'right']),\n});\n\n/** Any geometry shape. */\nexport const ShapeGeometry = Schema.Union([\n TextGeometry,\n BoxGeometry,\n SphereGeometry,\n PlaneGeometry,\n CylinderGeometry,\n TorusGeometry,\n ConeGeometry,\n CapsuleGeometry,\n RingGeometry,\n CircleGeometry,\n RoundedBoxGeometry,\n BackdropGeometry,\n]);\n\n/** A registered behaviour, by name, with numeric parameters. */\nexport const Behave = Schema.Struct({\n name: Schema.String,\n params: Schema.Record(Schema.String, Schema.Finite),\n});\n\n/** How a transition progresses. */\nexport const Easing = Schema.Literals(['linear', 'easeInOutCubic', 'easeOutCubic', 'easeOutBack']);\n\n/** How position and scale changes are shown. */\nexport const Transition = Schema.Union([\n Schema.TaggedStruct('Instant', {}),\n Schema.TaggedStruct('Ease', { seconds: Positive, easing: Easing }),\n]);\n\n/** Which faces a material draws. */\nexport const MaterialSide = Schema.Literals(['front', 'back', 'double']);\n\n/** A texture lent to the store, by id, or `null` for none. */\nconst TextureId = Schema.NullOr(Schema.String);\n\nconst surface = {\n opacity: UnitInterval,\n transparent: Schema.Boolean,\n side: MaterialSide,\n wireframe: Schema.Boolean,\n};\n\nconst shaded = { ...surface, flatShading: Schema.Boolean };\n\n/** Unlit material parameters. */\nexport const BasicMaterial = Schema.TaggedStruct('Basic', {\n color: Rgb,\n map: TextureId,\n ...surface,\n depthTest: Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect.succeed(true))),\n});\n\n/** Matte material parameters. */\nexport const LambertMaterial = Schema.TaggedStruct('Lambert', {\n color: Rgb,\n map: TextureId,\n emissive: Rgb,\n ...shaded,\n});\n\n/** Shiny material parameters. */\nexport const PhongMaterial = Schema.TaggedStruct('Phong', {\n color: Rgb,\n map: TextureId,\n emissive: Rgb,\n specular: Rgb,\n shininess: NonNegative,\n ...shaded,\n});\n\nconst pbr = {\n color: Rgb,\n map: TextureId,\n roughness: UnitInterval,\n metalness: UnitInterval,\n emissive: Rgb,\n emissiveIntensity: NonNegative,\n};\n\n/** Standard (PBR) material parameters. */\nexport const StandardMaterial = Schema.TaggedStruct('Standard', { ...pbr, ...shaded });\n\n/** Physical material parameters: index of refraction in [1, 2.333], the range three.js documents. */\nexport const PhysicalMaterial = Schema.TaggedStruct('Physical', {\n ...pbr,\n clearcoat: UnitInterval,\n clearcoatRoughness: UnitInterval,\n transmission: UnitInterval,\n ior: Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 2.333 })),\n ...shaded,\n});\n\n/** Normal-coloured material parameters. */\nexport const NormalMaterial = Schema.TaggedStruct('Normal', shaded);\n\n/** A shadow catcher: only the shadows cast onto it. */\nexport const ShadowMaterial = Schema.TaggedStruct('Shadow', { color: Rgb, opacity: UnitInterval });\n\n/** Any material kind. */\nexport const SurfaceMaterial = Schema.Union([\n ShadowMaterial,\n BasicMaterial,\n LambertMaterial,\n PhongMaterial,\n StandardMaterial,\n PhysicalMaterial,\n NormalMaterial,\n]);\n\n/** An owned geometry or a reference to a shared one. */\nexport const GeometryRef = Schema.Union([\n ...ShapeGeometry.members,\n Schema.TaggedStruct('SharedGeometry', { id: Schema.String }),\n Schema.TaggedStruct('LentGeometry', { id: Schema.String }),\n]);\n\n/** An owned material or a reference to a shared one. */\nexport const MaterialRef = Schema.Union([\n ...SurfaceMaterial.members,\n Schema.TaggedStruct('SharedMaterial', { id: Schema.String }),\n]);\n\n/** Shared resource definitions. */\nexport const ResourceDefinitions = Schema.Struct({\n geometries: Schema.Array(Schema.Struct({ id: Schema.String, geometry: ShapeGeometry })),\n materials: Schema.Array(Schema.Struct({ id: Schema.String, material: SurfaceMaterial })),\n});\n\n/** A renderable mesh. */\nconst Upright = { halfHeight: Positive, radius: Positive };\n\n/** A collider of a body's own, placed in it. */\nexport const ColliderDescription = Schema.Struct({\n shape: Schema.Union([\n Schema.TaggedStruct('Cuboid', { halfExtents: Vec3 }),\n Schema.TaggedStruct('Ball', { radius: Positive }),\n Schema.TaggedStruct('Capsule', Upright),\n Schema.TaggedStruct('Cylinder', Upright),\n Schema.TaggedStruct('Cone', Upright),\n ]),\n position: Vec3,\n rotation: Vec3,\n name: Schema.NullOr(Schema.String),\n});\n\nconst Group = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 15 }));\n\n/** Collision groups: those a body is in, and those it interacts with (null: all). */\nexport const InteractionGroups = Schema.Struct({\n memberships: Schema.Array(Group),\n filters: Schema.NullOr(Schema.Array(Group)),\n});\n\n/** A rigid body for a mesh, group, model or instances. */\nexport const Body = Schema.Struct({\n type: Schema.Literals(['dynamic', 'fixed', 'kinematic']),\n collider: Schema.Literals(['cuboid', 'ball', 'hull', 'trimesh']),\n mass: Schema.NullOr(Positive),\n friction: NonNegative,\n restitution: NonNegative,\n linearDamping: NonNegative,\n angularDamping: NonNegative,\n gravityScale: Schema.Finite,\n ccd: Schema.Boolean,\n sensor: Schema.Boolean,\n linearVelocity: Vec3,\n angularVelocity: Vec3,\n impulse: Schema.NullOr(Schema.Struct({ id: Schema.Finite, impulse: Vec3 })),\n colliders: Schema.NullOr(Schema.Array(ColliderDescription)),\n contactForces: Schema.NullOr(NonNegative),\n collisionGroups: Schema.NullOr(InteractionGroups),\n solverGroups: Schema.NullOr(InteractionGroups),\n});\n\n/** A physics world. */\nconst Handedness = Schema.Literals(['left', 'right']);\n\n/** A space an immersive session tracks, for a group to follow. */\nexport const XrSpace = Schema.Union([\n Schema.TaggedStruct('Head', {}),\n Schema.TaggedStruct('Joint', { hand: Handedness, joint: Schema.Literals(handJoints) }),\n Schema.TaggedStruct('Controller', { hand: Handedness, space: Schema.Literals(['grip', 'ray']) }),\n Schema.TaggedStruct('Anchor', { id: Schema.String }),\n Schema.TaggedStruct('Plane', { id: Schema.String }),\n Schema.TaggedStruct('Mesh', { id: Schema.String }),\n]);\n\n/** A body a joint holds: a node's, or one instance's. */\nexport const BodyRef = Schema.Struct({\n key: Schema.String,\n instance: Schema.NullOr(Schema.String),\n});\n\n/** A joint's motor: a target position and velocity, and how hard it pursues each. */\nexport const JointMotor = Schema.Struct({\n position: Schema.Finite,\n velocity: Schema.Finite,\n stiffness: NonNegative,\n damping: NonNegative,\n});\n\n/** A joint's range of motion. */\nexport const JointLimits = Schema.Tuple([Schema.Finite, Schema.Finite]);\n\n/** How a joint holds its bodies. */\nexport const JointKind = Schema.Union([\n Schema.TaggedStruct('Fixed', { frameA: Vec3, frameB: Vec3 }),\n Schema.TaggedStruct('Spherical', {}),\n Schema.TaggedStruct('Revolute', {\n axis: Vec3,\n limits: Schema.NullOr(JointLimits),\n motor: Schema.NullOr(JointMotor),\n }),\n Schema.TaggedStruct('Prismatic', {\n axis: Vec3,\n limits: Schema.NullOr(JointLimits),\n motor: Schema.NullOr(JointMotor),\n }),\n Schema.TaggedStruct('Rope', { length: Schema.Finite }),\n Schema.TaggedStruct('Spring', {\n restLength: Schema.Finite,\n stiffness: Schema.Finite,\n damping: Schema.Finite,\n }),\n]);\n\n/** A trail behind a moving node (Drei's `Trail`). */\nexport const Trail = absentAsNull(\n Schema.Struct({\n width: NonNegative,\n length: NonNegative,\n decay: NonNegative,\n local: Schema.Boolean,\n stride: NonNegative,\n interval: NonNegative,\n color: Rgb,\n taper: Schema.Literals(['none', 'linear', 'quadratic']),\n fade: Schema.Boolean,\n }),\n);\n\n/** A joint between two bodies. */\nexport const Joint = Schema.Struct({\n key: Schema.String,\n a: BodyRef,\n b: BodyRef,\n anchorA: Vec3,\n anchorB: Vec3,\n kind: JointKind,\n contacts: Schema.Boolean,\n});\n\n/** A count of physics steps. */\nconst StepCount = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));\n\nexport const Physics = Schema.Struct({\n gravity: Vec3,\n paused: Schema.Boolean,\n timeStep: Positive,\n interpolate: Schema.Boolean,\n until: absentAsNull(StepCount),\n run: Schema.Int.pipe(Schema.withDecodingDefaultKey(Effect.succeed(0))),\n snapshotAt: absentAsNull(StepCount),\n from: absentAsNull(Schema.Struct({ step: StepCount, snapshot: Schema.NullOr(Schema.String) })),\n keep: StepCount.pipe(Schema.withDecodingDefaultKey(Effect.succeed(0))),\n debug: Schema.Boolean,\n joints: Schema.Array(Joint),\n});\n\nexport const MeshNode = Schema.TaggedStruct('Mesh', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n geometry: GeometryRef,\n material: MaterialRef,\n interactive: Schema.Boolean,\n castShadow: Schema.Boolean,\n receiveShadow: Schema.Boolean,\n body: Schema.NullOr(Body),\n edges: absentAsNull(\n Schema.Struct({\n threshold: NonNegative,\n color: Rgb,\n width: NonNegative,\n worldUnits: Schema.Boolean,\n dashed: Schema.Boolean,\n dashSize: NonNegative,\n gapSize: NonNegative,\n opacity: NonNegative,\n transparent: Schema.Boolean,\n }),\n ),\n trail: Trail,\n});\n\n/** One instance of an instances node. */\nexport const Instance = Schema.Struct({\n key: Schema.String,\n position: Vec3,\n rotation: Vec3,\n scale: Vec3,\n color: Rgb,\n});\n\n/** Many instances of one geometry and material. */\nexport const InstancesNode = Schema.TaggedStruct('Instances', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n geometry: GeometryRef,\n material: MaterialRef,\n interactive: Schema.Boolean,\n castShadow: Schema.Boolean,\n receiveShadow: Schema.Boolean,\n instances: Schema.Array(Instance),\n body: Schema.NullOr(Body),\n});\n\n/** An application object lent to the store under `id`. */\nexport const Animation = Schema.Struct({\n clip: Schema.String,\n speed: Schema.Finite,\n loop: Schema.Boolean,\n});\n\nexport const BorrowedNode = Schema.TaggedStruct('Borrowed', {\n key: Schema.String,\n id: Schema.String,\n animation: Schema.NullOr(Animation),\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n body: Schema.NullOr(Body),\n castShadow: absentAsFalse,\n receiveShadow: absentAsFalse,\n});\n\n/** Distance-field text. */\nexport const LabelNode = Schema.TaggedStruct('Label', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n text: Schema.String,\n font: Schema.NullOr(Schema.String),\n fontSize: Positive,\n color: Rgb,\n fillOpacity: NonNegative,\n anchorX: Schema.Union([Schema.Literals(['left', 'center', 'right']), Schema.Finite]),\n anchorY: Schema.Union([\n Schema.Literals(['top', 'top-baseline', 'middle', 'bottom-baseline', 'bottom']),\n Schema.Finite,\n ]),\n maxWidth: Schema.NullOr(Positive),\n lineHeight: Schema.NullOr(Positive),\n letterSpacing: Schema.Finite,\n textAlign: Schema.Literals(['left', 'right', 'center', 'justify']),\n outlineWidth: NonNegative,\n outlineColor: Rgb,\n outlineOpacity: NonNegative,\n outlineBlur: NonNegative,\n colorRanges: Schema.Array(\n Schema.Struct({ start: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)), color: Rgb }),\n ),\n curveRadius: Schema.Finite,\n material: Schema.NullOr(MaterialRef),\n});\n\n/** Uniform ambient light. */\nexport const AmbientLightNode = Schema.TaggedStruct('AmbientLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n});\n\n/** Directional light. */\nconst isPowerOfTwo = (size: number) =>\n Number.isInteger(Math.log2(size)) || 'expected a power of two';\n\n/** Shadow map size: a power of two from 16 to 8192 texels. */\nconst ShadowMapSize = Schema.Int.check(\n Schema.isBetween({ minimum: 16, maximum: 8192 }),\n Schema.makeFilter(isPowerOfTwo),\n);\n\nexport const DirectionalLightNode = Schema.TaggedStruct('DirectionalLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n shadowArea: Positive,\n});\n\n/** Point light. */\nexport const PointLightNode = Schema.TaggedStruct('PointLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n distance: NonNegative,\n decay: NonNegative,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n});\n\n/** Spot light: `angle` in (0, π/2], `penumbra` in [0, 1]. */\nexport const SpotLightNode = Schema.TaggedStruct('SpotLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n target: Vec3,\n distance: NonNegative,\n angle: Schema.Finite.check(\n Schema.isBetween({ minimum: 0, maximum: Math.PI / 2, exclusiveMinimum: true }),\n ),\n penumbra: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n decay: NonNegative,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n});\n\n/** Hemisphere light. */\n/** A grid of lines on the XZ plane. */\nexport const GridNode = Schema.TaggedStruct('Grid', {\n key: Schema.String,\n position: Vec3,\n size: Positive,\n divisions: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n color: Rgb,\n centerColor: Rgb,\n});\n\n/** Drei's shader grid. */\nexport const ShaderGridNode = Schema.TaggedStruct('ShaderGrid', {\n key: Schema.String,\n position: Vec3,\n rotation: Vec3,\n size: Schema.Tuple([Positive, Positive]),\n cellSize: Positive,\n cellThickness: NonNegative,\n cellColor: Rgb,\n sectionSize: Positive,\n sectionThickness: NonNegative,\n sectionColor: Rgb,\n infinite: Schema.Boolean,\n followCamera: Schema.Boolean,\n fadeDistance: Positive,\n fadeStrength: NonNegative,\n fadeFrom: Schema.Finite,\n side: Schema.Literals(['front', 'back', 'double']),\n});\n\nexport const HemisphereLightNode = Schema.TaggedStruct('HemisphereLight', {\n key: Schema.String,\n color: Rgb,\n groundColor: Rgb,\n intensity: NonNegative,\n position: Vec3,\n});\n\n/** What points look like: dots, Drei's sparkles, or its stars. */\nexport const PointLook = Schema.Union([\n Schema.TaggedStruct('Dots', {\n positions: Schema.Array(Vec3),\n colors: Schema.NullOr(Schema.Array(Rgb)),\n sizes: Schema.NullOr(Schema.Array(NonNegative)),\n color: Rgb,\n size: NonNegative,\n sizeAttenuation: Schema.Boolean,\n round: Schema.Boolean,\n opacity: NonNegative,\n transparent: Schema.Boolean,\n }),\n Schema.TaggedStruct('Sparkles', {\n count: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n speed: Schema.Finite,\n opacity: NonNegative,\n scale: Vec3,\n size: Schema.NullOr(NonNegative),\n color: Rgb,\n noise: Vec3,\n seed: Schema.Finite,\n }),\n Schema.TaggedStruct('Stars', {\n radius: NonNegative,\n depth: NonNegative,\n count: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n factor: NonNegative,\n saturation: NonNegative,\n fade: Schema.Boolean,\n speed: Schema.Finite,\n seed: Schema.Finite,\n }),\n]);\n\n/** Points (Drei's `Points`, `Sparkles` or `Stars`), drawn by the render kit. */\nexport const PointsNode = Schema.TaggedStruct('Points', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n look: PointLook,\n});\n\n/** A line through points (Drei's `Line`), drawn by the render kit. */\nexport const LineNode = Schema.TaggedStruct('Line', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n points: Schema.Array(Vec3),\n segments: Schema.Boolean,\n color: Rgb,\n vertexColors: Schema.NullOr(Schema.Array(Rgb)),\n width: NonNegative,\n worldUnits: Schema.Boolean,\n dashed: Schema.Boolean,\n dashSize: NonNegative,\n gapSize: NonNegative,\n dashScale: NonNegative,\n dashOffset: Schema.Finite,\n opacity: NonNegative,\n transparent: Schema.Boolean,\n});\n\n/** Any scene node. Groups nest recursively. */\nexport const SceneNode: Schema.Codec<KernelSceneNode, unknown> = Schema.Union([\n Schema.TaggedStruct('Group', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n children: Schema.Array(Schema.suspend((): Schema.Codec<KernelSceneNode, unknown> => SceneNode)),\n body: Schema.NullOr(Body),\n follow: Schema.NullOr(XrSpace),\n detail: absentAsNull(\n Schema.Struct({ distances: Schema.Array(NonNegative), hysteresis: NonNegative }),\n ),\n trail: Trail,\n }),\n MeshNode,\n InstancesNode,\n BorrowedNode,\n LabelNode,\n LineNode,\n PointsNode,\n ShaderGridNode,\n AmbientLightNode,\n DirectionalLightNode,\n PointLightNode,\n SpotLightNode,\n HemisphereLightNode,\n GridNode,\n]);\n\n/** The fraction of the way a camera closes every sixtieth of a second: 0 jumps. */\nconst CameraDamping = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThan(1));\n\n/** Camera shake (Drei's `CameraShake`). */\nexport const CameraShake = Schema.Struct({\n intensity: NonNegative,\n decay: Schema.Boolean,\n decayRate: NonNegative,\n maxYaw: NonNegative,\n maxPitch: NonNegative,\n maxRoll: NonNegative,\n yawFrequency: NonNegative,\n pitchFrequency: NonNegative,\n rollFrequency: NonNegative,\n trigger: Schema.Finite,\n});\n\n/** A perspective camera. */\nexport const PerspectiveCamera = Schema.TaggedStruct('Perspective', {\n fov: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 180, exclusiveMinimum: true })),\n near: Positive,\n far: Positive,\n position: Vec3,\n lookAt: Vec3,\n damping: CameraDamping,\n autoRotate: Schema.Finite,\n shake: absentAsNull(CameraShake),\n});\n\n/** An orthographic camera; `zoom` is CSS pixels per world unit. */\nexport const OrthographicCamera = Schema.TaggedStruct('Orthographic', {\n zoom: Positive,\n near: Positive,\n far: Positive,\n position: Vec3,\n lookAt: Vec3,\n damping: CameraDamping,\n autoRotate: Schema.Finite,\n shake: absentAsNull(CameraShake),\n});\n\n/** The active camera. */\nexport const Camera = Schema.Union([PerspectiveCamera, OrthographicCamera]);\n\nconst NonNegativeFinite = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\n\n/** A post-processing effect. */\nexport const PostEffect = Schema.Union([\n Schema.TaggedStruct('Bloom', {\n strength: NonNegativeFinite,\n radius: NonNegativeFinite,\n threshold: NonNegativeFinite,\n }),\n Schema.TaggedStruct('Vignette', { offset: NonNegativeFinite, darkness: NonNegativeFinite }),\n Schema.TaggedStruct('Film', { intensity: NonNegativeFinite, grayscale: Schema.Boolean }),\n]);\n\n/** Scene-wide render settings. */\nexport const RenderSettings = Schema.Struct({\n effects: Schema.Array(PostEffect),\n frames: Schema.Literals(['always', 'demand', 'never']),\n resolution: Schema.Finite.check(\n Schema.isBetween({ minimum: 0, maximum: 1, exclusiveMinimum: true }),\n ),\n shadows: Schema.Literals(['off', 'basic', 'percentage', 'soft', 'variance']),\n toneMapping: Schema.Literals(['none', 'linear', 'reinhard', 'cineon', 'aces', 'agx', 'neutral']),\n exposure: Positive,\n colorSpace: Schema.Literals(['srgb', 'linear']),\n});\n\n/** A view of the scene into part of the canvas. */\nexport const View = Schema.Struct({\n key: Schema.String,\n camera: Camera,\n rect: Schema.Struct({\n x: Schema.Finite,\n y: Schema.Finite,\n width: Schema.Finite.check(Schema.isGreaterThan(0)),\n height: Schema.Finite.check(Schema.isGreaterThan(0)),\n }),\n});\n\n/** A scene rendered into a texture lent under `id`. */\nexport const RenderTexture = Schema.Struct({\n id: Schema.String,\n width: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n height: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n camera: Camera,\n background: Schema.NullOr(Rgb),\n children: Schema.Array(SceneNode),\n});\n\n/** Where a HUD's origin sits on the canvas. */\nexport const HudAlignment = Schema.Literals([\n 'top-left',\n 'top-center',\n 'top-right',\n 'center-left',\n 'center-center',\n 'center-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n]);\n\n/** Nodes drawn over the scene, with their own camera in CSS pixels. */\nexport const Hud = Schema.Struct({\n alignment: HudAlignment,\n margin: Schema.Tuple([Schema.Finite, Schema.Finite]),\n children: Schema.Array(SceneNode),\n});\n\n/** A complete scene description. */\n/** A point to show HTML at. */\nexport const Overlay = Schema.Struct({\n key: Schema.String,\n node: Schema.NullOr(Schema.String),\n position: Vec3,\n center: Schema.Boolean,\n distanceFactor: Schema.NullOr(Positive),\n occlude: Schema.Boolean,\n zIndexRange: Schema.Tuple([Schema.Int, Schema.Int]),\n view: Schema.NullOr(Schema.String),\n});\n\n/** Image-based lighting and background. */\nexport const Environment = Schema.Struct({\n map: Schema.NullOr(Schema.String),\n background: Schema.Union([Schema.Boolean, Schema.Literal('only')]),\n backgroundBlurriness: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n backgroundIntensity: NonNegative,\n environmentIntensity: NonNegative,\n});\n\n/** A daylight sky. */\nexport const Sky = Schema.Struct({\n sunPosition: Vec3,\n turbidity: NonNegative,\n rayleigh: NonNegative,\n mieCoefficient: NonNegative,\n mieDirectionalG: UnitInterval,\n clouds: UnitInterval,\n distance: Positive,\n});\n\n/** Soft ground shadows. */\nexport const ContactShadows = Schema.Struct({\n position: Vec3,\n size: Schema.Tuple([Positive, Positive]),\n near: Schema.Finite,\n far: Positive,\n blur: NonNegative,\n smooth: Schema.Boolean,\n opacity: UnitInterval,\n color: Rgb,\n resolution: Schema.Int.check(Schema.isBetween({ minimum: 16, maximum: 4096 })),\n});\n\n/** Immersive presentation. */\n/** An anchor the description places in the scene. */\nexport const XrAnchor = Schema.Struct({ id: Schema.String, position: Vec3, rotation: Vec3 });\n\nexport const Xr = Schema.Struct({\n origin: Vec3,\n heading: Schema.Finite,\n referenceSpace: Schema.Literals(['local-floor', 'local', 'bounded-floor']),\n framebufferScale: Positive,\n hitTest: Schema.Boolean,\n showInputs: Schema.Boolean,\n anchors: Schema.Array(XrAnchor),\n planes: Schema.Boolean,\n meshes: Schema.Boolean,\n domOverlay: Schema.Boolean,\n glide: Schema.NullOr(\n Schema.Struct({\n speed: NonNegative,\n turn: Schema.Literals(['smooth', 'snap']),\n turnSpeed: NonNegative,\n snapDegrees: NonNegative,\n }),\n ),\n});\n\n/** Whether the scene claims the pointer's gestures from the page. */\nexport const Gestures = Schema.Literals(['page', 'scene']);\n\n/** What an asset is: a glTF or GLB model, a colour texture, an HDR panorama, a typeface font. */\nexport const AssetKind = Schema.Literals(['model', 'texture', 'environment', 'font']);\n\n/** An asset a scene asks for (`modelAsset` and the rest). */\nexport const Asset = Schema.Struct({\n kind: AssetKind,\n id: Schema.String,\n url: Schema.String,\n levels: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),\n});\n\nexport const SceneDescription = Schema.Struct({\n camera: Camera,\n gestures: Gestures,\n views: Schema.Array(View),\n renderTextures: Schema.Array(RenderTexture),\n hud: absentAsNull(Hud),\n overlays: Schema.Array(Overlay),\n environment: Schema.NullOr(Environment),\n sky: Schema.NullOr(Sky),\n contactShadows: Schema.NullOr(ContactShadows),\n physics: Schema.NullOr(Physics),\n xr: Schema.NullOr(Xr),\n measure: Schema.Array(Schema.String),\n assets: Schema.Array(Asset).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),\n render: RenderSettings,\n resources: ResourceDefinitions,\n children: Schema.Array(SceneNode),\n});\n\n/**\n * Detail of asset loaded events: the asset, the level of detail now shown (0 for the\n * coarsest of its `levels`, as many as it has levels for `url` itself) and whether that is\n * the finest, and for a model its parts and clips.\n */\nexport const AssetLoadedDetail = Schema.Struct({\n kind: AssetKind,\n id: Schema.String,\n url: Schema.String,\n levels: Schema.Array(Schema.String),\n level: Schema.Int,\n final: Schema.Boolean,\n /** Names of the objects inside a model, as hits report them in `part`. */\n parts: Schema.Array(Schema.String),\n /** Names of a model's animation clips. */\n clips: Schema.Array(Schema.String),\n});\n\n/**\n * Detail of asset failed events: the asset, and why its finest level could not be loaded\n * (a coarser level shown before stays).\n */\nexport const AssetFailedDetail = Schema.Struct({\n kind: AssetKind,\n id: Schema.String,\n url: Schema.String,\n levels: Schema.Array(Schema.String),\n reason: Schema.String,\n});\n\n/** Detail of pointer-leave events: the interactive mesh's key. */\nexport const KeyDetail = Schema.Struct({ key: Schema.String });\n\n/**\n * Where the pointer met an interactive mesh: its key and ancestor path, the world-space\n * hit point, the distance from the camera, the world-space face normal, the texture\n * coordinates and the pointer's world-space ray.\n */\nexport const HitDetail = Schema.Struct({\n key: Schema.String,\n instance: Schema.optionalKey(Schema.String),\n part: Schema.optionalKey(Schema.String),\n view: Schema.optionalKey(Schema.String),\n path: Schema.Array(Schema.String),\n point: Vec3,\n distance: Schema.Finite,\n normal: Vec3,\n uv: Schema.Tuple([Schema.Finite, Schema.Finite]),\n ray: Schema.Struct({ origin: Vec3, direction: Vec3 }),\n});\n\n/** Detail of button events: the hit plus `MouseEvent.button`. */\nexport const ButtonDetail = Schema.Struct({ ...HitDetail.fields, button: Schema.Int });\n\n/** Detail of wheel events: the hit plus `WheelEvent.deltaX` and `deltaY`. */\nexport const WheelDetail = Schema.Struct({\n ...HitDetail.fields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n});\n\n/** Detail of a click that hit no interactive mesh. */\nexport const MissDetail = Schema.Struct({ button: Schema.Int });\n\n/** A world-space ray: an origin and a unit direction. */\nexport const Ray = HitDetail.fields.ray;\n\n/** Detail of drag events: the captured mesh, the pressed button and the pointer's ray. */\nexport const DragDetail = Schema.Struct({ key: Schema.String, button: Schema.Int, ray: Ray });\n\n/** Detail of performance changes: the fps average and the new factor (0 to 1). */\nexport const PerformanceDetail = Schema.Struct({\n fps: Schema.Finite,\n factor: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n});\n\n/** Modifier keys held during an input. */\nexport const Modifiers = Schema.Struct({\n shift: Schema.Boolean,\n control: Schema.Boolean,\n meta: Schema.Boolean,\n alt: Schema.Boolean,\n});\n\nconst regionFields = {\n view: Schema.optionalKey(Schema.String),\n width: Schema.Finite,\n height: Schema.Finite,\n x: Schema.Finite,\n y: Schema.Finite,\n};\n\n/** A drag, wheel or pinch on the canvas: distances in CSS pixels since the last one. */\nexport const Gesture = Schema.Union([\n Schema.TaggedStruct('Drag', {\n button: Schema.Int,\n modifiers: Modifiers,\n key: Schema.optionalKey(Schema.String),\n ...regionFields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n Schema.TaggedStruct('Wheel', {\n modifiers: Modifiers,\n ...regionFields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n Schema.TaggedStruct('Pinch', {\n ...regionFields,\n scale: Schema.Finite,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n]);\n\n/**\n * Detail of collision events: the two bodies' keys (and instances', for bodies on\n * instances), and whether they began touching.\n */\nexport const CollisionDetail = Schema.Struct({\n a: Schema.String,\n aInstance: Schema.optionalKey(Schema.String),\n aPart: Schema.optionalKey(Schema.String),\n b: Schema.String,\n bInstance: Schema.optionalKey(Schema.String),\n bPart: Schema.optionalKey(Schema.String),\n started: Schema.Boolean,\n});\n\n/**\n * Detail of physics reached events: the run and step a world on `physics({ until })`\n * reached, a checksum of its bodies' poses there, and at `snapshotAt` a snapshot of it.\n */\nexport const PhysicsReachedDetail = Schema.Struct({\n run: Schema.Int,\n step: StepCount,\n checksum: Schema.String,\n snapshot: Schema.optionalKey(Schema.String),\n});\n\nconst XrHand = Schema.Literals(['left', 'right', 'none']);\n\n/** Detail of XR stick events: a thumbstick pushed past halfway, or let back. */\nexport const XrStickDetail = Schema.Struct({\n hand: XrHand,\n direction: Schema.Literals(['center', 'left', 'right', 'forward', 'back']),\n});\n\n/** Detail of XR button events: a controller button pressed or released. */\nexport const XrButtonDetail = Schema.Struct({\n hand: XrHand,\n button: Schema.Literals(['trigger', 'squeeze', 'touchpad', 'thumbstick', 'primary', 'secondary']),\n pressed: Schema.Boolean,\n});\n\n/** Detail of XR moved events: where gliding left the player. */\nexport const XrMovedDetail = Schema.Struct({ origin: Vec3, heading: Schema.Finite });\n\n/** Detail of XR surface events: in AR, where a select met a real surface. */\nexport const XrSurfaceDetail = Schema.Struct({ hand: XrHand, point: Vec3, normal: Vec3 });\n\n/** A detected plane, in the scene's space. */\nexport const XrPlane = Schema.Struct({\n id: Schema.String,\n orientation: Schema.Literals(['horizontal', 'vertical']),\n label: Schema.String,\n position: Vec3,\n rotation: Vec3,\n polygon: Schema.Array(Vec3),\n});\n\n/** Detail of XR planes events: every plane the session has detected, as it is now. */\nexport const XrPlanesDetail = Schema.Struct({ planes: Schema.Array(XrPlane) });\n\n/** A detected mesh, in the scene's space: its geometry is lent for `xrMesh(id)`. */\nexport const XrMesh = Schema.Struct({\n id: Schema.String,\n label: Schema.String,\n position: Vec3,\n rotation: Vec3,\n});\n\n/** Detail of XR meshes events: every mesh the session has detected, as it is now. */\nexport const XrMeshesDetail = Schema.Struct({ meshes: Schema.Array(XrMesh) });\n\n/** Detail of contact force events: the two bodies, and how hard they pushed. */\nexport const ContactForceDetail = Schema.Struct({\n a: Schema.String,\n aInstance: Schema.optionalKey(Schema.String),\n aPart: Schema.optionalKey(Schema.String),\n b: Schema.String,\n bInstance: Schema.optionalKey(Schema.String),\n bPart: Schema.optionalKey(Schema.String),\n totalForce: Vec3,\n totalForceMagnitude: Schema.Finite,\n maxForceDirection: Vec3,\n maxForceMagnitude: Schema.Finite,\n});\n\nconst Rect = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite, Schema.Finite]);\n\n/** Detail of label measured events: a label's laid-out size in its own units. */\nexport const LabelMeasuredDetail = Schema.Struct({\n key: Schema.String,\n block: Rect,\n visible: Rect,\n});\n\n/** Detail of measured events: a node's world bounding box. */\nexport const MeasuredDetail = Schema.Struct({ key: Schema.String, min: Vec3, max: Vec3 });\n\n/** Detail of auto-rotated events: where a camera turning by itself got to. */\nexport const AutoRotatedDetail = Schema.Struct({\n view: Schema.optionalKey(Schema.String),\n position: Vec3,\n});\n\n/** Detail of gesture events. */\nexport const GestureDetail = Schema.Struct({ gesture: Gesture });\n\n/** Detail of the end of a gesture that moved: the press's button, modifiers, mesh and view. */\nexport const GestureEndDetail = Schema.Struct({\n button: Schema.Int,\n modifiers: Modifiers,\n key: Schema.optionalKey(Schema.String),\n view: Schema.optionalKey(Schema.String),\n});\n\n/** A pointer interaction with an interactive mesh, or a miss. */\nexport const SceneEvent = Schema.Union([\n Schema.TaggedStruct('PointerEnter', HitDetail.fields),\n Schema.TaggedStruct('PointerLeave', KeyDetail.fields),\n Schema.TaggedStruct('PointerMove', HitDetail.fields),\n Schema.TaggedStruct('PointerDown', ButtonDetail.fields),\n Schema.TaggedStruct('PointerUp', ButtonDetail.fields),\n Schema.TaggedStruct('Click', ButtonDetail.fields),\n Schema.TaggedStruct('DoubleClick', ButtonDetail.fields),\n Schema.TaggedStruct('ContextMenu', HitDetail.fields),\n Schema.TaggedStruct('Wheel', WheelDetail.fields),\n Schema.TaggedStruct('PointerMissed', MissDetail.fields),\n Schema.TaggedStruct('Drag', DragDetail.fields),\n Schema.TaggedStruct('DragEnd', DragDetail.fields),\n Schema.TaggedStruct('Gesture', GestureDetail.fields),\n Schema.TaggedStruct('GestureEnd', GestureEndDetail.fields),\n Schema.TaggedStruct('AutoRotated', AutoRotatedDetail.fields),\n Schema.TaggedStruct('Collision', CollisionDetail.fields),\n Schema.TaggedStruct('Measured', MeasuredDetail.fields),\n Schema.TaggedStruct('LabelMeasured', LabelMeasuredDetail.fields),\n Schema.TaggedStruct('ContactForce', ContactForceDetail.fields),\n Schema.TaggedStruct('PhysicsReached', PhysicsReachedDetail.fields),\n Schema.TaggedStruct('XrStick', XrStickDetail.fields),\n Schema.TaggedStruct('XrButton', XrButtonDetail.fields),\n Schema.TaggedStruct('XrSurface', XrSurfaceDetail.fields),\n Schema.TaggedStruct('XrMoved', XrMovedDetail.fields),\n Schema.TaggedStruct('XrPlanes', XrPlanesDetail.fields),\n Schema.TaggedStruct('XrMeshes', XrMeshesDetail.fields),\n Schema.TaggedStruct('PerformanceChanged', PerformanceDetail.fields),\n]);\n\n/** Why a scene description was rejected. */\nexport const DescriptionError = Schema.Union([\n Schema.TaggedStruct('DuplicateKey', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateResourceId', {\n resource: Schema.Literals(['geometry', 'material']),\n id: Schema.String,\n }),\n Schema.TaggedStruct('UnknownSharedGeometry', { nodeKey: Schema.String, id: Schema.String }),\n Schema.TaggedStruct('UnknownSharedMaterial', { nodeKey: Schema.String, id: Schema.String }),\n Schema.TaggedStruct('DuplicateInstanceKey', { nodeKey: Schema.String, key: Schema.String }),\n Schema.TaggedStruct('UnknownBehaviour', { nodeKey: Schema.String, name: Schema.String }),\n Schema.TaggedStruct('DuplicateViewKey', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateOverlayKey', { key: Schema.String }),\n Schema.TaggedStruct('UnknownOverlayNode', { key: Schema.String, node: Schema.String }),\n Schema.TaggedStruct('UnknownOverlayView', { key: Schema.String, view: Schema.String }),\n Schema.TaggedStruct('UnknownMeasuredNode', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateAssetId', { id: Schema.String }),\n Schema.TaggedStruct('DuplicateJointKey', { key: Schema.String }),\n Schema.TaggedStruct('UnknownJointBody', { joint: Schema.String, body: Schema.String }),\n Schema.TaggedStruct('DuplicateRenderTextureId', { id: Schema.String }),\n]);\n\n/** Where an object is, for a transform gizmo: position, Euler angles and scale. */\nexport const Placement = Schema.Struct({ position: Vec3, rotation: Vec3, scale: Vec3 });\n\nconst GizmoHandle = Schema.Literals(['x', 'y', 'z', 'xy', 'yz', 'xz', 'xyz']);\n\n/** A transform gizmo's state, for keeping in a Model. */\nexport const Gizmo = Schema.Struct({\n mode: Schema.Literals(['translate', 'rotate', 'scale']),\n space: Schema.Literals(['world', 'local']),\n size: Positive,\n translationSnap: Schema.NullOr(Positive),\n rotationSnap: Schema.NullOr(Positive),\n scaleSnap: Schema.NullOr(Positive),\n showX: Schema.Boolean,\n showY: Schema.Boolean,\n showZ: Schema.Boolean,\n hovered: Schema.NullOr(GizmoHandle),\n grab: Schema.NullOr(\n Schema.Struct({\n handle: GizmoHandle,\n start: Placement,\n from: Vec3,\n plane: Schema.Struct({ normal: Vec3, constant: Schema.Finite }),\n eye: Vec3,\n distance: Schema.Finite,\n }),\n ),\n});\n\n/** A branching history of `value`s (`History.make`), for a Model that keeps one. */\nexport const History = <S extends Schema.Top>(value: S) =>\n Schema.Struct({\n entries: Schema.Array(\n Schema.Struct({\n id: Schema.Int,\n parent: Schema.NullOr(Schema.Int),\n label: Schema.String,\n value,\n next: Schema.NullOr(Schema.Int),\n }),\n ),\n current: Schema.Int,\n });\n\n/** A lockstep entry: an app's input, or the leader admitting a peer. */\nconst LockstepEntry = <S extends Schema.Top>(input: S) =>\n Schema.Union([\n Schema.TaggedStruct('Input', { input }),\n Schema.TaggedStruct('Admit', { peer: Schema.String }),\n ]);\n\n/** One peer's lockstep packet for one turn, carrying the app's `input`s. */\nexport const LockstepPacket = <S extends Schema.Top>(input: S) =>\n Schema.Struct({\n peer: Schema.String,\n turn: Schema.Int,\n entries: Schema.Array(LockstepEntry(input)),\n });\n\n/** A lockstep member: the first turn it sends for, and the turn it stopped before. */\nexport const LockstepMember = Schema.Struct({\n peer: Schema.String,\n from: Schema.Int,\n until: Schema.NullOr(Schema.Int),\n});\n\n/** A lockstep session (`Lockstep.make`) over the app's `input`s, for a Model. */\nexport const Lockstep = <S extends Schema.Top>(input: S) =>\n Schema.Struct({\n self: Schema.String,\n members: Schema.Array(LockstepMember),\n turn: Schema.Int,\n sent: Schema.Int,\n lead: Schema.Int,\n pending: Schema.Array(LockstepEntry(input)),\n received: Schema.Array(LockstepPacket(input)),\n });\n\n/** A timeline of physics steps (`Timeline.make`) over the app's `input`s, for a Model. */\nexport const Timeline = <S extends Schema.Top>(input: S) =>\n Schema.Struct({\n inputs: Schema.Array(Schema.Struct({ step: StepCount, input })),\n applied: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n reached: Schema.NullOr(StepCount),\n frontier: StepCount,\n });\n\n/** A measuring tape as data (`tape`), for a Model that keeps it. */\nexport const Tape = Schema.Struct({\n from: Schema.NullOr(Vec3),\n to: Schema.NullOr(Vec3),\n pointer: Schema.NullOr(Vec3),\n snap: Schema.NullOr(Positive),\n});\n\n/** A pivot handle: what it does, and its axis. */\nexport const PivotHandle = Schema.Literals(\n (['arrow', 'slider', 'rotator', 'sphere'] as const).flatMap((kind) =>\n (['x', 'y', 'z'] as const).map((axis) => `${kind}-${axis}` as const),\n ),\n);\n\n/** Pivot controls as data (`pivot`), for a Model that keeps them. */\nexport const Pivot = Schema.Struct({\n scale: Positive,\n depthTest: Schema.Boolean,\n disableAxes: Schema.Boolean,\n disableSliders: Schema.Boolean,\n disableRotations: Schema.Boolean,\n disableScaling: Schema.Boolean,\n hovered: Schema.NullOr(PivotHandle),\n grab: Schema.NullOr(\n Schema.Struct({\n handle: PivotHandle,\n start: Placement,\n point: Vec3,\n e1: Vec3,\n e2: Vec3,\n normal: Vec3,\n }),\n ),\n});\n",
7
9
  "/**\n * App-level owner of shared GPU resources (ADR-005). Every scene runtime built with the\n * same Layer shares one kernel resource store; the store is disposed when the Layer's\n * scope closes.\n *\n * @module\n */\nimport { Context, Effect, Layer } from 'effect';\n\nimport { createResourceStore, type ResourceStore } from '../kernel/index.ts';\n\nexport class ResourceRegistry extends Context.Service<\n ResourceRegistry,\n { readonly store: ResourceStore }\n>()('effect-three/ResourceRegistry') {}\n\nconst acquireStore = Effect.sync(createResourceStore);\n\nconst toService = (store: ResourceStore) => ({ store });\n\nconst scopedStore = Effect.acquireRelease(acquireStore, (store) => Effect.sync(store.dispose));\n\n/** Provides one shared resource store for the lifetime of the Layer. */\nexport const layer = Layer.effect(ResourceRegistry, scopedStore.pipe(Effect.map(toService)));\n",
8
- "/**\n * A running scene: a kernel scene graph, a renderer and a frame subscription, all owned\n * by the caller's `Scope`. Closing the scope stops the frame loop, then releases the\n * event queue, the renderer and every resource the scene acquired, in that order.\n *\n * @module\n */\nimport { Clock, Effect, Exit, Match, Option, Queue, Result, Scope, Stream } from 'effect';\n\nimport {\n createSceneClock,\n createSceneGraph,\n type Behaviour,\n createFramePacer,\n createSceneLoop,\n type Op,\n type OverlayPlacement,\n type LabelEngine,\n type PhysicsEngine,\n type ReconcileResult,\n type RendererFactory,\n type SceneDescription,\n type SceneEvent,\n type SceneClock,\n type SceneGraph,\n type SceneRenderer,\n type Viewport,\n} from '../kernel/index.ts';\nimport { InvalidScene, RendererUnavailable } from './errors.ts';\nimport { FrameSource } from './FrameSource.ts';\nimport { ResourceRegistry } from './ResourceRegistry.ts';\n\nexport type SceneRuntimeOptions = {\n readonly scene: SceneDescription;\n readonly renderer: RendererFactory;\n readonly viewport: Viewport;\n /** Events kept when the consumer falls behind; older events are dropped. Default 64. */\n readonly eventCapacity?: number;\n /** Behaviours nodes may name, beside the built-in ones. */\n readonly behaviours?: Readonly<Record<string, Behaviour>>;\n /** The physics engine for meshes with a `body`; without one, bodies stay put. */\n readonly physics?: PhysicsEngine | undefined;\n /** Draws `label` nodes (distance-field text); without one, labels are empty. */\n readonly labels?: LabelEngine | undefined;\n /** Receives where the overlays are after each drawn frame, to move their HTML there. */\n readonly placeOverlays?: (placements: ReadonlyArray<OverlayPlacement>) => void;\n};\n\nconst defaultEventCapacity = 64;\nconst noBehaviours: Readonly<Record<string, Behaviour>> = {};\nconst ignorePlacements = (_placements: ReadonlyArray<OverlayPlacement>): void => undefined;\nconst nanosPerMillisecond = 1_000_000;\nconst nanosPerSecond = 1_000_000_000;\n\nconst toResult = (result: ReconcileResult): Result.Result<ReadonlyArray<Op>, InvalidScene> =>\n Match.valueTags(result, {\n Applied: (applied) => Result.succeed(applied.ops),\n Invalid: ({ error }) => Result.fail(new InvalidScene({ error })),\n });\n\nconst applyViewport = (graph: SceneGraph, renderer: SceneRenderer, viewport: Viewport): void => {\n graph.resize(viewport.width, viewport.height);\n renderer.setViewport(viewport);\n};\n\n/** The engines a scene graph hands work to, and the renderer whose kit shades it. */\ntype Engines = Pick<SceneRuntimeOptions, 'physics' | 'labels' | 'renderer'>;\n\nconst sceneGraph =\n (\n registry: ResourceRegistry['Service'],\n behaviours: Readonly<Record<string, Behaviour>>,\n engines: Engines,\n ) =>\n () =>\n createSceneGraph({\n store: registry.store,\n behaviours,\n physics: engines.physics,\n labels: engines.labels,\n kit: engines.renderer.kit,\n });\n\n/**\n * Reconciles at the current scene time. An idle scene draws no frames, so its last tick\n * can be long past; catching up first makes new transitions start now, not back then.\n */\nconst reconcileNow = (graph: SceneGraph, sceneClock: SceneClock, scene: SceneDescription) => {\n graph.tick(sceneClock.elapsedSeconds());\n return graph.reconcile(scene);\n};\n\nconst viewportChange = (graph: SceneGraph, renderer: SceneRenderer, viewport: Viewport) => () =>\n applyViewport(graph, renderer, viewport);\n\nconst animationChange = (sceneClock: SceneClock, graph: SceneGraph, animating: boolean) => () => {\n sceneClock.setAnimating(animating);\n graph.setAnimating(animating);\n};\n\nconst acquireGraph = (\n registry: ResourceRegistry['Service'],\n behaviours: Readonly<Record<string, Behaviour>>,\n engines: Engines,\n) => {\n const create = Effect.sync(sceneGraph(registry, behaviours, engines));\n return Effect.acquireRelease(create, (graph) => Effect.sync(graph.dispose));\n};\n\nconst acquireRenderer = (factory: RendererFactory) => {\n const create = Effect.try({\n try: factory.create,\n catch: (cause) => new RendererUnavailable({ cause }),\n });\n return Effect.acquireRelease(create, (renderer) => Effect.sync(renderer.dispose));\n};\n\n/** Waits for a renderer that starts asynchronously (WebGPU); a failed start is unavailable. */\nconst awaitReady = (renderer: SceneRenderer) =>\n Option.match(Option.fromNullishOr(renderer.ready), {\n onNone: () => Effect.void,\n onSome: (ready) =>\n Effect.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) }),\n });\n\nconst invalidationListening = (graph: SceneGraph, onInvalidated: () => void) => () =>\n graph.onInvalidated(onInvalidated);\n\nconst acquireInvalidation = (graph: SceneGraph, onInvalidated: () => void) => {\n const listen = Effect.sync(invalidationListening(graph, onInvalidated));\n return Effect.acquireRelease(listen, Effect.sync);\n};\n\nconst acquireEvents = (capacity: number) => {\n const create = Queue.sliding<SceneEvent>(capacity);\n return Effect.acquireRelease(create, Queue.shutdown);\n};\n\nfunction* startScene(options: SceneRuntimeOptions) {\n const registry = yield* ResourceRegistry;\n const frames = yield* FrameSource;\n const clock = yield* Clock.Clock;\n\n const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);\n const startupOps = yield* Effect.fromResult(toResult(graph.reconcile(options.scene)));\n const renderer = yield* acquireRenderer(options.renderer);\n yield* awaitReady(renderer);\n applyViewport(graph, renderer, options.viewport);\n const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);\n\n const sceneClock = createSceneClock(\n () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond,\n );\n const loop = createSceneLoop({\n graph,\n renderer,\n elapsedSeconds: sceneClock.elapsedSeconds,\n emit: (event) => {\n Queue.offerUnsafe(events, event);\n },\n now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,\n placeOverlays: options.placeOverlays ?? ignorePlacements,\n });\n yield* Effect.addFinalizer(() => Effect.sync(loop.dispose));\n const pacer = createFramePacer(loop);\n pacer.attach(yield* frames.subscribe(pacer.frame));\n yield* acquireInvalidation(graph, pacer.wake);\n\n return {\n /** The hosted scene graph, for inspection. */\n graph,\n /** The operations that built the initial scene. */\n startupOps,\n /**\n * Applies a new description and returns the operations it took. Structurally equal\n * descriptions return no operations and cost no host changes.\n */\n update: (scene: SceneDescription) =>\n Effect.suspend(() => Effect.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),\n /** Resizes the camera aspect and the renderer's drawing surface. */\n resize: (viewport: Viewport) => Effect.sync(viewportChange(graph, renderer, viewport)),\n /** Freezes (`false`) or resumes (`true`) behaviours; frozen, transitions land at once. */\n setAnimating: (animating: boolean) =>\n Effect.sync(animationChange(sceneClock, graph, animating)),\n /**\n * Draws one frame now, whatever the frame mode: React Three Fiber's `advance`, for\n * `frames: 'never'` scenes and frame-exact capture.\n */\n advance: Effect.sync(pacer.advance),\n /**\n * Draws one frame now, synchronously, for a host's own frame source to call directly:\n * an immersive (WebXR) session's animation loop.\n */\n drawNow: pacer.advance,\n /** Routes pointer input. Synchronous, so DOM listeners can call it directly. */\n pointer: loop.pointer,\n /** Routes XR input: aims, selects, sticks, buttons and surfaces. Synchronous, as `pointer`. */\n xrInput: loop.xrInput,\n /** Scene events, newest kept when the consumer falls behind. */\n events: Stream.fromQueue(events),\n /** Removes and returns every pending event without waiting. */\n drainEvents: Queue.clear(events),\n };\n}\n\n// Startup is atomic: everything is acquired into a child of the caller's scope, which is\n// closed immediately if startup fails or is interrupted. Otherwise a partial scene would\n// stay allocated until the caller's scope closed (under Foldkit: until unmount).\nfunction* startAtomically(options: SceneRuntimeOptions) {\n const parent = yield* Effect.scope;\n const child = yield* Scope.fork(parent);\n return yield* Effect.gen(() => startScene(options)).pipe(\n Scope.provide(child),\n Effect.onError((cause) => Scope.close(child, Exit.failCause(cause))),\n );\n}\n\n/**\n * Starts a scene in the current scope. Fails with `InvalidScene` if the initial\n * description is rejected and `RendererUnavailable` if the renderer can't be created.\n * A failed or interrupted start releases everything it acquired before returning.\n */\nexport const make = (options: SceneRuntimeOptions) => {\n const program = Effect.gen(() => startAtomically(options));\n return program.pipe(Effect.withSpan('effect-three/SceneRuntime.make'));\n};\n\n/** The handle `make` returns. */\nexport type SceneHandle = Effect.Success<ReturnType<typeof make>>;\n",
9
- "/**\n * Effect Schemas for scene descriptions.\n *\n * They validate untrusted descriptions at the boundary, type the Foldkit `scene`\n * property and derive property-test generators. Each decoded `Type` is checked at compile\n * time to be exactly the kernel's description type, so the two can't drift.\n *\n * @module\n */\nimport { Effect, Schema } from 'effect';\n\nimport { handJoints, type SceneNode as KernelSceneNode } from '../kernel/description.ts';\n\nconst NonNegative = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\nconst Positive = Schema.Finite.check(Schema.isGreaterThan(0));\nconst UnitInterval = Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 }));\n\n/** A three-component vector `[x, y, z]` of finite numbers. */\nexport const Vec3 = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite]);\n\n/** A rotation axis. */\nexport const Axis = Schema.Literals(['x', 'y', 'z']);\n\n/**\n * Fields added after 0.2.0 decode as their builder's default when absent, so descriptions\n * stored before them (a camera kept in a Model, say) still decode.\n */\nconst absentAsNull = <S extends Schema.Top>(schema: S) =>\n Schema.NullOr(schema).pipe(Schema.withDecodingDefaultKey(Effect.succeed(null)));\nconst absentAsFalse = Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect.succeed(false)));\n\n/** A 24-bit RGB colour, for example `0x3366ff`. */\nexport const Rgb = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 0xffffff }));\n\n/** Model-owned Euler angles, a spin behaviour, or facing the camera (a billboard). */\nexport const Rotation = Schema.Union([\n Schema.TaggedStruct('Fixed', { euler: Vec3 }),\n Schema.TaggedStruct('Spin', {\n axis: Axis,\n radiansPerSecond: Schema.Finite,\n phase: Schema.Finite,\n }),\n Schema.TaggedStruct('Billboard', {\n lockX: Schema.Boolean,\n lockY: Schema.Boolean,\n lockZ: Schema.Boolean,\n }),\n]);\n\n/** Box geometry parameters. */\nexport const BoxGeometry = Schema.TaggedStruct('Box', {\n width: Positive,\n height: Positive,\n depth: Positive,\n});\n\nconst Segments = Schema.Int.check(Schema.isGreaterThanOrEqualTo(3));\n\n/** Sphere geometry parameters. */\nexport const SphereGeometry = Schema.TaggedStruct('Sphere', {\n radius: Positive,\n widthSegments: Segments,\n heightSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(2)),\n});\n\n/** Plane geometry parameters. */\nexport const PlaneGeometry = Schema.TaggedStruct('Plane', { width: Positive, height: Positive });\n\n/** Cylinder geometry parameters. A zero radius makes a cone. */\nexport const CylinderGeometry = Schema.TaggedStruct('Cylinder', {\n radiusTop: NonNegative,\n radiusBottom: NonNegative,\n height: Positive,\n radialSegments: Segments,\n});\n\n/** Torus geometry parameters. */\nexport const TorusGeometry = Schema.TaggedStruct('Torus', {\n radius: Positive,\n tube: Positive,\n radialSegments: Segments,\n tubularSegments: Segments,\n});\n\n/** Cone geometry parameters. */\nexport const ConeGeometry = Schema.TaggedStruct('Cone', {\n radius: Positive,\n height: Positive,\n radialSegments: Segments,\n});\n\n/** Capsule geometry parameters. */\nexport const CapsuleGeometry = Schema.TaggedStruct('Capsule', {\n radius: Positive,\n height: NonNegative,\n capSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n radialSegments: Segments,\n});\n\n/** Rounded box geometry parameters (Drei's `RoundedBox`). */\nexport const RoundedBoxGeometry = Schema.TaggedStruct('RoundedBox', {\n width: Positive,\n height: Positive,\n depth: Positive,\n radius: NonNegative,\n smoothness: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n bevelSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n steps: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n creaseAngle: NonNegative,\n});\n\n/** Backdrop geometry parameters (Drei's `Backdrop`). */\nexport const BackdropGeometry = Schema.TaggedStruct('Backdrop', {\n floor: NonNegative,\n segments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n});\n\n/** Ring geometry parameters. */\nexport const RingGeometry = Schema.TaggedStruct('Ring', {\n innerRadius: NonNegative,\n outerRadius: Positive,\n thetaSegments: Segments,\n});\n\n/** Circle geometry parameters. */\nexport const CircleGeometry = Schema.TaggedStruct('Circle', {\n radius: Positive,\n segments: Segments,\n});\n\nconst Steps = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));\n\n/** Text from a lent typeface font. */\nexport const TextGeometry = Schema.TaggedStruct('Text', {\n text: Schema.String,\n font: Schema.String,\n size: Positive,\n depth: NonNegative,\n curveSegments: Steps,\n bevel: Schema.NullOr(\n Schema.Struct({\n thickness: NonNegative,\n size: NonNegative,\n offset: Schema.Finite,\n segments: Steps,\n }),\n ),\n center: Schema.Boolean,\n letterSpacing: Schema.Finite,\n lineHeight: NonNegative,\n align: Schema.Literals(['left', 'center', 'right']),\n});\n\n/** Any geometry shape. */\nexport const ShapeGeometry = Schema.Union([\n TextGeometry,\n BoxGeometry,\n SphereGeometry,\n PlaneGeometry,\n CylinderGeometry,\n TorusGeometry,\n ConeGeometry,\n CapsuleGeometry,\n RingGeometry,\n CircleGeometry,\n RoundedBoxGeometry,\n BackdropGeometry,\n]);\n\n/** A registered behaviour, by name, with numeric parameters. */\nexport const Behave = Schema.Struct({\n name: Schema.String,\n params: Schema.Record(Schema.String, Schema.Finite),\n});\n\n/** How a transition progresses. */\nexport const Easing = Schema.Literals(['linear', 'easeInOutCubic', 'easeOutCubic', 'easeOutBack']);\n\n/** How position and scale changes are shown. */\nexport const Transition = Schema.Union([\n Schema.TaggedStruct('Instant', {}),\n Schema.TaggedStruct('Ease', { seconds: Positive, easing: Easing }),\n]);\n\n/** Which faces a material draws. */\nexport const MaterialSide = Schema.Literals(['front', 'back', 'double']);\n\n/** A texture lent to the store, by id, or `null` for none. */\nconst TextureId = Schema.NullOr(Schema.String);\n\nconst surface = {\n opacity: UnitInterval,\n transparent: Schema.Boolean,\n side: MaterialSide,\n wireframe: Schema.Boolean,\n};\n\nconst shaded = { ...surface, flatShading: Schema.Boolean };\n\n/** Unlit material parameters. */\nexport const BasicMaterial = Schema.TaggedStruct('Basic', {\n color: Rgb,\n map: TextureId,\n ...surface,\n});\n\n/** Matte material parameters. */\nexport const LambertMaterial = Schema.TaggedStruct('Lambert', {\n color: Rgb,\n map: TextureId,\n emissive: Rgb,\n ...shaded,\n});\n\n/** Shiny material parameters. */\nexport const PhongMaterial = Schema.TaggedStruct('Phong', {\n color: Rgb,\n map: TextureId,\n emissive: Rgb,\n specular: Rgb,\n shininess: NonNegative,\n ...shaded,\n});\n\nconst pbr = {\n color: Rgb,\n map: TextureId,\n roughness: UnitInterval,\n metalness: UnitInterval,\n emissive: Rgb,\n emissiveIntensity: NonNegative,\n};\n\n/** Standard (PBR) material parameters. */\nexport const StandardMaterial = Schema.TaggedStruct('Standard', { ...pbr, ...shaded });\n\n/** Physical material parameters: index of refraction in [1, 2.333], the range three.js documents. */\nexport const PhysicalMaterial = Schema.TaggedStruct('Physical', {\n ...pbr,\n clearcoat: UnitInterval,\n clearcoatRoughness: UnitInterval,\n transmission: UnitInterval,\n ior: Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 2.333 })),\n ...shaded,\n});\n\n/** Normal-coloured material parameters. */\nexport const NormalMaterial = Schema.TaggedStruct('Normal', shaded);\n\n/** A shadow catcher: only the shadows cast onto it. */\nexport const ShadowMaterial = Schema.TaggedStruct('Shadow', { color: Rgb, opacity: UnitInterval });\n\n/** Any material kind. */\nexport const SurfaceMaterial = Schema.Union([\n ShadowMaterial,\n BasicMaterial,\n LambertMaterial,\n PhongMaterial,\n StandardMaterial,\n PhysicalMaterial,\n NormalMaterial,\n]);\n\n/** An owned geometry or a reference to a shared one. */\nexport const GeometryRef = Schema.Union([\n ...ShapeGeometry.members,\n Schema.TaggedStruct('SharedGeometry', { id: Schema.String }),\n Schema.TaggedStruct('LentGeometry', { id: Schema.String }),\n]);\n\n/** An owned material or a reference to a shared one. */\nexport const MaterialRef = Schema.Union([\n ...SurfaceMaterial.members,\n Schema.TaggedStruct('SharedMaterial', { id: Schema.String }),\n]);\n\n/** Shared resource definitions. */\nexport const ResourceDefinitions = Schema.Struct({\n geometries: Schema.Array(Schema.Struct({ id: Schema.String, geometry: ShapeGeometry })),\n materials: Schema.Array(Schema.Struct({ id: Schema.String, material: SurfaceMaterial })),\n});\n\n/** A renderable mesh. */\nconst Upright = { halfHeight: Positive, radius: Positive };\n\n/** A collider of a body's own, placed in it. */\nexport const ColliderDescription = Schema.Struct({\n shape: Schema.Union([\n Schema.TaggedStruct('Cuboid', { halfExtents: Vec3 }),\n Schema.TaggedStruct('Ball', { radius: Positive }),\n Schema.TaggedStruct('Capsule', Upright),\n Schema.TaggedStruct('Cylinder', Upright),\n Schema.TaggedStruct('Cone', Upright),\n ]),\n position: Vec3,\n rotation: Vec3,\n name: Schema.NullOr(Schema.String),\n});\n\nconst Group = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 15 }));\n\n/** Collision groups: those a body is in, and those it interacts with (null: all). */\nexport const InteractionGroups = Schema.Struct({\n memberships: Schema.Array(Group),\n filters: Schema.NullOr(Schema.Array(Group)),\n});\n\n/** A rigid body for a mesh, group, model or instances. */\nexport const Body = Schema.Struct({\n type: Schema.Literals(['dynamic', 'fixed', 'kinematic']),\n collider: Schema.Literals(['cuboid', 'ball', 'hull', 'trimesh']),\n mass: Schema.NullOr(Positive),\n friction: NonNegative,\n restitution: NonNegative,\n linearDamping: NonNegative,\n angularDamping: NonNegative,\n gravityScale: Schema.Finite,\n ccd: Schema.Boolean,\n sensor: Schema.Boolean,\n linearVelocity: Vec3,\n angularVelocity: Vec3,\n impulse: Schema.NullOr(Schema.Struct({ id: Schema.Finite, impulse: Vec3 })),\n colliders: Schema.NullOr(Schema.Array(ColliderDescription)),\n contactForces: Schema.NullOr(NonNegative),\n collisionGroups: Schema.NullOr(InteractionGroups),\n solverGroups: Schema.NullOr(InteractionGroups),\n});\n\n/** A physics world. */\nconst Handedness = Schema.Literals(['left', 'right']);\n\n/** A space an immersive session tracks, for a group to follow. */\nexport const XrSpace = Schema.Union([\n Schema.TaggedStruct('Head', {}),\n Schema.TaggedStruct('Joint', { hand: Handedness, joint: Schema.Literals(handJoints) }),\n Schema.TaggedStruct('Controller', { hand: Handedness, space: Schema.Literals(['grip', 'ray']) }),\n Schema.TaggedStruct('Anchor', { id: Schema.String }),\n Schema.TaggedStruct('Plane', { id: Schema.String }),\n Schema.TaggedStruct('Mesh', { id: Schema.String }),\n]);\n\n/** A body a joint holds: a node's, or one instance's. */\nexport const BodyRef = Schema.Struct({\n key: Schema.String,\n instance: Schema.NullOr(Schema.String),\n});\n\n/** A joint's motor: a target position and velocity, and how hard it pursues each. */\nexport const JointMotor = Schema.Struct({\n position: Schema.Finite,\n velocity: Schema.Finite,\n stiffness: NonNegative,\n damping: NonNegative,\n});\n\n/** A joint's range of motion. */\nexport const JointLimits = Schema.Tuple([Schema.Finite, Schema.Finite]);\n\n/** How a joint holds its bodies. */\nexport const JointKind = Schema.Union([\n Schema.TaggedStruct('Fixed', { frameA: Vec3, frameB: Vec3 }),\n Schema.TaggedStruct('Spherical', {}),\n Schema.TaggedStruct('Revolute', {\n axis: Vec3,\n limits: Schema.NullOr(JointLimits),\n motor: Schema.NullOr(JointMotor),\n }),\n Schema.TaggedStruct('Prismatic', {\n axis: Vec3,\n limits: Schema.NullOr(JointLimits),\n motor: Schema.NullOr(JointMotor),\n }),\n Schema.TaggedStruct('Rope', { length: Schema.Finite }),\n Schema.TaggedStruct('Spring', {\n restLength: Schema.Finite,\n stiffness: Schema.Finite,\n damping: Schema.Finite,\n }),\n]);\n\n/** A joint between two bodies. */\nexport const Joint = Schema.Struct({\n key: Schema.String,\n a: BodyRef,\n b: BodyRef,\n anchorA: Vec3,\n anchorB: Vec3,\n kind: JointKind,\n contacts: Schema.Boolean,\n});\n\nexport const Physics = Schema.Struct({\n gravity: Vec3,\n paused: Schema.Boolean,\n timeStep: Positive,\n interpolate: Schema.Boolean,\n debug: Schema.Boolean,\n joints: Schema.Array(Joint),\n});\n\nexport const MeshNode = Schema.TaggedStruct('Mesh', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n geometry: GeometryRef,\n material: MaterialRef,\n interactive: Schema.Boolean,\n castShadow: Schema.Boolean,\n receiveShadow: Schema.Boolean,\n body: Schema.NullOr(Body),\n});\n\n/** One instance of an instances node. */\nexport const Instance = Schema.Struct({\n key: Schema.String,\n position: Vec3,\n rotation: Vec3,\n scale: Vec3,\n color: Rgb,\n});\n\n/** Many instances of one geometry and material. */\nexport const InstancesNode = Schema.TaggedStruct('Instances', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n geometry: GeometryRef,\n material: MaterialRef,\n interactive: Schema.Boolean,\n castShadow: Schema.Boolean,\n receiveShadow: Schema.Boolean,\n instances: Schema.Array(Instance),\n body: Schema.NullOr(Body),\n});\n\n/** An application object lent to the store under `id`. */\nexport const Animation = Schema.Struct({\n clip: Schema.String,\n speed: Schema.Finite,\n loop: Schema.Boolean,\n});\n\nexport const BorrowedNode = Schema.TaggedStruct('Borrowed', {\n key: Schema.String,\n id: Schema.String,\n animation: Schema.NullOr(Animation),\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n body: Schema.NullOr(Body),\n castShadow: absentAsFalse,\n receiveShadow: absentAsFalse,\n});\n\n/** Distance-field text. */\nexport const LabelNode = Schema.TaggedStruct('Label', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n text: Schema.String,\n font: Schema.NullOr(Schema.String),\n fontSize: Positive,\n color: Rgb,\n fillOpacity: NonNegative,\n anchorX: Schema.Union([Schema.Literals(['left', 'center', 'right']), Schema.Finite]),\n anchorY: Schema.Union([\n Schema.Literals(['top', 'top-baseline', 'middle', 'bottom-baseline', 'bottom']),\n Schema.Finite,\n ]),\n maxWidth: Schema.NullOr(Positive),\n lineHeight: Schema.NullOr(Positive),\n letterSpacing: Schema.Finite,\n textAlign: Schema.Literals(['left', 'right', 'center', 'justify']),\n outlineWidth: NonNegative,\n outlineColor: Rgb,\n outlineOpacity: NonNegative,\n outlineBlur: NonNegative,\n colorRanges: Schema.Array(\n Schema.Struct({ start: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)), color: Rgb }),\n ),\n curveRadius: Schema.Finite,\n material: Schema.NullOr(MaterialRef),\n});\n\n/** Uniform ambient light. */\nexport const AmbientLightNode = Schema.TaggedStruct('AmbientLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n});\n\n/** Directional light. */\nconst isPowerOfTwo = (size: number) =>\n Number.isInteger(Math.log2(size)) || 'expected a power of two';\n\n/** Shadow map size: a power of two from 16 to 8192 texels. */\nconst ShadowMapSize = Schema.Int.check(\n Schema.isBetween({ minimum: 16, maximum: 8192 }),\n Schema.makeFilter(isPowerOfTwo),\n);\n\nexport const DirectionalLightNode = Schema.TaggedStruct('DirectionalLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n shadowArea: Positive,\n});\n\n/** Point light. */\nexport const PointLightNode = Schema.TaggedStruct('PointLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n distance: NonNegative,\n decay: NonNegative,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n});\n\n/** Spot light: `angle` in (0, π/2], `penumbra` in [0, 1]. */\nexport const SpotLightNode = Schema.TaggedStruct('SpotLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n target: Vec3,\n distance: NonNegative,\n angle: Schema.Finite.check(\n Schema.isBetween({ minimum: 0, maximum: Math.PI / 2, exclusiveMinimum: true }),\n ),\n penumbra: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n decay: NonNegative,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n});\n\n/** Hemisphere light. */\n/** A grid of lines on the XZ plane. */\nexport const GridNode = Schema.TaggedStruct('Grid', {\n key: Schema.String,\n position: Vec3,\n size: Positive,\n divisions: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n color: Rgb,\n centerColor: Rgb,\n});\n\n/** Drei's shader grid. */\nexport const ShaderGridNode = Schema.TaggedStruct('ShaderGrid', {\n key: Schema.String,\n position: Vec3,\n rotation: Vec3,\n size: Schema.Tuple([Positive, Positive]),\n cellSize: Positive,\n cellThickness: NonNegative,\n cellColor: Rgb,\n sectionSize: Positive,\n sectionThickness: NonNegative,\n sectionColor: Rgb,\n infinite: Schema.Boolean,\n followCamera: Schema.Boolean,\n fadeDistance: Positive,\n fadeStrength: NonNegative,\n fadeFrom: Schema.Finite,\n side: Schema.Literals(['front', 'back', 'double']),\n});\n\nexport const HemisphereLightNode = Schema.TaggedStruct('HemisphereLight', {\n key: Schema.String,\n color: Rgb,\n groundColor: Rgb,\n intensity: NonNegative,\n position: Vec3,\n});\n\n/** Any scene node. Groups nest recursively. */\nexport const SceneNode: Schema.Codec<KernelSceneNode, unknown> = Schema.Union([\n Schema.TaggedStruct('Group', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n children: Schema.Array(Schema.suspend((): Schema.Codec<KernelSceneNode, unknown> => SceneNode)),\n body: Schema.NullOr(Body),\n follow: Schema.NullOr(XrSpace),\n detail: absentAsNull(\n Schema.Struct({ distances: Schema.Array(NonNegative), hysteresis: NonNegative }),\n ),\n }),\n MeshNode,\n InstancesNode,\n BorrowedNode,\n LabelNode,\n ShaderGridNode,\n AmbientLightNode,\n DirectionalLightNode,\n PointLightNode,\n SpotLightNode,\n HemisphereLightNode,\n GridNode,\n]);\n\n/** The fraction of the way a camera closes every sixtieth of a second: 0 jumps. */\nconst CameraDamping = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThan(1));\n\n/** Camera shake (Drei's `CameraShake`). */\nexport const CameraShake = Schema.Struct({\n intensity: NonNegative,\n decay: Schema.Boolean,\n decayRate: NonNegative,\n maxYaw: NonNegative,\n maxPitch: NonNegative,\n maxRoll: NonNegative,\n yawFrequency: NonNegative,\n pitchFrequency: NonNegative,\n rollFrequency: NonNegative,\n trigger: Schema.Finite,\n});\n\n/** A perspective camera. */\nexport const PerspectiveCamera = Schema.TaggedStruct('Perspective', {\n fov: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 180, exclusiveMinimum: true })),\n near: Positive,\n far: Positive,\n position: Vec3,\n lookAt: Vec3,\n damping: CameraDamping,\n autoRotate: Schema.Finite,\n shake: absentAsNull(CameraShake),\n});\n\n/** An orthographic camera; `zoom` is CSS pixels per world unit. */\nexport const OrthographicCamera = Schema.TaggedStruct('Orthographic', {\n zoom: Positive,\n near: Positive,\n far: Positive,\n position: Vec3,\n lookAt: Vec3,\n damping: CameraDamping,\n autoRotate: Schema.Finite,\n shake: absentAsNull(CameraShake),\n});\n\n/** The active camera. */\nexport const Camera = Schema.Union([PerspectiveCamera, OrthographicCamera]);\n\nconst NonNegativeFinite = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\n\n/** A post-processing effect. */\nexport const PostEffect = Schema.Union([\n Schema.TaggedStruct('Bloom', {\n strength: NonNegativeFinite,\n radius: NonNegativeFinite,\n threshold: NonNegativeFinite,\n }),\n Schema.TaggedStruct('Vignette', { offset: NonNegativeFinite, darkness: NonNegativeFinite }),\n Schema.TaggedStruct('Film', { intensity: NonNegativeFinite, grayscale: Schema.Boolean }),\n]);\n\n/** Scene-wide render settings. */\nexport const RenderSettings = Schema.Struct({\n effects: Schema.Array(PostEffect),\n frames: Schema.Literals(['always', 'demand', 'never']),\n resolution: Schema.Finite.check(\n Schema.isBetween({ minimum: 0, maximum: 1, exclusiveMinimum: true }),\n ),\n shadows: Schema.Literals(['off', 'basic', 'percentage', 'soft', 'variance']),\n toneMapping: Schema.Literals(['none', 'linear', 'reinhard', 'cineon', 'aces', 'agx', 'neutral']),\n exposure: Positive,\n colorSpace: Schema.Literals(['srgb', 'linear']),\n});\n\n/** A view of the scene into part of the canvas. */\nexport const View = Schema.Struct({\n key: Schema.String,\n camera: Camera,\n rect: Schema.Struct({\n x: Schema.Finite,\n y: Schema.Finite,\n width: Schema.Finite.check(Schema.isGreaterThan(0)),\n height: Schema.Finite.check(Schema.isGreaterThan(0)),\n }),\n});\n\n/** A scene rendered into a texture lent under `id`. */\nexport const RenderTexture = Schema.Struct({\n id: Schema.String,\n width: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n height: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n camera: Camera,\n background: Schema.NullOr(Rgb),\n children: Schema.Array(SceneNode),\n});\n\n/** A complete scene description. */\n/** A point to show HTML at. */\nexport const Overlay = Schema.Struct({\n key: Schema.String,\n node: Schema.NullOr(Schema.String),\n position: Vec3,\n center: Schema.Boolean,\n distanceFactor: Schema.NullOr(Positive),\n occlude: Schema.Boolean,\n zIndexRange: Schema.Tuple([Schema.Int, Schema.Int]),\n view: Schema.NullOr(Schema.String),\n});\n\n/** Image-based lighting and background. */\nexport const Environment = Schema.Struct({\n map: Schema.NullOr(Schema.String),\n background: Schema.Union([Schema.Boolean, Schema.Literal('only')]),\n backgroundBlurriness: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n backgroundIntensity: NonNegative,\n environmentIntensity: NonNegative,\n});\n\n/** A daylight sky. */\nexport const Sky = Schema.Struct({\n sunPosition: Vec3,\n turbidity: NonNegative,\n rayleigh: NonNegative,\n mieCoefficient: NonNegative,\n mieDirectionalG: UnitInterval,\n clouds: UnitInterval,\n distance: Positive,\n});\n\n/** Soft ground shadows. */\nexport const ContactShadows = Schema.Struct({\n position: Vec3,\n size: Schema.Tuple([Positive, Positive]),\n near: Schema.Finite,\n far: Positive,\n blur: NonNegative,\n smooth: Schema.Boolean,\n opacity: UnitInterval,\n color: Rgb,\n resolution: Schema.Int.check(Schema.isBetween({ minimum: 16, maximum: 4096 })),\n});\n\n/** Immersive presentation. */\n/** An anchor the description places in the scene. */\nexport const XrAnchor = Schema.Struct({ id: Schema.String, position: Vec3, rotation: Vec3 });\n\nexport const Xr = Schema.Struct({\n origin: Vec3,\n heading: Schema.Finite,\n referenceSpace: Schema.Literals(['local-floor', 'local', 'bounded-floor']),\n framebufferScale: Positive,\n hitTest: Schema.Boolean,\n showInputs: Schema.Boolean,\n anchors: Schema.Array(XrAnchor),\n planes: Schema.Boolean,\n meshes: Schema.Boolean,\n domOverlay: Schema.Boolean,\n glide: Schema.NullOr(\n Schema.Struct({\n speed: NonNegative,\n turn: Schema.Literals(['smooth', 'snap']),\n turnSpeed: NonNegative,\n snapDegrees: NonNegative,\n }),\n ),\n});\n\n/** Whether the scene claims the pointer's gestures from the page. */\nexport const Gestures = Schema.Literals(['page', 'scene']);\n\nexport const SceneDescription = Schema.Struct({\n camera: Camera,\n gestures: Gestures,\n views: Schema.Array(View),\n renderTextures: Schema.Array(RenderTexture),\n overlays: Schema.Array(Overlay),\n environment: Schema.NullOr(Environment),\n sky: Schema.NullOr(Sky),\n contactShadows: Schema.NullOr(ContactShadows),\n physics: Schema.NullOr(Physics),\n xr: Schema.NullOr(Xr),\n measure: Schema.Array(Schema.String),\n render: RenderSettings,\n resources: ResourceDefinitions,\n children: Schema.Array(SceneNode),\n});\n\n/** Detail of pointer-leave events: the interactive mesh's key. */\nexport const KeyDetail = Schema.Struct({ key: Schema.String });\n\n/**\n * Where the pointer met an interactive mesh: its key and ancestor path, the world-space\n * hit point, the distance from the camera, the world-space face normal, the texture\n * coordinates and the pointer's world-space ray.\n */\nexport const HitDetail = Schema.Struct({\n key: Schema.String,\n instance: Schema.optionalKey(Schema.String),\n part: Schema.optionalKey(Schema.String),\n view: Schema.optionalKey(Schema.String),\n path: Schema.Array(Schema.String),\n point: Vec3,\n distance: Schema.Finite,\n normal: Vec3,\n uv: Schema.Tuple([Schema.Finite, Schema.Finite]),\n ray: Schema.Struct({ origin: Vec3, direction: Vec3 }),\n});\n\n/** Detail of button events: the hit plus `MouseEvent.button`. */\nexport const ButtonDetail = Schema.Struct({ ...HitDetail.fields, button: Schema.Int });\n\n/** Detail of wheel events: the hit plus `WheelEvent.deltaX` and `deltaY`. */\nexport const WheelDetail = Schema.Struct({\n ...HitDetail.fields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n});\n\n/** Detail of a click that hit no interactive mesh. */\nexport const MissDetail = Schema.Struct({ button: Schema.Int });\n\n/** A world-space ray: an origin and a unit direction. */\nexport const Ray = HitDetail.fields.ray;\n\n/** Detail of drag events: the captured mesh, the pressed button and the pointer's ray. */\nexport const DragDetail = Schema.Struct({ key: Schema.String, button: Schema.Int, ray: Ray });\n\n/** Detail of performance changes: the fps average and the new factor (0 to 1). */\nexport const PerformanceDetail = Schema.Struct({\n fps: Schema.Finite,\n factor: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n});\n\n/** Modifier keys held during an input. */\nexport const Modifiers = Schema.Struct({\n shift: Schema.Boolean,\n control: Schema.Boolean,\n meta: Schema.Boolean,\n alt: Schema.Boolean,\n});\n\nconst regionFields = {\n view: Schema.optionalKey(Schema.String),\n width: Schema.Finite,\n height: Schema.Finite,\n x: Schema.Finite,\n y: Schema.Finite,\n};\n\n/** A drag, wheel or pinch on the canvas: distances in CSS pixels since the last one. */\nexport const Gesture = Schema.Union([\n Schema.TaggedStruct('Drag', {\n button: Schema.Int,\n modifiers: Modifiers,\n key: Schema.optionalKey(Schema.String),\n ...regionFields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n Schema.TaggedStruct('Wheel', {\n modifiers: Modifiers,\n ...regionFields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n Schema.TaggedStruct('Pinch', {\n ...regionFields,\n scale: Schema.Finite,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n]);\n\n/**\n * Detail of collision events: the two bodies' keys (and instances', for bodies on\n * instances), and whether they began touching.\n */\nexport const CollisionDetail = Schema.Struct({\n a: Schema.String,\n aInstance: Schema.optionalKey(Schema.String),\n aPart: Schema.optionalKey(Schema.String),\n b: Schema.String,\n bInstance: Schema.optionalKey(Schema.String),\n bPart: Schema.optionalKey(Schema.String),\n started: Schema.Boolean,\n});\n\nconst XrHand = Schema.Literals(['left', 'right', 'none']);\n\n/** Detail of XR stick events: a thumbstick pushed past halfway, or let back. */\nexport const XrStickDetail = Schema.Struct({\n hand: XrHand,\n direction: Schema.Literals(['center', 'left', 'right', 'forward', 'back']),\n});\n\n/** Detail of XR button events: a controller button pressed or released. */\nexport const XrButtonDetail = Schema.Struct({\n hand: XrHand,\n button: Schema.Literals(['trigger', 'squeeze', 'touchpad', 'thumbstick', 'primary', 'secondary']),\n pressed: Schema.Boolean,\n});\n\n/** Detail of XR moved events: where gliding left the player. */\nexport const XrMovedDetail = Schema.Struct({ origin: Vec3, heading: Schema.Finite });\n\n/** Detail of XR surface events: in AR, where a select met a real surface. */\nexport const XrSurfaceDetail = Schema.Struct({ hand: XrHand, point: Vec3, normal: Vec3 });\n\n/** A detected plane, in the scene's space. */\nexport const XrPlane = Schema.Struct({\n id: Schema.String,\n orientation: Schema.Literals(['horizontal', 'vertical']),\n label: Schema.String,\n position: Vec3,\n rotation: Vec3,\n polygon: Schema.Array(Vec3),\n});\n\n/** Detail of XR planes events: every plane the session has detected, as it is now. */\nexport const XrPlanesDetail = Schema.Struct({ planes: Schema.Array(XrPlane) });\n\n/** A detected mesh, in the scene's space: its geometry is lent for `xrMesh(id)`. */\nexport const XrMesh = Schema.Struct({\n id: Schema.String,\n label: Schema.String,\n position: Vec3,\n rotation: Vec3,\n});\n\n/** Detail of XR meshes events: every mesh the session has detected, as it is now. */\nexport const XrMeshesDetail = Schema.Struct({ meshes: Schema.Array(XrMesh) });\n\n/** Detail of contact force events: the two bodies, and how hard they pushed. */\nexport const ContactForceDetail = Schema.Struct({\n a: Schema.String,\n aInstance: Schema.optionalKey(Schema.String),\n aPart: Schema.optionalKey(Schema.String),\n b: Schema.String,\n bInstance: Schema.optionalKey(Schema.String),\n bPart: Schema.optionalKey(Schema.String),\n totalForce: Vec3,\n totalForceMagnitude: Schema.Finite,\n maxForceDirection: Vec3,\n maxForceMagnitude: Schema.Finite,\n});\n\nconst Rect = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite, Schema.Finite]);\n\n/** Detail of label measured events: a label's laid-out size in its own units. */\nexport const LabelMeasuredDetail = Schema.Struct({\n key: Schema.String,\n block: Rect,\n visible: Rect,\n});\n\n/** Detail of measured events: a node's world bounding box. */\nexport const MeasuredDetail = Schema.Struct({ key: Schema.String, min: Vec3, max: Vec3 });\n\n/** Detail of auto-rotated events: where a camera turning by itself got to. */\nexport const AutoRotatedDetail = Schema.Struct({\n view: Schema.optionalKey(Schema.String),\n position: Vec3,\n});\n\n/** Detail of gesture events. */\nexport const GestureDetail = Schema.Struct({ gesture: Gesture });\n\n/** A pointer interaction with an interactive mesh, or a miss. */\nexport const SceneEvent = Schema.Union([\n Schema.TaggedStruct('PointerEnter', HitDetail.fields),\n Schema.TaggedStruct('PointerLeave', KeyDetail.fields),\n Schema.TaggedStruct('PointerMove', HitDetail.fields),\n Schema.TaggedStruct('PointerDown', ButtonDetail.fields),\n Schema.TaggedStruct('PointerUp', ButtonDetail.fields),\n Schema.TaggedStruct('Click', ButtonDetail.fields),\n Schema.TaggedStruct('DoubleClick', ButtonDetail.fields),\n Schema.TaggedStruct('ContextMenu', HitDetail.fields),\n Schema.TaggedStruct('Wheel', WheelDetail.fields),\n Schema.TaggedStruct('PointerMissed', MissDetail.fields),\n Schema.TaggedStruct('Drag', DragDetail.fields),\n Schema.TaggedStruct('DragEnd', DragDetail.fields),\n Schema.TaggedStruct('Gesture', GestureDetail.fields),\n Schema.TaggedStruct('AutoRotated', AutoRotatedDetail.fields),\n Schema.TaggedStruct('Collision', CollisionDetail.fields),\n Schema.TaggedStruct('Measured', MeasuredDetail.fields),\n Schema.TaggedStruct('LabelMeasured', LabelMeasuredDetail.fields),\n Schema.TaggedStruct('ContactForce', ContactForceDetail.fields),\n Schema.TaggedStruct('XrStick', XrStickDetail.fields),\n Schema.TaggedStruct('XrButton', XrButtonDetail.fields),\n Schema.TaggedStruct('XrSurface', XrSurfaceDetail.fields),\n Schema.TaggedStruct('XrMoved', XrMovedDetail.fields),\n Schema.TaggedStruct('XrPlanes', XrPlanesDetail.fields),\n Schema.TaggedStruct('XrMeshes', XrMeshesDetail.fields),\n Schema.TaggedStruct('PerformanceChanged', PerformanceDetail.fields),\n]);\n\n/** Why a scene description was rejected. */\nexport const DescriptionError = Schema.Union([\n Schema.TaggedStruct('DuplicateKey', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateResourceId', {\n resource: Schema.Literals(['geometry', 'material']),\n id: Schema.String,\n }),\n Schema.TaggedStruct('UnknownSharedGeometry', { nodeKey: Schema.String, id: Schema.String }),\n Schema.TaggedStruct('UnknownSharedMaterial', { nodeKey: Schema.String, id: Schema.String }),\n Schema.TaggedStruct('DuplicateInstanceKey', { nodeKey: Schema.String, key: Schema.String }),\n Schema.TaggedStruct('UnknownBehaviour', { nodeKey: Schema.String, name: Schema.String }),\n Schema.TaggedStruct('DuplicateViewKey', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateOverlayKey', { key: Schema.String }),\n Schema.TaggedStruct('UnknownOverlayNode', { key: Schema.String, node: Schema.String }),\n Schema.TaggedStruct('UnknownOverlayView', { key: Schema.String, view: Schema.String }),\n Schema.TaggedStruct('UnknownMeasuredNode', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateJointKey', { key: Schema.String }),\n Schema.TaggedStruct('UnknownJointBody', { joint: Schema.String, body: Schema.String }),\n Schema.TaggedStruct('DuplicateRenderTextureId', { id: Schema.String }),\n]);\n"
10
+ "/**\n * Scenes saved and loaded as JSON (roadmap, \"Beyond parity\" 4): a description in a\n * small versioned envelope, written and read through `SceneSchema`, so a file is either\n * a well-typed description or a typed failure saying where it is not. Fields added since\n * a file was written decode at their defaults, as stored descriptions always have.\n *\n * Decoding checks shapes, not the scene's own rules: duplicate keys and unknown\n * behaviours are rejected whole when the scene is applied (`InvalidScene`), against the\n * behaviours the app has registered.\n *\n * @module\n */\nimport { Result, Schema } from 'effect';\n\nimport type { SceneDescription } from '../kernel/index.ts';\nimport { UnreadableScene } from './errors.ts';\nimport * as SceneSchema from './SceneSchema.ts';\n\n/**\n * A saved scene: what it is (`format`), the envelope's `version` (a later one decodes\n * older files, migrating them), and the description.\n */\nexport const SceneFile = Schema.Struct({\n format: Schema.Literal('effect-three/scene'),\n version: Schema.Literal(1),\n scene: SceneSchema.SceneDescription,\n});\nexport type SceneFile = typeof SceneFile.Type;\n\nconst asJson = Schema.fromJsonString(SceneFile, { space: 2 });\n\n/** The scene as the text of a scene file, indented for reading and diffing. */\nexport const save = (scene: SceneDescription): string =>\n Schema.encodeSync(asJson)(SceneFile.make({ format: 'effect-three/scene', version: 1, scene }));\n\nconst unreadable = (error: Schema.SchemaError) => new UnreadableScene({ issue: error.message });\n\n/**\n * The scene a file's text describes, or why it cannot be read: a `Result`, which an\n * Effect can `yield*` directly.\n */\nexport const read = (text: string): Result.Result<SceneDescription, UnreadableScene> =>\n Schema.decodeUnknownResult(asJson)(text).pipe(\n Result.map((file) => file.scene),\n Result.mapError(unreadable),\n );\n",
11
+ "/**\n * A running scene: a kernel scene graph, a renderer and a frame subscription, all owned\n * by the caller's `Scope`. Closing the scope stops the frame loop, then releases the\n * event queue, the renderer and every resource the scene acquired, in that order.\n *\n * @module\n */\nimport { Clock, Effect, Exit, Match, Option, Queue, Result, Scope, Stream } from 'effect';\n\nimport {\n createSceneClock,\n createSceneGraph,\n type Behaviour,\n createFramePacer,\n createSceneLoop,\n type Op,\n type OverlayPlacement,\n type LabelEngine,\n type PhysicsEngine,\n type ReconcileResult,\n type RendererFactory,\n type SceneDescription,\n type SceneEvent,\n type SceneClock,\n type SceneGraph,\n type SceneRenderer,\n type Viewport,\n} from '../kernel/index.ts';\nimport { InvalidScene, RendererUnavailable } from './errors.ts';\nimport { FrameSource } from './FrameSource.ts';\nimport { ResourceRegistry } from './ResourceRegistry.ts';\n\nexport type SceneRuntimeOptions = {\n readonly scene: SceneDescription;\n readonly renderer: RendererFactory;\n readonly viewport: Viewport;\n /** Events kept when the consumer falls behind; older events are dropped. Default 64. */\n readonly eventCapacity?: number;\n /** Behaviours nodes may name, beside the built-in ones. */\n readonly behaviours?: Readonly<Record<string, Behaviour>>;\n /** The physics engine for meshes with a `body`; without one, bodies stay put. */\n readonly physics?: PhysicsEngine | undefined;\n /** Draws `label` nodes (distance-field text); without one, labels are empty. */\n readonly labels?: LabelEngine | undefined;\n /** Receives where the overlays are after each drawn frame, to move their HTML there. */\n readonly placeOverlays?: (placements: ReadonlyArray<OverlayPlacement>) => void;\n};\n\nconst defaultEventCapacity = 64;\nconst noBehaviours: Readonly<Record<string, Behaviour>> = {};\nconst ignorePlacements = (_placements: ReadonlyArray<OverlayPlacement>): void => undefined;\nconst nanosPerMillisecond = 1_000_000;\nconst nanosPerSecond = 1_000_000_000;\n\nconst toResult = (result: ReconcileResult): Result.Result<ReadonlyArray<Op>, InvalidScene> =>\n Match.valueTags(result, {\n Applied: (applied) => Result.succeed(applied.ops),\n Invalid: ({ error }) => Result.fail(new InvalidScene({ error })),\n });\n\nconst applyViewport = (graph: SceneGraph, renderer: SceneRenderer, viewport: Viewport): void => {\n graph.resize(viewport.width, viewport.height);\n renderer.setViewport(viewport);\n};\n\n/** The engines a scene graph hands work to, and the renderer whose kit shades it. */\ntype Engines = Pick<SceneRuntimeOptions, 'physics' | 'labels' | 'renderer'>;\n\nconst sceneGraph =\n (\n registry: ResourceRegistry['Service'],\n behaviours: Readonly<Record<string, Behaviour>>,\n engines: Engines,\n ) =>\n () =>\n createSceneGraph({\n store: registry.store,\n behaviours,\n physics: engines.physics,\n labels: engines.labels,\n kit: engines.renderer.kit,\n });\n\n/**\n * Reconciles at the current scene time. An idle scene draws no frames, so its last tick\n * can be long past; catching up first makes new transitions start now, not back then.\n */\nconst reconcileNow = (graph: SceneGraph, sceneClock: SceneClock, scene: SceneDescription) => {\n graph.tick(sceneClock.elapsedSeconds());\n return graph.reconcile(scene);\n};\n\nconst viewportChange = (graph: SceneGraph, renderer: SceneRenderer, viewport: Viewport) => () =>\n applyViewport(graph, renderer, viewport);\n\nconst animationChange = (sceneClock: SceneClock, graph: SceneGraph, animating: boolean) => () => {\n sceneClock.setAnimating(animating);\n graph.setAnimating(animating);\n};\n\nconst acquireGraph = (\n registry: ResourceRegistry['Service'],\n behaviours: Readonly<Record<string, Behaviour>>,\n engines: Engines,\n) => {\n const create = Effect.sync(sceneGraph(registry, behaviours, engines));\n return Effect.acquireRelease(create, (graph) => Effect.sync(graph.dispose));\n};\n\nconst acquireRenderer = (factory: RendererFactory) => {\n const create = Effect.try({\n try: factory.create,\n catch: (cause) => new RendererUnavailable({ cause }),\n });\n return Effect.acquireRelease(create, (renderer) => Effect.sync(renderer.dispose));\n};\n\n/** Waits for a renderer that starts asynchronously (WebGPU); a failed start is unavailable. */\nconst awaitReady = (renderer: SceneRenderer) =>\n Option.match(Option.fromNullishOr(renderer.ready), {\n onNone: () => Effect.void,\n onSome: (ready) =>\n Effect.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) }),\n });\n\nconst invalidationListening = (graph: SceneGraph, onInvalidated: () => void) => () =>\n graph.onInvalidated(onInvalidated);\n\nconst acquireInvalidation = (graph: SceneGraph, onInvalidated: () => void) => {\n const listen = Effect.sync(invalidationListening(graph, onInvalidated));\n return Effect.acquireRelease(listen, Effect.sync);\n};\n\nconst acquireEvents = (capacity: number) => {\n const create = Queue.sliding<SceneEvent>(capacity);\n return Effect.acquireRelease(create, Queue.shutdown);\n};\n\nfunction* startScene(options: SceneRuntimeOptions) {\n const registry = yield* ResourceRegistry;\n const frames = yield* FrameSource;\n const clock = yield* Clock.Clock;\n\n const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);\n const startupOps = yield* Effect.fromResult(toResult(graph.reconcile(options.scene)));\n const renderer = yield* acquireRenderer(options.renderer);\n yield* awaitReady(renderer);\n applyViewport(graph, renderer, options.viewport);\n const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);\n\n const sceneClock = createSceneClock(\n () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond,\n );\n const loop = createSceneLoop({\n graph,\n renderer,\n elapsedSeconds: sceneClock.elapsedSeconds,\n emit: (event) => {\n Queue.offerUnsafe(events, event);\n },\n now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,\n placeOverlays: options.placeOverlays ?? ignorePlacements,\n });\n yield* Effect.addFinalizer(() => Effect.sync(loop.dispose));\n const pacer = createFramePacer(loop);\n pacer.attach(yield* frames.subscribe(pacer.frame));\n yield* acquireInvalidation(graph, pacer.wake);\n\n return {\n /** The hosted scene graph, for inspection. */\n graph,\n /** The operations that built the initial scene. */\n startupOps,\n /**\n * Applies a new description and returns the operations it took. Structurally equal\n * descriptions return no operations and cost no host changes.\n */\n update: (scene: SceneDescription) =>\n Effect.suspend(() => Effect.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),\n /** Resizes the camera aspect and the renderer's drawing surface. */\n resize: (viewport: Viewport) => Effect.sync(viewportChange(graph, renderer, viewport)),\n /** Freezes (`false`) or resumes (`true`) behaviours; frozen, transitions land at once. */\n setAnimating: (animating: boolean) =>\n Effect.sync(animationChange(sceneClock, graph, animating)),\n /**\n * Draws one frame now, whatever the frame mode: React Three Fiber's `advance`, for\n * `frames: 'never'` scenes and frame-exact capture.\n */\n advance: Effect.sync(pacer.advance),\n /**\n * Draws one frame now, synchronously, for a host's own frame source to call directly:\n * an immersive (WebXR) session's animation loop.\n */\n drawNow: pacer.advance,\n /** Routes pointer input. Synchronous, so DOM listeners can call it directly. */\n pointer: loop.pointer,\n /** Routes XR input: aims, selects, sticks, buttons and surfaces. Synchronous, as `pointer`. */\n xrInput: loop.xrInput,\n /** Scene events, newest kept when the consumer falls behind. */\n events: Stream.fromQueue(events),\n /** Removes and returns every pending event without waiting. */\n drainEvents: Queue.clear(events),\n };\n}\n\n// Startup is atomic: everything is acquired into a child of the caller's scope, which is\n// closed immediately if startup fails or is interrupted. Otherwise a partial scene would\n// stay allocated until the caller's scope closed (under Foldkit: until unmount).\nfunction* startAtomically(options: SceneRuntimeOptions) {\n const parent = yield* Effect.scope;\n const child = yield* Scope.fork(parent);\n return yield* Effect.gen(() => startScene(options)).pipe(\n Scope.provide(child),\n Effect.onError((cause) => Scope.close(child, Exit.failCause(cause))),\n );\n}\n\n/**\n * Starts a scene in the current scope. Fails with `InvalidScene` if the initial\n * description is rejected and `RendererUnavailable` if the renderer can't be created.\n * A failed or interrupted start releases everything it acquired before returning.\n */\nexport const make = (options: SceneRuntimeOptions) => {\n const program = Effect.gen(() => startAtomically(options));\n return program.pipe(Effect.withSpan('effect-three/SceneRuntime.make'));\n};\n\n/** The handle `make` returns. */\nexport type SceneHandle = Effect.Success<ReturnType<typeof make>>;\n"
10
12
  ],
11
- "mappings": "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",
12
- "debugId": "B67B56D9B9035A5364756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "95B403F31DB6CB4364756E2164756E21",
13
15
  "names": []
14
16
  }
@@ -13,7 +13,7 @@
13
13
  import { type Scene } from 'three';
14
14
  import { type BodySource } from './bodySources.ts';
15
15
  import type { Physics, Vec3 } from './description.ts';
16
- import type { PhysicsEngine } from './physics.ts';
16
+ import { type PhysicsEngine } from './physics.ts';
17
17
  /** Two bodies began (`started`) or stopped touching: their nodes' keys, and instances'. */
18
18
  export type BodyCollision = {
19
19
  readonly a: string;
@@ -42,6 +42,18 @@ export type BodyContactForce = {
42
42
  readonly maxForceDirection: Vec3;
43
43
  readonly maxForceMagnitude: number;
44
44
  };
45
+ /**
46
+ * A world driven by `physics({ until })` has reached that step and waits: its run, what
47
+ * it has done (its step count since it was made), and a checksum of every body's pose
48
+ * there, so peers that should agree can check that they do.
49
+ */
50
+ export type PhysicsReached = {
51
+ readonly run: number;
52
+ readonly step: number;
53
+ readonly checksum: string;
54
+ /** At `physics({ snapshotAt })`: the world there, for another to start `from`. */
55
+ readonly snapshot?: string;
56
+ };
45
57
  export type BodyHost = {
46
58
  /** Brings the world in line with the description's physics and its bodies. */
47
59
  readonly sync: (physics: Physics | null, sources: Iterable<BodySource>) => void;
@@ -53,6 +65,13 @@ export type BodyHost = {
53
65
  readonly drainCollisions: () => ReadonlyArray<BodyCollision>;
54
66
  /** Contact forces over their thresholds since the last call. */
55
67
  readonly drainContactForces: () => ReadonlyArray<BodyContactForce>;
68
+ /** Steps the Model has asked for and the world has reached since the last call. */
69
+ readonly drainReached: () => ReadonlyArray<PhysicsReached>;
70
+ /**
71
+ * Whether a world on `until` still owes steps, or a report: it needs frames even when
72
+ * nothing else moves, and even under reduced motion, as other peers wait on it.
73
+ */
74
+ readonly owesSteps: () => boolean;
56
75
  readonly dispose: () => void;
57
76
  };
58
77
  /** Creates the body host for a scene. Without an engine, bodies are ignored. */
@@ -1 +1 @@
1
- {"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../../src/kernel/bodies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAe,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAY,aAAa,EAAoC,MAAM,cAAc,CAAC;AAG9F,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAYF,MAAM,MAAM,QAAQ,GAAG;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAChF,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7D,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7D,gEAAgE;IAChE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAwEF,gFAAgF;AAChF,eAAO,MAAM,cAAc,WAAY,aAAa,GAAG,SAAS,SAAS,KAAK,KAAG,QAgMhF,CAAC"}
1
+ {"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../../src/kernel/bodies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAe,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAGL,KAAK,aAAa,EAMnB,MAAM,cAAc,CAAC;AAGtB,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAYF,MAAM,MAAM,QAAQ,GAAG;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAChF,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7D,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7D,gEAAgE;IAChE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnE,mFAAmF;IACnF,QAAQ,CAAC,YAAY,EAAE,MAAM,aAAa,CAAC,cAAc,CAAC,CAAC;IAC3D;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAuHF,gFAAgF;AAChF,eAAO,MAAM,cAAc,WAAY,aAAa,GAAG,SAAS,SAAS,KAAK,KAAG,QA8YhF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Camera, Vec3 } from './description.ts';
2
+ /** A corner of the box, in the canvas's normalised coordinates: −1 to 1, y up. */
3
+ export type BoxCorner = {
4
+ readonly x: number;
5
+ readonly y: number;
6
+ };
7
+ /** Something that can be selected: its key, and the point that must fall in the box. */
8
+ export type Selectable = {
9
+ readonly key: string;
10
+ readonly at: Vec3;
11
+ };
12
+ /** The canvas's size in CSS pixels, which sets the camera's aspect (or ortho frustum). */
13
+ export type CanvasSize = {
14
+ readonly width: number;
15
+ readonly height: number;
16
+ };
17
+ /**
18
+ * The keys of `candidates` whose points fall inside the box from corner `from` to corner
19
+ * `to`, seen through `camera` on a canvas of `size`, in the order given.
20
+ */
21
+ export declare const boxSelect: (camera: Camera, size: CanvasSize, from: BoxCorner, to: BoxCorner, candidates: ReadonlyArray<Selectable>) => ReadonlyArray<string>;
22
+ //# sourceMappingURL=boxSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boxSelect.d.ts","sourceRoot":"","sources":["../../src/kernel/boxSelect.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAErD,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,wFAAwF;AACxF,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC;AAErE,0FAA0F;AAC1F,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA4B7E;;;GAGG;AACH,eAAO,MAAM,SAAS,WACZ,MAAM,QACR,UAAU,QACV,SAAS,MACX,SAAS,cACD,aAAa,CAAC,UAAU,CAAC,KACpC,aAAa,CAAC,MAAM,CAStB,CAAC"}