@pascal-app/core 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 (266) hide show
  1. package/dist/agent-operations/__fixtures__/cases.d.ts +3 -2
  2. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/native-materials.d.ts +4 -0
  4. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  5. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/place-items-cases.js +28 -0
  7. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +9567 -9563
  8. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +77 -77
  10. package/dist/agent-operations/asset-catalog.d.ts +21 -11
  11. package/dist/agent-operations/asset-catalog.d.ts.map +1 -1
  12. package/dist/agent-operations/asset-catalog.js +28 -10
  13. package/dist/agent-operations/asset-views.d.ts +8 -3
  14. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  15. package/dist/agent-operations/asset-views.js +19 -3
  16. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  17. package/dist/agent-operations/author-scene.js +2 -3
  18. package/dist/agent-operations/batch.d.ts +7 -1
  19. package/dist/agent-operations/batch.d.ts.map +1 -1
  20. package/dist/agent-operations/batch.js +17 -2
  21. package/dist/agent-operations/catalog-asset.d.ts +15 -0
  22. package/dist/agent-operations/catalog-asset.d.ts.map +1 -0
  23. package/dist/agent-operations/catalog-asset.js +4 -0
  24. package/dist/agent-operations/circulation-spaces.d.ts +1724 -1723
  25. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -1
  26. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  27. package/dist/agent-operations/design-brief.js +2 -0
  28. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  29. package/dist/agent-operations/furnish-room.js +2 -1
  30. package/dist/agent-operations/index.d.ts +3 -0
  31. package/dist/agent-operations/index.d.ts.map +1 -1
  32. package/dist/agent-operations/index.js +4 -1
  33. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  34. package/dist/agent-operations/level-reads.js +5 -2
  35. package/dist/agent-operations/move-plan.d.ts.map +1 -1
  36. package/dist/agent-operations/move-plan.js +11 -9
  37. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  38. package/dist/agent-operations/place-in-room.js +2 -1
  39. package/dist/agent-operations/place-items.d.ts.map +1 -1
  40. package/dist/agent-operations/place-items.js +2 -1
  41. package/dist/agent-operations/scene-queries.d.ts +2944 -2943
  42. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  43. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  44. package/dist/agent-operations/scene-view.js +38 -13
  45. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  46. package/dist/agent-operations/search-assets.js +6 -0
  47. package/dist/agent-operations/types.d.ts +3 -2
  48. package/dist/agent-operations/types.d.ts.map +1 -1
  49. package/dist/agent-operations/usage-checks.js +18 -3
  50. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  51. package/dist/agent-operations/verify-scene.js +4 -2
  52. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  53. package/dist/agent-operations/wall-object-observations.js +1 -1
  54. package/dist/agent-tools/assets.js +1 -1
  55. package/dist/agent-tools/wall-openings.js +2 -2
  56. package/dist/building/__fixtures__/wall-opening-cases.d.ts +13 -12
  57. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  58. package/dist/building/level-duplication.d.ts +1281 -1279
  59. package/dist/building/level-duplication.d.ts.map +1 -1
  60. package/dist/building/level-duplication.js +3 -1
  61. package/dist/building/merge-windows.d.ts.map +1 -1
  62. package/dist/building/merge-windows.js +4 -3
  63. package/dist/building/wall-openings.d.ts +95 -81
  64. package/dist/building/wall-openings.d.ts.map +1 -1
  65. package/dist/building/wall-openings.js +74 -25
  66. package/dist/commands/structure/shared.d.ts +3203 -3202
  67. package/dist/commands/structure/shared.d.ts.map +1 -1
  68. package/dist/commands/structure/zone-wall-merge.d.ts +2028 -2025
  69. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  70. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  71. package/dist/contracts/reference-inventory.js +0 -1
  72. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +6 -1
  73. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  74. package/dist/hooks/spatial-grid/spatial-grid-manager.js +30 -9
  75. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2101 -2100
  76. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  77. package/dist/hooks/spatial-grid/spatial-grid-sync.js +8 -4
  78. package/dist/index.d.ts +13 -4
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +13 -4
  81. package/dist/lib/__fixtures__/mezzanine.d.ts +6428 -6424
  82. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  83. package/dist/lib/absorb-wall-separators.d.ts +2267 -2266
  84. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  85. package/dist/lib/asset-storage.d.ts.map +1 -1
  86. package/dist/lib/asset-storage.js +3 -0
  87. package/dist/lib/build-mode.d.ts +11 -0
  88. package/dist/lib/build-mode.d.ts.map +1 -0
  89. package/dist/lib/build-mode.js +24 -0
  90. package/dist/lib/corner-pair.d.ts +2 -0
  91. package/dist/lib/corner-pair.d.ts.map +1 -1
  92. package/dist/lib/door-interaction.d.ts +14 -0
  93. package/dist/lib/door-interaction.d.ts.map +1 -0
  94. package/dist/lib/door-interaction.js +62 -0
  95. package/dist/lib/elevator-support.d.ts +15 -0
  96. package/dist/lib/elevator-support.d.ts.map +1 -0
  97. package/dist/lib/elevator-support.js +40 -0
  98. package/dist/lib/floor-foundation-datum.d.ts.map +1 -1
  99. package/dist/lib/floor-foundation-datum.js +5 -1
  100. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  101. package/dist/lib/floor-intent-changes.js +6 -4
  102. package/dist/lib/floorplan/context.d.ts +95 -0
  103. package/dist/lib/floorplan/context.d.ts.map +1 -0
  104. package/dist/lib/floorplan/context.js +155 -0
  105. package/dist/lib/floorplan/index.d.ts +6 -0
  106. package/dist/lib/floorplan/index.d.ts.map +1 -0
  107. package/dist/lib/floorplan/index.js +5 -0
  108. package/dist/lib/floorplan/marks.d.ts +71 -0
  109. package/dist/lib/floorplan/marks.d.ts.map +1 -0
  110. package/dist/lib/floorplan/marks.js +157 -0
  111. package/dist/lib/floorplan/plan-math.d.ts +18 -0
  112. package/dist/lib/floorplan/plan-math.d.ts.map +1 -0
  113. package/dist/lib/floorplan/plan-math.js +82 -0
  114. package/dist/lib/floorplan/svg-paths.d.ts +17 -0
  115. package/dist/lib/floorplan/svg-paths.d.ts.map +1 -0
  116. package/dist/lib/floorplan/svg-paths.js +92 -0
  117. package/dist/lib/floorplan/wall-affordances.d.ts +31 -0
  118. package/dist/lib/floorplan/wall-affordances.d.ts.map +1 -0
  119. package/dist/lib/floorplan/wall-affordances.js +24 -0
  120. package/dist/lib/hierarchy.d.ts +19 -0
  121. package/dist/lib/hierarchy.d.ts.map +1 -0
  122. package/dist/lib/hierarchy.js +53 -0
  123. package/dist/lib/opening-floor-datum.d.ts +1 -1
  124. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  125. package/dist/lib/opening-floor-datum.js +2 -2
  126. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  127. package/dist/lib/own-floor-intent.js +2 -2
  128. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  129. package/dist/lib/polygon-boolean.js +2 -1
  130. package/dist/lib/room-floor-elevation.d.ts +12 -0
  131. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  132. package/dist/lib/room-floor-elevation.js +41 -0
  133. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  134. package/dist/lib/room-floor-feasibility.js +1 -1
  135. package/dist/lib/space-detection.d.ts.map +1 -1
  136. package/dist/lib/space-detection.js +1 -0
  137. package/dist/lib/wall-face-script.d.ts.map +1 -1
  138. package/dist/lib/wall-face-script.js +3 -3
  139. package/dist/lib/window-interaction.d.ts +16 -0
  140. package/dist/lib/window-interaction.d.ts.map +1 -0
  141. package/dist/lib/window-interaction.js +82 -0
  142. package/dist/lib/zone-quantities.js +1 -1
  143. package/dist/node-slots/column.d.ts +5 -0
  144. package/dist/node-slots/column.d.ts.map +1 -1
  145. package/dist/node-slots/column.js +10 -0
  146. package/dist/registry/__fixtures__/roof-planes.d.ts +69 -0
  147. package/dist/registry/__fixtures__/roof-planes.d.ts.map +1 -0
  148. package/dist/registry/__fixtures__/roof-planes.js +59 -0
  149. package/dist/registry/index.d.ts +3 -2
  150. package/dist/registry/index.d.ts.map +1 -1
  151. package/dist/registry/index.js +2 -1
  152. package/dist/registry/registry.d.ts +5 -0
  153. package/dist/registry/registry.d.ts.map +1 -1
  154. package/dist/registry/registry.js +10 -0
  155. package/dist/registry/roofs.d.ts +34 -0
  156. package/dist/registry/roofs.d.ts.map +1 -0
  157. package/dist/registry/roofs.js +61 -0
  158. package/dist/registry/types.d.ts +54 -0
  159. package/dist/registry/types.d.ts.map +1 -1
  160. package/dist/registry/validate-relations.d.ts +5 -1
  161. package/dist/registry/validate-relations.d.ts.map +1 -1
  162. package/dist/registry/validate-relations.js +6 -2
  163. package/dist/schema/asset-url.d.ts +8 -0
  164. package/dist/schema/asset-url.d.ts.map +1 -1
  165. package/dist/schema/asset-url.js +17 -0
  166. package/dist/schema/index.d.ts +1 -1
  167. package/dist/schema/index.d.ts.map +1 -1
  168. package/dist/schema/index.js +1 -1
  169. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  170. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  171. package/dist/schema/nodes/roof-segment.d.ts +2 -0
  172. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  173. package/dist/schema/nodes/roof-segment.js +40 -2
  174. package/dist/schema/nodes/roof.d.ts +1 -1
  175. package/dist/schema/nodes/roof.d.ts.map +1 -1
  176. package/dist/schema/nodes/roof.js +13 -8
  177. package/dist/schema/nodes/wall.d.ts +1 -0
  178. package/dist/schema/nodes/wall.d.ts.map +1 -1
  179. package/dist/schema/nodes/wall.js +6 -0
  180. package/dist/schema/types.d.ts +2 -1
  181. package/dist/schema/types.d.ts.map +1 -1
  182. package/dist/services/index.d.ts +1 -1
  183. package/dist/services/index.d.ts.map +1 -1
  184. package/dist/services/index.js +1 -1
  185. package/dist/services/movement.d.ts +7 -0
  186. package/dist/services/movement.d.ts.map +1 -1
  187. package/dist/services/movement.js +13 -0
  188. package/dist/services/port-connectivity.d.ts +15 -6
  189. package/dist/services/port-connectivity.d.ts.map +1 -1
  190. package/dist/services/port-connectivity.js +83 -17
  191. package/dist/services/roof-bearing.js +2 -1
  192. package/dist/services/roof-level.d.ts.map +1 -1
  193. package/dist/services/roof-level.js +12 -2
  194. package/dist/services/roof-move.d.ts +4 -2
  195. package/dist/services/roof-move.d.ts.map +1 -1
  196. package/dist/services/roof-move.js +21 -9
  197. package/dist/services/storey.d.ts +6 -1
  198. package/dist/services/storey.d.ts.map +1 -1
  199. package/dist/services/storey.js +11 -2
  200. package/dist/spatial/usage-field/findings.d.ts +7 -1
  201. package/dist/spatial/usage-field/findings.d.ts.map +1 -1
  202. package/dist/spatial/usage-field/findings.js +42 -10
  203. package/dist/spatial/usage-field/path.d.ts.map +1 -1
  204. package/dist/spatial/usage-field/path.js +28 -18
  205. package/dist/spatial/usage-field/swings.d.ts +1 -0
  206. package/dist/spatial/usage-field/swings.d.ts.map +1 -1
  207. package/dist/spatial/usage-field/walls.d.ts +2 -0
  208. package/dist/spatial/usage-field/walls.d.ts.map +1 -1
  209. package/dist/spatial/usage-field/walls.js +18 -4
  210. package/dist/store/actions/node-actions.d.ts +2 -1
  211. package/dist/store/actions/node-actions.d.ts.map +1 -1
  212. package/dist/store/actions/node-actions.js +23 -5
  213. package/dist/store/derived-node-guard.d.ts.map +1 -1
  214. package/dist/store/derived-node-guard.js +2 -1
  215. package/dist/store/scene-annotations.d.ts +4634 -4632
  216. package/dist/store/scene-annotations.d.ts.map +1 -1
  217. package/dist/systems/document-reconcile.d.ts.map +1 -1
  218. package/dist/systems/document-reconcile.js +1 -2
  219. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  220. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  221. package/dist/systems/elevator/elevator-geometry.js +40 -8
  222. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  223. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  224. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  225. package/dist/systems/elevator/elevator-runtime.js +95 -18
  226. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  227. package/dist/systems/elevator/elevator-service.js +24 -4
  228. package/dist/systems/roof/roof-elevation.d.ts +11 -6
  229. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  230. package/dist/systems/roof/roof-elevation.js +26 -12
  231. package/dist/systems/slab/__fixtures__/floor-step.d.ts +5 -1
  232. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  233. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2218 -2214
  234. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  235. package/dist/systems/stair/stair-opening-preview.d.ts +3203 -3202
  236. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  237. package/dist/systems/wall/wall-curve.d.ts +10 -0
  238. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  239. package/dist/systems/wall/wall-curve.js +38 -0
  240. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  241. package/dist/systems/wall/wall-frame.js +8 -0
  242. package/dist/systems/wall/wall-merge.d.ts +9 -1
  243. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  244. package/dist/systems/wall/wall-merge.js +38 -6
  245. package/dist/systems/wall/wall-top.d.ts +10 -3
  246. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  247. package/dist/systems/wall/wall-top.js +24 -8
  248. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  249. package/dist/systems/wall/wall-topology.js +19 -1
  250. package/dist/utils/ensure-scene-openings.d.ts +5595 -5593
  251. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  252. package/dist/utils/floor-plate-migration.d.ts +2267 -2266
  253. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  254. package/dist/utils/measurement-format.d.ts +27 -0
  255. package/dist/utils/measurement-format.d.ts.map +1 -0
  256. package/dist/utils/measurement-format.js +143 -0
  257. package/dist/utils/owned-floor-opening-migration.d.ts +653 -652
  258. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  259. package/dist/utils/reconcile-structure-on-load.d.ts +1724 -1723
  260. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  261. package/dist/utils/scene-bounds.d.ts +32 -0
  262. package/dist/utils/scene-bounds.d.ts.map +1 -0
  263. package/dist/utils/scene-bounds.js +201 -0
  264. package/dist/validation/validate-build-json.d.ts.map +1 -1
  265. package/dist/validation/validate-build-json.js +3 -1
  266. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"absorb-wall-separators.d.ts","sourceRoot":"","sources":["../../src/lib/absorb-wall-separators.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmE5F"}
1
+ {"version":3,"file":"absorb-wall-separators.d.ts","sourceRoot":"","sources":["../../src/lib/absorb-wall-separators.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmE5F"}
@@ -1 +1 @@
1
- {"version":3,"file":"asset-storage.d.ts","sourceRoot":"","sources":["../../src/lib/asset-storage.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAQzC;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoCtE"}
1
+ {"version":3,"file":"asset-storage.d.ts","sourceRoot":"","sources":["../../src/lib/asset-storage.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,gBAAgB,CAAA;AAQzC;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqCtE"}
@@ -1,5 +1,6 @@
1
1
  import { get, set } from 'idb-keyval';
2
2
  import { customAlphabet } from 'nanoid';
3
+ import { isSchemeRelativeUrl } from '../schema/asset-url.js';
3
4
  import { ARTIFACT_URL_PREFIX, resolveArtifactUrl } from './artifact-store.js';
4
5
  export const ASSET_PREFIX = 'asset_data:';
5
6
  // Cache for active object URLs to prevent leaks and flickering
@@ -21,6 +22,8 @@ export async function saveAsset(file) {
21
22
  export async function loadAssetUrl(url) {
22
23
  if (!url)
23
24
  return null;
25
+ if (isSchemeRelativeUrl(url))
26
+ return null;
24
27
  // If it's already a blob or http URL, return as is
25
28
  if (url.startsWith('blob:') || url.startsWith('http')) {
26
29
  return url;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Whether this is a development build. Reads `process.env.NODE_ENV` directly, never
3
+ * behind `typeof process`: bundlers (Vite, Next, esbuild) replace that expression with
4
+ * a constant, while a `typeof process` guard runs in the browser, where `process` is
5
+ * absent, and would send production bundles down the development branch. Without a
6
+ * bundler and without `process`, it is treated as production.
7
+ */
8
+ export declare function isDevelopmentBuild(): boolean;
9
+ /** Development builds outside the test runner, for warnings tests should not print. */
10
+ export declare function isDevelopmentOutsideTests(): boolean;
11
+ //# sourceMappingURL=build-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-mode.d.ts","sourceRoot":"","sources":["../../src/lib/build-mode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAM5C;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,IAAI,OAAO,CAMnD"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Whether this is a development build. Reads `process.env.NODE_ENV` directly, never
3
+ * behind `typeof process`: bundlers (Vite, Next, esbuild) replace that expression with
4
+ * a constant, while a `typeof process` guard runs in the browser, where `process` is
5
+ * absent, and would send production bundles down the development branch. Without a
6
+ * bundler and without `process`, it is treated as production.
7
+ */
8
+ export function isDevelopmentBuild() {
9
+ try {
10
+ return process.env.NODE_ENV !== 'production';
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ /** Development builds outside the test runner, for warnings tests should not print. */
17
+ export function isDevelopmentOutsideTests() {
18
+ try {
19
+ return process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test';
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
@@ -262,6 +262,7 @@ export declare function wallsEndingAt(nodes: Nodes, levelId: string | undefined,
262
262
  } | undefined;
263
263
  justification?: "a" | "b" | undefined;
264
264
  height?: number | undefined;
265
+ endHeightOffset?: number | undefined;
265
266
  curveOffset?: number | undefined;
266
267
  supportSlabId?: string | undefined;
267
268
  supportOffset?: number | undefined;
@@ -1035,6 +1036,7 @@ export declare function cornerPair(nodes: Nodes, window: WindowNode): {
1035
1036
  } | undefined;
1036
1037
  justification?: "a" | "b" | undefined;
1037
1038
  height?: number | undefined;
1039
+ endHeightOffset?: number | undefined;
1038
1040
  curveOffset?: number | undefined;
1039
1041
  supportSlabId?: string | undefined;
1040
1042
  supportOffset?: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"corner-pair.d.ts","sourceRoot":"","sources":["../../src/lib/corner-pair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"corner-pair.d.ts","sourceRoot":"","sources":["../../src/lib/corner-pair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { AnyNodeId } from '../schema/types.js';
2
+ import { type DoorInteractiveState } from '../store/use-interactive.js';
3
+ import { isOperationDoorType } from './door-operation.js';
4
+ export declare const DOOR_SWING_OPEN_ANGLE: number;
5
+ export declare const DOOR_TOGGLE_ANIMATION_MS = 520;
6
+ export { isOperationDoorType };
7
+ type DoorOpenAnimationOptions = {
8
+ persist?: boolean;
9
+ };
10
+ export declare function getDisplayedDoorValue(doorId: AnyNodeId, field: keyof DoorInteractiveState, nodeValue: number | undefined): number;
11
+ export declare function toggleDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
12
+ export declare function closeDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
13
+ export declare function openDoorOpenState(doorId: AnyNodeId, options?: DoorOpenAnimationOptions): void;
14
+ //# sourceMappingURL=door-interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"door-interaction.d.ts","sourceRoot":"","sources":["../../src/lib/door-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,KAAK,oBAAoB,EAAkB,MAAM,0BAA0B,CAAA;AAEpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,eAAO,MAAM,qBAAqB,QAAc,CAAA;AAChD,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,oBAAoB,EACjC,SAAS,EAAE,MAAM,GAAG,SAAS,UAU9B;AAmBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAwBxF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAYvF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,QAYtF"}
@@ -0,0 +1,62 @@
1
+ import { useInteractive } from '../store/use-interactive.js';
2
+ import useScene from '../store/use-scene.js';
3
+ import { isOperationDoorType } from './door-operation.js';
4
+ export const DOOR_SWING_OPEN_ANGLE = Math.PI / 2;
5
+ export const DOOR_TOGGLE_ANIMATION_MS = 520;
6
+ export { isOperationDoorType };
7
+ export function getDisplayedDoorValue(doorId, field, nodeValue) {
8
+ const interactive = useInteractive.getState();
9
+ const runtimeValue = interactive.doors[doorId]?.[field];
10
+ if (runtimeValue !== undefined)
11
+ return runtimeValue;
12
+ const queuedValue = interactive.doorAnimations[doorId]?.from;
13
+ if (queuedValue !== undefined)
14
+ return queuedValue;
15
+ return nodeValue ?? 0;
16
+ }
17
+ function startDoorOpenAnimation(doorId, field, from, to, options) {
18
+ useInteractive.getState().startDoorAnimation(doorId, {
19
+ field,
20
+ from,
21
+ to,
22
+ startedAt: null,
23
+ durationMs: DOOR_TOGGLE_ANIMATION_MS,
24
+ persist: options?.persist ?? true,
25
+ });
26
+ }
27
+ export function toggleDoorOpenState(doorId, options) {
28
+ const node = useScene.getState().nodes[doorId];
29
+ if (node?.type !== 'door' || node.openingKind === 'opening')
30
+ return;
31
+ if (isOperationDoorType(node.doorType)) {
32
+ const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
33
+ startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, currentOpenAmount >= 0.5 ? 0 : 1, options);
34
+ return;
35
+ }
36
+ const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
37
+ startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, currentSwingAngle >= DOOR_SWING_OPEN_ANGLE / 2 ? 0 : DOOR_SWING_OPEN_ANGLE, options);
38
+ }
39
+ export function closeDoorOpenState(doorId, options) {
40
+ const node = useScene.getState().nodes[doorId];
41
+ if (node?.type !== 'door' || node.openingKind === 'opening')
42
+ return;
43
+ if (isOperationDoorType(node.doorType)) {
44
+ const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
45
+ startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, 0, options);
46
+ return;
47
+ }
48
+ const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
49
+ startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, 0, options);
50
+ }
51
+ export function openDoorOpenState(doorId, options) {
52
+ const node = useScene.getState().nodes[doorId];
53
+ if (node?.type !== 'door' || node.openingKind === 'opening')
54
+ return;
55
+ if (isOperationDoorType(node.doorType)) {
56
+ const currentOpenAmount = getDisplayedDoorValue(doorId, 'operationState', node.operationState);
57
+ startDoorOpenAnimation(doorId, 'operationState', currentOpenAmount, 1, options);
58
+ return;
59
+ }
60
+ const currentSwingAngle = getDisplayedDoorValue(doorId, 'swingAngle', node.swingAngle);
61
+ startDoorOpenAnimation(doorId, 'swingAngle', currentSwingAngle, DOOR_SWING_OPEN_ANGLE, options);
62
+ }
@@ -0,0 +1,15 @@
1
+ import type { AnyNode, ElevatorNode, LevelNode } from '../schema/index.js';
2
+ export declare function resolveElevatorSupportLevelId({ buildingId, preferredLevelId, nodes, }: {
3
+ buildingId: string | null | undefined;
4
+ preferredLevelId?: string | null;
5
+ nodes?: Readonly<Record<string, AnyNode>>;
6
+ }): LevelNode['id'] | null;
7
+ export declare function resolveElevatorSupportY({ buildingId, preferredLevelId, x, z, nodes, }: {
8
+ buildingId: string | null | undefined;
9
+ preferredLevelId?: string | null;
10
+ x: number;
11
+ z: number;
12
+ nodes?: Readonly<Record<string, AnyNode>>;
13
+ }): number;
14
+ export declare function resolveElevatorNodeSupportY(node: ElevatorNode, position?: [number, number, number], nodes?: Readonly<Record<string, AnyNode>>): number;
15
+ //# sourceMappingURL=elevator-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevator-support.d.ts","sourceRoot":"","sources":["../../src/lib/elevator-support.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAa,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAiB5E,wBAAgB,6BAA6B,CAAC,EAC5C,UAAU,EACV,gBAAgB,EAChB,KAAiC,GAClC,EAAE;IACD,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1C,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAWzB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,UAAU,EACV,gBAAgB,EAChB,CAAC,EACD,CAAC,EACD,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1C,GAAG,MAAM,CAKT;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,YAAY,EAClB,QAAQ,GAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAiB,EAClD,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,MAAM,CAQR"}
@@ -0,0 +1,40 @@
1
+ import { spatialGridManager } from '../hooks/spatial-grid/spatial-grid-manager.js';
2
+ import useScene from '../store/use-scene.js';
3
+ function getBuildingLevels(buildingId, nodes) {
4
+ if (!buildingId)
5
+ return [];
6
+ const building = nodes[buildingId];
7
+ if (building?.type !== 'building')
8
+ return [];
9
+ return building.children
10
+ .map((childId) => nodes[childId])
11
+ .filter((entry) => entry?.type === 'level')
12
+ .sort((left, right) => left.level - right.level);
13
+ }
14
+ export function resolveElevatorSupportLevelId({ buildingId, preferredLevelId, nodes = useScene.getState().nodes, }) {
15
+ const preferred = preferredLevelId ? nodes[preferredLevelId] : undefined;
16
+ const levels = getBuildingLevels(buildingId, nodes);
17
+ const preferredInBuilding = preferredLevelId
18
+ ? levels.find((level) => level.id === preferredLevelId)
19
+ : undefined;
20
+ if (preferredInBuilding)
21
+ return preferredInBuilding.id;
22
+ if (levels.length === 0)
23
+ return preferred?.type === 'level' ? preferred.id : null;
24
+ return levels[0]?.id ?? null;
25
+ }
26
+ export function resolveElevatorSupportY({ buildingId, preferredLevelId, x, z, nodes, }) {
27
+ const levelId = resolveElevatorSupportLevelId({ buildingId, preferredLevelId, nodes });
28
+ if (!levelId)
29
+ return 0;
30
+ return Math.max(0, spatialGridManager.getSlabElevationAt(levelId, x, z));
31
+ }
32
+ export function resolveElevatorNodeSupportY(node, position = node.position, nodes) {
33
+ return resolveElevatorSupportY({
34
+ buildingId: node.parentId,
35
+ preferredLevelId: node.fromLevelId ?? node.defaultLevelId,
36
+ x: position[0],
37
+ z: position[2],
38
+ nodes,
39
+ });
40
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"floor-foundation-datum.d.ts","sourceRoot":"","sources":["../../src/lib/floor-foundation-datum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAclD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CAER;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CA+BR;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,WAAW,GAAG,gBAAgB,CA+BhC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,OAAO,CAMT;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAK7E;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CAER;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAM/F;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,EACf,SAAS,GAAE,MAA6C,GACvD;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB,GAAG,IAAI,CAYP;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,CAUR;AAID,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAgBT"}
1
+ {"version":3,"file":"floor-foundation-datum.d.ts","sourceRoot":"","sources":["../../src/lib/floor-foundation-datum.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAclD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CAER;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CA+BR;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,WAAW,GAAG,gBAAgB,CA+BhC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,OAAO,CAMT;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAK7E;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,GACd,MAAM,CAER;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAM/F;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,QAAQ,EACf,SAAS,GAAE,MAA6C,GACvD;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB,GAAG,IAAI,CAYP;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,CAUR;AAID,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAgBT"}
@@ -1,3 +1,4 @@
1
+ import { roofFaceShapes } from '../registry/roofs.js';
1
2
  import { DEFAULT_SLAB_ELEVATION, MIN_SLAB_THICKNESS } from '../schema/nodes/slab.js';
2
3
  import { wallOverlapsSlabFootprint } from '../systems/slab/slab-support.js';
3
4
  import { getWallArcData } from '../systems/wall/wall-curve.js';
@@ -199,8 +200,11 @@ function computeFootprintSupport(base, node, nodes) {
199
200
  const segments = node.children
200
201
  .map((id) => nodes[id])
201
202
  .filter((segment) => segment?.type === 'roof-segment');
202
- if (!segments.length)
203
+ const faces = roofFaceShapes(node, nodes);
204
+ if (!segments.length && !faces.length)
203
205
  return containsPoint([{ outer: base.polygon, holes: base.holes ?? [] }], [node.position[0], node.position[2]]);
206
+ if (faces.some((face) => polygonsOverlap(base, face.outline)))
207
+ return true;
204
208
  return segments.some((segment) => {
205
209
  if (segment.type !== 'roof-segment')
206
210
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"floor-intent-changes.d.ts","sourceRoot":"","sources":["../../src/lib/floor-intent-changes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAOV,MAAM,WAAW,CAAA;AAsBlB,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAA;AAEjC,KAAK,MAAM,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAkCvD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,EAAE,CA6IV;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,SAAS,OAAO,EAAO,EAChC,OAAO,GAAE,SAAS,MAAM,EAAO,uBA2WhC"}
1
+ {"version":3,"file":"floor-intent-changes.d.ts","sourceRoot":"","sources":["../../src/lib/floor-intent-changes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAOV,MAAM,WAAW,CAAA;AAuBlB,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAA;AAEjC,KAAK,MAAM,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAA;AAkCvD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,EAAE,CA6IV;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,SAAS,OAAO,EAAO,EAChC,OAAO,GAAE,SAAS,MAAM,EAAO,uBAwXhC"}
@@ -1,6 +1,6 @@
1
1
  import { boundaries, roomFace } from '../commands/structure/shared.js';
2
2
  import { DEFAULT_SLAB_ELEVATION } from '../schema/nodes/slab.js';
3
- import { findLevelBelowId, getLevelElevations, getWallCoveringSlabUnderside, getWallTop, } from '../services/storey.js';
3
+ import { findLevelBelowId, getLevelElevations, getWallCoveringSlabUnderside, getWallTop, getWallTopOver, } from '../services/storey.js';
4
4
  import { automaticFloorHeight, floorPlateAtGroundContact, floorPlateHoldsUnderside, footprintSupportsNode, supportDerivedFloorHeight, } from './floor-foundation-datum.js';
5
5
  import { changedLevelConstructionDisplacements, footprintStackChanges, } from './floor-foundation-stack.js';
6
6
  import { floorRoomFaces } from './floor-room-faces.js';
@@ -446,7 +446,7 @@ export function floorIntentConflicts(nodes, updates, created = [], deleted = [])
446
446
  return (getOpeningFloorTarget(host, opening, graph) +
447
447
  opening.position[1] +
448
448
  opening.height / 2 -
449
- getWallTop(host, host.parentId, graph, wallSupportForNodes(host, graph).elevation));
449
+ getWallTopOver(host, host.parentId, graph, wallSupportForNodes(host, graph).elevation, opening.position[0] - opening.width / 2, opening.position[0] + opening.width / 2));
450
450
  };
451
451
  const after = excess(drafted, node);
452
452
  const previous = nodes[node.id] ?? copiedOpening(nodes, drafted, node);
@@ -468,8 +468,10 @@ export function floorIntentConflicts(nodes, updates, created = [], deleted = [])
468
468
  !levels.has(node.parentId) ||
469
469
  !loweringPlates.some(({ plate }) => footprintSupportsNode(plate, node, drafted)))
470
470
  continue;
471
- const excess = (graph, wall) => getWallTop(wall, wall.parentId, graph, wallSupportForNodes(wall, graph).elevation) -
472
- (getWallCoveringSlabUnderside(wall, wall.parentId, graph) ?? Infinity);
471
+ const excess = (graph, wall) => {
472
+ const base = wallSupportForNodes(wall, graph).elevation;
473
+ return (Math.max(getWallTop(wall, wall.parentId, graph, base, 0), getWallTop(wall, wall.parentId, graph, base, 1)) - (getWallCoveringSlabUnderside(wall, wall.parentId, graph) ?? Infinity));
474
+ };
473
475
  const after = excess(drafted, node);
474
476
  const previous = nodes[node.id];
475
477
  const before = previous?.type === 'wall' ? excess(nodes, previous) : -Infinity;
@@ -0,0 +1,95 @@
1
+ import type { FloorplanGeometry, FloorplanPalette, GeometryContext } from '../../registry/types.js';
2
+ import type { AnyNode } from '../../schema/index.js';
3
+ /** The `def.floorplan` contract every plan host shares: context extensions and geometry metadata. */
4
+ export declare const FLOORPLAN_GEOMETRY_METADATA_KEY = "pascal:editor/floorplan";
5
+ export declare const FLOORPLAN_CONTEXT_EXTENSION_KEY = "pascal:editor/floorplan";
6
+ export type FloorplanRenderPurpose = 'edit' | 'document';
7
+ export type FloorplanMetricNotation = 'meters' | 'millimeters';
8
+ /**
9
+ * Display → Measure walls: which finished faces wall dimensions measure to —
10
+ * the interior faces (ID, the room sizes), the exterior faces (OD, the
11
+ * outside size) or both. Read by a selected wall's temporary dimensions in 2D
12
+ * and 3D and by the Expert plan's automatic dimension strings.
13
+ */
14
+ export type FloorplanWallDimensionFaces = 'interior' | 'exterior' | 'both';
15
+ export declare const DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES: FloorplanWallDimensionFaces;
16
+ export declare function normalizeFloorplanWallDimensionFaces(value: unknown): FloorplanWallDimensionFaces;
17
+ export type FloorplanAnnotationRole = 'automatic-dimension' | 'contextual-dimension' | 'manual-dimension' | 'measurement' | 'opening-mark' | 'structural-grid' | 'column-center' | 'room-label'
18
+ /** A room's finish / ceiling-height lines — detail under the name, off in the clean plan. */
19
+ | 'room-detail'
20
+ /** The roof plan proper: outline, ridges, hips, slope arrows. Off over a floor plan unless asked. */
21
+ | 'roof-plan' | 'roof-pitch' | 'stair-annotation';
22
+ export type FloorplanSchedule = {
23
+ id: string;
24
+ title: string;
25
+ columns: ReadonlyArray<{
26
+ key: string;
27
+ label: string;
28
+ weight?: number;
29
+ }>;
30
+ rows: ReadonlyArray<{
31
+ id: string;
32
+ cells: Readonly<Record<string, string>>;
33
+ }>;
34
+ issues?: readonly string[];
35
+ };
36
+ type FloorplanGeometryMetadata = {
37
+ annotationRole?: FloorplanAnnotationRole;
38
+ annotationObstacle?: 'bounds' | 'outline';
39
+ renderPass?: 'overlay';
40
+ /**
41
+ * Annotation text only: the size to print at, in paper points, instead of
42
+ * the size its role implies. Lets a sheet set a room tag's name larger than
43
+ * its number without inventing a role per size.
44
+ */
45
+ textSizePt?: number;
46
+ };
47
+ type FloorplanContextExtension = {
48
+ automaticDimensions: boolean;
49
+ purpose: FloorplanRenderPurpose;
50
+ /**
51
+ * Sheet drafting (the Sheets plan viewports): kinds draw the permit-set
52
+ * convention — fixtures as labelled linework, furniture as light outlines,
53
+ * no raster sprites. Only `collectSheetGeometry` sets it; the editor and the
54
+ * read-only viewer never do, so their plans keep today's look.
55
+ */
56
+ drafting: boolean;
57
+ /**
58
+ * The editor canvas draws room labels as screen pills over the plan
59
+ * (`RoomLabels2D`), so zones skip their drawn tags and wash there. Exports,
60
+ * sheets and the read-only viewer keep the drawn tags.
61
+ */
62
+ roomLabelOverlay: boolean;
63
+ metricNotation: FloorplanMetricNotation;
64
+ wallDimensionFaces: FloorplanWallDimensionFaces;
65
+ };
66
+ export declare function floorplanGeometryMetadata(values: FloorplanGeometryMetadata): Readonly<Record<string, unknown>>;
67
+ export declare function withFloorplanGeometryMetadata<T extends FloorplanGeometry | null>(geometry: T, values: FloorplanGeometryMetadata): T;
68
+ export declare function readFloorplanGeometryMetadata(geometry: unknown): FloorplanGeometryMetadata;
69
+ export declare function isFloorplanAnnotationObstacleGeometry(geometry: FloorplanGeometry): boolean;
70
+ export declare function floorplanAnnotationObstacleMode(geometry: FloorplanGeometry): 'bounds' | 'outline' | '' | undefined;
71
+ export declare function createFloorplanContextExtensions(values: Partial<FloorplanContextExtension>): Readonly<Record<string, unknown>>;
72
+ export declare function readFloorplanContext(ctx: GeometryContext): FloorplanContextExtension;
73
+ export declare function readFloorplanMetricNotationOverride(ctx: GeometryContext): FloorplanMetricNotation | undefined;
74
+ export type FloorplanViewState = {
75
+ automaticDimensions?: boolean;
76
+ selected: boolean;
77
+ unit: 'metric' | 'imperial';
78
+ metricNotation?: 'meters' | 'millimeters';
79
+ purpose?: 'edit' | 'document';
80
+ /** Sheet drafting conventions (see `FloorplanContextExtension.drafting`). */
81
+ drafting?: boolean;
82
+ /** Room labels drawn as screen pills (see `FloorplanContextExtension.roomLabelOverlay`). */
83
+ roomLabelOverlay?: boolean;
84
+ wallDimensionFaces?: FloorplanWallDimensionFaces;
85
+ highlighted: boolean;
86
+ hovered: boolean;
87
+ moving: boolean;
88
+ focusedUnitId?: string;
89
+ focusedUnitMemberIds?: readonly string[];
90
+ palette: FloorplanPalette | undefined;
91
+ };
92
+ export declare function buildFloorplanContext(node: AnyNode, nodes: Record<string, AnyNode>, viewState: FloorplanViewState, levelData?: unknown): GeometryContext;
93
+ export declare function floorplanLayerRank(type: string): number;
94
+ export {};
95
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/lib/floorplan/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /** The `def.floorplan` contract every plan host shares: context extensions and geometry metadata. */
2
+ export const FLOORPLAN_GEOMETRY_METADATA_KEY = 'pascal:editor/floorplan';
3
+ export const FLOORPLAN_CONTEXT_EXTENSION_KEY = 'pascal:editor/floorplan';
4
+ export const DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES = 'both';
5
+ export function normalizeFloorplanWallDimensionFaces(value) {
6
+ return value === 'interior' || value === 'exterior'
7
+ ? value
8
+ : DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES;
9
+ }
10
+ export function floorplanGeometryMetadata(values) {
11
+ return { [FLOORPLAN_GEOMETRY_METADATA_KEY]: values };
12
+ }
13
+ export function withFloorplanGeometryMetadata(geometry, values) {
14
+ if (!geometry)
15
+ return geometry;
16
+ const existing = readFloorplanGeometryMetadata(geometry);
17
+ return {
18
+ ...geometry,
19
+ metadata: floorplanGeometryMetadata({ ...existing, ...values }),
20
+ };
21
+ }
22
+ export function readFloorplanGeometryMetadata(geometry) {
23
+ const metadata = geometry?.metadata;
24
+ const value = metadata?.[FLOORPLAN_GEOMETRY_METADATA_KEY];
25
+ return value && typeof value === 'object' && !Array.isArray(value)
26
+ ? value
27
+ : {};
28
+ }
29
+ export function isFloorplanAnnotationObstacleGeometry(geometry) {
30
+ if (floorplanAnnotationObstacleMode(geometry))
31
+ return true;
32
+ if (geometry.kind !== 'group')
33
+ return false;
34
+ const hasPlate = geometry.children.some((child) => child.kind === 'rect' || child.kind === 'circle');
35
+ const hasUprightText = geometry.children.some((child) => child.kind === 'text' && child.upright);
36
+ return hasPlate && hasUprightText;
37
+ }
38
+ export function floorplanAnnotationObstacleMode(geometry) {
39
+ const metadata = readFloorplanGeometryMetadata(geometry);
40
+ if (metadata.annotationObstacle)
41
+ return metadata.annotationObstacle;
42
+ switch (metadata.annotationRole) {
43
+ case 'room-label':
44
+ return geometry.kind === 'text' ? 'bounds' : undefined;
45
+ case 'column-center':
46
+ return geometry.kind === 'line' || geometry.kind === 'text' ? 'bounds' : undefined;
47
+ case 'stair-annotation':
48
+ return geometry.kind === 'polyline' || geometry.kind === 'line' ? 'outline' : 'bounds';
49
+ default:
50
+ return undefined;
51
+ }
52
+ }
53
+ export function createFloorplanContextExtensions(values) {
54
+ return {
55
+ [FLOORPLAN_CONTEXT_EXTENSION_KEY]: {
56
+ automaticDimensions: values.automaticDimensions !== false,
57
+ purpose: values.purpose === 'document' ? 'document' : 'edit',
58
+ drafting: values.drafting === true,
59
+ roomLabelOverlay: values.roomLabelOverlay === true,
60
+ metricNotation: values.metricNotation === 'millimeters' ? 'millimeters' : 'meters',
61
+ wallDimensionFaces: normalizeFloorplanWallDimensionFaces(values.wallDimensionFaces),
62
+ },
63
+ };
64
+ }
65
+ export function readFloorplanContext(ctx) {
66
+ const value = ctx.extensions?.[FLOORPLAN_CONTEXT_EXTENSION_KEY];
67
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
68
+ const extension = value;
69
+ return {
70
+ automaticDimensions: extension.automaticDimensions !== false,
71
+ purpose: extension.purpose === 'document' ? 'document' : 'edit',
72
+ drafting: extension.drafting === true,
73
+ roomLabelOverlay: extension.roomLabelOverlay === true,
74
+ metricNotation: extension.metricNotation === 'millimeters' ? 'millimeters' : 'meters',
75
+ wallDimensionFaces: normalizeFloorplanWallDimensionFaces(extension.wallDimensionFaces),
76
+ };
77
+ }
78
+ return {
79
+ automaticDimensions: true,
80
+ purpose: 'edit',
81
+ drafting: false,
82
+ roomLabelOverlay: false,
83
+ metricNotation: 'meters',
84
+ wallDimensionFaces: DEFAULT_FLOORPLAN_WALL_DIMENSION_FACES,
85
+ };
86
+ }
87
+ export function readFloorplanMetricNotationOverride(ctx) {
88
+ const value = ctx.extensions?.[FLOORPLAN_CONTEXT_EXTENSION_KEY];
89
+ if (!value || typeof value !== 'object' || Array.isArray(value))
90
+ return undefined;
91
+ const metricNotation = value.metricNotation;
92
+ return metricNotation === 'meters' || metricNotation === 'millimeters'
93
+ ? metricNotation
94
+ : undefined;
95
+ }
96
+ export function buildFloorplanContext(node, nodes, viewState, levelData) {
97
+ const resolve = (id) => nodes[id];
98
+ const childIds = node.children;
99
+ const children = Array.isArray(childIds)
100
+ ? childIds.map((id) => nodes[id]).filter((child) => child !== undefined)
101
+ : [];
102
+ const parentId = node.parentId;
103
+ const parent = parentId ? (nodes[parentId] ?? null) : null;
104
+ let siblings = [];
105
+ if (parent) {
106
+ const parentChildIds = parent.children;
107
+ siblings = Array.isArray(parentChildIds)
108
+ ? parentChildIds
109
+ .filter((id) => id !== node.id)
110
+ .map((id) => nodes[id])
111
+ .filter((sibling) => sibling?.type === node.type)
112
+ : Object.values(nodes).filter((candidate) => candidate.id !== node.id &&
113
+ candidate.type === node.type &&
114
+ candidate.parentId === node.parentId);
115
+ }
116
+ return {
117
+ resolve,
118
+ children,
119
+ siblings,
120
+ parent,
121
+ levelData,
122
+ sceneNodes: nodes,
123
+ extensions: createFloorplanContextExtensions({
124
+ automaticDimensions: viewState.automaticDimensions,
125
+ metricNotation: viewState.metricNotation ?? 'meters',
126
+ purpose: viewState.purpose ?? 'edit',
127
+ drafting: viewState.drafting === true,
128
+ roomLabelOverlay: viewState.roomLabelOverlay === true,
129
+ wallDimensionFaces: viewState.wallDimensionFaces,
130
+ }),
131
+ viewState: viewState.palette
132
+ ? {
133
+ selected: viewState.selected,
134
+ unit: viewState.unit,
135
+ highlighted: viewState.highlighted,
136
+ hovered: viewState.hovered,
137
+ moving: viewState.moving,
138
+ focusedUnitId: viewState.focusedUnitId,
139
+ focusedUnitMemberIds: viewState.focusedUnitMemberIds,
140
+ palette: viewState.palette,
141
+ }
142
+ : undefined,
143
+ };
144
+ }
145
+ export function floorplanLayerRank(type) {
146
+ switch (type) {
147
+ case 'zone':
148
+ return 0;
149
+ case 'slab':
150
+ case 'ceiling':
151
+ return 1;
152
+ default:
153
+ return 2;
154
+ }
155
+ }
@@ -0,0 +1,6 @@
1
+ export * from './context.js';
2
+ export * from './marks.js';
3
+ export * from './plan-math.js';
4
+ export * from './svg-paths.js';
5
+ export * from './wall-affordances.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/floorplan/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './context.js';
2
+ export * from './marks.js';
3
+ export * from './plan-math.js';
4
+ export * from './svg-paths.js';
5
+ export * from './wall-affordances.js';