@pascal-app/viewer 1.0.7 → 1.1.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 (270) hide show
  1. package/README.md +209 -19
  2. package/dist/components/viewer/drone-controller.d.ts.map +1 -1
  3. package/dist/components/viewer/drone-controller.js +1 -5
  4. package/dist/components/viewer/first-person/build-collider-world.d.ts +14 -0
  5. package/dist/components/viewer/first-person/build-collider-world.d.ts.map +1 -0
  6. package/dist/components/viewer/first-person/build-collider-world.js +426 -0
  7. package/dist/components/viewer/first-person/ground-holes.d.ts +22 -0
  8. package/dist/components/viewer/first-person/ground-holes.d.ts.map +1 -0
  9. package/dist/components/viewer/first-person/ground-holes.js +116 -0
  10. package/dist/components/viewer/first-person/mechanism-targets.d.ts +27 -0
  11. package/dist/components/viewer/first-person/mechanism-targets.d.ts.map +1 -0
  12. package/dist/components/viewer/first-person/mechanism-targets.js +79 -0
  13. package/dist/components/viewer/first-person/terrain-collider.d.ts +32 -0
  14. package/dist/components/viewer/first-person/terrain-collider.d.ts.map +1 -0
  15. package/dist/components/viewer/first-person/terrain-collider.js +175 -0
  16. package/dist/components/viewer/glb-replace-instances.d.ts +6 -3
  17. package/dist/components/viewer/glb-replace-instances.d.ts.map +1 -1
  18. package/dist/components/viewer/glb-replace-instances.js +5 -4
  19. package/dist/components/viewer/glb-scene.d.ts +3 -1
  20. package/dist/components/viewer/glb-scene.d.ts.map +1 -1
  21. package/dist/components/viewer/glb-scene.js +2 -1
  22. package/dist/components/viewer/glb-walkthrough-controller.d.ts +1 -1
  23. package/dist/components/viewer/glb-walkthrough-controller.d.ts.map +1 -1
  24. package/dist/components/viewer/glb-walkthrough-controller.js +3 -4
  25. package/dist/components/viewer/index.d.ts.map +1 -1
  26. package/dist/components/viewer/index.js +8 -4
  27. package/dist/components/viewer/live-walkthrough-controller.d.ts +17 -0
  28. package/dist/components/viewer/live-walkthrough-controller.d.ts.map +1 -0
  29. package/dist/components/viewer/live-walkthrough-controller.js +1449 -0
  30. package/dist/components/viewer/post-processing.d.ts.map +1 -1
  31. package/dist/components/viewer/post-processing.js +22 -1
  32. package/dist/components/viewer/registered-systems.d.ts.map +1 -1
  33. package/dist/components/viewer/registered-systems.js +2 -2
  34. package/dist/components/viewer/unsupported-gpu-fallback.d.ts.map +1 -1
  35. package/dist/components/viewer/unsupported-gpu-fallback.js +21 -1
  36. package/dist/components/viewer/use-daylight-rooms.d.ts.map +1 -1
  37. package/dist/components/viewer/use-daylight-rooms.js +75 -33
  38. package/dist/hooks/use-gltf-ktx2.d.ts.map +1 -1
  39. package/dist/hooks/use-gltf-ktx2.js +2 -1
  40. package/dist/index.d.ts +8 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +8 -1
  43. package/dist/lib/asset-url.d.ts +0 -1
  44. package/dist/lib/asset-url.d.ts.map +1 -1
  45. package/dist/lib/asset-url.js +3 -3
  46. package/dist/lib/daylight/room-context.d.ts.map +1 -1
  47. package/dist/lib/daylight/room-context.js +3 -2
  48. package/dist/lib/daylight/room-map.d.ts +149 -0
  49. package/dist/lib/daylight/room-map.d.ts.map +1 -0
  50. package/dist/lib/daylight/room-map.js +813 -0
  51. package/dist/lib/daylight/room-scene.d.ts +4 -2
  52. package/dist/lib/daylight/room-scene.d.ts.map +1 -1
  53. package/dist/lib/daylight/room-scene.js +81 -40
  54. package/dist/lib/daylight/rooms.d.ts +71 -32
  55. package/dist/lib/daylight/rooms.d.ts.map +1 -1
  56. package/dist/lib/daylight/rooms.js +371 -286
  57. package/dist/lib/ktx2-loader.d.ts.map +1 -1
  58. package/dist/lib/ktx2-loader.js +2 -1
  59. package/dist/lib/measurement-label.d.ts +4 -0
  60. package/dist/lib/measurement-label.d.ts.map +1 -0
  61. package/dist/lib/measurement-label.js +54 -0
  62. package/dist/lib/measurement-presentation.d.ts +7 -0
  63. package/dist/lib/measurement-presentation.d.ts.map +1 -0
  64. package/dist/lib/measurement-presentation.js +14 -0
  65. package/dist/lib/pointer-events.d.ts.map +1 -1
  66. package/dist/lib/pointer-events.js +3 -3
  67. package/dist/lib/texture-reference.d.ts.map +1 -1
  68. package/dist/lib/texture-reference.js +4 -3
  69. package/dist/lib/typing-target.d.ts +2 -0
  70. package/dist/lib/typing-target.d.ts.map +1 -0
  71. package/dist/lib/typing-target.js +7 -0
  72. package/dist/lib/viewer-config.d.ts +27 -0
  73. package/dist/lib/viewer-config.d.ts.map +1 -0
  74. package/dist/lib/viewer-config.js +23 -0
  75. package/dist/lib/viewer-preference-storage.d.ts +7 -0
  76. package/dist/lib/viewer-preference-storage.d.ts.map +1 -0
  77. package/dist/lib/viewer-preference-storage.js +23 -0
  78. package/dist/sfx/audio-settings.d.ts +81 -0
  79. package/dist/sfx/audio-settings.d.ts.map +1 -0
  80. package/dist/sfx/audio-settings.js +166 -0
  81. package/dist/sfx/index.d.ts +6 -0
  82. package/dist/sfx/index.d.ts.map +1 -0
  83. package/dist/sfx/index.js +5 -0
  84. package/dist/sfx/interaction-sounds.d.ts +7 -0
  85. package/dist/sfx/interaction-sounds.d.ts.map +1 -0
  86. package/dist/sfx/interaction-sounds.js +39 -0
  87. package/dist/sfx/player.d.ts +31 -0
  88. package/dist/sfx/player.d.ts.map +1 -0
  89. package/dist/sfx/player.js +255 -0
  90. package/dist/sfx/sounds.d.ts +60 -0
  91. package/dist/sfx/sounds.d.ts.map +1 -0
  92. package/dist/sfx/sounds.js +25 -0
  93. package/dist/sfx/use-viewer-ui-sounds.d.ts +8 -0
  94. package/dist/sfx/use-viewer-ui-sounds.d.ts.map +1 -0
  95. package/dist/sfx/use-viewer-ui-sounds.js +42 -0
  96. package/dist/store/use-first-person-hud.d.ts +13 -0
  97. package/dist/store/use-first-person-hud.d.ts.map +1 -0
  98. package/dist/store/use-first-person-hud.js +21 -0
  99. package/dist/store/use-viewer.d.ts +2 -56
  100. package/dist/store/use-viewer.d.ts.map +1 -1
  101. package/dist/store/use-viewer.js +3 -1
  102. package/dist/systems/elevator/elevator-interaction-system.d.ts +16 -2
  103. package/dist/systems/elevator/elevator-interaction-system.d.ts.map +1 -1
  104. package/dist/systems/elevator/elevator-interaction-system.js +41 -8
  105. package/dist/systems/geometry/geometry-status.d.ts +8 -0
  106. package/dist/systems/geometry/geometry-status.d.ts.map +1 -0
  107. package/dist/systems/geometry/geometry-status.js +24 -0
  108. package/dist/systems/roof/roof-system.d.ts.map +1 -1
  109. package/dist/systems/roof/roof-system.js +134 -78
  110. package/dist/systems/wall/wall-system.d.ts +11 -0
  111. package/dist/systems/wall/wall-system.d.ts.map +1 -1
  112. package/dist/systems/wall/wall-system.js +56 -10
  113. package/dist/ui/components/action-button.d.ts +14 -0
  114. package/dist/ui/components/action-button.d.ts.map +1 -0
  115. package/dist/ui/components/action-button.js +21 -0
  116. package/dist/ui/components/action-menu-placement.d.ts +7 -0
  117. package/dist/ui/components/action-menu-placement.d.ts.map +1 -0
  118. package/dist/ui/components/action-menu-placement.js +10 -0
  119. package/dist/ui/components/floorplan-compass-button.d.ts +10 -0
  120. package/dist/ui/components/floorplan-compass-button.d.ts.map +1 -0
  121. package/dist/ui/components/floorplan-compass-button.js +22 -0
  122. package/dist/ui/components/follow-pascal-toggle.d.ts +6 -0
  123. package/dist/ui/components/follow-pascal-toggle.d.ts.map +1 -0
  124. package/dist/ui/components/follow-pascal-toggle.js +21 -0
  125. package/dist/ui/components/localized-html.d.ts +9 -0
  126. package/dist/ui/components/localized-html.d.ts.map +1 -0
  127. package/dist/ui/components/localized-html.js +16 -0
  128. package/dist/ui/components/render-settings-menu.d.ts +9 -0
  129. package/dist/ui/components/render-settings-menu.d.ts.map +1 -0
  130. package/dist/ui/components/render-settings-menu.js +145 -0
  131. package/dist/ui/components/rooms/room-highlight.d.ts +10 -0
  132. package/dist/ui/components/rooms/room-highlight.d.ts.map +1 -0
  133. package/dist/ui/components/rooms/room-highlight.js +56 -0
  134. package/dist/ui/components/rooms/room-labels.d.ts +278 -0
  135. package/dist/ui/components/rooms/room-labels.d.ts.map +1 -0
  136. package/dist/ui/components/rooms/room-labels.js +1295 -0
  137. package/dist/ui/components/rooms/viewer-rooms.d.ts +14 -0
  138. package/dist/ui/components/rooms/viewer-rooms.d.ts.map +1 -0
  139. package/dist/ui/components/rooms/viewer-rooms.js +123 -0
  140. package/dist/ui/components/scene-loader.d.ts +18 -0
  141. package/dist/ui/components/scene-loader.d.ts.map +1 -0
  142. package/dist/ui/components/scene-loader.js +29 -0
  143. package/dist/ui/components/sky-control.d.ts +37 -0
  144. package/dist/ui/components/sky-control.d.ts.map +1 -0
  145. package/dist/ui/components/sky-control.js +382 -0
  146. package/dist/ui/components/use-viewer-camera-navigation-sync.d.ts +4 -0
  147. package/dist/ui/components/use-viewer-camera-navigation-sync.d.ts.map +1 -0
  148. package/dist/ui/components/use-viewer-camera-navigation-sync.js +117 -0
  149. package/dist/ui/components/viewer-controls-bar.d.ts +20 -0
  150. package/dist/ui/components/viewer-controls-bar.d.ts.map +1 -0
  151. package/dist/ui/components/viewer-controls-bar.js +130 -0
  152. package/dist/ui/components/viewer-hover-label.d.ts +14 -0
  153. package/dist/ui/components/viewer-hover-label.d.ts.map +1 -0
  154. package/dist/ui/components/viewer-hover-label.js +28 -0
  155. package/dist/ui/components/viewer-scene-header.d.ts +34 -0
  156. package/dist/ui/components/viewer-scene-header.d.ts.map +1 -0
  157. package/dist/ui/components/viewer-scene-header.js +92 -0
  158. package/dist/ui/components/viewer-selection-manager.d.ts +7 -0
  159. package/dist/ui/components/viewer-selection-manager.d.ts.map +1 -0
  160. package/dist/ui/components/viewer-selection-manager.js +116 -0
  161. package/dist/ui/components/viewer-stage-modes.d.ts +7 -0
  162. package/dist/ui/components/viewer-stage-modes.d.ts.map +1 -0
  163. package/dist/ui/components/viewer-stage-modes.js +42 -0
  164. package/dist/ui/components/viewer-stage-switcher.d.ts +10 -0
  165. package/dist/ui/components/viewer-stage-switcher.d.ts.map +1 -0
  166. package/dist/ui/components/viewer-stage-switcher.js +16 -0
  167. package/dist/ui/components/viewer-stage.d.ts +25 -0
  168. package/dist/ui/components/viewer-stage.d.ts.map +1 -0
  169. package/dist/ui/components/viewer-stage.js +107 -0
  170. package/dist/ui/components/walkthrough-hud.d.ts +29 -0
  171. package/dist/ui/components/walkthrough-hud.d.ts.map +1 -0
  172. package/dist/ui/components/walkthrough-hud.js +55 -0
  173. package/dist/ui/floorplan/floorplan-camera-sync.d.ts +22 -0
  174. package/dist/ui/floorplan/floorplan-camera-sync.d.ts.map +1 -0
  175. package/dist/ui/floorplan/floorplan-camera-sync.js +157 -0
  176. package/dist/ui/floorplan/floorplan-dimension-renderer.d.ts +61 -0
  177. package/dist/ui/floorplan/floorplan-dimension-renderer.d.ts.map +1 -0
  178. package/dist/ui/floorplan/floorplan-dimension-renderer.js +280 -0
  179. package/dist/ui/floorplan/floorplan-geometry-renderer.d.ts +54 -0
  180. package/dist/ui/floorplan/floorplan-geometry-renderer.d.ts.map +1 -0
  181. package/dist/ui/floorplan/floorplan-geometry-renderer.js +317 -0
  182. package/dist/ui/floorplan/floorplan-label-angle.d.ts +24 -0
  183. package/dist/ui/floorplan/floorplan-label-angle.d.ts.map +1 -0
  184. package/dist/ui/floorplan/floorplan-label-angle.js +60 -0
  185. package/dist/ui/floorplan/floorplan-navigation-sync.d.ts +18 -0
  186. package/dist/ui/floorplan/floorplan-navigation-sync.d.ts.map +1 -0
  187. package/dist/ui/floorplan/floorplan-navigation-sync.js +41 -0
  188. package/dist/ui/floorplan/floorplan-preview-geometry.d.ts +26 -0
  189. package/dist/ui/floorplan/floorplan-preview-geometry.d.ts.map +1 -0
  190. package/dist/ui/floorplan/floorplan-preview-geometry.js +173 -0
  191. package/dist/ui/floorplan/floorplan-preview-navigation.d.ts +22 -0
  192. package/dist/ui/floorplan/floorplan-preview-navigation.d.ts.map +1 -0
  193. package/dist/ui/floorplan/floorplan-preview-navigation.js +41 -0
  194. package/dist/ui/floorplan/floorplan-preview-visibility.d.ts +8 -0
  195. package/dist/ui/floorplan/floorplan-preview-visibility.d.ts.map +1 -0
  196. package/dist/ui/floorplan/floorplan-preview-visibility.js +21 -0
  197. package/dist/ui/floorplan/floorplan-preview.d.ts +19 -0
  198. package/dist/ui/floorplan/floorplan-preview.d.ts.map +1 -0
  199. package/dist/ui/floorplan/floorplan-preview.js +700 -0
  200. package/dist/ui/hooks/use-mobile.d.ts +2 -0
  201. package/dist/ui/hooks/use-mobile.d.ts.map +1 -0
  202. package/dist/ui/hooks/use-mobile.js +14 -0
  203. package/dist/ui/index.d.ts +49 -0
  204. package/dist/ui/index.d.ts.map +1 -0
  205. package/dist/ui/index.js +48 -0
  206. package/dist/ui/lib/below-grade.d.ts +38 -0
  207. package/dist/ui/lib/below-grade.d.ts.map +1 -0
  208. package/dist/ui/lib/below-grade.js +102 -0
  209. package/dist/ui/lib/camera-pose.d.ts +19 -0
  210. package/dist/ui/lib/camera-pose.d.ts.map +1 -0
  211. package/dist/ui/lib/camera-pose.js +113 -0
  212. package/dist/ui/lib/cn.d.ts +3 -0
  213. package/dist/ui/lib/cn.d.ts.map +1 -0
  214. package/dist/ui/lib/cn.js +5 -0
  215. package/dist/ui/lib/level-name.d.ts +10 -0
  216. package/dist/ui/lib/level-name.d.ts.map +1 -0
  217. package/dist/ui/lib/level-name.js +33 -0
  218. package/dist/ui/lib/node-display-label.d.ts +8 -0
  219. package/dist/ui/lib/node-display-label.d.ts.map +1 -0
  220. package/dist/ui/lib/node-display-label.js +36 -0
  221. package/dist/ui/lib/room-area.d.ts +3 -0
  222. package/dist/ui/lib/room-area.d.ts.map +1 -0
  223. package/dist/ui/lib/room-area.js +8 -0
  224. package/dist/ui/lib/room-assembly-overlay.d.ts +46 -0
  225. package/dist/ui/lib/room-assembly-overlay.d.ts.map +1 -0
  226. package/dist/ui/lib/room-assembly-overlay.js +222 -0
  227. package/dist/ui/lib/room-name-messages.d.ts +28 -0
  228. package/dist/ui/lib/room-name-messages.d.ts.map +1 -0
  229. package/dist/ui/lib/room-name-messages.js +112 -0
  230. package/dist/ui/lib/room-selection.d.ts +58 -0
  231. package/dist/ui/lib/room-selection.d.ts.map +1 -0
  232. package/dist/ui/lib/room-selection.js +297 -0
  233. package/dist/ui/lib/scene-theme-name.d.ts +4 -0
  234. package/dist/ui/lib/scene-theme-name.d.ts.map +1 -0
  235. package/dist/ui/lib/scene-theme-name.js +22 -0
  236. package/dist/ui/lib/selection-modifiers.d.ts +20 -0
  237. package/dist/ui/lib/selection-modifiers.d.ts.map +1 -0
  238. package/dist/ui/lib/selection-modifiers.js +15 -0
  239. package/dist/ui/lib/viewer-selection.d.ts +132 -0
  240. package/dist/ui/lib/viewer-selection.d.ts.map +1 -0
  241. package/dist/ui/lib/viewer-selection.js +462 -0
  242. package/dist/ui/lib/zone-content.d.ts +6 -0
  243. package/dist/ui/lib/zone-content.d.ts.map +1 -0
  244. package/dist/ui/lib/zone-content.js +96 -0
  245. package/dist/ui/primitives/button.d.ts +11 -0
  246. package/dist/ui/primitives/button.d.ts.map +1 -0
  247. package/dist/ui/primitives/button.js +35 -0
  248. package/dist/ui/primitives/dropdown-menu.d.ts +26 -0
  249. package/dist/ui/primitives/dropdown-menu.d.ts.map +1 -0
  250. package/dist/ui/primitives/dropdown-menu.js +53 -0
  251. package/dist/ui/primitives/popover.d.ts +8 -0
  252. package/dist/ui/primitives/popover.d.ts.map +1 -0
  253. package/dist/ui/primitives/popover.js +17 -0
  254. package/dist/ui/primitives/switch.d.ts +5 -0
  255. package/dist/ui/primitives/switch.d.ts.map +1 -0
  256. package/dist/ui/primitives/switch.js +8 -0
  257. package/dist/ui/primitives/tooltip.d.ts +8 -0
  258. package/dist/ui/primitives/tooltip.d.ts.map +1 -0
  259. package/dist/ui/primitives/tooltip.js +17 -0
  260. package/dist/ui/store/camera-pose-store.d.ts +17 -0
  261. package/dist/ui/store/camera-pose-store.d.ts.map +1 -0
  262. package/dist/ui/store/camera-pose-store.js +15 -0
  263. package/dist/ui/store/navigation-sync-pose-store.d.ts +26 -0
  264. package/dist/ui/store/navigation-sync-pose-store.d.ts.map +1 -0
  265. package/dist/ui/store/navigation-sync-pose-store.js +16 -0
  266. package/dist/ui/store/use-follow-pascal.d.ts +30 -0
  267. package/dist/ui/store/use-follow-pascal.d.ts.map +1 -0
  268. package/dist/ui/store/use-follow-pascal.js +28 -0
  269. package/dist/ui/theme.css +339 -0
  270. package/package.json +34 -7
@@ -35,8 +35,10 @@ export declare function feedLamps(): RoomLamp[];
35
35
  export declare function feedLampOn(key: string): boolean | undefined;
36
36
  /** The live parametric scene (registry + node data), or null while it has no zones. */
37
37
  export declare function liveRoomScene(virtualLampsOn: boolean): RoomSceneInput | null;
38
- /** Live level objects in the room system's level order (for explode offsets). */
39
- export declare function liveLevelObjects(): Object3D[];
38
+ /** Live level objects in the room system's level order (explode offsets, visibility, focus). */
39
+ export declare function liveLevelObjects(): (Object3D | undefined)[];
40
+ /** A baked artifact's level objects in the room system's level order. */
41
+ export declare function bakedLevelObjects(root: Object3D | null): Object3D[];
40
42
  /** How open a live door is (0 closed … 1 fully open), the transient state first. */
41
43
  export declare function liveDoorOpenness(id: string): number;
42
44
  /** A baked artifact's identity tree (levels, zones, covers, walls, openings), or null. */
@@ -1 +1 @@
1
- {"version":3,"file":"room-scene.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/room-scene.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoD,KAAK,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAKhG,OAAO,KAAK,EAAE,QAAQ,EAAmB,cAAc,EAAY,MAAM,SAAS,CAAA;AAGlF;;;GAGG;AAEH,mGAAmG;AACnG,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;IAC3C,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,yFAAyF;IACzF,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3F,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAC3C,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAA;IACrC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAA;CAC5C,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,SAAS,eAAsB,CAAA;AAU5C,oEAAoE;AACpE,wBAAgB,SAAS,IAAI,QAAQ,EAAE,CAuBtC;AAeD,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAK3D;AAcD,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,cAAc,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAgE5E;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,IAAI,QAAQ,EAAE,CAQ7C;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAanD;AAQD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA+E7F;AAiED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CA2CvC;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
1
+ {"version":3,"file":"room-scene.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/room-scene.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoD,KAAK,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAMhG,OAAO,KAAK,EAAE,QAAQ,EAAmB,cAAc,EAAY,MAAM,SAAS,CAAA;AAGlF;;;GAGG;AAEH,mGAAmG;AACnG,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;IAC3C,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,yFAAyF;IACzF,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3F,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAC3C,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAA;IACrC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAA;CAC5C,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,SAAS,eAAsB,CAAA;AAU5C,oEAAoE;AACpE,wBAAgB,SAAS,IAAI,QAAQ,EAAE,CAuBtC;AAeD,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAK3D;AAkCD,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,cAAc,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA0E5E;AAED,gGAAgG;AAChG,wBAAgB,gBAAgB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,CAE3D;AAqBD,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,EAAE,CAEnE;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAanD;AASD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA8E7F;AAiED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CA2CvC;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
@@ -76,18 +76,35 @@ function meshesOf(root, skip) {
76
76
  visit(root, true);
77
77
  return out;
78
78
  }
79
+ /** Every live level, in one stable order: its building and assembled world floor height. */
80
+ function liveLevels() {
81
+ const { nodes } = useScene.getState();
82
+ const elevations = getLevelElevations(nodes);
83
+ const buildings = new Map();
84
+ const ids = [];
85
+ const levels = [];
86
+ for (const node of Object.values(nodes)) {
87
+ if (node?.type !== 'level')
88
+ continue;
89
+ const elevation = elevations.get(node.id);
90
+ const buildingId = elevation?.buildingId ?? null;
91
+ if (!buildings.has(buildingId))
92
+ buildings.set(buildingId, buildings.size);
93
+ const building = buildingId ? nodes[buildingId] : undefined;
94
+ const siteY = building?.type === 'building' ? building.position[1] : 0;
95
+ ids.push(node.id);
96
+ levels.push({ y: siteY + (elevation?.baseY ?? 0), building: buildings.get(buildingId) });
97
+ }
98
+ return { ids, levels };
99
+ }
79
100
  /** The live parametric scene (registry + node data), or null while it has no zones. */
80
101
  export function liveRoomScene(virtualLampsOn) {
81
102
  const zoneIds = sceneRegistry.byType.zone;
82
103
  if (!zoneIds || zoneIds.size === 0)
83
104
  return null;
84
105
  const { nodes } = useScene.getState();
85
- const elevations = getLevelElevations(nodes);
86
- const levels = Object.values(nodes)
87
- .filter((node) => node?.type === 'level')
88
- .map((node) => ({ id: node.id, y: elevations.get(node.id)?.baseY ?? 0 }))
89
- .sort((a, b) => a.y - b.y);
90
- const levelIndex = new Map(levels.map((level, index) => [level.id, index]));
106
+ const { ids, levels } = liveLevels();
107
+ const levelIndex = new Map(ids.map((id, index) => [id, index]));
91
108
  const zones = [];
92
109
  const point = new Vector3();
93
110
  for (const id of zoneIds) {
@@ -96,11 +113,16 @@ export function liveRoomScene(virtualLampsOn) {
96
113
  if (!node?.polygon || node.polygon.length < 3 || !object || node.visible === false)
97
114
  continue;
98
115
  object.updateWorldMatrix(true, false);
99
- const polygon = node.polygon.map(([x, z]) => {
116
+ const toWorld = (ring) => ring.map(([x, z]) => {
100
117
  object.localToWorld(point.set(x, 0, z));
101
118
  return [point.x, point.z];
102
119
  });
103
- zones.push({ id, polygon, levelIndex: levelIndex.get(node.parentId ?? '') ?? 0 });
120
+ zones.push({
121
+ id,
122
+ polygon: toWorld(node.polygon),
123
+ holes: (node.holes ?? []).filter((hole) => hole.length >= 3).map(toWorld),
124
+ levelIndex: levelIndex.get(node.parentId ?? '') ?? 0,
125
+ });
104
126
  }
105
127
  if (!zones.length)
106
128
  return null;
@@ -116,9 +138,12 @@ export function liveRoomScene(virtualLampsOn) {
116
138
  const walls = [];
117
139
  for (const id of sceneRegistry.byType.wall ?? []) {
118
140
  const object = sceneRegistry.nodes.get(id);
141
+ if (!object)
142
+ continue;
143
+ const wallLevel = levelIndex.get(nodes[id]?.parentId ?? '') ?? 0;
119
144
  // Doors, windows and items hang under their wall: a closed leaf mustn't close its doorway.
120
- if (object)
121
- walls.push(...meshesOf(object, (child) => registered.has(child)));
145
+ for (const mesh of meshesOf(object, (child) => registered.has(child)))
146
+ walls.push({ object: mesh, levelIndex: wallLevel });
122
147
  }
123
148
  const openings = [];
124
149
  for (const kind of OPENING_TYPES) {
@@ -134,7 +159,7 @@ export function liveRoomScene(virtualLampsOn) {
134
159
  bounds.expandByPoint(point.set(x, 0, z));
135
160
  return {
136
161
  bounds,
137
- levelY: levels.map((level) => level.y),
162
+ levels,
138
163
  zones,
139
164
  covers,
140
165
  walls,
@@ -144,15 +169,33 @@ export function liveRoomScene(virtualLampsOn) {
144
169
  configureRaycaster: (raycaster) => setSurfaceRaycastLayers(raycaster.layers),
145
170
  };
146
171
  }
147
- /** Live level objects in the room system's level order (for explode offsets). */
172
+ /** Live level objects in the room system's level order (explode offsets, visibility, focus). */
148
173
  export function liveLevelObjects() {
149
- const { nodes } = useScene.getState();
150
- const elevations = getLevelElevations(nodes);
151
- return Object.values(nodes)
152
- .filter((node) => node?.type === 'level')
153
- .sort((a, b) => (elevations.get(a.id)?.baseY ?? 0) - (elevations.get(b.id)?.baseY ?? 0))
154
- .map((node) => sceneRegistry.nodes.get(node.id))
155
- .filter((object) => !!object);
174
+ return liveLevels().ids.map((id) => sceneRegistry.nodes.get(id));
175
+ }
176
+ /** A baked artifact's levels: their objects and, per level, its building and floor height. */
177
+ function bakedLevels(root) {
178
+ const objects = [];
179
+ root.traverse((object) => {
180
+ if (object.userData.kind === 'level')
181
+ objects.push(object);
182
+ });
183
+ root.updateWorldMatrix(true, true);
184
+ const buildings = new Map();
185
+ const point = new Vector3();
186
+ const levels = objects.map((object) => {
187
+ let building = object.parent;
188
+ while (building && building.userData.kind !== 'building')
189
+ building = building.parent;
190
+ if (!buildings.has(building))
191
+ buildings.set(building, buildings.size);
192
+ return { y: object.getWorldPosition(point).y, building: buildings.get(building) };
193
+ });
194
+ return { objects, levels };
195
+ }
196
+ /** A baked artifact's level objects in the room system's level order. */
197
+ export function bakedLevelObjects(root) {
198
+ return root ? bakedLevels(root).objects : [];
156
199
  }
157
200
  /** How open a live door is (0 closed … 1 fully open), the transient state first. */
158
201
  export function liveDoorOpenness(id) {
@@ -164,7 +207,6 @@ export function liveDoorOpenness(id) {
164
207
  }
165
208
  /** A baked artifact's identity tree (levels, zones, covers, walls, openings), or null. */
166
209
  export function bakedRoomScene(root, virtualLampsOn) {
167
- const levelObjects = [];
168
210
  const zoneObjects = [];
169
211
  const covers = [];
170
212
  const wallRoots = [];
@@ -172,9 +214,6 @@ export function bakedRoomScene(root, virtualLampsOn) {
172
214
  root.traverse((object) => {
173
215
  const extras = object.userData;
174
216
  switch (extras.kind) {
175
- case 'level':
176
- levelObjects.push(object);
177
- break;
178
217
  case 'zone':
179
218
  zoneObjects.push(object);
180
219
  break;
@@ -195,34 +234,33 @@ export function bakedRoomScene(root, virtualLampsOn) {
195
234
  });
196
235
  if (!zoneObjects.length)
197
236
  return null;
198
- root.updateWorldMatrix(true, true);
199
- const levels = levelObjects
200
- .map((object) => ({ object, y: object.getWorldPosition(new Vector3()).y }))
201
- .sort((a, b) => a.y - b.y);
237
+ const levels = bakedLevels(root);
202
238
  const levelOf = (object) => {
203
239
  for (let x = object; x; x = x.parent) {
204
- const index = levels.findIndex((level) => level.object === x);
240
+ const index = levels.objects.indexOf(x);
205
241
  if (index >= 0)
206
- return index;
242
+ return { index, frame: x };
207
243
  }
208
- return 0;
244
+ return { index: 0, frame: null };
209
245
  };
210
246
  const point = new Vector3();
211
247
  const zones = [];
212
248
  for (const object of zoneObjects) {
213
- const polygon = object.userData.polygon;
249
+ const { polygon, holes } = object.userData;
214
250
  if (!polygon || polygon.length < 3)
215
251
  continue;
216
- const levelIndex = levelOf(object);
252
+ const level = levelOf(object);
217
253
  // Polygons are level-local [x, z]: bring them to world XZ through the level's frame.
218
- const frame = levels[levelIndex]?.object ?? object.parent ?? object;
254
+ const frame = level.frame ?? object.parent ?? object;
255
+ const toWorld = (ring) => ring.map(([x, z]) => {
256
+ point.set(x, 0, z).applyMatrix4(frame.matrixWorld);
257
+ return [point.x, point.z];
258
+ });
219
259
  zones.push({
220
260
  id: object.userData.pascalId ?? object.uuid,
221
- polygon: polygon.map(([x, z]) => {
222
- point.set(x, 0, z).applyMatrix4(frame.matrixWorld);
223
- return [point.x, point.z];
224
- }),
225
- levelIndex,
261
+ polygon: toWorld(polygon),
262
+ holes: (holes ?? []).filter((hole) => hole.length >= 3).map(toWorld),
263
+ levelIndex: level.index,
226
264
  });
227
265
  }
228
266
  if (!zones.length)
@@ -231,14 +269,17 @@ export function bakedRoomScene(root, virtualLampsOn) {
231
269
  const kind = object.userData.kind;
232
270
  return kind === 'door' || kind === 'window' || kind === 'item';
233
271
  };
234
- const walls = wallRoots.flatMap((object) => meshesOf(object, isIdentity));
272
+ const walls = wallRoots.flatMap((object) => {
273
+ const levelIndex = levelOf(object).index;
274
+ return meshesOf(object, isIdentity).map((mesh) => ({ object: mesh, levelIndex }));
275
+ });
235
276
  const bounds = new Box3();
236
277
  for (const zone of zones)
237
278
  for (const [x, z] of zone.polygon)
238
279
  bounds.expandByPoint(point.set(x, 0, z));
239
280
  return {
240
281
  bounds,
241
- levelY: levels.map((level) => level.y),
282
+ levels: levels.levels,
242
283
  zones,
243
284
  covers,
244
285
  walls,
@@ -1,4 +1,25 @@
1
1
  import { Box3, type Camera, Color, type Object3D, Raycaster, Vector2, Vector3 } from 'three';
2
+ import { type MapLevel, RoomMap } from './room-map';
3
+ /**
4
+ * "Room-aware" interior light, the game-engine way (ported from the enhanced viewer):
5
+ *
6
+ * - Zone polygons are rasterized per level into a top-down room-id map (10 cm cells). A fragment
7
+ * finds its room a step off itself along its normal — a wall face looks *into* the room it
8
+ * faces, so light never leaks through walls and there are no shadow maps to pay for.
9
+ * - Each room owns its lamps and window "portals": glass rectangles that emit sky (+ ground
10
+ * bounce) radiance inwards with an analytic rectangle form factor, plus the internally
11
+ * reflected component (split-flux) and the sky patch on the floor. Enclosed rooms see only
12
+ * a tenth of the sky environment.
13
+ * - Openings between rooms (doorways, arches, open plan) carry light from the neighbour and
14
+ * crossfade room-wide terms at the threshold.
15
+ * - At night, lit rooms throw light out through their windows (a gobo of the main lamp + the
16
+ * pane glow), and lamps outside every room light exterior surfaces analytically.
17
+ *
18
+ * Everything feeds the material lighting through `getGI` / `getAO` contexts: real diffuse
19
+ * irradiance (× albedo, × AO), not a post overlay. Shader inputs are uniforms and data textures,
20
+ * so rebuilding after an edit never recompiles a material.
21
+ */
22
+ type N = any;
2
23
  export type RoomLamp = {
3
24
  position: Vector3;
4
25
  color: Color;
@@ -25,6 +46,7 @@ export type RoomZone = {
25
46
  id: string;
26
47
  /** World XZ. */
27
48
  polygon: [number, number][];
49
+ holes?: [number, number][][];
28
50
  levelIndex: number;
29
51
  };
30
52
  export type RoomOpeningRoot = {
@@ -35,16 +57,22 @@ export type RoomOpeningRoot = {
35
57
  /** What the room system needs from a scene (live parametric or baked artifact). */
36
58
  export type RoomSceneInput = {
37
59
  bounds: Box3;
38
- /** World Y of each level, assembled (not exploded), ascending. */
39
- levelY: number[];
60
+ /** Every level: assembled (not exploded) world Y of its floor and its building's index. */
61
+ levels: MapLevel[];
40
62
  zones: RoomZone[];
41
63
  /** Ceilings, roofs and slabs (enclosure rays) with their kind. */
42
64
  covers: {
43
65
  object: Object3D;
44
66
  kind: 'ceiling' | 'roof' | 'slab';
45
67
  }[];
46
- /** Wall meshes only (openings and their parts excluded), for walkable-opening rays. */
47
- walls: Object3D[];
68
+ /**
69
+ * Wall meshes only (openings and their parts excluded), each with its level: walkable-opening
70
+ * rays test them, and their footprints keep rooms from reaching past a wall's far face.
71
+ */
72
+ walls: {
73
+ object: Object3D;
74
+ levelIndex: number;
75
+ }[];
48
76
  openings: RoomOpeningRoot[];
49
77
  lamps: RoomLamp[];
50
78
  /** Whether rooms without lamps of their own get their virtual ceiling lamp lit. */
@@ -100,13 +128,10 @@ export declare class RoomLighting {
100
128
  exteriorLamps: RoomLamp[];
101
129
  portals: Portal[];
102
130
  openings: Opening[];
103
- levelY: number[];
131
+ levels: MapLevel[];
132
+ /** Which room a point is in (tiled per level; see `room-map.ts`). */
133
+ readonly map: RoomMap;
104
134
  private data;
105
- private map;
106
- private origin;
107
- private gridW;
108
- private gridH;
109
- private levels;
110
135
  private lampTexel;
111
136
  private lastSky;
112
137
  readonly portalGain: import("three/webgpu").UniformNode<"float", number>;
@@ -127,18 +152,12 @@ export declare class RoomLighting {
127
152
  readonly skyPatch: import("three/webgpu").UniformNode<"float", number>;
128
153
  /** Light through interior openings + threshold crossfade (off on the Low tier). */
129
154
  readonly softRooms: import("three/webgpu").UniformNode<"float", number>;
155
+ /** Camera world Y (live). */
130
156
  readonly cameraY: import("three/webgpu").UniformNode<"float", number>;
131
- readonly focusedLevel: import("three/webgpu").UniformNode<"int", number>;
132
- /**
133
- * The level arrays live in one shared group, uploaded when a level moves: an array uniform in
134
- * the default (per-object) group is re-sent for every object in every pass, whether it changed
135
- * or not — some 760 uploads a frame in a furnished flat.
136
- */
137
- private readonly levelGroup;
138
157
  private readonly u;
139
158
  /** Rebuild from a scene: rooms, lamps, portals, openings, room-id map. */
140
159
  build(input: RoomSceneInput): void;
141
- /** CPU-side room lookup (same rule as the shader, without the normal offset). */
160
+ /** CPU-side room lookup in assembled space (same rule as the shader, without the normal offset). */
142
161
  roomAt(p: Vector3): number;
143
162
  /**
144
163
  * Whether each level is on screen. A camera over a level whose upper floors are hidden stands
@@ -146,6 +165,10 @@ export declare class RoomLighting {
146
165
  * such, not as a lamplit room it cannot see.
147
166
  */
148
167
  levelShown: boolean[];
168
+ /** Per level: focused (its rooms open from above when the camera is over their cover). */
169
+ levelFocused: boolean[];
170
+ /** Per level: the highest one shown in its building (its rooms seen from above). */
171
+ private levelTopShown;
149
172
  /**
150
173
  * What the lit rooms in view add to an outside camera's meter: a blend of the exterior reading
151
174
  * and the rooms' own irradiance (their indoor meter), weighted by the share of the frame each
@@ -164,8 +187,13 @@ export declare class RoomLighting {
164
187
  room: number;
165
188
  inside: boolean;
166
189
  };
167
- /** Explode / level motion: live world Y of each level (assembled + offset). */
168
- setLevelOffsets(offsets: number[]): void;
190
+ /**
191
+ * Live level presentation, per level: explode offset (live world Y − assembled), whether it is
192
+ * shown, and whether it is the selected level of a cutaway (solo / levels above hidden). A shown
193
+ * level is focused — its rooms open from above — when selected so, or when every level over it
194
+ * in its building is hidden.
195
+ */
196
+ setLevelPresentation(offsets: number[], shown: boolean[], selected: boolean[]): void;
169
197
  /** Re-run the light transfer (after a quality-tier change of the soft room map). */
170
198
  refresh(): void;
171
199
  /** Lamp switches changed: rewrite lamp texels (+ the light carried through openings). */
@@ -196,22 +224,30 @@ export declare class RoomLighting {
196
224
  * over the lit few at night, not over every window of the building.
197
225
  */
198
226
  private writeActiveLists;
199
- private uploadMap;
200
227
  private markData;
201
228
  private writeLamp;
202
229
  /** Interior portals emit the neighbour room's average radiance: L = E_avg·ρ/π (lamps + daylight). */
203
230
  private writeInteriorPortals;
204
231
  private set;
205
232
  /**
206
- * Walk every boundary between two room cells (or a room and outside) on the room map and cast
207
- * short horizontal rays against the walls at 0.35 m and 1.6 m: open at both heights = a walkable
208
- * opening (doorway, arch, open-plan edge). Windows don't count (sills are above 0.35 m).
233
+ * Walk every boundary between two room cells (or a room and outside) on each level's grid and
234
+ * cast short horizontal rays against the walls at 0.35 m and 1.6 m: open at both heights = a
235
+ * walkable opening (doorway, arch, open-plan edge). Windows don't count (sills are above 0.35 m).
236
+ * `walk` runs per level while its grid exists; `finish` clusters the samples into openings.
237
+ */
238
+ private openingSearch;
239
+ /** One opening from its boundary samples: measured along their own line, facing room b. */
240
+ private openingFromRun;
241
+ /** Room index (−1 outside) at a world-space position (live heights). */
242
+ roomAtNode: import("three/tsl").FnNode<[any], import("three/webgpu").VarNode<"int", import("three/webgpu").ConstNode<"int", number>>>;
243
+ /**
244
+ * The room a surface faces, probed off it along its normal: 30 cm sideways, 18 cm up or down.
245
+ * Sideways it must clear a wall from inside it: a shutter, a door leaf or a pane set half-way
246
+ * into a 30 cm wall looks out past the wall's face, not into the cells along it, where a wall
247
+ * off the grid axes reads as room and outside in turn. One node per material: its lighting and
248
+ * its exterior mask share the lookup.
209
249
  */
210
- private detectOpenings;
211
- /** Level index for a world-space height (live, explode-offset level heights). */
212
- private levelOfNode;
213
- /** Room index (−1 outside) at a world-space position. */
214
- roomAtNode: import("three/tsl").FnNode<[any], import("three/webgpu").Node<"int">>;
250
+ probeRoomNode(): N;
215
251
  /** E' = Emax·(1 − e^(−E/Emax)), on luminance, hue kept — near-field hot spots compress, never blow out. */
216
252
  private softClampLamps;
217
253
  /**
@@ -219,7 +255,8 @@ export declare class RoomLighting {
219
255
  * topmost cover and that cover is hidden from there: a ceiling (hidden from above), or anything
220
256
  * once its level is focused (the levels over it hidden). From inside, under the cover, the room
221
257
  * stays enclosed whatever is focused: it must not take the full sky on top of its windows.
222
- * `h2` is the room's third header texel: [coverY, roof, level, 0].
258
+ * `h2` is the room's third header texel: [coverY, roof, level, 0]; `level` its level's
259
+ * [th, entryOffset, offset, flags] (flag 1: focused).
223
260
  */
224
261
  private openToSky;
225
262
  private texel;
@@ -228,7 +265,7 @@ export declare class RoomLighting {
228
265
  * irradiance — lamp + portal + bounce diffuse irradiance (linear)
229
266
  * enclosure — multiplier for the sky IBL (1 outdoors, `indoorEnv` in enclosed rooms)
230
267
  */
231
- lightingNode: import("three/tsl").FnNode<[], import("three/webgpu").JoinNode<"vec4">>;
268
+ lightingNode: import("three/tsl").FnNode<[any], import("three/webgpu").JoinNode<"vec4">>;
232
269
  /**
233
270
  * Light thrown *out* of lit rooms through their windows onto exterior surfaces (ground,
234
271
  * terraces, balconies, reveals). Two terms per exterior portal:
@@ -246,7 +283,7 @@ export declare class RoomLighting {
246
283
  */
247
284
  exteriorLampsNode: import("three/tsl").FnNode<[any, any], any>;
248
285
  /** 1 where exterior lights may shine (outside, or rooms open to the sky), 0 inside. */
249
- exteriorMaskNode: import("three/tsl").FnNode<[], import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>>;
286
+ exteriorMaskNode: import("three/tsl").FnNode<[any], import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>>;
250
287
  /** Linear lamp radiance of a room (its lit lamps) — the night tint of its window panes. */
251
288
  roomGlowNode: import("three/tsl").FnNode<[any], import("three/webgpu").Node<"vec3">>;
252
289
  }
@@ -255,6 +292,8 @@ export declare function polygonPerimeter(poly: [number, number][]): number;
255
292
  export declare function polygonArea(poly: [number, number][]): number;
256
293
  export declare function polygonCentroid(poly: [number, number][]): Vector2;
257
294
  /** Tanner Helland blackbody fit → linear RGB. */
295
+ /** A point inside the polygon and outside its holes: the centroid when it is, else a scan. */
296
+ export declare function interiorPoint(poly: [number, number][], holes?: [number, number][][]): Vector2;
258
297
  export declare function kelvin(k: number): Color;
259
298
  /** The daylight look's room system (one viewer canvas at a time). */
260
299
  export declare const daylightRooms: RoomLighting;
@@ -1 +1 @@
1
- {"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/rooms.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,KAAK,MAAM,EACX,KAAK,EASL,KAAK,QAAQ,EAGb,SAAS,EAIT,OAAO,EACP,OAAO,EACR,MAAM,OAAO,CAAA;AA0Dd,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;IACZ,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6CAA6C;IAC7C,EAAE,EAAE,OAAO,CAAA;IACX,8EAA8E;IAC9E,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACjE;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,gBAAgB;IAChB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvF,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,IAAI,CAAA;IACZ,kEAAkE;IAClE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,kEAAkE;IAClE,MAAM,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,CAAA;IACjE,uFAAuF;IACvF,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,mFAAmF;IACnF,cAAc,EAAE,OAAO,CAAA;IACvB,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;CACpD,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,4BAA4B;IAC5B,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,OAAO,GAAG;IACb,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,OAAO,CAAA;IACf,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,OAAO,CAAA;IACpB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,KAAK,CAAA;AAOpD,qBAAa,YAAY;IACvB,KAAK,EAAE,IAAI,EAAE,CAAK;IAClB,gGAAgG;IAChG,aAAa,EAAE,QAAQ,EAAE,CAAK;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAK;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAK;IACxB,MAAM,EAAE,MAAM,EAAE,CAAM;IACtB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,OAAO,CAAqD;IAGpE,QAAQ,CAAC,UAAU,sDAAe;IAClC,QAAQ,CAAC,UAAU,sDAAe;IAClC,QAAQ,CAAC,QAAQ,sDAAa;IAC9B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,sDAAa;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,sDAAe;IACjC,qCAAqC;IACrC,QAAQ,CAAC,SAAS,sDAAa;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,sDAAe;IAChC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,sDAAa;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,sDAAa;IAC/B,QAAQ,CAAC,OAAO,sDAAa;IAC7B,QAAQ,CAAC,YAAY,oDAAqB;IAG1C;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAqBjB;IAED,0EAA0E;IAC1E,KAAK,CAAC,KAAK,EAAE,cAAc,QAuO1B;IAED,iFAAiF;IACjF,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAQzB;IAED;;;;OAIG;IACH,UAAU,EAAE,OAAO,EAAE,CAAK;IAE1B;;;;;;;;OAQG;IACH,WAAW,CACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,KAAK,EACf,MAAM,SAAI,GACT;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,KAAK,GAAG,IAAI,CAAA;KAAE,CAqD9D;IAED,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAO1D;IAED,+EAA+E;IAC/E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAchC;IAED,oFAAoF;IACpF,OAAO,SAEN;IAED,yFAAyF;IACzF,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAexD;IAED,8FAA8F;IAC9F,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,QAgB/C;IAED,yDAAyD;IACzD,YAAY,CAAC,IAAI,EAAE,MAAM,UAUxB;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAS/B;IAED,0FAA0F;IAC1F,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAczE;IAED;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,QAwDzF;IAOD,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,YAAY;IA6EpB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAOjB,qGAAqG;IACrG,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,GAAG;IAIX;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAsHtB,iFAAiF;IACjF,OAAO,CAAC,WAAW;IAUnB,yDAAyD;IACzD,UAAU,wEAeR;IAEF,2GAA2G;IAC3G,OAAO,CAAC,cAAc;IAMtB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,KAAK;IAKb;;;;OAIG;IACH,YAAY,0EAyIV;IAEF;;;;;;;;OAQG;IACH,iBAAiB,8EAsDf;IAEF;;;;OAIG;IACH,iBAAiB,8CA6Bf;IAEF,uFAAuF;IACvF,gBAAgB,6HAWd;IAEF,2FAA2F;IAC3F,YAAY,yEASV;CACH;AAkCD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAQ5E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAKxD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAKnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAYvD;AAED,iDAAiD;AACjD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,SAgB/B;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,cAAqB,CAAA"}
1
+ {"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/rooms.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAEJ,KAAK,MAAM,EACX,KAAK,EASL,KAAK,QAAQ,EAGb,SAAS,EAGT,OAAO,EACP,OAAO,EACR,MAAM,OAAO,CAAA;AAsBd,OAAO,EAAQ,KAAK,QAAQ,EAAiB,OAAO,EAAwB,MAAM,YAAY,CAAA;AAE9F;;;;;;;;;;;;;;;;;;GAkBG;AAEH,KAAK,CAAC,GAAG,GAAG,CAAA;AAWZ,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;IACZ,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6CAA6C;IAC7C,EAAE,EAAE,OAAO,CAAA;IACX,8EAA8E;IAC9E,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IACjE;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,gBAAgB;IAChB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvF,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,IAAI,CAAA;IACZ,2FAA2F;IAC3F,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,kEAAkE;IAClE,MAAM,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,CAAA;IACjE;;;OAGG;IACH,KAAK,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACjD,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,mFAAmF;IACnF,cAAc,EAAE,OAAO,CAAA;IACvB,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;CACpD,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,4BAA4B;IAC5B,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,OAAO,GAAG;IACb,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,OAAO,CAAA;IACf,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAWD,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,OAAO,CAAA;IACpB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,KAAK,CAAA;AAOpD,qBAAa,YAAY;IACvB,KAAK,EAAE,IAAI,EAAE,CAAK;IAClB,gGAAgG;IAChG,aAAa,EAAE,QAAQ,EAAE,CAAK;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAK;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAK;IACxB,MAAM,EAAE,QAAQ,EAAE,CAAK;IACvB,qEAAqE;IACrE,QAAQ,CAAC,GAAG,UAAgB;IAC5B,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,OAAO,CAAqD;IAGpE,QAAQ,CAAC,UAAU,sDAAe;IAClC,QAAQ,CAAC,UAAU,sDAAe;IAClC,QAAQ,CAAC,QAAQ,sDAAa;IAC9B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,sDAAa;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,sDAAe;IACjC,qCAAqC;IACrC,QAAQ,CAAC,SAAS,sDAAa;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,sDAAe;IAChC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,sDAAa;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,sDAAa;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,sDAAa;IAG7B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAUjB;IAED,0EAA0E;IAC1E,KAAK,CAAC,KAAK,EAAE,cAAc,QAyM1B;IAED,oGAAoG;IACpG,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEzB;IAED;;;;OAIG;IACH,UAAU,EAAE,OAAO,EAAE,CAAK;IAC1B,0FAA0F;IAC1F,YAAY,EAAE,OAAO,EAAE,CAAK;IAC5B,oFAAoF;IACpF,OAAO,CAAC,aAAa,CAAgB;IAErC;;;;;;;;OAQG;IACH,WAAW,CACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,KAAK,EACf,MAAM,SAAI,GACT;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,KAAK,GAAG,IAAI,CAAA;KAAE,CAmD9D;IAED,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAK1D;IAED;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAkB5E;IAED,oFAAoF;IACpF,OAAO,SAEN;IAED,yFAAyF;IACzF,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAexD;IAED,8FAA8F;IAC9F,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,QAgB/C;IAED,yDAAyD;IACzD,YAAY,CAAC,IAAI,EAAE,MAAM,UAUxB;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAS/B;IAED,0FAA0F;IAC1F,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAczE;IAED;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,QAwDzF;IAOD,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,YAAY;IA6EpB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAOjB,qGAAqG;IACrG,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,GAAG;IAIX;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAiHrB,2FAA2F;IAC3F,OAAO,CAAC,cAAc;IA2DtB,wEAAwE;IACxE,UAAU,4HAA2C;IAErD;;;;;;OAMG;IACH,aAAa,IAAI,CAAC,CAEjB;IAED,2GAA2G;IAC3G,OAAO,CAAC,cAAc;IAMtB;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,KAAK;IAKb;;;;OAIG;IACH,YAAY,6EAsIV;IAEF;;;;;;;;OAQG;IACH,iBAAiB,8EAsDf;IAEF;;;;OAIG;IACH,iBAAiB,8CA6Bf;IAEF,uFAAuF;IACvF,gBAAgB,gIAWd;IAEF,2FAA2F;IAC3F,YAAY,yEASV;CACH;AAkHD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAQ5E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAKxD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAKnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAYvD;AAED,iDAAiD;AACjD,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,GAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAO,WAuBvF;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,SAgB/B;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,cAAqB,CAAA"}