@iwsdk/core 0.5.3 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +22 -1
  2. package/dist/asset/asset-manager.d.ts.map +1 -1
  3. package/dist/asset/asset-manager.js +3 -2
  4. package/dist/asset/asset-manager.js.map +1 -1
  5. package/dist/asset/cache-manager.js.map +1 -1
  6. package/dist/asset/loaders/audio-loader.js.map +1 -1
  7. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  8. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  9. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  10. package/dist/asset/loaders/texture-loader.js.map +1 -1
  11. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  12. package/dist/audio/audio-pool.js.map +1 -1
  13. package/dist/audio/audio-system.js.map +1 -1
  14. package/dist/audio/audio-utils.js.map +1 -1
  15. package/dist/audio/audio.js.map +1 -1
  16. package/dist/camera/camera-source.js.map +1 -1
  17. package/dist/camera/camera-system.d.ts +7 -3
  18. package/dist/camera/camera-system.d.ts.map +1 -1
  19. package/dist/camera/camera-system.js +81 -50
  20. package/dist/camera/camera-system.js.map +1 -1
  21. package/dist/camera/camera-utils.d.ts +5 -0
  22. package/dist/camera/camera-utils.d.ts.map +1 -1
  23. package/dist/camera/camera-utils.js +8 -1
  24. package/dist/camera/camera-utils.js.map +1 -1
  25. package/dist/camera/types.js.map +1 -1
  26. package/dist/depth/depth-occludable.js.map +1 -1
  27. package/dist/depth/depth-sensing-system.d.ts +3 -0
  28. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  29. package/dist/depth/depth-sensing-system.js +55 -1
  30. package/dist/depth/depth-sensing-system.js.map +1 -1
  31. package/dist/depth/depth-textures.js.map +1 -1
  32. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  33. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  34. package/dist/ecs/builtin-components.js.map +1 -1
  35. package/dist/ecs/component-editor-metadata.js.map +1 -1
  36. package/dist/ecs/component-manifest.js.map +1 -1
  37. package/dist/ecs/entity.js.map +1 -1
  38. package/dist/ecs/system.js.map +1 -1
  39. package/dist/ecs/world.d.ts +2 -0
  40. package/dist/ecs/world.d.ts.map +1 -1
  41. package/dist/ecs/world.js +4 -0
  42. package/dist/ecs/world.js.map +1 -1
  43. package/dist/environment/dome-gradient.js.map +1 -1
  44. package/dist/environment/dome-texture.js.map +1 -1
  45. package/dist/environment/environment-system.js.map +1 -1
  46. package/dist/environment/gradient-environment.js.map +1 -1
  47. package/dist/environment/ibl-gradient.js.map +1 -1
  48. package/dist/environment/ibl-texture.js.map +1 -1
  49. package/dist/environment/scene-ar-environment.js.map +1 -1
  50. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  51. package/dist/environment-raycast/raycast-target.js.map +1 -1
  52. package/dist/grab/distance-grabbable.d.ts +5 -0
  53. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  54. package/dist/grab/distance-grabbable.js +5 -0
  55. package/dist/grab/distance-grabbable.js.map +1 -1
  56. package/dist/grab/grab-helpers.js.map +1 -1
  57. package/dist/grab/grab-system.js.map +1 -1
  58. package/dist/grab/grab-warnings.js.map +1 -1
  59. package/dist/grab/grabbed.js.map +1 -1
  60. package/dist/grab/handles.d.ts +6 -0
  61. package/dist/grab/handles.d.ts.map +1 -1
  62. package/dist/grab/handles.js +46 -12
  63. package/dist/grab/handles.js.map +1 -1
  64. package/dist/grab/index.js.map +1 -1
  65. package/dist/grab/one-hand-grabbable.d.ts +5 -0
  66. package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
  67. package/dist/grab/one-hand-grabbable.js +5 -0
  68. package/dist/grab/one-hand-grabbable.js.map +1 -1
  69. package/dist/grab/pointer-events-patch.js.map +1 -1
  70. package/dist/grab/two-hands-grabbable.d.ts +5 -0
  71. package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
  72. package/dist/grab/two-hands-grabbable.js +5 -0
  73. package/dist/grab/two-hands-grabbable.js.map +1 -1
  74. package/dist/index.js +4 -3
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/browser-camera.js.map +1 -1
  77. package/dist/init/index.d.ts +2 -2
  78. package/dist/init/index.d.ts.map +1 -1
  79. package/dist/init/player-camera.js.map +1 -1
  80. package/dist/init/session-grant.d.ts +34 -0
  81. package/dist/init/session-grant.d.ts.map +1 -0
  82. package/dist/init/session-grant.js +89 -0
  83. package/dist/init/session-grant.js.map +1 -0
  84. package/dist/init/world-initializer.d.ts +87 -4
  85. package/dist/init/world-initializer.d.ts.map +1 -1
  86. package/dist/init/world-initializer.js +45 -41
  87. package/dist/init/world-initializer.js.map +1 -1
  88. package/dist/init/xr.d.ts +19 -0
  89. package/dist/init/xr.d.ts.map +1 -1
  90. package/dist/init/xr.js +136 -41
  91. package/dist/init/xr.js.map +1 -1
  92. package/dist/input/canvas-pointer-system.d.ts +2 -0
  93. package/dist/input/canvas-pointer-system.d.ts.map +1 -1
  94. package/dist/input/canvas-pointer-system.js +33 -13
  95. package/dist/input/canvas-pointer-system.js.map +1 -1
  96. package/dist/input/input-actions.js.map +1 -1
  97. package/dist/input/input-manager.js.map +1 -1
  98. package/dist/input/input-system.d.ts.map +1 -1
  99. package/dist/input/input-system.js +5 -2
  100. package/dist/input/input-system.js.map +1 -1
  101. package/dist/input/state-tags.js.map +1 -1
  102. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  103. package/dist/input/stateful-keyboard.js.map +1 -1
  104. package/dist/layers/xr-cylinder-layer.d.ts +2 -1
  105. package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
  106. package/dist/layers/xr-cylinder-layer.js +2 -1
  107. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  108. package/dist/layers/xr-layer-init.d.ts +19 -0
  109. package/dist/layers/xr-layer-init.d.ts.map +1 -0
  110. package/dist/layers/xr-layer-init.js +20 -0
  111. package/dist/layers/xr-layer-init.js.map +1 -0
  112. package/dist/layers/xr-layer-state.js.map +1 -1
  113. package/dist/layers/xr-layer-system.d.ts +41 -1
  114. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  115. package/dist/layers/xr-layer-system.js +506 -132
  116. package/dist/layers/xr-layer-system.js.map +1 -1
  117. package/dist/layers/xr-layer-transform.d.ts +18 -0
  118. package/dist/layers/xr-layer-transform.d.ts.map +1 -0
  119. package/dist/layers/xr-layer-transform.js +115 -0
  120. package/dist/layers/xr-layer-transform.js.map +1 -0
  121. package/dist/layers/xr-quad-layer.d.ts +2 -1
  122. package/dist/layers/xr-quad-layer.d.ts.map +1 -1
  123. package/dist/layers/xr-quad-layer.js +2 -1
  124. package/dist/layers/xr-quad-layer.js.map +1 -1
  125. package/dist/level/level-component-applier.d.ts +2 -0
  126. package/dist/level/level-component-applier.d.ts.map +1 -1
  127. package/dist/level/level-component-applier.js +24 -5
  128. package/dist/level/level-component-applier.js.map +1 -1
  129. package/dist/level/level-player-rig.js.map +1 -1
  130. package/dist/level/level-root.js.map +1 -1
  131. package/dist/level/level-scene-environment.js.map +1 -1
  132. package/dist/level/level-scene-json-importer.js.map +1 -1
  133. package/dist/level/level-scene-material.js.map +1 -1
  134. package/dist/level/level-scene-object.js.map +1 -1
  135. package/dist/level/level-scene-primitive.js.map +1 -1
  136. package/dist/level/level-system.js.map +1 -1
  137. package/dist/level/level-tag.js.map +1 -1
  138. package/dist/lighting/light-binding.js.map +1 -1
  139. package/dist/lighting/light-components.js.map +1 -1
  140. package/dist/lighting/light-system.js.map +1 -1
  141. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  142. package/dist/locomotion/locomotion-environment.js.map +1 -1
  143. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  144. package/dist/locomotion/locomotion.js.map +1 -1
  145. package/dist/locomotion/materials/line.js.map +1 -1
  146. package/dist/locomotion/slide.js.map +1 -1
  147. package/dist/locomotion/teleport.js.map +1 -1
  148. package/dist/locomotion/turn.js.map +1 -1
  149. package/dist/mcp/ecs-debug-tools.d.ts +4 -1
  150. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  151. package/dist/mcp/ecs-debug-tools.js +113 -10
  152. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  153. package/dist/mcp/index.d.ts +1 -0
  154. package/dist/mcp/index.d.ts.map +1 -1
  155. package/dist/mcp/mcp-runtime.d.ts +2 -0
  156. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  157. package/dist/mcp/mcp-runtime.js +41 -0
  158. package/dist/mcp/mcp-runtime.js.map +1 -1
  159. package/dist/mcp/scene-tools.js.map +1 -1
  160. package/dist/mcp/ui-debug-tools.d.ts +56 -0
  161. package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
  162. package/dist/mcp/ui-debug-tools.js +412 -0
  163. package/dist/mcp/ui-debug-tools.js.map +1 -0
  164. package/dist/physics/index.js +1 -1
  165. package/dist/physics/physics-runtime.d.ts +22 -0
  166. package/dist/physics/physics-runtime.d.ts.map +1 -0
  167. package/dist/physics/physics-runtime.js +423 -0
  168. package/dist/physics/physics-runtime.js.map +1 -0
  169. package/dist/physics/physics-system.d.ts +84 -108
  170. package/dist/physics/physics-system.d.ts.map +1 -1
  171. package/dist/physics/physics-system.js +686 -555
  172. package/dist/physics/physics-system.js.map +1 -1
  173. package/dist/physics/physics-transport.d.ts +20 -0
  174. package/dist/physics/physics-transport.d.ts.map +1 -0
  175. package/dist/physics/physics-transport.js +111 -0
  176. package/dist/physics/physics-transport.js.map +1 -0
  177. package/dist/physics/physics-worker-protocol.d.ts +144 -0
  178. package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
  179. package/dist/physics/physics-worker-protocol.js +41 -0
  180. package/dist/physics/physics-worker-protocol.js.map +1 -0
  181. package/dist/physics/physics-worker-utils.d.ts +8 -0
  182. package/dist/physics/physics-worker-utils.d.ts.map +1 -0
  183. package/dist/physics/physics-worker-utils.js +12 -0
  184. package/dist/physics/physics-worker-utils.js.map +1 -0
  185. package/dist/physics/physics-worker.d.ts +8 -0
  186. package/dist/physics/physics-worker.d.ts.map +1 -0
  187. package/dist/physics/physics-worker.js +66 -0
  188. package/dist/physics/physics-worker.js.map +1 -0
  189. package/dist/physics/physicsBody.js.map +1 -1
  190. package/dist/physics/physicsManipulation.js.map +1 -1
  191. package/dist/physics/physicsShape.js.map +1 -1
  192. package/dist/physics/utils.js.map +1 -1
  193. package/dist/project/normalize.js +7 -1
  194. package/dist/project/normalize.js.map +1 -1
  195. package/dist/project/paths.js.map +1 -1
  196. package/dist/project/types.d.ts +7 -1
  197. package/dist/project/types.d.ts.map +1 -1
  198. package/dist/project/types.js.map +1 -1
  199. package/dist/project/validation.js +36 -2
  200. package/dist/project/validation.js.map +1 -1
  201. package/dist/runtime/three.js.map +1 -1
  202. package/dist/scene-understanding/anchor.js.map +1 -1
  203. package/dist/scene-understanding/mesh.js.map +1 -1
  204. package/dist/scene-understanding/plane.js.map +1 -1
  205. package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
  206. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  207. package/dist/scene-understanding/scene-understanding-system.js +391 -106
  208. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  209. package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
  210. package/dist/transform/synced-euler.js.map +1 -1
  211. package/dist/transform/synced-quaternion.js.map +1 -1
  212. package/dist/transform/synced-vector3.js.map +1 -1
  213. package/dist/transform/transform-component.js.map +1 -1
  214. package/dist/transform/transform-utils.js.map +1 -1
  215. package/dist/transform/transform.js.map +1 -1
  216. package/dist/ui/document.js.map +1 -1
  217. package/dist/ui/follow-component.js.map +1 -1
  218. package/dist/ui/follow.d.ts.map +1 -1
  219. package/dist/ui/follow.js +0 -1
  220. package/dist/ui/follow.js.map +1 -1
  221. package/dist/ui/panel-components.js.map +1 -1
  222. package/dist/ui/screenspace-component.js.map +1 -1
  223. package/dist/ui/screenspace.js.map +1 -1
  224. package/dist/ui/ui.js.map +1 -1
  225. package/dist/ui/uikitml-asset.js.map +1 -1
  226. package/dist/ui/uikitml.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.d.ts.map +1 -1
  229. package/dist/version.js +1 -1
  230. package/dist/version.js.map +1 -1
  231. package/dist/visibility/visibility-component.js.map +1 -1
  232. package/dist/visibility/visibility.js.map +1 -1
  233. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"xr-layer-system.js","sources":["../../src/layers/xr-layer-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xr-layer-system.js","sources":["../../src/layers/xr-layer-system.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport {\n AddEquation,\n BackSide,\n Color,\n CustomBlending,\n CylinderGeometry,\n DepthFormat,\n DepthStencilFormat,\n DepthTexture,\n FrontSide,\n Mesh,\n MeshBasicMaterial,\n Matrix4,\n Object3D,\n PlaneGeometry,\n Quaternion,\n RGBAFormat,\n SRGBColorSpace,\n UnsignedByteType,\n UnsignedInt248Type,\n UnsignedIntType,\n Vector3,\n WebGLRenderTarget,\n ZeroFactor,\n} from '../runtime/index.js';\nimport { XRCylinderLayer } from './xr-cylinder-layer.js';\nimport { createQuadLayerInit } from './xr-layer-init.js';\nimport { XRLayerState } from './xr-layer-state.js';\nimport {\n isValidCylinderLayerAngle,\n resolveCylinderLayerDimensions,\n resolveLayerReferencePose,\n resolveQuadLayerDimensions,\n} from './xr-layer-transform.js';\nimport { XRQuadLayer } from './xr-quad-layer.js';\n\nexport { XRLayerState } from './xr-layer-state.js';\n\nconst _position = new Vector3();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\nconst _configuration = new Vector3();\nconst _relativeMatrix = new Matrix4();\nconst _clearColor = new Color();\n\ninterface CachedTransform {\n position: Vector3;\n quaternion: Quaternion;\n scale: Vector3;\n configuration: Vector3;\n}\n\ninterface UnsupportedLayerState {\n relativeMatrix: Matrix4;\n configuration: Vector3;\n}\n\ninterface RetiredLayerResources {\n xrLayer: any;\n mesh: Mesh;\n fallbackMaterial: MeshBasicMaterial;\n renderTarget: WebGLRenderTarget;\n}\n\nfunction toRigidTransform(pos: Vector3, quat: Quaternion): XRRigidTransform {\n return new XRRigidTransform(\n { x: pos.x, y: pos.y, z: pos.z },\n { x: quat.x, y: quat.y, z: quat.z, w: quat.w },\n );\n}\n\nfunction isObjectTreeVisible(object: Object3D): boolean {\n for (\n let current: Object3D | null = object;\n current;\n current = current.parent\n ) {\n if (!current.visible) {\n return false;\n }\n }\n return true;\n}\n\nfunction sameNumber(first: number, second: number): boolean {\n return first === second || (Number.isNaN(first) && Number.isNaN(second));\n}\n\nfunction sameVector(first: Vector3, second: Vector3): boolean {\n return (\n sameNumber(first.x, second.x) &&\n sameNumber(first.y, second.y) &&\n sameNumber(first.z, second.z)\n );\n}\n\n/**\n * XRLayerSystem manages WebXR quad and cylinder composition layers.\n *\n * For each entity with an {@link XRQuadLayer} or {@link XRCylinderLayer}\n * component, the system:\n * - Creates a mesh (plane or cylinder) as a child of the entity's object3D\n * - Renders layer content via the component's `renderCallback` while its\n * render surface is visible and active\n * - In XR sessions with layer support, creates native XR composition layers\n * and switches the mesh to a punch-through material that makes the\n * projection layer transparent where the content layer appears\n * - Falls back to rendering the content onto a textured mesh outside XR\n *\n * @category Layers\n */\nexport class XRLayerSystem extends createSystem({\n quadLayers: { required: [XRQuadLayer] },\n cylinderLayers: { required: [XRCylinderLayer] },\n activeLayers: { required: [XRLayerState] },\n}) {\n private sessionUsesLayers = false;\n private sessionLayerInitializationPending = false;\n private unsupportedLayerStates = new Map<number, UnsupportedLayerState>();\n private pendingNativeLayerRemovals = new Set<number>();\n private retiredLayers: RetiredLayerResources[] = [];\n private layerVisibility = new Map<number, boolean>();\n private layerConfigurations = new Map<number, Vector3>();\n\n init() {\n const onSessionStart = () => this.handleSessionStart();\n const onSessionEnd = () => this.handleSessionEnd();\n this.xrManager.addEventListener('sessionstart', onSessionStart);\n this.xrManager.addEventListener('sessionend', onSessionEnd);\n\n this.cleanupFuncs.push(\n () => this.xrManager.removeEventListener('sessionstart', onSessionStart),\n () => this.xrManager.removeEventListener('sessionend', onSessionEnd),\n );\n\n // Register the query subscriptions on cleanupFuncs so they're released on\n // system teardown (matching the xr listeners above).\n this.cleanupFuncs.push(\n this.queries.quadLayers.subscribe('qualify', (entity: Entity) =>\n this.setupLayer(entity, 'quad'),\n ),\n this.queries.quadLayers.subscribe('disqualify', (entity: Entity) =>\n this.teardownLayer(entity),\n ),\n this.queries.cylinderLayers.subscribe('qualify', (entity: Entity) =>\n this.setupLayer(entity, 'cylinder'),\n ),\n this.queries.cylinderLayers.subscribe('disqualify', (entity: Entity) =>\n this.teardownLayer(entity),\n ),\n );\n\n // Query disqualify does not run merely because the system itself is being\n // destroyed. Release every live compositor and GPU resource explicitly.\n this.cleanupFuncs.push(() => {\n for (const entity of [...this.queries.activeLayers.entities]) {\n this.teardownLayer(entity);\n }\n this.disposeRetiredLayers();\n this.unsupportedLayerStates.clear();\n this.pendingNativeLayerRemovals.clear();\n this.layerVisibility.clear();\n this.layerConfigurations.clear();\n });\n }\n\n update() {\n if (this.sessionLayerInitializationPending) {\n this.tryInitializeSessionLayers();\n }\n if (\n this.queries.activeLayers.entities.size === 0 &&\n this.retiredLayers.length === 0\n ) {\n return;\n }\n this.renderLayers();\n }\n\n // ---------------------------------------------------------------------------\n // Layer setup / teardown\n // ---------------------------------------------------------------------------\n\n private setupLayer(entity: Entity, type: 'quad' | 'cylinder') {\n const isQuad = type === 'quad';\n const component = isQuad ? XRQuadLayer : XRCylinderLayer;\n\n const pixelWidth = entity.getValue(component, 'pixelWidth') as number;\n const pixelHeight = entity.getValue(component, 'pixelHeight') as number;\n const stencil = entity.getValue(component, 'stencil') as boolean;\n\n const geometry = this.createFallbackGeometry(entity, isQuad);\n const side = isQuad ? FrontSide : BackSide;\n\n const renderTarget = this.createRenderTarget(\n pixelWidth,\n pixelHeight,\n stencil,\n );\n\n const fallbackMaterial = new MeshBasicMaterial({\n color: 0xffffff,\n side,\n transparent: true,\n });\n fallbackMaterial.map = renderTarget.texture;\n fallbackMaterial.map.offset.y = 1;\n fallbackMaterial.map.repeat.y = -1;\n\n const mesh = new Mesh(geometry, fallbackMaterial);\n entity.object3D?.add(mesh);\n\n entity.addComponent(XRLayerState, {\n isQuad,\n mesh,\n renderTarget,\n fallbackMaterial,\n pixelWidth,\n pixelHeight,\n stencil,\n });\n this.readLayerConfiguration(entity, isQuad, _configuration);\n this.layerConfigurations.set(entity.index, _configuration.clone());\n\n if (this.sessionUsesLayers) {\n this.activateNativeLayer(entity);\n this.updateSessionLayers();\n }\n }\n\n private teardownLayer(entity: Entity) {\n const mesh = XRLayerState.data.mesh[entity.index] as Mesh | null;\n if (!mesh) {\n return;\n }\n\n const resources: RetiredLayerResources = {\n xrLayer: XRLayerState.data.xrLayer[entity.index],\n mesh,\n fallbackMaterial: XRLayerState.data.fallbackMaterial[\n entity.index\n ] as MeshBasicMaterial,\n renderTarget: XRLayerState.data.renderTarget[\n entity.index\n ] as WebGLRenderTarget,\n };\n const nativeLayerIsActive = (\n this.xrManager.getSession()?.renderState.layers as\n | readonly unknown[]\n | undefined\n )?.includes(resources.xrLayer);\n\n if (resources.xrLayer && this.sessionUsesLayers) {\n this.updateSessionLayers(entity);\n }\n mesh.removeFromParent();\n\n if (entity.active) {\n entity.removeComponent(XRLayerState);\n }\n this.unsupportedLayerStates.delete(entity.index);\n this.pendingNativeLayerRemovals.delete(entity.index);\n this.layerVisibility.delete(entity.index);\n this.layerConfigurations.delete(entity.index);\n\n if (resources.xrLayer && this.sessionUsesLayers && nativeLayerIsActive) {\n this.retiredLayers.push(resources);\n } else {\n this.disposeLayerResources(resources);\n }\n }\n\n // ---------------------------------------------------------------------------\n // XR session lifecycle\n // ---------------------------------------------------------------------------\n\n private handleSessionStart() {\n this.sessionUsesLayers = false;\n this.sessionLayerInitializationPending = true;\n this.tryInitializeSessionLayers();\n }\n\n private handleSessionEnd() {\n for (const entity of this.queries.activeLayers.entities) {\n this.deactivateNativeLayer(entity);\n }\n this.disposeRetiredLayers();\n this.unsupportedLayerStates.clear();\n this.pendingNativeLayerRemovals.clear();\n this.layerVisibility.clear();\n this.sessionUsesLayers = false;\n this.sessionLayerInitializationPending = false;\n }\n\n /**\n * Enable composition layers once the projection layer is active.\n *\n * super-three queues its projection-layer render state before dispatching\n * `sessionstart`, so `renderState.layers` can legitimately be empty during\n * that event. Keep rendering the mesh fallback and retry on subsequent\n * frames instead of permanently classifying the session as unsupported.\n */\n private tryInitializeSessionLayers(): boolean {\n const session = this.xrManager.getSession();\n const binding = this.xrManager.getBinding();\n const renderState = session?.renderState as XRRenderState | undefined;\n\n if (!session || !binding || !renderState || renderState.baseLayer) {\n this.sessionLayerInitializationPending = false;\n return false;\n }\n\n if (!renderState.layers?.[0]) {\n return false;\n }\n\n this.sessionLayerInitializationPending = false;\n this.sessionUsesLayers = true;\n for (const entity of this.queries.activeLayers.entities) {\n this.activateNativeLayer(entity);\n }\n this.updateSessionLayers();\n return true;\n }\n\n // ---------------------------------------------------------------------------\n // Native layer management\n // ---------------------------------------------------------------------------\n\n private activateNativeLayer(entity: Entity): boolean {\n const binding = this.xrManager.getBinding() as any;\n const session = this.xrManager.getSession();\n if (!binding || !session) {\n return false;\n }\n\n const isQuad = !!XRLayerState.data.isQuad[entity.index];\n const mesh = XRLayerState.data.mesh[entity.index] as Mesh;\n const pixelWidth = XRLayerState.data.pixelWidth[entity.index] as number;\n const pixelHeight = XRLayerState.data.pixelHeight[entity.index] as number;\n\n const refSpace = this.xrManager.getReferenceSpace();\n if (!refSpace) {\n return false;\n }\n this.readLayerConfiguration(entity, isQuad, _configuration);\n const hasSupportedTransform = resolveLayerReferencePose(\n mesh,\n this.player,\n _position,\n _quaternion,\n _scale,\n _relativeMatrix,\n );\n\n let xrLayer;\n if (isQuad) {\n const dimensions = hasSupportedTransform\n ? resolveQuadLayerDimensions(_configuration.x, _configuration.y, _scale)\n : null;\n if (!dimensions) {\n this.rememberUnsupportedLayer(entity, 'quad');\n return false;\n }\n\n xrLayer = binding.createQuadLayer(\n createQuadLayerInit({\n transform: toRigidTransform(_position, _quaternion),\n width: dimensions.width,\n height: dimensions.height,\n space: refSpace,\n pixelWidth,\n pixelHeight,\n }),\n );\n } else {\n const dimensions = hasSupportedTransform\n ? resolveCylinderLayerDimensions(\n _configuration.x,\n _configuration.y,\n _scale,\n )\n : null;\n if (!dimensions || !isValidCylinderLayerAngle(_configuration.z)) {\n this.rememberUnsupportedLayer(entity, 'cylinder');\n return false;\n }\n\n xrLayer = binding.createCylinderLayer({\n transform: toRigidTransform(_position, _quaternion),\n radius: dimensions.radius,\n centralAngle: _configuration.z,\n aspectRatio: dimensions.aspectRatio,\n space: refSpace,\n viewPixelWidth: pixelWidth,\n viewPixelHeight: pixelHeight,\n clearOnAccess: false,\n });\n }\n\n this.unsupportedLayerStates.delete(entity.index);\n entity.setValue(XRLayerState, 'xrLayer', xrLayer);\n\n entity.setValue(XRLayerState, 'cachedTransform', {\n position: _position.clone(),\n quaternion: _quaternion.clone(),\n scale: _scale.clone(),\n configuration: _configuration.clone(),\n } satisfies CachedTransform);\n return true;\n }\n\n private deactivateNativeLayer(entity: Entity) {\n const mesh = XRLayerState.data.mesh[entity.index] as Mesh;\n const xrLayer = XRLayerState.data.xrLayer[entity.index] as any;\n if (!xrLayer) {\n entity.setValue(XRLayerState, 'cachedTransform', null);\n this.pendingNativeLayerRemovals.delete(entity.index);\n return;\n }\n xrLayer.destroy?.();\n this.useFallbackSurface(entity, mesh);\n\n entity.setValue(XRLayerState, 'xrLayer', null);\n entity.setValue(XRLayerState, 'cachedTransform', null);\n this.pendingNativeLayerRemovals.delete(entity.index);\n }\n\n /**\n * Switch from the internal fallback texture only after the compositor layer\n * is active. This avoids punching a transparent hole while\n * updateRenderState() is still pending.\n */\n private useNativeSurface(entity: Entity, mesh: Mesh): void {\n const fallbackMaterial = XRLayerState.data.fallbackMaterial[\n entity.index\n ] as MeshBasicMaterial;\n if (mesh.material !== fallbackMaterial) {\n return;\n }\n\n const side = XRLayerState.data.isQuad[entity.index] ? FrontSide : BackSide;\n const punchMaterial = new MeshBasicMaterial({ color: 0xffffff, side });\n punchMaterial.blending = CustomBlending;\n punchMaterial.blendEquation = AddEquation;\n punchMaterial.blendSrc = ZeroFactor;\n punchMaterial.blendDst = ZeroFactor;\n mesh.material = punchMaterial;\n\n const xrLayer = XRLayerState.data.xrLayer[entity.index] as any;\n xrLayer.blendTextureSourceAlpha = true;\n\n const renderTarget = XRLayerState.data.renderTarget[\n entity.index\n ] as WebGLRenderTarget;\n (renderTarget as any).isXRRenderTarget = true;\n renderTarget.texture.colorSpace = SRGBColorSpace;\n }\n\n /** Restore a fresh internal target after an external XR texture was bound. */\n private useFallbackSurface(entity: Entity, mesh: Mesh): void {\n const fallbackMaterial = XRLayerState.data.fallbackMaterial[\n entity.index\n ] as MeshBasicMaterial;\n if (mesh.material === fallbackMaterial) {\n return;\n }\n\n (mesh.material as MeshBasicMaterial).dispose();\n const oldRenderTarget = XRLayerState.data.renderTarget[\n entity.index\n ] as WebGLRenderTarget;\n oldRenderTarget.dispose();\n\n const newRenderTarget = this.createRenderTarget(\n XRLayerState.data.pixelWidth[entity.index] as number,\n XRLayerState.data.pixelHeight[entity.index] as number,\n !!XRLayerState.data.stencil[entity.index],\n );\n entity.setValue(XRLayerState, 'renderTarget', newRenderTarget);\n fallbackMaterial.map = newRenderTarget.texture;\n fallbackMaterial.map.offset.y = 1;\n fallbackMaterial.map.repeat.y = -1;\n mesh.material = fallbackMaterial;\n }\n\n private disposeLayerResources(resources: RetiredLayerResources): void {\n resources.xrLayer?.destroy?.();\n resources.mesh.geometry.dispose();\n resources.fallbackMaterial.dispose();\n if (resources.mesh.material !== resources.fallbackMaterial) {\n (resources.mesh.material as MeshBasicMaterial).dispose();\n }\n resources.renderTarget.dispose();\n }\n\n private disposeRetiredLayers(): void {\n for (const resources of this.retiredLayers) {\n this.disposeLayerResources(resources);\n }\n this.retiredLayers.length = 0;\n }\n\n /**\n * Keep removed layers alive until the queued render state no longer\n * references them. While removal is pending, clear their native textures so\n * the compositor cannot present stale content from the detached entity.\n */\n private renderRetiredLayers(renderer: any): void {\n if (this.retiredLayers.length === 0) {\n return;\n }\n\n const activeLayers = this.xrManager.getSession()?.renderState.layers as\n | readonly unknown[]\n | undefined;\n if (!activeLayers) {\n this.disposeRetiredLayers();\n return;\n }\n\n const retained: RetiredLayerResources[] = [];\n const released: RetiredLayerResources[] = [];\n for (const resources of this.retiredLayers) {\n if (activeLayers.includes(resources.xrLayer)) {\n retained.push(resources);\n } else {\n released.push(resources);\n }\n }\n\n // Commit the classification before disposal or compositor access. If a\n // later getSubImage() throws, already-released entries cannot be disposed\n // again, while every still-active entry remains tracked for retry.\n this.retiredLayers = retained;\n for (const resources of released) {\n this.disposeLayerResources(resources);\n }\n\n const binding = this.xrManager.getBinding() as any;\n const frame = this.xrFrame;\n for (const resources of retained) {\n if (!binding || !frame) {\n continue;\n }\n\n resources.xrLayer.blendTextureSourceAlpha = true;\n (resources.renderTarget as any).isXRRenderTarget = true;\n resources.renderTarget.texture.colorSpace = SRGBColorSpace;\n const subImage = binding.getSubImage(resources.xrLayer, frame);\n renderer.setRenderTargetTextures(\n resources.renderTarget,\n subImage.colorTexture,\n undefined,\n );\n renderer.setRenderTarget(resources.renderTarget);\n renderer.clear(true, true, true);\n }\n }\n\n /**\n * Rebuild the session's render state layers array.\n * Keeps the projection layer at index 0, then appends content layers.\n */\n private updateSessionLayers(excludedEntity?: Entity) {\n const session = this.xrManager.getSession();\n if (!session?.renderState.layers) {\n return;\n }\n\n // Projection layer is always the first entry\n const projLayer = session.renderState.layers[0];\n if (!projLayer) {\n return;\n }\n const layers: any[] = [projLayer];\n\n for (const entity of this.queries.activeLayers.entities) {\n if (entity === excludedEntity) {\n continue;\n }\n const xrLayer = XRLayerState.data.xrLayer[entity.index];\n const mesh = XRLayerState.data.mesh[entity.index] as Mesh | null;\n const visible = mesh != null && isObjectTreeVisible(mesh);\n this.layerVisibility.set(entity.index, visible);\n if (\n xrLayer &&\n visible &&\n !this.pendingNativeLayerRemovals.has(entity.index)\n ) {\n layers.push(xrLayer);\n }\n }\n\n session.updateRenderState({ layers });\n }\n\n // ---------------------------------------------------------------------------\n // Per-frame rendering\n // ---------------------------------------------------------------------------\n\n private renderLayers() {\n if (this.sessionLayerInitializationPending) {\n this.tryInitializeSessionLayers();\n }\n\n const renderer = this.renderer as any;\n const savedRenderTarget = renderer.getRenderTarget();\n\n const savedXrEnabled = renderer.xr.enabled;\n\n // Save clear color so we can clear layers to transparent.\n renderer.getClearColor(_clearColor);\n const savedClearAlpha = renderer.getClearAlpha();\n\n try {\n // Disable XR so renderer.render() uses the layer-specific camera instead of\n // the headset-tracked XR cameras.\n renderer.xr.enabled = false;\n renderer.setClearColor(0x000000, 0);\n\n this.renderRetiredLayers(renderer);\n\n for (const entity of this.queries.activeLayers.entities) {\n const isQuad = !!XRLayerState.data.isQuad[entity.index];\n const component = isQuad ? XRQuadLayer : XRCylinderLayer;\n let xrLayer = XRLayerState.data.xrLayer[entity.index];\n const mesh = XRLayerState.data.mesh[entity.index] as Mesh;\n this.syncLayerGeometry(entity, mesh, isQuad);\n\n const visible = isObjectTreeVisible(mesh);\n if (this.layerVisibility.get(entity.index) !== visible) {\n this.layerVisibility.set(entity.index, visible);\n if (this.sessionUsesLayers && xrLayer) {\n this.updateSessionLayers();\n }\n }\n\n if (this.sessionUsesLayers && xrLayer) {\n // An unsupported live transform queues removal. Keep the old native\n // surface valid until that pending render state becomes active.\n this.syncLayerTransform(xrLayer, mesh, entity);\n }\n\n if (\n this.sessionUsesLayers &&\n !xrLayer &&\n this.shouldRetryNativeLayer(entity, mesh, isQuad) &&\n this.activateNativeLayer(entity)\n ) {\n xrLayer = XRLayerState.data.xrLayer[entity.index];\n this.updateSessionLayers();\n }\n\n let nativeActive =\n this.sessionUsesLayers &&\n xrLayer != null &&\n (\n this.xrManager.getSession()?.renderState.layers as\n | readonly unknown[]\n | undefined\n )?.includes(xrLayer);\n\n if (\n xrLayer &&\n this.pendingNativeLayerRemovals.has(entity.index) &&\n !nativeActive\n ) {\n this.deactivateNativeLayer(entity);\n xrLayer = null;\n nativeActive = false;\n }\n\n if (nativeActive && xrLayer) {\n this.useNativeSurface(entity, mesh);\n } else {\n this.useFallbackSurface(entity, mesh);\n }\n\n const callback = entity.getValue(component, 'renderCallback') as\n | (() => void)\n | null;\n if (!visible && !nativeActive) {\n continue;\n }\n\n const renderTarget = XRLayerState.data.renderTarget[\n entity.index\n ] as WebGLRenderTarget;\n\n if (nativeActive && xrLayer) {\n const binding = this.xrManager.getBinding() as any;\n const frame = this.xrFrame;\n if (!binding || !frame) {\n continue;\n }\n const subImage = binding.getSubImage(xrLayer, frame);\n renderer.setRenderTargetTextures(\n renderTarget,\n subImage.colorTexture,\n undefined,\n );\n renderer.setRenderTarget(renderTarget);\n\n if (!visible) {\n // A hidden layer remains in the current render state until the next\n // XR frame. Clear it now so that pending removal cannot expose the\n // previous frame's stale content.\n renderer.clear(true, true, true);\n continue;\n }\n } else {\n renderer.setRenderTarget(renderTarget);\n }\n\n callback?.();\n }\n } finally {\n // Never leak layer-rendering state into the application render, even\n // when a binding or user render callback throws.\n renderer.setClearColor(_clearColor, savedClearAlpha);\n renderer.xr.enabled = savedXrEnabled;\n renderer.setRenderTarget(savedRenderTarget);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Helpers\n // ---------------------------------------------------------------------------\n\n /**\n * Update the native XR layer's transform only when the mesh has moved,\n * avoiding per-frame XRRigidTransform allocations for static layers.\n */\n private syncLayerTransform(\n xrLayer: any,\n mesh: Mesh,\n entity: Entity,\n ): boolean {\n const hasSupportedTransform = resolveLayerReferencePose(\n mesh,\n this.player,\n _position,\n _quaternion,\n _scale,\n _relativeMatrix,\n );\n\n const isQuad = !!XRLayerState.data.isQuad[entity.index];\n this.readLayerConfiguration(entity, isQuad, _configuration);\n\n const cached = XRLayerState.data.cachedTransform[\n entity.index\n ] as CachedTransform | null;\n\n if (\n hasSupportedTransform &&\n cached?.position.equals(_position) &&\n cached.quaternion.equals(_quaternion) &&\n cached.scale.equals(_scale) &&\n sameVector(cached.configuration, _configuration)\n ) {\n this.restorePendingNativeLayer(entity);\n return true;\n }\n\n if (isQuad) {\n const dimensions = hasSupportedTransform\n ? resolveQuadLayerDimensions(_configuration.x, _configuration.y, _scale)\n : null;\n if (!dimensions) {\n this.rememberUnsupportedLayer(entity, 'quad');\n this.requestNativeLayerRemoval(entity);\n return false;\n }\n xrLayer.width = dimensions.width;\n xrLayer.height = dimensions.height;\n } else {\n const dimensions = hasSupportedTransform\n ? resolveCylinderLayerDimensions(\n _configuration.x,\n _configuration.y,\n _scale,\n )\n : null;\n if (!dimensions || !isValidCylinderLayerAngle(_configuration.z)) {\n this.rememberUnsupportedLayer(entity, 'cylinder');\n this.requestNativeLayerRemoval(entity);\n return false;\n }\n xrLayer.radius = dimensions.radius;\n xrLayer.aspectRatio = dimensions.aspectRatio;\n xrLayer.centralAngle = _configuration.z;\n }\n\n this.restorePendingNativeLayer(entity);\n xrLayer.transform = toRigidTransform(_position, _quaternion);\n\n if (cached) {\n cached.position.copy(_position);\n cached.quaternion.copy(_quaternion);\n cached.scale.copy(_scale);\n cached.configuration.copy(_configuration);\n } else {\n entity.setValue(XRLayerState, 'cachedTransform', {\n position: _position.clone(),\n quaternion: _quaternion.clone(),\n scale: _scale.clone(),\n configuration: _configuration.clone(),\n } satisfies CachedTransform);\n }\n return true;\n }\n\n private requestNativeLayerRemoval(entity: Entity): void {\n if (this.pendingNativeLayerRemovals.has(entity.index)) {\n return;\n }\n this.pendingNativeLayerRemovals.add(entity.index);\n this.updateSessionLayers();\n }\n\n private restorePendingNativeLayer(entity: Entity): void {\n this.unsupportedLayerStates.delete(entity.index);\n if (!this.pendingNativeLayerRemovals.delete(entity.index)) {\n return;\n }\n this.updateSessionLayers();\n }\n\n private readLayerConfiguration(\n entity: Entity,\n isQuad: boolean,\n target: Vector3,\n ): void {\n if (isQuad) {\n target.set(\n entity.getValue(XRQuadLayer, 'width') as number,\n entity.getValue(XRQuadLayer, 'height') as number,\n 0,\n );\n return;\n }\n target.set(\n entity.getValue(XRCylinderLayer, 'radius') as number,\n entity.getValue(XRCylinderLayer, 'aspectRatio') as number,\n entity.getValue(XRCylinderLayer, 'centralAngle') as number,\n );\n }\n\n private syncLayerGeometry(entity: Entity, mesh: Mesh, isQuad: boolean): void {\n this.readLayerConfiguration(entity, isQuad, _configuration);\n const cached = this.layerConfigurations.get(entity.index);\n if (cached && sameVector(cached, _configuration)) {\n return;\n }\n this.layerConfigurations.set(entity.index, _configuration.clone());\n\n // The fallback must reflect every live configuration, including values\n // that a native composition layer cannot represent. Collapse non-finite\n // dimensions to a safe degenerate geometry instead of leaving the last\n // valid (and therefore misleading) shape on screen.\n const geometry = this.createFallbackGeometry(entity, isQuad);\n\n const oldGeometry = mesh.geometry;\n mesh.geometry = geometry;\n oldGeometry.dispose();\n }\n\n private createFallbackGeometry(entity: Entity, isQuad: boolean) {\n this.readLayerConfiguration(entity, isQuad, _configuration);\n if (isQuad) {\n const width = Number.isFinite(_configuration.x) ? _configuration.x : 0;\n const height = Number.isFinite(_configuration.y) ? _configuration.y : 0;\n return new PlaneGeometry(width, height);\n }\n\n const radius = Number.isFinite(_configuration.x) ? _configuration.x : 0;\n const centralAngle = Number.isFinite(_configuration.z)\n ? _configuration.z\n : 0;\n const rawHeight = (_configuration.x * _configuration.z) / _configuration.y;\n const height = Number.isFinite(rawHeight) ? rawHeight : 0;\n return new CylinderGeometry(\n radius,\n radius,\n height,\n 64,\n 64,\n true,\n Math.PI - centralAngle / 2,\n centralAngle,\n );\n }\n\n private shouldRetryNativeLayer(\n entity: Entity,\n mesh: Mesh,\n isQuad: boolean,\n ): boolean {\n const unsupported = this.unsupportedLayerStates.get(entity.index);\n if (!unsupported) {\n return true;\n }\n\n const hasSupportedTransform = resolveLayerReferencePose(\n mesh,\n this.player,\n _position,\n _quaternion,\n _scale,\n _relativeMatrix,\n );\n this.readLayerConfiguration(entity, isQuad, _configuration);\n const hasSupportedConfiguration = isQuad\n ? resolveQuadLayerDimensions(\n _configuration.x,\n _configuration.y,\n _scale,\n ) != null\n : resolveCylinderLayerDimensions(\n _configuration.x,\n _configuration.y,\n _scale,\n ) != null && isValidCylinderLayerAngle(_configuration.z);\n\n // Approximate cache equality suppresses repeated work while a layer stays\n // unsupported. Never let that tolerance hide a boundary crossing back to\n // a representable native layer.\n if (hasSupportedTransform && hasSupportedConfiguration) {\n return true;\n }\n return (\n !sameVector(unsupported.configuration, _configuration) ||\n this.hasLayerShapeChanged(unsupported.relativeMatrix, _relativeMatrix)\n );\n }\n\n private hasLayerShapeChanged(previous: Matrix4, current: Matrix4): boolean {\n const previousElements = previous.elements;\n const currentElements = current.elements;\n const previousFinite = previousElements.every(Number.isFinite);\n const currentFinite = currentElements.every(Number.isFinite);\n if (!previousFinite || !currentFinite) {\n return previousElements.some(\n (value, index) => !sameNumber(value, currentElements[index]),\n );\n }\n\n const gram = (elements: number[]) => {\n const xx = elements[0] ** 2 + elements[1] ** 2 + elements[2] ** 2;\n const yy = elements[4] ** 2 + elements[5] ** 2 + elements[6] ** 2;\n const zz = elements[8] ** 2 + elements[9] ** 2 + elements[10] ** 2;\n const normalizeDot = (dot: number, first: number, second: number) => {\n const denominator = Math.sqrt(first * second);\n return denominator === 0 ? dot : dot / denominator;\n };\n return [\n xx,\n yy,\n zz,\n normalizeDot(\n elements[0] * elements[4] +\n elements[1] * elements[5] +\n elements[2] * elements[6],\n xx,\n yy,\n ),\n normalizeDot(\n elements[0] * elements[8] +\n elements[1] * elements[9] +\n elements[2] * elements[10],\n xx,\n zz,\n ),\n normalizeDot(\n elements[4] * elements[8] +\n elements[5] * elements[9] +\n elements[6] * elements[10],\n yy,\n zz,\n ),\n ];\n };\n const previousGram = gram(previousElements);\n const currentGram = gram(currentElements);\n const nearlyEqual = (a: number, b: number, index: number) => {\n const tolerance =\n index < 3\n ? 1e-10 * Math.max(Number.EPSILON, Math.abs(a), Math.abs(b))\n : 1e-10;\n return Math.abs(a - b) <= tolerance;\n };\n\n return (\n previousGram.some(\n (value, index) => !nearlyEqual(value, currentGram[index], index),\n ) ||\n Math.sign(previous.determinant()) !== Math.sign(current.determinant())\n );\n }\n\n private rememberUnsupportedLayer(\n entity: Entity,\n type: 'quad' | 'cylinder',\n ): void {\n if (!this.unsupportedLayerStates.has(entity.index)) {\n console.warn(\n `[XRLayerSystem] ${type} layer ${entity.index} has unsupported dimensions or a non-finite, reflected, or sheared transform; using projection fallback.`,\n );\n }\n this.unsupportedLayerStates.set(entity.index, {\n relativeMatrix: _relativeMatrix.clone(),\n configuration: _configuration.clone(),\n });\n }\n\n private createRenderTarget(\n width: number,\n height: number,\n stencil: boolean,\n ): WebGLRenderTarget {\n return new WebGLRenderTarget(width, height, {\n format: RGBAFormat,\n type: UnsignedByteType,\n depthTexture: new DepthTexture(\n width,\n height,\n stencil ? UnsignedInt248Type : UnsignedIntType,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n stencil ? DepthStencilFormat : DepthFormat,\n ),\n samples: 4,\n stencilBuffer: stencil,\n });\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;AA0CH,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE;AAC/B,MAAM,WAAW,GAAG,IAAI,UAAU,EAAE;AACpC,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;AAC5B,MAAM,cAAc,GAAG,IAAI,OAAO,EAAE;AACpC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE;AACrC,MAAM,WAAW,GAAG,IAAI,KAAK,EAAE;AAqB/B,SAAS,gBAAgB,CAAC,GAAY,EAAE,IAAgB,EAAA;IACtD,OAAO,IAAI,gBAAgB,CACzB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAChC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAC/C;AACH;AAEA,SAAS,mBAAmB,CAAC,MAAgB,EAAA;AAC3C,IAAA,KACE,IAAI,OAAO,GAAoB,MAAM,EACrC,OAAO,EACP,OAAO,GAAG,OAAO,CAAC,MAAM,EACxB;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACpB,YAAA,OAAO,KAAK;QACd;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,UAAU,CAAC,KAAa,EAAE,MAAc,EAAA;AAC/C,IAAA,OAAO,KAAK,KAAK,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1E;AAEA,SAAS,UAAU,CAAC,KAAc,EAAE,MAAe,EAAA;IACjD,QACE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7B,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7B,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjC;AAEA;;;;;;;;;;;;;;AAcG;AACG,MAAO,aAAc,SAAQ,YAAY,CAAC;AAC9C,IAAA,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;AACvC,IAAA,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE;AAC/C,IAAA,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;CAC3C,CAAC,CAAA;AAJF,IAAA,WAAA,GAAA;;QAKU,IAAA,CAAA,iBAAiB,GAAG,KAAK;QACzB,IAAA,CAAA,iCAAiC,GAAG,KAAK;AACzC,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,GAAG,EAAiC;AACjE,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,GAAG,EAAU;QAC9C,IAAA,CAAA,aAAa,GAA4B,EAAE;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAmB;AAC5C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,GAAG,EAAmB;IAu5B1D;IAr5BE,IAAI,GAAA;QACF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE;QACtD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAClD,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC;AAE3D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC,EACxE,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CACrE;;;QAID,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAc,KAC1D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAChC,EACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,MAAc,KAC7D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAC3B,EACD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAc,KAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CACpC,EACD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,MAAc,KACjE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAC3B,CACF;;;AAID,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAK;AAC1B,YAAA,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AAC5D,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC5B;YACA,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE;AACnC,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE;AACvC,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;AAClC,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,iCAAiC,EAAE;YAC1C,IAAI,CAAC,0BAA0B,EAAE;QACnC;QACA,IACE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;AAC7C,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAC/B;YACA;QACF;QACA,IAAI,CAAC,YAAY,EAAE;IACrB;;;;IAMQ,UAAU,CAAC,MAAc,EAAE,IAAyB,EAAA;;AAC1D,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM;QAC9B,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe;QAExD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAW;QACrE,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAW;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAY;QAEhE,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ;AAE1C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAC1C,UAAU,EACV,WAAW,EACX,OAAO,CACR;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,iBAAiB,CAAC;AAC7C,YAAA,KAAK,EAAE,QAAQ;YACf,IAAI;AACJ,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC;AACF,QAAA,gBAAgB,CAAC,GAAG,GAAG,YAAY,CAAC,OAAO;QAC3C,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;QACjC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;QAElC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC;QACjD,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CAAC,IAAI,CAAC;AAE1B,QAAA,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;YAChC,MAAM;YACN,IAAI;YACJ,YAAY;YACZ,gBAAgB;YAChB,UAAU;YACV,WAAW;YACX,OAAO;AACR,SAAA,CAAC;QACF,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;AAC3D,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC;AAElE,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEQ,IAAA,aAAa,CAAC,MAAc,EAAA;;AAClC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAgB;QAChE,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,MAAM,SAAS,GAA0B;YACvC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAChD,IAAI;YACJ,gBAAgB,EAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAClD,MAAM,CAAC,KAAK,CACQ;YACtB,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAC1C,MAAM,CAAC,KAAK,CACQ;SACvB;QACD,MAAM,mBAAmB,GAAG,CAAA,EAAA,GAC1B,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,0CAAE,WAAW,CAAC,MAG1C,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;QAE9B,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC/C,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAClC;QACA,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC;QACtC;QACA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAE7C,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,EAAE;AACtE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACpC;aAAO;AACL,YAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;QACvC;IACF;;;;IAMQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI;QAC7C,IAAI,CAAC,0BAA0B,EAAE;IACnC;IAEQ,gBAAgB,GAAA;QACtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;AACvD,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;QACpC;QACA,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,iCAAiC,GAAG,KAAK;IAChD;AAEA;;;;;;;AAOG;IACK,0BAA0B,GAAA;;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;QAC3C,MAAM,WAAW,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,WAAwC;AAErE,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE;AACjE,YAAA,IAAI,CAAC,iCAAiC,GAAG,KAAK;AAC9C,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,EAAC,CAAA,EAAA,GAAA,WAAW,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,CAAA,EAAE;AAC5B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,iCAAiC,GAAG,KAAK;AAC9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;AACvD,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAClC;QACA,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;;;;AAMQ,IAAA,mBAAmB,CAAC,MAAc,EAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAS;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAS;AACzD,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAW;AACvE,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAW;QAEzE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;QACnD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,KAAK;QACd;QACA,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;AAC3D,QAAA,MAAM,qBAAqB,GAAG,yBAAyB,CACrD,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,eAAe,CAChB;AAED,QAAA,IAAI,OAAO;QACX,IAAI,MAAM,EAAE;YACV,MAAM,UAAU,GAAG;AACjB,kBAAE,0BAA0B,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM;kBACrE,IAAI;YACR,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7C,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,GAAG,OAAO,CAAC,eAAe,CAC/B,mBAAmB,CAAC;AAClB,gBAAA,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC;gBACnD,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;AACzB,gBAAA,KAAK,EAAE,QAAQ;gBACf,UAAU;gBACV,WAAW;AACZ,aAAA,CAAC,CACH;QACH;aAAO;YACL,MAAM,UAAU,GAAG;AACjB,kBAAE,8BAA8B,CAC5B,cAAc,CAAC,CAAC,EAChB,cAAc,CAAC,CAAC,EAChB,MAAM;kBAER,IAAI;YACR,IAAI,CAAC,UAAU,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC;AACjD,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;AACpC,gBAAA,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC;gBACnD,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,YAAY,EAAE,cAAc,CAAC,CAAC;gBAC9B,WAAW,EAAE,UAAU,CAAC,WAAW;AACnC,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,cAAc,EAAE,UAAU;AAC1B,gBAAA,eAAe,EAAE,WAAW;AAC5B,gBAAA,aAAa,EAAE,KAAK;AACrB,aAAA,CAAC;QACJ;QAEA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;AAEjD,QAAA,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,EAAE;AAC/C,YAAA,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE;AAC3B,YAAA,UAAU,EAAE,WAAW,CAAC,KAAK,EAAE;AAC/B,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;AACrB,YAAA,aAAa,EAAE,cAAc,CAAC,KAAK,EAAE;AACZ,SAAA,CAAC;AAC5B,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,qBAAqB,CAAC,MAAc,EAAA;;AAC1C,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAS;AACzD,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAQ;QAC9D,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC;YACtD,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YACpD;QACF;AACA,QAAA,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAI;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;QAErC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC;QACtD,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IACtD;AAEA;;;;AAIG;IACK,gBAAgB,CAAC,MAAc,EAAE,IAAU,EAAA;AACjD,QAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB,CACzD,MAAM,CAAC,KAAK,CACQ;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAgB,EAAE;YACtC;QACF;QAEA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ;AAC1E,QAAA,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtE,QAAA,aAAa,CAAC,QAAQ,GAAG,cAAc;AACvC,QAAA,aAAa,CAAC,aAAa,GAAG,WAAW;AACzC,QAAA,aAAa,CAAC,QAAQ,GAAG,UAAU;AACnC,QAAA,aAAa,CAAC,QAAQ,GAAG,UAAU;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,aAAa;AAE7B,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAQ;AAC9D,QAAA,OAAO,CAAC,uBAAuB,GAAG,IAAI;AAEtC,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CACjD,MAAM,CAAC,KAAK,CACQ;AACrB,QAAA,YAAoB,CAAC,gBAAgB,GAAG,IAAI;AAC7C,QAAA,YAAY,CAAC,OAAO,CAAC,UAAU,GAAG,cAAc;IAClD;;IAGQ,kBAAkB,CAAC,MAAc,EAAE,IAAU,EAAA;AACnD,QAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB,CACzD,MAAM,CAAC,KAAK,CACQ;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAgB,EAAE;YACtC;QACF;AAEC,QAAA,IAAI,CAAC,QAA8B,CAAC,OAAO,EAAE;AAC9C,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CACpD,MAAM,CAAC,KAAK,CACQ;QACtB,eAAe,CAAC,OAAO,EAAE;AAEzB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAC7C,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAW,EACpD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAW,EACrD,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAC1C;QACD,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,CAAC;AAC9D,QAAA,gBAAgB,CAAC,GAAG,GAAG,eAAe,CAAC,OAAO;QAC9C,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;QACjC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB;IAClC;AAEQ,IAAA,qBAAqB,CAAC,SAAgC,EAAA;;AAC5D,QAAA,CAAA,EAAA,GAAA,MAAA,SAAS,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,kDAAI;AAC9B,QAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACjC,QAAA,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE;QACpC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,gBAAgB,EAAE;AACzD,YAAA,SAAS,CAAC,IAAI,CAAC,QAA8B,CAAC,OAAO,EAAE;QAC1D;AACA,QAAA,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE;IAClC;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;QACvC;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;IAC/B;AAEA;;;;AAIG;AACK,IAAA,mBAAmB,CAAC,QAAa,EAAA;;QACvC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,CAAC,MAEjD;QACb,IAAI,CAAC,YAAY,EAAE;YACjB,IAAI,CAAC,oBAAoB,EAAE;YAC3B;QACF;QAEA,MAAM,QAAQ,GAA4B,EAAE;QAC5C,MAAM,QAAQ,GAA4B,EAAE;AAC5C,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;YAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAC5C,gBAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1B;iBAAO;AACL,gBAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1B;QACF;;;;AAKA,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,QAAA,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;AAChC,YAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;QACvC;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAS;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;gBACtB;YACF;AAEA,YAAA,SAAS,CAAC,OAAO,CAAC,uBAAuB,GAAG,IAAI;AAC/C,YAAA,SAAS,CAAC,YAAoB,CAAC,gBAAgB,GAAG,IAAI;YACvD,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,GAAG,cAAc;AAC1D,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;AAC9D,YAAA,QAAQ,CAAC,uBAAuB,CAC9B,SAAS,CAAC,YAAY,EACtB,QAAQ,CAAC,YAAY,EACrB,SAAS,CACV;AACD,YAAA,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,YAAY,CAAC;YAChD,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAClC;IACF;AAEA;;;AAGG;AACK,IAAA,mBAAmB,CAAC,cAAuB,EAAA;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AAC3C,QAAA,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,WAAW,CAAC,MAAM,CAAA,EAAE;YAChC;QACF;;QAGA,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE;YACd;QACF;AACA,QAAA,MAAM,MAAM,GAAU,CAAC,SAAS,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;AACvD,YAAA,IAAI,MAAM,KAAK,cAAc,EAAE;gBAC7B;YACF;AACA,YAAA,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACvD,YAAA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAgB;YAChE,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;AAC/C,YAAA,IACE,OAAO;gBACP,OAAO;gBACP,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAClD;AACA,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YACtB;QACF;AAEA,QAAA,OAAO,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IACvC;;;;IAMQ,YAAY,GAAA;;AAClB,QAAA,IAAI,IAAI,CAAC,iCAAiC,EAAE;YAC1C,IAAI,CAAC,0BAA0B,EAAE;QACnC;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAe;AACrC,QAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,eAAe,EAAE;AAEpD,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,EAAE,CAAC,OAAO;;AAG1C,QAAA,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;AACnC,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,EAAE;AAEhD,QAAA,IAAI;;;AAGF,YAAA,QAAQ,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK;AAC3B,YAAA,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YAElC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE;AACvD,gBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBACvD,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe;AACxD,gBAAA,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACrD,gBAAA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAS;gBACzD,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;AAE5C,gBAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC;AACzC,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE;oBACtD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;AAC/C,oBAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,EAAE;wBACrC,IAAI,CAAC,mBAAmB,EAAE;oBAC5B;gBACF;AAEA,gBAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,EAAE;;;oBAGrC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;gBAChD;gBAEA,IACE,IAAI,CAAC,iBAAiB;AACtB,oBAAA,CAAC,OAAO;oBACR,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;AACjD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAChC;oBACA,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBACjD,IAAI,CAAC,mBAAmB,EAAE;gBAC5B;AAEA,gBAAA,IAAI,YAAY,GACd,IAAI,CAAC,iBAAiB;AACtB,oBAAA,OAAO,IAAI,IAAI;AACf,qBAAA,CAAA,EAAA,GACE,MAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,CAAC,MAG1C,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;AAEtB,gBAAA,IACE,OAAO;oBACP,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;oBACjD,CAAC,YAAY,EACb;AACA,oBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;oBAClC,OAAO,GAAG,IAAI;oBACd,YAAY,GAAG,KAAK;gBACtB;AAEA,gBAAA,IAAI,YAAY,IAAI,OAAO,EAAE;AAC3B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;gBACrC;qBAAO;AACL,oBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;gBACvC;gBAEA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAEpD;AACR,gBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE;oBAC7B;gBACF;AAEA,gBAAA,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CACjD,MAAM,CAAC,KAAK,CACQ;AAEtB,gBAAA,IAAI,YAAY,IAAI,OAAO,EAAE;oBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAS;AAClD,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,oBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;wBACtB;oBACF;oBACA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;oBACpD,QAAQ,CAAC,uBAAuB,CAC9B,YAAY,EACZ,QAAQ,CAAC,YAAY,EACrB,SAAS,CACV;AACD,oBAAA,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;oBAEtC,IAAI,CAAC,OAAO,EAAE;;;;wBAIZ,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;wBAChC;oBACF;gBACF;qBAAO;AACL,oBAAA,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;gBACxC;AAEA,gBAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,EAAI;YACd;QACF;gBAAU;;;AAGR,YAAA,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,eAAe,CAAC;AACpD,YAAA,QAAQ,CAAC,EAAE,CAAC,OAAO,GAAG,cAAc;AACpC,YAAA,QAAQ,CAAC,eAAe,CAAC,iBAAiB,CAAC;QAC7C;IACF;;;;AAMA;;;AAGG;AACK,IAAA,kBAAkB,CACxB,OAAY,EACZ,IAAU,EACV,MAAc,EAAA;AAEd,QAAA,MAAM,qBAAqB,GAAG,yBAAyB,CACrD,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,eAAe,CAChB;AAED,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACvD,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;AAE3D,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAC9C,MAAM,CAAC,KAAK,CACa;AAE3B,QAAA,IACE,qBAAqB;aACrB,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAClC,YAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;AACrC,YAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3B,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,EAChD;AACA,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;AACtC,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,MAAM,EAAE;YACV,MAAM,UAAU,GAAG;AACjB,kBAAE,0BAA0B,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM;kBACrE,IAAI;YACR,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7C,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;AACtC,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AAChC,YAAA,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;QACpC;aAAO;YACL,MAAM,UAAU,GAAG;AACjB,kBAAE,8BAA8B,CAC5B,cAAc,CAAC,CAAC,EAChB,cAAc,CAAC,CAAC,EAChB,MAAM;kBAER,IAAI;YACR,IAAI,CAAC,UAAU,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC;AACjD,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;AACtC,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;AAClC,YAAA,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW;AAC5C,YAAA,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC;QACzC;AAEA,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;QACtC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC;QAE5D,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/B,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,YAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;QAC3C;aAAO;AACL,YAAA,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,EAAE;AAC/C,gBAAA,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE;AAC3B,gBAAA,UAAU,EAAE,WAAW,CAAC,KAAK,EAAE;AAC/B,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;AACrB,gBAAA,aAAa,EAAE,cAAc,CAAC,KAAK,EAAE;AACZ,aAAA,CAAC;QAC9B;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,yBAAyB,CAAC,MAAc,EAAA;QAC9C,IAAI,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACrD;QACF;QACA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEQ,IAAA,yBAAyB,CAAC,MAAc,EAAA;QAC9C,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACzD;QACF;QACA,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEQ,IAAA,sBAAsB,CAC5B,MAAc,EACd,MAAe,EACf,MAAe,EAAA;QAEf,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAW,EAC/C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAW,EAChD,CAAC,CACF;YACD;QACF;AACA,QAAA,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAW,EACpD,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAW,EACzD,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAW,CAC3D;IACH;AAEQ,IAAA,iBAAiB,CAAC,MAAc,EAAE,IAAU,EAAE,MAAe,EAAA;QACnE,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QACzD,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE;YAChD;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC;;;;;QAMlE,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC;AAE5D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,WAAW,CAAC,OAAO,EAAE;IACvB;IAEQ,sBAAsB,CAAC,MAAc,EAAE,MAAe,EAAA;QAC5D,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;QAC3D,IAAI,MAAM,EAAE;YACV,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC;AACvE,YAAA,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;QACzC;QAEA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC;QACvE,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;cACjD,cAAc,CAAC;cACf,CAAC;AACL,QAAA,MAAM,SAAS,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC;AAC1E,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC;QACzD,OAAO,IAAI,gBAAgB,CACzB,MAAM,EACN,MAAM,EACN,MAAM,EACN,EAAE,EACF,EAAE,EACF,IAAI,EACJ,IAAI,CAAC,EAAE,GAAG,YAAY,GAAG,CAAC,EAC1B,YAAY,CACb;IACH;AAEQ,IAAA,sBAAsB,CAC5B,MAAc,EACd,IAAU,EACV,MAAe,EAAA;AAEf,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QACjE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,qBAAqB,GAAG,yBAAyB,CACrD,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,eAAe,CAChB;QACD,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;QAC3D,MAAM,yBAAyB,GAAG;AAChC,cAAE,0BAA0B,CACxB,cAAc,CAAC,CAAC,EAChB,cAAc,CAAC,CAAC,EAChB,MAAM,CACP,IAAI;cACL,8BAA8B,CAC5B,cAAc,CAAC,CAAC,EAChB,cAAc,CAAC,CAAC,EAChB,MAAM,CACP,IAAI,IAAI,IAAI,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC;;;;AAK5D,QAAA,IAAI,qBAAqB,IAAI,yBAAyB,EAAE;AACtD,YAAA,OAAO,IAAI;QACb;QACA,QACE,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC;YACtD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,cAAc,EAAE,eAAe,CAAC;IAE1E;IAEQ,oBAAoB,CAAC,QAAiB,EAAE,OAAgB,EAAA;AAC9D,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ;AAC1C,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ;QACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9D,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE;YACrC,OAAO,gBAAgB,CAAC,IAAI,CAC1B,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAC7D;QACH;AAEA,QAAA,MAAM,IAAI,GAAG,CAAC,QAAkB,KAAI;YAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;YAClE,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc,KAAI;gBAClE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;AAC7C,gBAAA,OAAO,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,WAAW;AACpD,YAAA,CAAC;YACD,OAAO;gBACL,EAAE;gBACF,EAAE;gBACF,EAAE;gBACF,YAAY,CACV,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvB,oBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACzB,oBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC3B,EAAE,EACF,EAAE,CACH;gBACD,YAAY,CACV,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvB,oBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACzB,oBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,EAC5B,EAAE,EACF,EAAE,CACH;gBACD,YAAY,CACV,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvB,oBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACzB,oBAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,EAC5B,EAAE,EACF,EAAE,CACH;aACF;AACH,QAAA,CAAC;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC3C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,KAAI;AAC1D,YAAA,MAAM,SAAS,GACb,KAAK,GAAG;kBACJ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;kBACzD,KAAK;YACX,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS;AACrC,QAAA,CAAC;QAED,QACE,YAAY,CAAC,IAAI,CACf,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CACjE;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAE1E;IAEQ,wBAAwB,CAC9B,MAAc,EACd,IAAyB,EAAA;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAClD,OAAO,CAAC,IAAI,CACV,CAAA,gBAAA,EAAmB,IAAI,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,CAAA,wGAAA,CAA0G,CACxJ;QACH;QACA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE;AAC5C,YAAA,cAAc,EAAE,eAAe,CAAC,KAAK,EAAE;AACvC,YAAA,aAAa,EAAE,cAAc,CAAC,KAAK,EAAE;AACtC,SAAA,CAAC;IACJ;AAEQ,IAAA,kBAAkB,CACxB,KAAa,EACb,MAAc,EACd,OAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE;AAC1C,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,YAAY,EAAE,IAAI,YAAY,CAC5B,KAAK,EACL,MAAM,EACN,OAAO,GAAG,kBAAkB,GAAG,eAAe,EAC9C,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,GAAG,kBAAkB,GAAG,WAAW,CAC3C;AACD,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,aAAa,EAAE,OAAO;AACvB,SAAA,CAAC;IACJ;AACD;;;;"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Matrix4, Object3D, Quaternion, Vector3 } from '../runtime/index.js';
8
+ export declare function resolveLayerReferencePose(object: Object3D, xrOrigin: Object3D, position: Vector3, quaternion: Quaternion, resolvedScale: Vector3, resolvedMatrix?: Matrix4): boolean;
9
+ export declare function resolveQuadLayerDimensions(width: number, height: number, resolvedScale: Vector3): {
10
+ width: number;
11
+ height: number;
12
+ } | null;
13
+ export declare function resolveCylinderLayerDimensions(radius: number, aspectRatio: number, resolvedScale: Vector3): {
14
+ radius: number;
15
+ aspectRatio: number;
16
+ } | null;
17
+ export declare function isValidCylinderLayerAngle(centralAngle: number): boolean;
18
+ //# sourceMappingURL=xr-layer-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xr-layer-transform.d.ts","sourceRoot":"","sources":["../../src/layers/xr-layer-transform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAoD7E,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,OAAO,EACtB,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAuBT;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,GACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqB1C;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,OAAO,GACrB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuBhD;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAMvE"}
@@ -0,0 +1,115 @@
1
+ import '../runtime/three.js';
2
+ import { Matrix4 } from 'three';
3
+
4
+ /**
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ const originInverse = new Matrix4();
11
+ const relativeMatrix = new Matrix4();
12
+ const ORTHOGONAL_EPSILON = 0.0001;
13
+ function isFiniteVector3(vector) {
14
+ return (Number.isFinite(vector.x) &&
15
+ Number.isFinite(vector.y) &&
16
+ Number.isFinite(vector.z));
17
+ }
18
+ function hasSupportedBasis(matrix) {
19
+ const elements = matrix.elements;
20
+ if (!elements.every(Number.isFinite)) {
21
+ return false;
22
+ }
23
+ const xx = elements[0] ** 2 + elements[1] ** 2 + elements[2] ** 2;
24
+ const yy = elements[4] ** 2 + elements[5] ** 2 + elements[6] ** 2;
25
+ const zz = elements[8] ** 2 + elements[9] ** 2 + elements[10] ** 2;
26
+ if (xx === 0 || yy === 0 || zz === 0) {
27
+ return false;
28
+ }
29
+ const xy = (elements[0] * elements[4] +
30
+ elements[1] * elements[5] +
31
+ elements[2] * elements[6]) /
32
+ Math.sqrt(xx * yy);
33
+ const xz = (elements[0] * elements[8] +
34
+ elements[1] * elements[9] +
35
+ elements[2] * elements[10]) /
36
+ Math.sqrt(xx * zz);
37
+ const yz = (elements[4] * elements[8] +
38
+ elements[5] * elements[9] +
39
+ elements[6] * elements[10]) /
40
+ Math.sqrt(yy * zz);
41
+ return (Number.isFinite(matrix.determinant()) &&
42
+ Math.abs(xy) <= ORTHOGONAL_EPSILON &&
43
+ Math.abs(xz) <= ORTHOGONAL_EPSILON &&
44
+ Math.abs(yz) <= ORTHOGONAL_EPSILON);
45
+ }
46
+ function resolveLayerReferencePose(object, xrOrigin, position, quaternion, resolvedScale, resolvedMatrix) {
47
+ xrOrigin.updateWorldMatrix(true, false);
48
+ object.updateWorldMatrix(true, false);
49
+ originInverse.copy(xrOrigin.matrixWorld).invert();
50
+ relativeMatrix.multiplyMatrices(originInverse, object.matrixWorld);
51
+ resolvedMatrix === null || resolvedMatrix === void 0 ? void 0 : resolvedMatrix.copy(relativeMatrix);
52
+ // XRRigidTransform can represent translation and rotation only. Layer
53
+ // dimensions account for axis-aligned scale, but a sheared transform cannot
54
+ // be reproduced by a native composition layer.
55
+ if (!hasSupportedBasis(relativeMatrix)) {
56
+ return false;
57
+ }
58
+ relativeMatrix.decompose(position, quaternion, resolvedScale);
59
+ return (isFiniteVector3(position) &&
60
+ Number.isFinite(quaternion.x) &&
61
+ Number.isFinite(quaternion.y) &&
62
+ Number.isFinite(quaternion.z) &&
63
+ Number.isFinite(quaternion.w) &&
64
+ isFiniteVector3(resolvedScale));
65
+ }
66
+ function resolveQuadLayerDimensions(width, height, resolvedScale) {
67
+ const resolvedWidth = width * resolvedScale.x;
68
+ const resolvedHeight = height * resolvedScale.y;
69
+ if (!Number.isFinite(width) ||
70
+ !Number.isFinite(height) ||
71
+ !isFiniteVector3(resolvedScale) ||
72
+ width <= 0 ||
73
+ height <= 0 ||
74
+ resolvedScale.x <= 0 ||
75
+ resolvedScale.y <= 0 ||
76
+ resolvedScale.z <= 0 ||
77
+ !Number.isFinite(resolvedWidth) ||
78
+ !Number.isFinite(resolvedHeight)) {
79
+ return null;
80
+ }
81
+ return {
82
+ width: resolvedWidth,
83
+ height: resolvedHeight,
84
+ };
85
+ }
86
+ function resolveCylinderLayerDimensions(radius, aspectRatio, resolvedScale) {
87
+ const resolvedRadius = radius * resolvedScale.x;
88
+ const resolvedAspectRatio = aspectRatio * (resolvedScale.x / resolvedScale.y);
89
+ if (!Number.isFinite(radius) ||
90
+ !Number.isFinite(aspectRatio) ||
91
+ !isFiniteVector3(resolvedScale) ||
92
+ radius <= 0 ||
93
+ aspectRatio <= 0 ||
94
+ resolvedScale.x <= 0 ||
95
+ resolvedScale.y <= 0 ||
96
+ resolvedScale.z <= 0 ||
97
+ Math.abs(resolvedScale.x - resolvedScale.z) >
98
+ 0.0001 * Math.max(resolvedScale.x, resolvedScale.z) ||
99
+ !Number.isFinite(resolvedRadius) ||
100
+ !Number.isFinite(resolvedAspectRatio)) {
101
+ return null;
102
+ }
103
+ return {
104
+ radius: resolvedRadius,
105
+ aspectRatio: resolvedAspectRatio,
106
+ };
107
+ }
108
+ function isValidCylinderLayerAngle(centralAngle) {
109
+ return (Number.isFinite(centralAngle) &&
110
+ centralAngle > 0 &&
111
+ centralAngle <= Math.PI * 2);
112
+ }
113
+
114
+ export { isValidCylinderLayerAngle, resolveCylinderLayerDimensions, resolveLayerReferencePose, resolveQuadLayerDimensions };
115
+ //# sourceMappingURL=xr-layer-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xr-layer-transform.js","sources":["../../src/layers/xr-layer-transform.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Matrix4, Object3D, Quaternion, Vector3 } from '../runtime/index.js';\n\nconst originInverse = new Matrix4();\nconst relativeMatrix = new Matrix4();\n\nconst ORTHOGONAL_EPSILON = 0.0001;\n\nfunction isFiniteVector3(vector: Vector3): boolean {\n return (\n Number.isFinite(vector.x) &&\n Number.isFinite(vector.y) &&\n Number.isFinite(vector.z)\n );\n}\n\nfunction hasSupportedBasis(matrix: Matrix4): boolean {\n const elements = matrix.elements;\n if (!elements.every(Number.isFinite)) {\n return false;\n }\n\n const xx = elements[0] ** 2 + elements[1] ** 2 + elements[2] ** 2;\n const yy = elements[4] ** 2 + elements[5] ** 2 + elements[6] ** 2;\n const zz = elements[8] ** 2 + elements[9] ** 2 + elements[10] ** 2;\n if (xx === 0 || yy === 0 || zz === 0) {\n return false;\n }\n\n const xy =\n (elements[0] * elements[4] +\n elements[1] * elements[5] +\n elements[2] * elements[6]) /\n Math.sqrt(xx * yy);\n const xz =\n (elements[0] * elements[8] +\n elements[1] * elements[9] +\n elements[2] * elements[10]) /\n Math.sqrt(xx * zz);\n const yz =\n (elements[4] * elements[8] +\n elements[5] * elements[9] +\n elements[6] * elements[10]) /\n Math.sqrt(yy * zz);\n\n return (\n Number.isFinite(matrix.determinant()) &&\n Math.abs(xy) <= ORTHOGONAL_EPSILON &&\n Math.abs(xz) <= ORTHOGONAL_EPSILON &&\n Math.abs(yz) <= ORTHOGONAL_EPSILON\n );\n}\n\nexport function resolveLayerReferencePose(\n object: Object3D,\n xrOrigin: Object3D,\n position: Vector3,\n quaternion: Quaternion,\n resolvedScale: Vector3,\n resolvedMatrix?: Matrix4,\n): boolean {\n xrOrigin.updateWorldMatrix(true, false);\n object.updateWorldMatrix(true, false);\n originInverse.copy(xrOrigin.matrixWorld).invert();\n relativeMatrix.multiplyMatrices(originInverse, object.matrixWorld);\n resolvedMatrix?.copy(relativeMatrix);\n\n // XRRigidTransform can represent translation and rotation only. Layer\n // dimensions account for axis-aligned scale, but a sheared transform cannot\n // be reproduced by a native composition layer.\n if (!hasSupportedBasis(relativeMatrix)) {\n return false;\n }\n\n relativeMatrix.decompose(position, quaternion, resolvedScale);\n return (\n isFiniteVector3(position) &&\n Number.isFinite(quaternion.x) &&\n Number.isFinite(quaternion.y) &&\n Number.isFinite(quaternion.z) &&\n Number.isFinite(quaternion.w) &&\n isFiniteVector3(resolvedScale)\n );\n}\n\nexport function resolveQuadLayerDimensions(\n width: number,\n height: number,\n resolvedScale: Vector3,\n): { width: number; height: number } | null {\n const resolvedWidth = width * resolvedScale.x;\n const resolvedHeight = height * resolvedScale.y;\n if (\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n !isFiniteVector3(resolvedScale) ||\n width <= 0 ||\n height <= 0 ||\n resolvedScale.x <= 0 ||\n resolvedScale.y <= 0 ||\n resolvedScale.z <= 0 ||\n !Number.isFinite(resolvedWidth) ||\n !Number.isFinite(resolvedHeight)\n ) {\n return null;\n }\n return {\n width: resolvedWidth,\n height: resolvedHeight,\n };\n}\n\nexport function resolveCylinderLayerDimensions(\n radius: number,\n aspectRatio: number,\n resolvedScale: Vector3,\n): { radius: number; aspectRatio: number } | null {\n const resolvedRadius = radius * resolvedScale.x;\n const resolvedAspectRatio = aspectRatio * (resolvedScale.x / resolvedScale.y);\n if (\n !Number.isFinite(radius) ||\n !Number.isFinite(aspectRatio) ||\n !isFiniteVector3(resolvedScale) ||\n radius <= 0 ||\n aspectRatio <= 0 ||\n resolvedScale.x <= 0 ||\n resolvedScale.y <= 0 ||\n resolvedScale.z <= 0 ||\n Math.abs(resolvedScale.x - resolvedScale.z) >\n 0.0001 * Math.max(resolvedScale.x, resolvedScale.z) ||\n !Number.isFinite(resolvedRadius) ||\n !Number.isFinite(resolvedAspectRatio)\n ) {\n return null;\n }\n return {\n radius: resolvedRadius,\n aspectRatio: resolvedAspectRatio,\n };\n}\n\nexport function isValidCylinderLayerAngle(centralAngle: number): boolean {\n return (\n Number.isFinite(centralAngle) &&\n centralAngle > 0 &&\n centralAngle <= Math.PI * 2\n );\n}\n"],"names":[],"mappings":"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"}
@@ -40,7 +40,8 @@ export declare const XRQuadLayer: import("elics").Component<{
40
40
  default: number;
41
41
  };
42
42
  /**
43
- * Callback invoked each frame to render layer content.
43
+ * Callback invoked each frame while the layer is visible and its render
44
+ * surface is active.
44
45
  * The renderer's render target is already set; call
45
46
  * `renderer.render(scene, camera)` to draw into the layer.
46
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"xr-quad-layer.d.ts","sourceRoot":"","sources":["../../src/layers/xr-quad-layer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAC7D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW;IAGpB,mCAAmC;;;;;IAEnC,oCAAoC;;;;;IAEpC,oDAAoD;;;;;IAEpD,qDAAqD;;;;;IAErD;;;;OAIG;;;;;IAEH,0DAA0D;;;;;EAI7D,CAAC"}
1
+ {"version":3,"file":"xr-quad-layer.d.ts","sourceRoot":"","sources":["../../src/layers/xr-quad-layer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAC7D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW;IAGpB,mCAAmC;;;;;IAEnC,oCAAoC;;;;;IAEpC,oDAAoD;;;;;IAEpD,qDAAqD;;;;;IAErD;;;;;OAKG;;;;;IAEH,0DAA0D;;;;;EAI7D,CAAC"}
@@ -29,7 +29,8 @@ const XRQuadLayer = createComponent('XRQuadLayer', {
29
29
  /** Height of the layer's render target in pixels. */
30
30
  pixelHeight: { type: Types.Int16, default: 1024 },
31
31
  /**
32
- * Callback invoked each frame to render layer content.
32
+ * Callback invoked each frame while the layer is visible and its render
33
+ * surface is active.
33
34
  * The renderer's render target is already set; call
34
35
  * `renderer.render(scene, camera)` to draw into the layer.
35
36
  */
@@ -1 +1 @@
1
- {"version":3,"file":"xr-quad-layer.js","sources":["../../src/layers/xr-quad-layer.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;;;;AAYG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;;IAEE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;IAE5C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;IAE7C,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;;IAEhD,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;AACjD;;;;AAIG;IACH,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;;IAErD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;CACjD,EACD,kCAAkC;;;;"}
1
+ {"version":3,"file":"xr-quad-layer.js","sources":["../../src/layers/xr-quad-layer.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Types, createComponent } from '../ecs/component.js';\n/**\n * XRQuadLayer - Component for WebXR quad composition layers.\n *\n * A quad layer renders content onto a flat rectangular surface positioned in\n * 3D space. The entity's transform controls the layer's world position and\n * orientation. In XR, the content is composited by the device's native\n * compositor for sharper rendering and lower latency.\n *\n * Outside XR, the layer content is displayed on a textured plane mesh as a\n * fallback.\n *\n * @category Layers\n */\nexport const XRQuadLayer = createComponent(\n 'XRQuadLayer',\n {\n /** Width of the quad in meters. */\n width: { type: Types.Float32, default: 1.0 },\n /** Height of the quad in meters. */\n height: { type: Types.Float32, default: 1.0 },\n /** Width of the layer's render target in pixels. */\n pixelWidth: { type: Types.Int16, default: 1024 },\n /** Height of the layer's render target in pixels. */\n pixelHeight: { type: Types.Int16, default: 1024 },\n /**\n * Callback invoked each frame while the layer is visible and its render\n * surface is active.\n * The renderer's render target is already set; call\n * `renderer.render(scene, camera)` to draw into the layer.\n */\n renderCallback: { type: Types.Object, default: null },\n /** Enable stencil buffer on the layer's render target. */\n stencil: { type: Types.Boolean, default: false },\n },\n 'Quad composition layer for WebXR',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;;;;AAYG;AACI,MAAM,WAAW,GAAG,eAAe,CACxC,aAAa,EACb;;IAEE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;IAE5C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;IAE7C,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;;IAEhD,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;AACjD;;;;;AAKG;IACH,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;;IAErD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;CACjD,EACD,kCAAkC;;;;"}
@@ -21,4 +21,6 @@ export declare class LevelComponentApplier {
21
21
  private static mapComponentDataToProps;
22
22
  private static handlePanelComponents;
23
23
  }
24
+ /** @internal */
25
+ export declare function resetLevelComponentWarningStateForTests(): void;
24
26
  //# sourceMappingURL=level-component-applier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"level-component-applier.d.ts","sourceRoot":"","sources":["../../src/level/level-component-applier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAM9D,MAAM,WAAW,0BAA0B;IACzC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,qBAAqB;IAChC,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,0BAA+B,GACvC,IAAI;IAuDP,MAAM,CAAC,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,IAAI;IAsBP,OAAO,CAAC,MAAM,CAAC,eAAe;IAyB9B,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAmDtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAoCrC"}
1
+ {"version":3,"file":"level-component-applier.d.ts","sourceRoot":"","sources":["../../src/level/level-component-applier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAQ9D,MAAM,WAAW,0BAA0B;IACzC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,qBAAqB;IAChC,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,0BAA+B,GACvC,IAAI;IAuDP,MAAM,CAAC,gBAAgB,CACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,IAAI;IAuBP,OAAO,CAAC,MAAM,CAAC,eAAe;IAyB9B,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAmDtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAoCrC;AAiDD,gBAAgB;AAChB,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D"}
@@ -23,6 +23,7 @@ const LEVEL_COMPONENT_PREFIX = 'com.iwsdk.components.';
23
23
  const LEVEL_COMPONENT_ALIASES = {
24
24
  Interactable: 'RayInteractable',
25
25
  };
26
+ let didWarnInteractableAlias = false;
26
27
  class LevelComponentApplier {
27
28
  static applyComponents(entity, components, world, options = {}) {
28
29
  const allComponents = ComponentRegistry.getAllComponents();
@@ -35,7 +36,7 @@ class LevelComponentApplier {
35
36
  return;
36
37
  }
37
38
  const componentKey = stripComponentPrefix(componentName);
38
- const targetId = normalizeComponentId(componentKey);
39
+ const targetId = normalizeComponentId(componentKey, allComponents, true);
39
40
  if (targetId === 'PanelUI') {
40
41
  return;
41
42
  }
@@ -70,7 +71,7 @@ class LevelComponentApplier {
70
71
  }
71
72
  const allComponents = ComponentRegistry.getAllComponents();
72
73
  for (const componentName of Object.keys(components)) {
73
- const targetId = normalizeComponentId(stripComponentPrefix(componentName));
74
+ const targetId = normalizeComponentId(stripComponentPrefix(componentName), allComponents);
74
75
  const component = allComponents.find((entry) => entry.id === targetId);
75
76
  if (component && entity.hasComponent(component)) {
76
77
  if (((_a = getComponentEditorMetadata(component)) === null || _a === void 0 ? void 0 : _a.intrinsic) === true) {
@@ -182,9 +183,27 @@ function stripComponentPrefix(componentName) {
182
183
  ? componentName.slice(LEVEL_COMPONENT_PREFIX.length)
183
184
  : componentName;
184
185
  }
185
- function normalizeComponentId(componentId) {
186
+ function normalizeComponentId(componentId, components, warnDeprecatedAlias = false) {
186
187
  var _a;
187
- return (_a = LEVEL_COMPONENT_ALIASES[componentId]) !== null && _a !== void 0 ? _a : componentId;
188
+ const targetId = components.some((component) => component.id === componentId)
189
+ ? componentId
190
+ : ((_a = LEVEL_COMPONENT_ALIASES[componentId]) !== null && _a !== void 0 ? _a : componentId);
191
+ if (targetId !== componentId &&
192
+ warnDeprecatedAlias &&
193
+ !didWarnInteractableAlias &&
194
+ shouldEmitDevWarning()) {
195
+ didWarnInteractableAlias = true;
196
+ console.warn('[IWSDK] `Interactable` is deprecated; use `RayInteractable` instead. See https://iwsdk.dev/api/core/variables/Interactable.html');
197
+ }
198
+ return targetId;
199
+ }
200
+ function shouldEmitDevWarning() {
201
+ var _a;
202
+ return ((_a = import.meta.env) === null || _a === void 0 ? void 0 : _a.DEV) !== false;
203
+ }
204
+ /** @internal */
205
+ function resetLevelComponentWarningStateForTests() {
206
+ didWarnInteractableAlias = false;
188
207
  }
189
208
  function withSceneComponentContext(message, nodeId, componentName) {
190
209
  return nodeId == null
@@ -195,5 +214,5 @@ function isRecord(value) {
195
214
  return typeof value === 'object' && value !== null && !Array.isArray(value);
196
215
  }
197
216
 
198
- export { LEVEL_COMPONENT_PREFIX, LevelComponentApplier };
217
+ export { LEVEL_COMPONENT_PREFIX, LevelComponentApplier, resetLevelComponentWarningStateForTests };
199
218
  //# sourceMappingURL=level-component-applier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"level-component-applier.js","sources":["../../src/level/level-component-applier.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"level-component-applier.js","sources":["../../src/level/level-component-applier.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { AnySchema, Component } from 'elics';\nimport { getComponentEditorMetadata } from '../ecs/component-editor-metadata.js';\nimport { ComponentRegistry, Types } from '../ecs/component.js';\nimport type { Entity } from '../ecs/entity.js';\nimport type { World } from '../ecs/world.js';\nimport { PanelUI } from '../ui/index.js';\n\n/** Canonical component id prefix used by native scene JSON. */\nexport const LEVEL_COMPONENT_PREFIX = 'com.iwsdk.components.';\n\nconst LEVEL_COMPONENT_ALIASES: Record<string, string> = {\n Interactable: 'RayInteractable',\n};\n\nlet didWarnInteractableAlias = false;\n\nexport interface LevelComponentApplyOptions {\n allowUnprefixedComponents?: boolean;\n nodeId?: string;\n resolveEntityReference?: (reference: unknown) => Entity | undefined;\n strict?: boolean;\n}\n\nexport class LevelComponentApplier {\n static applyComponents(\n entity: Entity,\n components: Record<string, unknown>,\n world: World,\n options: LevelComponentApplyOptions = {},\n ): void {\n const allComponents = ComponentRegistry.getAllComponents();\n this.handlePanelComponents(entity, components, world, options);\n\n Object.entries(components).forEach(([componentName, componentData]) => {\n const hasPackagePrefix = componentName.startsWith(LEVEL_COMPONENT_PREFIX);\n const allowUnprefixed =\n options.allowUnprefixedComponents === true || options.strict === true;\n if (!hasPackagePrefix && !allowUnprefixed) {\n return;\n }\n\n const componentKey = stripComponentPrefix(componentName);\n const targetId = normalizeComponentId(componentKey, allComponents, true);\n if (targetId === 'PanelUI') {\n return;\n }\n\n const component = allComponents.find((comp) => comp.id === targetId);\n if (component) {\n const componentProps = this.mapComponentDataToProps(\n component,\n componentData,\n options,\n );\n if (!component.bitmask) {\n world.registerComponent(component);\n }\n if (\n entity.hasComponent(component) &&\n getComponentEditorMetadata(component)?.intrinsic === true\n ) {\n this.updateComponent(entity, component, componentProps);\n } else {\n entity.addComponent(component, componentProps);\n }\n } else if (options.strict) {\n throw new Error(\n withSceneComponentContext(\n `Unknown component \"${componentName}\". Available components: ${allComponents\n .map((comp) => comp.id)\n .join(', ')}`,\n options.nodeId,\n componentName,\n ),\n );\n } else if (componentName.startsWith(LEVEL_COMPONENT_PREFIX)) {\n console.warn(\n `Component \"${componentName}\" not found in registry. Available components:`,\n allComponents.map((comp) => comp.id),\n );\n }\n });\n }\n\n static removeComponents(\n entity: Entity,\n components: Record<string, unknown> | undefined,\n ): void {\n if (components == null) {\n return;\n }\n const allComponents = ComponentRegistry.getAllComponents();\n for (const componentName of Object.keys(components)) {\n const targetId = normalizeComponentId(\n stripComponentPrefix(componentName),\n allComponents,\n );\n const component = allComponents.find((entry) => entry.id === targetId);\n if (component && entity.hasComponent(component)) {\n if (getComponentEditorMetadata(component)?.intrinsic === true) {\n if (component.id === 'Visibility') {\n (entity as any).setValue(component, 'isVisible', true);\n }\n } else {\n entity.removeComponent(component);\n }\n }\n }\n }\n\n private static updateComponent(\n entity: Entity,\n component: Component<AnySchema>,\n props: Record<string, unknown>,\n ): void {\n for (const [key, value] of Object.entries(props)) {\n const field = component.schema[key];\n if (field == null) {\n continue;\n }\n if (\n field.type === Types.Vec2 ||\n field.type === Types.Vec3 ||\n field.type === Types.Vec4 ||\n field.type === Types.Color\n ) {\n if (Array.isArray(value)) {\n (entity as any).getVectorView(component, key).set(value);\n }\n continue;\n }\n (entity as any).setValue(component, key, value);\n }\n }\n\n private static mapComponentDataToProps(\n component: Component<AnySchema>,\n componentData: unknown,\n options: LevelComponentApplyOptions,\n ): Record<string, unknown> {\n if (!isRecord(componentData)) {\n return {};\n }\n\n const props: Record<string, unknown> = {};\n Object.entries(componentData).forEach(([key, fieldData]) => {\n const field = component.schema[key] as\n | Record<string, unknown>\n | undefined;\n if (!field) {\n return;\n }\n\n if (isRecord(fieldData)) {\n if (\n (field.type === Types.Entity || field.widget === 'entity') &&\n isSceneEntityReference(fieldData)\n ) {\n const referencedEntity = options.resolveEntityReference?.(fieldData);\n if (referencedEntity == null) {\n if (options.strict) {\n throw new Error(\n `Unable to resolve entity reference ${JSON.stringify(fieldData)}`,\n );\n }\n props[key] = fieldData;\n } else {\n props[key] =\n field.type === Types.Entity\n ? referencedEntity\n : referencedEntity.object3D;\n }\n } else if (field.type === Types.Enum && 'alias' in fieldData) {\n props[key] = fieldData.alias;\n } else if ('value' in fieldData) {\n props[key] = fieldData.value;\n } else {\n props[key] = fieldData;\n }\n } else {\n props[key] = fieldData;\n }\n });\n return props;\n }\n\n private static handlePanelComponents(\n entity: Entity,\n components: Record<string, unknown>,\n world: World,\n options: LevelComponentApplyOptions,\n ): void {\n const panelComponentName =\n canUseUnprefixedComponents(options) && components.PanelUI != null\n ? 'PanelUI'\n : `${LEVEL_COMPONENT_PREFIX}PanelUI`;\n const panelComponent =\n panelComponentName === 'PanelUI'\n ? components.PanelUI\n : components[`${LEVEL_COMPONENT_PREFIX}PanelUI`];\n const resolvedPanelComponent = panelComponent;\n\n if (!isRecord(resolvedPanelComponent)) {\n return;\n }\n\n const props = this.mapComponentDataToProps(\n PanelUI,\n resolvedPanelComponent,\n options,\n );\n if (typeof props.config !== 'string' || props.config.length === 0) {\n return;\n }\n\n if (!PanelUI.bitmask) {\n world.registerComponent(PanelUI);\n }\n entity.addComponent(PanelUI, {\n config: props.config,\n });\n }\n}\n\nfunction isSceneEntityReference(value: Record<string, unknown>): boolean {\n return (\n (value.type === 'node' && typeof value.id === 'string') ||\n (value.type === 'player-space' && typeof value.target === 'string') ||\n value.type === 'level-root'\n );\n}\n\nfunction canUseUnprefixedComponents(\n options: LevelComponentApplyOptions,\n): boolean {\n return options.allowUnprefixedComponents === true || options.strict === true;\n}\n\nfunction stripComponentPrefix(componentName: string): string {\n return componentName.startsWith(LEVEL_COMPONENT_PREFIX)\n ? componentName.slice(LEVEL_COMPONENT_PREFIX.length)\n : componentName;\n}\n\nfunction normalizeComponentId(\n componentId: string,\n components: readonly Component<AnySchema>[],\n warnDeprecatedAlias = false,\n): string {\n const targetId = components.some((component) => component.id === componentId)\n ? componentId\n : (LEVEL_COMPONENT_ALIASES[componentId] ?? componentId);\n\n if (\n targetId !== componentId &&\n warnDeprecatedAlias &&\n !didWarnInteractableAlias &&\n shouldEmitDevWarning()\n ) {\n didWarnInteractableAlias = true;\n console.warn(\n '[IWSDK] `Interactable` is deprecated; use `RayInteractable` instead. See https://iwsdk.dev/api/core/variables/Interactable.html',\n );\n }\n return targetId;\n}\n\nfunction shouldEmitDevWarning(): boolean {\n return (import.meta as any).env?.DEV !== false;\n}\n\n/** @internal */\nexport function resetLevelComponentWarningStateForTests(): void {\n didWarnInteractableAlias = false;\n}\nfunction withSceneComponentContext(\n message: string,\n nodeId: string | undefined,\n componentName: string,\n): string {\n return nodeId == null\n ? `Component \"${componentName}\": ${message}`\n : `Scene node \"${nodeId}\" component \"${componentName}\": ${message}`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA;;;;;AAKG;AASH;AACO,MAAM,sBAAsB,GAAG;AAEtC,MAAM,uBAAuB,GAA2B;AACtD,IAAA,YAAY,EAAE,iBAAiB;CAChC;AAED,IAAI,wBAAwB,GAAG,KAAK;MASvB,qBAAqB,CAAA;IAChC,OAAO,eAAe,CACpB,MAAc,EACd,UAAmC,EACnC,KAAY,EACZ,OAAA,GAAsC,EAAE,EAAA;AAExC,QAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,gBAAgB,EAAE;QAC1D,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC;AAE9D,QAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,KAAI;;YACpE,MAAM,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAC,sBAAsB,CAAC;AACzE,YAAA,MAAM,eAAe,GACnB,OAAO,CAAC,yBAAyB,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;AACvE,YAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,eAAe,EAAE;gBACzC;YACF;AAEA,YAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,aAAa,CAAC;YACxD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC;AACxE,YAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC1B;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC;YACpE,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CACjD,SAAS,EACT,aAAa,EACb,OAAO,CACR;AACD,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACtB,oBAAA,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC;gBACpC;AACA,gBAAA,IACE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;oBAC9B,CAAA,CAAA,EAAA,GAAA,0BAA0B,CAAC,SAAS,CAAC,0CAAE,SAAS,MAAK,IAAI,EACzD;oBACA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC;gBACzD;qBAAO;AACL,oBAAA,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC;gBAChD;YACF;AAAO,iBAAA,IAAI,OAAO,CAAC,MAAM,EAAE;gBACzB,MAAM,IAAI,KAAK,CACb,yBAAyB,CACvB,CAAA,mBAAA,EAAsB,aAAa,4BAA4B;qBAC5D,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;AACrB,qBAAA,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,EACf,OAAO,CAAC,MAAM,EACd,aAAa,CACd,CACF;YACH;AAAO,iBAAA,IAAI,aAAa,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE;gBAC3D,OAAO,CAAC,IAAI,CACV,CAAA,WAAA,EAAc,aAAa,CAAA,8CAAA,CAAgD,EAC3E,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CACrC;YACH;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,gBAAgB,CACrB,MAAc,EACd,UAA+C,EAAA;;AAE/C,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;YACtB;QACF;AACA,QAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,gBAAgB,EAAE;QAC1D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACnD,MAAM,QAAQ,GAAG,oBAAoB,CACnC,oBAAoB,CAAC,aAAa,CAAC,EACnC,aAAa,CACd;AACD,YAAA,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC;YACtE,IAAI,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;gBAC/C,IAAI,CAAA,CAAA,EAAA,GAAA,0BAA0B,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,MAAK,IAAI,EAAE;AAC7D,oBAAA,IAAI,SAAS,CAAC,EAAE,KAAK,YAAY,EAAE;wBAChC,MAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC;oBACxD;gBACF;qBAAO;AACL,oBAAA,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC;gBACnC;YACF;QACF;IACF;AAEQ,IAAA,OAAO,eAAe,CAC5B,MAAc,EACd,SAA+B,EAC/B,KAA8B,EAAA;AAE9B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAChD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AACnC,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;gBACjB;YACF;AACA,YAAA,IACE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AACzB,gBAAA,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AACzB,gBAAA,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AACzB,gBAAA,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAC1B;AACA,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,MAAc,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC1D;gBACA;YACF;YACC,MAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC;QACjD;IACF;AAEQ,IAAA,OAAO,uBAAuB,CACpC,SAA+B,EAC/B,aAAsB,EACtB,OAAmC,EAAA;AAEnC,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC5B,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,KAAK,GAA4B,EAAE;AACzC,QAAA,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAAI;;YACzD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAErB;YACb,IAAI,CAAC,KAAK,EAAE;gBACV;YACF;AAEA,YAAA,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;AACvB,gBAAA,IACE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;AACzD,oBAAA,sBAAsB,CAAC,SAAS,CAAC,EACjC;oBACA,MAAM,gBAAgB,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,sBAAsB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAG,SAAS,CAAC;AACpE,oBAAA,IAAI,gBAAgB,IAAI,IAAI,EAAE;AAC5B,wBAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,4BAAA,MAAM,IAAI,KAAK,CACb,CAAA,mCAAA,EAAsC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,CAAE,CAClE;wBACH;AACA,wBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;oBACxB;yBAAO;wBACL,KAAK,CAAC,GAAG,CAAC;AACR,4BAAA,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;AACnB,kCAAE;AACF,kCAAE,gBAAgB,CAAC,QAAQ;oBACjC;gBACF;AAAO,qBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,OAAO,IAAI,SAAS,EAAE;AAC5D,oBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK;gBAC9B;AAAO,qBAAA,IAAI,OAAO,IAAI,SAAS,EAAE;AAC/B,oBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK;gBAC9B;qBAAO;AACL,oBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;gBACxB;YACF;iBAAO;AACL,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;YACxB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,KAAK;IACd;IAEQ,OAAO,qBAAqB,CAClC,MAAc,EACd,UAAmC,EACnC,KAAY,EACZ,OAAmC,EAAA;QAEnC,MAAM,kBAAkB,GACtB,0BAA0B,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,IAAI;AAC3D,cAAE;AACF,cAAE,CAAA,EAAG,sBAAsB,CAAA,OAAA,CAAS;AACxC,QAAA,MAAM,cAAc,GAClB,kBAAkB,KAAK;cACnB,UAAU,CAAC;AACb,cAAE,UAAU,CAAC,GAAG,sBAAsB,CAAA,OAAA,CAAS,CAAC;QACpD,MAAM,sBAAsB,GAAG,cAAc;AAE7C,QAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;YACrC;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CACxC,OAAO,EACP,sBAAsB,EACtB,OAAO,CACR;AACD,QAAA,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACjE;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACpB,YAAA,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAClC;AACA,QAAA,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;YAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;AACrB,SAAA,CAAC;IACJ;AACD;AAED,SAAS,sBAAsB,CAAC,KAA8B,EAAA;AAC5D,IAAA,QACE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;AACtD,SAAC,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;AACnE,QAAA,KAAK,CAAC,IAAI,KAAK,YAAY;AAE/B;AAEA,SAAS,0BAA0B,CACjC,OAAmC,EAAA;IAEnC,OAAO,OAAO,CAAC,yBAAyB,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;AAC9E;AAEA,SAAS,oBAAoB,CAAC,aAAqB,EAAA;AACjD,IAAA,OAAO,aAAa,CAAC,UAAU,CAAC,sBAAsB;UAClD,aAAa,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM;UACjD,aAAa;AACnB;AAEA,SAAS,oBAAoB,CAC3B,WAAmB,EACnB,UAA2C,EAC3C,mBAAmB,GAAG,KAAK,EAAA;;AAE3B,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,WAAW;AAC1E,UAAE;WACC,CAAA,EAAA,GAAA,uBAAuB,CAAC,WAAW,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,WAAW,CAAC;IAEzD,IACE,QAAQ,KAAK,WAAW;QACxB,mBAAmB;AACnB,QAAA,CAAC,wBAAwB;QACzB,oBAAoB,EAAE,EACtB;QACA,wBAAwB,GAAG,IAAI;AAC/B,QAAA,OAAO,CAAC,IAAI,CACV,iIAAiI,CAClI;IACH;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,oBAAoB,GAAA;;IAC3B,OAAO,CAAA,CAAA,EAAA,GAAC,MAAM,CAAC,IAAY,CAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,MAAK,KAAK;AAChD;AAEA;SACgB,uCAAuC,GAAA;IACrD,wBAAwB,GAAG,KAAK;AAClC;AACA,SAAS,yBAAyB,CAChC,OAAe,EACf,MAA0B,EAC1B,aAAqB,EAAA;IAErB,OAAO,MAAM,IAAI;AACf,UAAE,CAAA,WAAA,EAAc,aAAa,CAAA,GAAA,EAAM,OAAO,CAAA;UACxC,eAAe,MAAM,CAAA,aAAA,EAAgB,aAAa,CAAA,GAAA,EAAM,OAAO,EAAE;AACvE;AAEA,SAAS,QAAQ,CAAC,KAAc,EAAA;AAC9B,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7E;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"level-player-rig.js","sources":["../../src/level/level-player-rig.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"level-player-rig.js","sources":["../../src/level/level-player-rig.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type {\n SceneBuiltinEntity,\n ScenePlayerRig,\n ScenePlayerTarget,\n SceneTransform,\n} from '@iwsdk/scene-composition';\nimport type { Entity } from '../ecs/entity.js';\nimport type { World } from '../ecs/world.js';\nimport { MathUtils } from '../runtime/index.js';\nimport { LevelComponentApplier } from './level-component-applier.js';\nimport { applySceneTransform } from './level-scene-object.js';\n\ninterface AppliedPlayerRigState {\n baseline: SceneTransform | undefined;\n resolveEntityReference?: (reference: unknown) => Entity | undefined;\n rig?: ScenePlayerRig;\n}\n\nexport interface ApplyScenePlayerRigOptions {\n resolveEntityReference?: (reference: unknown) => Entity | undefined;\n}\n\nconst appliedPlayerRigs = new WeakMap<World, AppliedPlayerRigState>();\n\n/** Reconcile scene-authored components on persistent player-rig entities. */\nexport function applyScenePlayerRig(\n world: World,\n nextRig: ScenePlayerRig | undefined,\n options: ApplyScenePlayerRigOptions = {},\n): void {\n const state = appliedPlayerRigs.get(world) ?? createPlayerRigState(world);\n const previousRig = state.rig;\n removePlayerRigComponents(world, previousRig);\n restorePlayerTransform(world, state.baseline);\n try {\n applyPlayerRig(world, nextRig, options.resolveEntityReference);\n syncLocomotionPlayerPosition(world);\n state.rig = nextRig == null ? undefined : structuredClone(nextRig);\n state.resolveEntityReference = options.resolveEntityReference;\n appliedPlayerRigs.set(world, state);\n } catch (error) {\n removePlayerRigComponents(world, nextRig);\n restorePlayerTransform(world, state.baseline);\n applyPlayerRig(world, previousRig, state.resolveEntityReference);\n syncLocomotionPlayerPosition(world);\n throw error;\n }\n}\n\nfunction applyPlayerRig(\n world: World,\n rig: ScenePlayerRig | undefined,\n resolveEntityReference:\n | ((reference: unknown) => Entity | undefined)\n | undefined,\n): void {\n if (world.playerEntity?.object3D != null) {\n applySceneTransform(world.playerEntity.object3D, rig?.transform);\n }\n for (const [label, entity, descriptor] of playerRigTargets(world, rig)) {\n if (descriptor?.components == null) {\n continue;\n }\n LevelComponentApplier.applyComponents(\n entity,\n descriptor.components,\n world,\n {\n nodeId: `$player/${label}`,\n resolveEntityReference,\n strict: true,\n },\n );\n }\n}\n\nfunction createPlayerRigState(world: World): AppliedPlayerRigState {\n return {\n baseline:\n world.playerEntity?.object3D == null\n ? undefined\n : captureTransform(world.playerEntity),\n };\n}\n\nfunction captureTransform(entity: Entity): SceneTransform {\n const object = entity.object3D!;\n return {\n position: object.position.toArray(),\n rotationDeg: [\n MathUtils.radToDeg(object.rotation.x),\n MathUtils.radToDeg(object.rotation.y),\n MathUtils.radToDeg(object.rotation.z),\n ],\n scale: object.scale.toArray(),\n };\n}\n\nfunction restorePlayerTransform(\n world: World,\n baseline: SceneTransform | undefined,\n) {\n if (world.playerEntity?.object3D != null && baseline != null) {\n applySceneTransform(world.playerEntity.object3D, baseline);\n }\n}\n\nfunction syncLocomotionPlayerPosition(world: World): void {\n const player = world.playerEntity?.object3D;\n if (player == null) {\n return;\n }\n world.setAuthoredPlayerPosition(player.position);\n}\n\nfunction removePlayerRigComponents(\n world: World,\n rig: ScenePlayerRig | undefined,\n): void {\n for (const [, entity, descriptor] of playerRigTargets(world, rig)) {\n LevelComponentApplier.removeComponents(entity, descriptor?.components);\n }\n}\n\nfunction playerRigTargets(\n world: World,\n rig: ScenePlayerRig | undefined,\n): Array<[ScenePlayerTarget, Entity, SceneBuiltinEntity | undefined]> {\n const spaces = world.playerSpaceEntities;\n const targets: Array<\n [ScenePlayerTarget, Entity | undefined, SceneBuiltinEntity | undefined]\n > = [\n ['player', world.playerEntity, rig],\n ['camera', world.cameraEntity, rig?.camera],\n ['head', world.playerHeadEntity, rig?.head],\n ['left-target-ray', spaces?.raySpaces.left, rig?.leftTargetRay],\n ['right-target-ray', spaces?.raySpaces.right, rig?.rightTargetRay],\n ['left-grip', spaces?.gripSpaces.left, rig?.leftGrip],\n ['right-grip', spaces?.gripSpaces.right, rig?.rightGrip],\n ];\n return targets.filter(\n (\n entry,\n ): entry is [ScenePlayerTarget, Entity, SceneBuiltinEntity | undefined] =>\n entry[1]?.object3D != null,\n );\n}\n\n/** Resolve one persistent runtime player-space entity. */\nexport function getScenePlayerTargetEntity(\n world: World,\n target: ScenePlayerTarget,\n): Entity {\n const match = playerRigTargets(world, undefined).find(\n ([candidate]) => candidate === target,\n );\n if (match == null) {\n throw new Error(`Player-space target \"${target}\" is unavailable`);\n }\n return match[1];\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"level-root.js","sources":["../../src/level/level-root.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,SAAS,GAAG,eAAe,CACtC,WAAW,EACX,EAAE,EACF,kDAAkD;;;;"}
1
+ {"version":3,"file":"level-root.js","sources":["../../src/level/level-root.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { createComponent } from '../ecs/component.js';\n/**\n * Marker component placed on the active level's root entity.\n *\n * @remarks\n * Systems can scope level‑wide behavior by requiring {@link LevelRoot} in their queries\n * to avoid scanning all level entities.\n *\n * @category Scene\n * @hideineditor\n */\nexport const LevelRoot = createComponent(\n 'LevelRoot',\n {},\n 'Marker component attached to level root entities',\n);\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAGH;;;;;;;;;AASG;AACI,MAAM,SAAS,GAAG,eAAe,CACtC,WAAW,EACX,EAAE,EACF,kDAAkD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"level-scene-environment.js","sources":["../../src/level/level-scene-environment.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"level-scene-environment.js","sources":["../../src/level/level-scene-environment.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { SceneEnvironment } from '@iwsdk/scene-composition';\nimport {\n ACESFilmicToneMapping,\n BasicShadowMap,\n CineonToneMapping,\n Fog,\n FogExp2,\n LinearToneMapping,\n NoToneMapping,\n PCFShadowMap,\n PCFSoftShadowMap,\n ReinhardToneMapping,\n Scene,\n WebGLRenderer,\n} from '../runtime/index.js';\n\nexport interface SceneEnvironmentState {\n fog: Scene['fog'];\n shadows: boolean;\n shadowMapType: WebGLRenderer['shadowMap']['type'];\n toneMapping: WebGLRenderer['toneMapping'];\n toneMappingExposure: number;\n userDataEnvironment: unknown;\n}\n\n/** Capture every renderer-global value changed by applySceneEnvironment. */\nexport function captureSceneEnvironment(\n scene: Scene,\n renderer: WebGLRenderer,\n): SceneEnvironmentState {\n return {\n fog: scene.fog,\n shadows: renderer.shadowMap.enabled,\n shadowMapType: renderer.shadowMap.type,\n toneMapping: renderer.toneMapping,\n toneMappingExposure: renderer.toneMappingExposure,\n userDataEnvironment: scene.userData.iwsdkSceneEnvironment,\n };\n}\n\n/**\n * Atomically apply scene environment fields and return the exact prior state.\n *\n * A supplied base state supplies values for omitted fields, allowing a level swap\n * to replace the active authored environment without first detaching it.\n */\nexport function applySceneEnvironment(\n scene: Scene,\n renderer: WebGLRenderer,\n environment: SceneEnvironment | undefined,\n baseState?: SceneEnvironmentState,\n): SceneEnvironmentState {\n const previous = captureSceneEnvironment(scene, renderer);\n if (environment == null && baseState == null) {\n return previous;\n }\n const prepared = prepareSceneEnvironment(environment, baseState ?? previous);\n try {\n installSceneEnvironmentState(scene, renderer, prepared);\n } catch (error) {\n installSceneEnvironmentState(scene, renderer, previous);\n throw error;\n }\n return previous;\n}\n\n/** Restore a state captured before a staged or committed scene was applied. */\nexport function restoreSceneEnvironment(\n scene: Scene,\n renderer: WebGLRenderer,\n state: SceneEnvironmentState,\n): void {\n const current = captureSceneEnvironment(scene, renderer);\n try {\n installSceneEnvironmentState(scene, renderer, state);\n } catch (error) {\n installSceneEnvironmentState(scene, renderer, current);\n throw error;\n }\n}\n\nfunction prepareSceneEnvironment(\n environment: SceneEnvironment | undefined,\n base: SceneEnvironmentState,\n): SceneEnvironmentState {\n const state: SceneEnvironmentState = {\n ...base,\n userDataEnvironment:\n environment == null ? base.userDataEnvironment : cloneJson(environment),\n };\n if (environment?.fog?.type === 'linear') {\n state.fog = new Fog(\n environment.fog.color ?? '#000000',\n environment.fog.near,\n environment.fog.far,\n );\n } else if (environment?.fog?.type === 'exponential') {\n state.fog = new FogExp2(\n environment.fog.color ?? '#000000',\n environment.fog.density,\n );\n }\n if (environment?.toneMapping != null) {\n state.toneMapping = resolveToneMapping(environment.toneMapping);\n }\n if (environment?.exposure != null) {\n state.toneMappingExposure = environment.exposure;\n }\n if (environment?.shadows != null) {\n state.shadows = environment.shadows;\n }\n if (environment?.shadowMapType != null) {\n state.shadowMapType = resolveShadowMapType(environment.shadowMapType);\n }\n return state;\n}\n\nfunction installSceneEnvironmentState(\n scene: Scene,\n renderer: WebGLRenderer,\n state: SceneEnvironmentState,\n): void {\n scene.fog = state.fog;\n renderer.shadowMap.enabled = state.shadows;\n renderer.shadowMap.type = state.shadowMapType;\n renderer.toneMapping = state.toneMapping;\n renderer.toneMappingExposure = state.toneMappingExposure;\n if (state.userDataEnvironment === undefined) {\n delete scene.userData.iwsdkSceneEnvironment;\n } else {\n scene.userData.iwsdkSceneEnvironment = state.userDataEnvironment;\n }\n}\n\nfunction resolveShadowMapType(\n type: NonNullable<SceneEnvironment['shadowMapType']>,\n) {\n switch (type) {\n case 'basic':\n return BasicShadowMap;\n case 'pcf':\n return PCFShadowMap;\n case 'pcf-soft':\n return PCFSoftShadowMap;\n }\n}\n\nfunction resolveToneMapping(\n mode: NonNullable<SceneEnvironment['toneMapping']>,\n) {\n switch (mode) {\n case 'none':\n return NoToneMapping;\n case 'linear':\n return LinearToneMapping;\n case 'reinhard':\n return ReinhardToneMapping;\n case 'cineon':\n return CineonToneMapping;\n case 'aces':\n return ACESFilmicToneMapping;\n }\n}\n\nfunction cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n"],"names":[],"mappings":"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"}