@ifc-lite/create 4.0.0 → 5.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 (336) hide show
  1. package/README.md +34 -0
  2. package/dist/in-store/align-boxes.d.ts +38 -0
  3. package/dist/in-store/align-boxes.d.ts.map +1 -0
  4. package/dist/in-store/align-boxes.js +97 -0
  5. package/dist/in-store/align-boxes.js.map +1 -0
  6. package/dist/in-store/anchor.d.ts.map +1 -1
  7. package/dist/in-store/anchor.js +13 -2
  8. package/dist/in-store/anchor.js.map +1 -1
  9. package/dist/in-store/beam.d.ts.map +1 -1
  10. package/dist/in-store/beam.js +3 -10
  11. package/dist/in-store/beam.js.map +1 -1
  12. package/dist/in-store/copy-array.d.ts +17 -0
  13. package/dist/in-store/copy-array.d.ts.map +1 -0
  14. package/dist/in-store/copy-array.js +47 -0
  15. package/dist/in-store/copy-array.js.map +1 -0
  16. package/dist/in-store/copy-batch.d.ts +27 -0
  17. package/dist/in-store/copy-batch.d.ts.map +1 -0
  18. package/dist/in-store/copy-batch.js +101 -0
  19. package/dist/in-store/copy-batch.js.map +1 -0
  20. package/dist/in-store/copy-dependent-walk.d.ts +27 -0
  21. package/dist/in-store/copy-dependent-walk.d.ts.map +1 -0
  22. package/dist/in-store/copy-dependent-walk.js +61 -0
  23. package/dist/in-store/copy-dependent-walk.js.map +1 -0
  24. package/dist/in-store/copy-frame.d.ts +4 -3
  25. package/dist/in-store/copy-frame.d.ts.map +1 -1
  26. package/dist/in-store/copy-frame.js +14 -1
  27. package/dist/in-store/copy-frame.js.map +1 -1
  28. package/dist/in-store/copy-product.d.ts +0 -20
  29. package/dist/in-store/copy-product.d.ts.map +1 -1
  30. package/dist/in-store/copy-product.js +35 -35
  31. package/dist/in-store/copy-product.js.map +1 -1
  32. package/dist/in-store/duplicate.d.ts +8 -0
  33. package/dist/in-store/duplicate.d.ts.map +1 -1
  34. package/dist/in-store/duplicate.js +8 -1
  35. package/dist/in-store/duplicate.js.map +1 -1
  36. package/dist/in-store/edit/effective-mutation-view.d.ts +6 -0
  37. package/dist/in-store/edit/effective-mutation-view.d.ts.map +1 -0
  38. package/dist/in-store/edit/effective-mutation-view.js +45 -0
  39. package/dist/in-store/edit/effective-mutation-view.js.map +1 -0
  40. package/dist/in-store/edit/effective-storey.d.ts +13 -0
  41. package/dist/in-store/edit/effective-storey.d.ts.map +1 -0
  42. package/dist/in-store/edit/effective-storey.js +36 -0
  43. package/dist/in-store/edit/effective-storey.js.map +1 -0
  44. package/dist/in-store/edit/effective-storeys.d.ts +9 -0
  45. package/dist/in-store/edit/effective-storeys.d.ts.map +1 -0
  46. package/dist/in-store/edit/effective-storeys.js +16 -0
  47. package/dist/in-store/edit/effective-storeys.js.map +1 -0
  48. package/dist/in-store/edit/hosted-opening-refit.d.ts +29 -0
  49. package/dist/in-store/edit/hosted-opening-refit.d.ts.map +1 -0
  50. package/dist/in-store/edit/hosted-opening-refit.js +168 -0
  51. package/dist/in-store/edit/hosted-opening-refit.js.map +1 -0
  52. package/dist/in-store/edit/length-unit-scale.d.ts +24 -0
  53. package/dist/in-store/edit/length-unit-scale.d.ts.map +1 -0
  54. package/dist/in-store/edit/length-unit-scale.js +37 -0
  55. package/dist/in-store/edit/length-unit-scale.js.map +1 -0
  56. package/dist/in-store/edit/linear-element-edit.d.ts +131 -0
  57. package/dist/in-store/edit/linear-element-edit.d.ts.map +1 -0
  58. package/dist/in-store/edit/linear-element-edit.js +259 -0
  59. package/dist/in-store/edit/linear-element-edit.js.map +1 -0
  60. package/dist/in-store/edit/metadata-clone-effective.d.ts +5 -0
  61. package/dist/in-store/edit/metadata-clone-effective.d.ts.map +1 -0
  62. package/dist/in-store/edit/metadata-clone-effective.js +47 -0
  63. package/dist/in-store/edit/metadata-clone-effective.js.map +1 -0
  64. package/dist/in-store/edit/metadata-clone.d.ts +40 -0
  65. package/dist/in-store/edit/metadata-clone.d.ts.map +1 -0
  66. package/dist/in-store/edit/metadata-clone.js +142 -0
  67. package/dist/in-store/edit/metadata-clone.js.map +1 -0
  68. package/dist/in-store/edit/placement-core.d.ts +140 -0
  69. package/dist/in-store/edit/placement-core.d.ts.map +1 -0
  70. package/dist/in-store/edit/placement-core.js +317 -0
  71. package/dist/in-store/edit/placement-core.js.map +1 -0
  72. package/dist/in-store/edit/polygon-clip.d.ts +58 -0
  73. package/dist/in-store/edit/polygon-clip.d.ts.map +1 -0
  74. package/dist/in-store/edit/polygon-clip.js +153 -0
  75. package/dist/in-store/edit/polygon-clip.js.map +1 -0
  76. package/dist/in-store/edit/read-profile.d.ts +6 -0
  77. package/dist/in-store/edit/read-profile.d.ts.map +1 -0
  78. package/dist/in-store/edit/read-profile.js +95 -0
  79. package/dist/in-store/edit/read-profile.js.map +1 -0
  80. package/dist/in-store/edit/slab-edit-frame.d.ts +40 -0
  81. package/dist/in-store/edit/slab-edit-frame.d.ts.map +1 -0
  82. package/dist/in-store/edit/slab-edit-frame.js +146 -0
  83. package/dist/in-store/edit/slab-edit-frame.js.map +1 -0
  84. package/dist/in-store/edit/slab-edit.d.ts +112 -0
  85. package/dist/in-store/edit/slab-edit.d.ts.map +1 -0
  86. package/dist/in-store/edit/slab-edit.js +275 -0
  87. package/dist/in-store/edit/slab-edit.js.map +1 -0
  88. package/dist/in-store/edit/slab-opening-carry.d.ts +10 -0
  89. package/dist/in-store/edit/slab-opening-carry.d.ts.map +1 -0
  90. package/dist/in-store/edit/slab-opening-carry.js +65 -0
  91. package/dist/in-store/edit/slab-opening-carry.js.map +1 -0
  92. package/dist/in-store/edit/split-guid.d.ts +29 -0
  93. package/dist/in-store/edit/split-guid.d.ts.map +1 -0
  94. package/dist/in-store/edit/split-guid.js +64 -0
  95. package/dist/in-store/edit/split-guid.js.map +1 -0
  96. package/dist/in-store/edit/split-target.d.ts +90 -0
  97. package/dist/in-store/edit/split-target.d.ts.map +1 -0
  98. package/dist/in-store/edit/split-target.js +116 -0
  99. package/dist/in-store/edit/split-target.js.map +1 -0
  100. package/dist/in-store/edit/target.d.ts +8 -0
  101. package/dist/in-store/edit/target.d.ts.map +1 -0
  102. package/dist/in-store/edit/target.js +5 -0
  103. package/dist/in-store/edit/target.js.map +1 -0
  104. package/dist/in-store/edit/trim-extend-geometry.d.ts +99 -0
  105. package/dist/in-store/edit/trim-extend-geometry.d.ts.map +1 -0
  106. package/dist/in-store/edit/trim-extend-geometry.js +105 -0
  107. package/dist/in-store/edit/trim-extend-geometry.js.map +1 -0
  108. package/dist/in-store/edit/wall-axis-edit.d.ts +16 -0
  109. package/dist/in-store/edit/wall-axis-edit.d.ts.map +1 -0
  110. package/dist/in-store/edit/wall-axis-edit.js +40 -0
  111. package/dist/in-store/edit/wall-axis-edit.js.map +1 -0
  112. package/dist/in-store/edit/wall-edit.d.ts +157 -0
  113. package/dist/in-store/edit/wall-edit.d.ts.map +1 -0
  114. package/dist/in-store/edit/wall-edit.js +276 -0
  115. package/dist/in-store/edit/wall-edit.js.map +1 -0
  116. package/dist/in-store/edit/wall-hosted-cuts.d.ts +35 -0
  117. package/dist/in-store/edit/wall-hosted-cuts.d.ts.map +1 -0
  118. package/dist/in-store/edit/wall-hosted-cuts.js +27 -0
  119. package/dist/in-store/edit/wall-hosted-cuts.js.map +1 -0
  120. package/dist/in-store/edit/wall-opening-reassign.d.ts +18 -0
  121. package/dist/in-store/edit/wall-opening-reassign.d.ts.map +1 -0
  122. package/dist/in-store/edit/wall-opening-reassign.js +50 -0
  123. package/dist/in-store/edit/wall-opening-reassign.js.map +1 -0
  124. package/dist/in-store/element-align.d.ts +13 -0
  125. package/dist/in-store/element-align.d.ts.map +1 -0
  126. package/dist/in-store/element-align.js +90 -0
  127. package/dist/in-store/element-align.js.map +1 -0
  128. package/dist/in-store/element-replacement.d.ts +26 -0
  129. package/dist/in-store/element-replacement.d.ts.map +1 -0
  130. package/dist/in-store/element-replacement.js +68 -0
  131. package/dist/in-store/element-replacement.js.map +1 -0
  132. package/dist/in-store/element-size-edit.d.ts +40 -0
  133. package/dist/in-store/element-size-edit.d.ts.map +1 -0
  134. package/dist/in-store/element-size-edit.js +103 -0
  135. package/dist/in-store/element-size-edit.js.map +1 -0
  136. package/dist/in-store/element-split-axis.d.ts +6 -0
  137. package/dist/in-store/element-split-axis.d.ts.map +1 -0
  138. package/dist/in-store/element-split-axis.js +87 -0
  139. package/dist/in-store/element-split-axis.js.map +1 -0
  140. package/dist/in-store/element-split-joined.d.ts +13 -0
  141. package/dist/in-store/element-split-joined.d.ts.map +1 -0
  142. package/dist/in-store/element-split-joined.js +74 -0
  143. package/dist/in-store/element-split-joined.js.map +1 -0
  144. package/dist/in-store/element-split-placement.d.ts +19 -0
  145. package/dist/in-store/element-split-placement.d.ts.map +1 -0
  146. package/dist/in-store/element-split-placement.js +48 -0
  147. package/dist/in-store/element-split-placement.js.map +1 -0
  148. package/dist/in-store/element-split-slab.d.ts +19 -0
  149. package/dist/in-store/element-split-slab.d.ts.map +1 -0
  150. package/dist/in-store/element-split-slab.js +86 -0
  151. package/dist/in-store/element-split-slab.js.map +1 -0
  152. package/dist/in-store/element-split.d.ts +49 -0
  153. package/dist/in-store/element-split.d.ts.map +1 -0
  154. package/dist/in-store/element-split.js +52 -0
  155. package/dist/in-store/element-split.js.map +1 -0
  156. package/dist/in-store/element-transform-edit.d.ts +33 -0
  157. package/dist/in-store/element-transform-edit.d.ts.map +1 -0
  158. package/dist/in-store/element-transform-edit.js +97 -0
  159. package/dist/in-store/element-transform-edit.js.map +1 -0
  160. package/dist/in-store/element-transform-frames.d.ts +45 -0
  161. package/dist/in-store/element-transform-frames.d.ts.map +1 -0
  162. package/dist/in-store/element-transform-frames.js +121 -0
  163. package/dist/in-store/element-transform-frames.js.map +1 -0
  164. package/dist/in-store/element-transform-joins.d.ts +4 -0
  165. package/dist/in-store/element-transform-joins.d.ts.map +1 -0
  166. package/dist/in-store/element-transform-joins.js +62 -0
  167. package/dist/in-store/element-transform-joins.js.map +1 -0
  168. package/dist/in-store/element-transform-plan.d.ts +38 -0
  169. package/dist/in-store/element-transform-plan.d.ts.map +1 -0
  170. package/dist/in-store/element-transform-plan.js +115 -0
  171. package/dist/in-store/element-transform-plan.js.map +1 -0
  172. package/dist/in-store/element-trim-extend.d.ts +25 -0
  173. package/dist/in-store/element-trim-extend.d.ts.map +1 -0
  174. package/dist/in-store/element-trim-extend.js +97 -0
  175. package/dist/in-store/element-trim-extend.js.map +1 -0
  176. package/dist/in-store/extract-grids.d.ts +7 -17
  177. package/dist/in-store/extract-grids.d.ts.map +1 -1
  178. package/dist/in-store/extract-grids.js +11 -2
  179. package/dist/in-store/extract-grids.js.map +1 -1
  180. package/dist/in-store/grid-column.d.ts +23 -0
  181. package/dist/in-store/grid-column.d.ts.map +1 -0
  182. package/dist/in-store/grid-column.js +73 -0
  183. package/dist/in-store/grid-column.js.map +1 -0
  184. package/dist/in-store/grid-intersection-read.d.ts +10 -0
  185. package/dist/in-store/grid-intersection-read.d.ts.map +1 -0
  186. package/dist/in-store/grid-intersection-read.js +45 -0
  187. package/dist/in-store/grid-intersection-read.js.map +1 -0
  188. package/dist/in-store/grid.d.ts +7 -1
  189. package/dist/in-store/grid.d.ts.map +1 -1
  190. package/dist/in-store/grid.js +12 -2
  191. package/dist/in-store/grid.js.map +1 -1
  192. package/dist/in-store/group-evidence.d.ts +49 -0
  193. package/dist/in-store/group-evidence.d.ts.map +1 -0
  194. package/dist/in-store/group-evidence.js +111 -0
  195. package/dist/in-store/group-evidence.js.map +1 -0
  196. package/dist/in-store/group-graph.d.ts +51 -0
  197. package/dist/in-store/group-graph.d.ts.map +1 -0
  198. package/dist/in-store/group-graph.js +207 -0
  199. package/dist/in-store/group-graph.js.map +1 -0
  200. package/dist/in-store/group.d.ts +34 -0
  201. package/dist/in-store/group.d.ts.map +1 -0
  202. package/dist/in-store/group.js +181 -0
  203. package/dist/in-store/group.js.map +1 -0
  204. package/dist/in-store/host-geometry-frame.d.ts +5 -1
  205. package/dist/in-store/host-geometry-frame.d.ts.map +1 -1
  206. package/dist/in-store/host-geometry-frame.js +58 -10
  207. package/dist/in-store/host-geometry-frame.js.map +1 -1
  208. package/dist/in-store/index.d.ts +7 -0
  209. package/dist/in-store/index.d.ts.map +1 -1
  210. package/dist/in-store/index.js +7 -0
  211. package/dist/in-store/index.js.map +1 -1
  212. package/dist/in-store/linear-profile-frame.d.ts +10 -0
  213. package/dist/in-store/linear-profile-frame.d.ts.map +1 -0
  214. package/dist/in-store/linear-profile-frame.js +17 -0
  215. package/dist/in-store/linear-profile-frame.js.map +1 -0
  216. package/dist/in-store/material.d.ts.map +1 -1
  217. package/dist/in-store/material.js +17 -6
  218. package/dist/in-store/material.js.map +1 -1
  219. package/dist/in-store/member.d.ts.map +1 -1
  220. package/dist/in-store/member.js +3 -7
  221. package/dist/in-store/member.js.map +1 -1
  222. package/dist/in-store/ordinary-element.d.ts +47 -0
  223. package/dist/in-store/ordinary-element.d.ts.map +1 -0
  224. package/dist/in-store/ordinary-element.js +38 -0
  225. package/dist/in-store/ordinary-element.js.map +1 -0
  226. package/dist/in-store/placement-frame.d.ts +5 -17
  227. package/dist/in-store/placement-frame.d.ts.map +1 -1
  228. package/dist/in-store/placement-frame.js +59 -43
  229. package/dist/in-store/placement-frame.js.map +1 -1
  230. package/dist/in-store/resolve-anchor.d.ts +3 -2
  231. package/dist/in-store/resolve-anchor.d.ts.map +1 -1
  232. package/dist/in-store/resolve-anchor.js +7 -5
  233. package/dist/in-store/resolve-anchor.js.map +1 -1
  234. package/dist/in-store/resolve-relations.d.ts +3 -1
  235. package/dist/in-store/resolve-relations.d.ts.map +1 -1
  236. package/dist/in-store/resolve-relations.js +8 -3
  237. package/dist/in-store/resolve-relations.js.map +1 -1
  238. package/dist/in-store/resolve-source.d.ts.map +1 -1
  239. package/dist/in-store/resolve-source.js +10 -3
  240. package/dist/in-store/resolve-source.js.map +1 -1
  241. package/dist/in-store/room-candidates.d.ts +58 -0
  242. package/dist/in-store/room-candidates.d.ts.map +1 -0
  243. package/dist/in-store/room-candidates.js +135 -0
  244. package/dist/in-store/room-candidates.js.map +1 -0
  245. package/dist/in-store/room-creation-plan.d.ts +16 -0
  246. package/dist/in-store/room-creation-plan.d.ts.map +1 -0
  247. package/dist/in-store/room-creation-plan.js +28 -0
  248. package/dist/in-store/room-creation-plan.js.map +1 -0
  249. package/dist/in-store/room-floor-height.d.ts +24 -0
  250. package/dist/in-store/room-floor-height.d.ts.map +1 -0
  251. package/dist/in-store/room-floor-height.js +32 -0
  252. package/dist/in-store/room-floor-height.js.map +1 -0
  253. package/dist/in-store/room-footprint-native.d.ts +19 -0
  254. package/dist/in-store/room-footprint-native.d.ts.map +1 -0
  255. package/dist/in-store/room-footprint-native.js +117 -0
  256. package/dist/in-store/room-footprint-native.js.map +1 -0
  257. package/dist/in-store/room-layout-cache.d.ts +23 -0
  258. package/dist/in-store/room-layout-cache.d.ts.map +1 -0
  259. package/dist/in-store/room-layout-cache.js +84 -0
  260. package/dist/in-store/room-layout-cache.js.map +1 -0
  261. package/dist/in-store/room-layout-core.d.ts +68 -0
  262. package/dist/in-store/room-layout-core.d.ts.map +1 -0
  263. package/dist/in-store/room-layout-core.js +153 -0
  264. package/dist/in-store/room-layout-core.js.map +1 -0
  265. package/dist/in-store/room-population.d.ts +5 -0
  266. package/dist/in-store/room-population.d.ts.map +1 -0
  267. package/dist/in-store/room-population.js +28 -0
  268. package/dist/in-store/room-population.js.map +1 -0
  269. package/dist/in-store/room-space-meshes.d.ts +15 -0
  270. package/dist/in-store/room-space-meshes.d.ts.map +1 -0
  271. package/dist/in-store/room-space-meshes.js +38 -0
  272. package/dist/in-store/room-space-meshes.js.map +1 -0
  273. package/dist/in-store/room-store.d.ts +55 -0
  274. package/dist/in-store/room-store.d.ts.map +1 -0
  275. package/dist/in-store/room-store.js +173 -0
  276. package/dist/in-store/room-store.js.map +1 -0
  277. package/dist/in-store/room-storey-elevation.d.ts +5 -0
  278. package/dist/in-store/room-storey-elevation.d.ts.map +1 -0
  279. package/dist/in-store/room-storey-elevation.js +42 -0
  280. package/dist/in-store/room-storey-elevation.js.map +1 -0
  281. package/dist/in-store/room-storey-frame.d.ts +47 -0
  282. package/dist/in-store/room-storey-frame.d.ts.map +1 -0
  283. package/dist/in-store/room-storey-frame.js +48 -0
  284. package/dist/in-store/room-storey-frame.js.map +1 -0
  285. package/dist/in-store/room-wall-rects.d.ts +117 -0
  286. package/dist/in-store/room-wall-rects.d.ts.map +1 -0
  287. package/dist/in-store/room-wall-rects.js +157 -0
  288. package/dist/in-store/room-wall-rects.js.map +1 -0
  289. package/dist/in-store/schema-attributes.d.ts +3 -3
  290. package/dist/in-store/schema-attributes.d.ts.map +1 -1
  291. package/dist/in-store/schema-attributes.js +9 -7
  292. package/dist/in-store/schema-attributes.js.map +1 -1
  293. package/dist/in-store/slab.d.ts.map +1 -1
  294. package/dist/in-store/slab.js +1 -4
  295. package/dist/in-store/slab.js.map +1 -1
  296. package/dist/in-store/stair-removal.d.ts +17 -0
  297. package/dist/in-store/stair-removal.d.ts.map +1 -0
  298. package/dist/in-store/stair-removal.js +134 -0
  299. package/dist/in-store/stair-removal.js.map +1 -0
  300. package/dist/in-store/storey-plan-frame.d.ts +2 -1
  301. package/dist/in-store/storey-plan-frame.d.ts.map +1 -1
  302. package/dist/in-store/storey-plan-frame.js +20 -11
  303. package/dist/in-store/storey-plan-frame.js.map +1 -1
  304. package/dist/in-store/storey-reassignment-plan.d.ts +53 -0
  305. package/dist/in-store/storey-reassignment-plan.d.ts.map +1 -0
  306. package/dist/in-store/storey-reassignment-plan.js +237 -0
  307. package/dist/in-store/storey-reassignment-plan.js.map +1 -0
  308. package/dist/in-store/storey-reassignment.d.ts +8 -0
  309. package/dist/in-store/storey-reassignment.d.ts.map +1 -0
  310. package/dist/in-store/storey-reassignment.js +52 -0
  311. package/dist/in-store/storey-reassignment.js.map +1 -0
  312. package/dist/in-store/trim-extend-plan.d.ts +27 -0
  313. package/dist/in-store/trim-extend-plan.d.ts.map +1 -0
  314. package/dist/in-store/trim-extend-plan.js +49 -0
  315. package/dist/in-store/trim-extend-plan.js.map +1 -0
  316. package/dist/in-store/wall-join-edit.d.ts +0 -17
  317. package/dist/in-store/wall-join-edit.d.ts.map +1 -1
  318. package/dist/in-store/wall-join-edit.js +41 -7
  319. package/dist/in-store/wall-join-edit.js.map +1 -1
  320. package/dist/in-store/wall-section-edit.d.ts +16 -0
  321. package/dist/in-store/wall-section-edit.d.ts.map +1 -0
  322. package/dist/in-store/wall-section-edit.js +75 -0
  323. package/dist/in-store/wall-section-edit.js.map +1 -0
  324. package/dist/in-store/wall-size-edit.d.ts +29 -0
  325. package/dist/in-store/wall-size-edit.d.ts.map +1 -0
  326. package/dist/in-store/wall-size-edit.js +65 -0
  327. package/dist/in-store/wall-size-edit.js.map +1 -0
  328. package/dist/index.d.ts +24 -0
  329. package/dist/index.d.ts.map +1 -1
  330. package/dist/index.js +23 -0
  331. package/dist/index.js.map +1 -1
  332. package/dist/landxml/profile-geometry.d.ts +10 -0
  333. package/dist/landxml/profile-geometry.d.ts.map +1 -1
  334. package/dist/landxml/profile-geometry.js +16 -1
  335. package/dist/landxml/profile-geometry.js.map +1 -1
  336. package/package.json +9 -8
@@ -0,0 +1,157 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { roomConvexHull as convexHull } from './room-footprint-native.js';
5
+ export { roomConvexHull as convexHull } from './room-footprint-native.js';
6
+ const WALL_TYPES = new Set(['IfcWall', 'IfcWallStandardCase']);
7
+ /** OBB filter: drop slivers and anything too thick to be a wall (a mis-typed
8
+ * slab/footing caught in the band). */
9
+ const MIN_LEN = 0.3;
10
+ const MIN_THICK = 0.02;
11
+ const MAX_THICK = 2.5;
12
+ /** A wall is "on" a storey when its height range overlaps the band interior. */
13
+ const BAND_MARGIN = 0.2;
14
+ /**
15
+ * The render → room-frame plan offsets: `ifcX = renderX + cx`,
16
+ * `ifcY = cy − renderZ`.
17
+ *
18
+ * The room frame is the MODEL'S OWN IFC frame — `ifcLocal = renderLocal +
19
+ * shift` with the Y-up→Z-up swap — NOT the georeferenced survey frame.
20
+ * `wasmRtcOffset` is what the WASM mesh path subtracted when it resolved a
21
+ * site placement that anchors the building to a survey grid; folding it back
22
+ * in here would put the room frame a whole survey offset away from the
23
+ * rendered walls and from the storey band below (see the module docstring
24
+ * for the LV95 measurement that showed this). The anchor is carried by
25
+ * {@link roomFrameToModelWorld} instead, for the one consumer that needs the
26
+ * file's own placement-chain coordinates.
27
+ *
28
+ * Exported because this is where the room frame is DEFINED, and the bake needs
29
+ * to know which frame that is — see {@link roomFrameToModelWorld}.
30
+ */
31
+ export function roomFramePlanOffsets(coord) {
32
+ const shift = coord?.originShift ?? { x: 0, y: 0, z: 0 };
33
+ return { cx: shift.x, cy: -shift.z };
34
+ }
35
+ /**
36
+ * The plan offset that takes a room-frame point into the MODEL'S OWN WORLD
37
+ * FRAME — the coordinates the STEP file's placement chains resolve to, which
38
+ * is the frame `storeyPlanFrame` reads the storey out of.
39
+ *
40
+ * Exactly the survey anchor {@link roomFramePlanOffsets} leaves out: the
41
+ * canonical reconstruction is worldYup = renderLocal + shift + rtcYup with
42
+ * The viewer-axis conversion lives in `coordinate-frame.ts`; in IFC-plan axes, ifcX gains `rtc.x` and
43
+ * ifcY gains `rtc.y` on top of the room frame. Zero for any model within
44
+ * ~10 km of the origin (rtc is null there). Anything that changes which
45
+ * terms `roomFramePlanOffsets` carries changes this one too;
46
+ * `wall-rects-from-meshes.test.ts` pins the two together.
47
+ */
48
+ export function roomFrameToModelWorld(coord) {
49
+ const rtc = coord?.wasmRtcOffset ?? { x: 0, y: 0, z: 0 };
50
+ return { dx: rtc.x, dy: rtc.y };
51
+ }
52
+ /**
53
+ * MINIMUM-AREA bounding rectangle of a thin plan point cloud (rotating calipers
54
+ * on the convex hull) → its 4 CCW corners (long edge first), length, thickness.
55
+ *
56
+ * NOT PCA. PCA orients by minimizing variance, so on a wall whose mesh has uneven
57
+ * vertex density (short structural stubs especially) the principal axis tilts by
58
+ * several degrees even though the wall is axis-aligned — which skews the room into
59
+ * a parallelogram. The min-area rectangle depends only on the footprint OUTLINE
60
+ * (the hull), so it returns the true rectangle: measured 0.000° skew / 0 m off the
61
+ * rendered faces on the storeys where PCA produced ~5° skew.
62
+ */
63
+ export function footprintOBB(pts) {
64
+ const h = convexHull(pts);
65
+ if (h.length < 3)
66
+ return null;
67
+ let best = null;
68
+ // The min-area rectangle is collinear with one hull edge — try them all.
69
+ for (let i = 0; i < h.length; i++) {
70
+ const a = h[i], b = h[(i + 1) % h.length];
71
+ let ex = b[0] - a[0], ey = b[1] - a[1];
72
+ const L = Math.hypot(ex, ey);
73
+ if (L < 1e-9)
74
+ continue;
75
+ ex /= L;
76
+ ey /= L;
77
+ const nx = -ey, ny = ex; // +90° (CCW) of the edge dir
78
+ let umin = Infinity, umax = -Infinity, vmin = Infinity, vmax = -Infinity;
79
+ for (const q of h) {
80
+ const du = (q[0] - a[0]) * ex + (q[1] - a[1]) * ey;
81
+ const dv = (q[0] - a[0]) * nx + (q[1] - a[1]) * ny;
82
+ if (du < umin)
83
+ umin = du;
84
+ if (du > umax)
85
+ umax = du;
86
+ if (dv < vmin)
87
+ vmin = dv;
88
+ if (dv > vmax)
89
+ vmax = dv;
90
+ }
91
+ const ulen = umax - umin, vlen = vmax - vmin;
92
+ const area = ulen * vlen;
93
+ if (best && area >= best.area)
94
+ continue;
95
+ const P = (du, dv) => [a[0] + ex * du + nx * dv, a[1] + ey * du + ny * dv];
96
+ // CCW corners; rotate so corners[0]→corners[1] is the LONG (length) axis,
97
+ // which `wallRectsFromMeshes` relies on to take the centreline.
98
+ let corners = [P(umin, vmin), P(umax, vmin), P(umax, vmax), P(umin, vmax)];
99
+ if (ulen < vlen)
100
+ corners = [corners[1], corners[2], corners[3], corners[0]];
101
+ best = { area, corners, length: Math.max(ulen, vlen), thickness: Math.min(ulen, vlen) };
102
+ }
103
+ return best;
104
+ }
105
+ /**
106
+ * Per-wall footprint rectangles (4 CCW corners, room frame) for the walls whose
107
+ * height range overlaps the storey band `[floorElevation, floorElevation +
108
+ * floorToFloor]`. Aggregates all mesh fragments of one wall (a void-cut wall
109
+ * renders as several) by `expressId` before taking the OBB.
110
+ */
111
+ export function wallRectsFromMeshes(meshes, coord, floorElevation, floorToFloor) {
112
+ const shift = coord?.originShift ?? { x: 0, y: 0, z: 0 };
113
+ // Render → the model's own IFC frame (no rtc term — see roomFramePlanOffsets).
114
+ const { cx, cy } = roomFramePlanOffsets(coord);
115
+ // Storey band in render-Y (height): renderY = ifcZ − shift.y. `floorElevation`
116
+ // is the storey's own local Elevation, the frame the rendered geometry is in.
117
+ const lo = floorElevation - shift.y;
118
+ const hi = floorElevation + floorToFloor - shift.y;
119
+ const walls = new Map();
120
+ for (const m of meshes) {
121
+ if (!m.ifcType || !WALL_TYPES.has(m.ifcType))
122
+ continue;
123
+ const pos = m.positions;
124
+ const o = m.origin ?? [0, 0, 0];
125
+ let w = walls.get(m.expressId);
126
+ if (!w) {
127
+ w = { pts: [], ymin: Infinity, ymax: -Infinity };
128
+ walls.set(m.expressId, w);
129
+ }
130
+ for (let i = 0; i + 2 < pos.length; i += 3) {
131
+ const rx = o[0] + pos[i], ry = o[1] + pos[i + 1], rz = o[2] + pos[i + 2];
132
+ w.pts.push([rx + cx, cy - rz]);
133
+ if (ry < w.ymin)
134
+ w.ymin = ry;
135
+ if (ry > w.ymax)
136
+ w.ymax = ry;
137
+ }
138
+ }
139
+ const out = [];
140
+ for (const w of walls.values()) {
141
+ if (!(w.ymax > lo + BAND_MARGIN && w.ymin < hi - BAND_MARGIN))
142
+ continue; // not on this storey
143
+ if (w.pts.length < 6)
144
+ continue;
145
+ const o = footprintOBB(w.pts);
146
+ if (!o || o.length <= MIN_LEN || o.thickness <= MIN_THICK || o.thickness >= MAX_THICK)
147
+ continue;
148
+ const [c0, c1, c2, c3] = o.corners;
149
+ // Centreline = the mid-thickness line along the long axis (mid of each short
150
+ // edge). c0→c1 and c3→c2 are the long (face) edges.
151
+ const a = [(c0[0] + c3[0]) / 2, (c0[1] + c3[1]) / 2];
152
+ const b = [(c1[0] + c2[0]) / 2, (c1[1] + c2[1]) / 2];
153
+ out.push({ corners: o.corners, centreline: [a, b], thickness: o.thickness });
154
+ }
155
+ return out;
156
+ }
157
+ //# sourceMappingURL=room-wall-rects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-wall-rects.js","sourceRoot":"","sources":["../../src/in-store/room-wall-rects.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * attribute unless it is an enumeration, which defaults to `NOTDEFINED` when
15
15
  * the enumeration has that value.
16
16
  */
17
- import { type SchemaRegistry } from '@ifc-lite/parser';
17
+ import { type SchemaRegistry, type SchemaEntityNameSnapshot } from '@ifc-lite/parser';
18
18
  import type { SpatialAnchorSchema } from './anchor.js';
19
19
  /**
20
20
  * The registry for an authoring schema (default IFC4). Refuses IFC5 / IFCX and
@@ -23,11 +23,11 @@ import type { SpatialAnchorSchema } from './anchor.js';
23
23
  */
24
24
  export declare function schemaRegistry(schema: SpatialAnchorSchema | undefined, op: string): SchemaRegistry;
25
25
  /** The schema's canonical spelling of `type`, or null when the class does not exist in it. */
26
- export declare function canonicalEntity(registry: SchemaRegistry, type: string): string | null;
26
+ export declare function canonicalEntity(registry: SchemaRegistry, type: string, snapshot?: SchemaEntityNameSnapshot): string | null;
27
27
  /**
28
28
  * Whether `type` is an `expected` in the schema: the class itself or one of its
29
29
  * subtypes, or (transitively) a member of the `expected` SELECT.
30
30
  */
31
- export declare function conformsTo(registry: SchemaRegistry, type: string, expected: string): boolean;
31
+ export declare function conformsTo(registry: SchemaRegistry, type: string, expected: string, snapshot?: SchemaEntityNameSnapshot): boolean;
32
32
  export declare function schemaAttributes(registry: SchemaRegistry, type: string, values: Readonly<Record<string, unknown>>, op: string): unknown[];
33
33
  //# sourceMappingURL=schema-attributes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-attributes.d.ts","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMvD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAMlG;AAED,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO5F;AASD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,EAAE,EAAE,MAAM,GACT,OAAO,EAAE,CAsCX"}
1
+ {"version":3,"file":"schema-attributes.d.ts","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAuD,KAAK,cAAc,EAAE,KAAK,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC3I,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMvD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAMlG;AAED,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAE1H;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,wBAAwB,GAAG,OAAO,CASjI;AASD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,EAAE,EAAE,MAAM,GACT,OAAO,EAAE,CAsCX"}
@@ -17,7 +17,7 @@
17
17
  * attribute unless it is an enumeration, which defaults to `NOTDEFINED` when
18
18
  * the enumeration has that value.
19
19
  */
20
- import { getSchemaRegistryForVersion } from '@ifc-lite/parser';
20
+ import { getSchemaRegistryForVersion, getCanonicalEntityName } from '@ifc-lite/parser';
21
21
  const AUTHORING_SCHEMAS = ['IFC2X3', 'IFC4', 'IFC4X3'];
22
22
  /**
23
23
  * The registry for an authoring schema (default IFC4). Refuses IFC5 / IFCX and
@@ -32,19 +32,21 @@ export function schemaRegistry(schema, op) {
32
32
  return getSchemaRegistryForVersion(version);
33
33
  }
34
34
  /** The schema's canonical spelling of `type`, or null when the class does not exist in it. */
35
- export function canonicalEntity(registry, type) {
36
- const upper = type.toUpperCase();
37
- return Object.keys(registry.entities).find((name) => name.toUpperCase() === upper) ?? null;
35
+ export function canonicalEntity(registry, type, snapshot) {
36
+ return getCanonicalEntityName(registry, type, snapshot) ?? null;
38
37
  }
39
38
  /**
40
39
  * Whether `type` is an `expected` in the schema: the class itself or one of its
41
40
  * subtypes, or (transitively) a member of the `expected` SELECT.
42
41
  */
43
- export function conformsTo(registry, type, expected) {
44
- const name = canonicalEntity(registry, type);
42
+ export function conformsTo(registry, type, expected, snapshot) {
43
+ const name = canonicalEntity(registry, type, snapshot);
45
44
  if (!name)
46
45
  return false;
47
- const chain = registry.entities[name].inheritanceChain ?? [name];
46
+ const definition = registry.entities[name];
47
+ if (!definition)
48
+ return false;
49
+ const chain = definition.inheritanceChain ?? [name];
48
50
  const matches = (target, depth) => chain.includes(target) || (depth < 8 && (registry.selects[target] ?? []).some((member) => matches(member, depth + 1)));
49
51
  return matches(expected, 0);
50
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema-attributes.js","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-attributes.js","sourceRoot":"","sources":["../../src/in-store/schema-attributes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjG,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AA8CD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CA4GjB"}
1
+ {"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjG,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,OAAO,EAAE,SAAS,CAAC;IACnB;;;;;OAKG;IACH,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AA8CD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,eAAe,CAyGjB"}
@@ -127,7 +127,6 @@ export function addSlabToStore(editor, anchor, params) {
127
127
  null,
128
128
  [`#${shapeRepId}`],
129
129
  ]).expressId;
130
- // `IfcSlab.PredefinedType` only exists from IFC4 onward.
131
130
  const slabAttrs = [
132
131
  productGuid(params, anchor.guidRandom),
133
132
  ownerHistoryRef(ownerHistoryId),
@@ -137,10 +136,8 @@ export function addSlabToStore(editor, anchor, params) {
137
136
  `#${placementId}`,
138
137
  `#${productShapeId}`,
139
138
  params.Tag ?? null,
139
+ '.FLOOR.',
140
140
  ];
141
- if ((anchor.schema ?? 'IFC4') !== 'IFC2X3') {
142
- slabAttrs.push('.FLOOR.');
143
- }
144
141
  const slabId = editor.addEntity('IfcSlab', slabAttrs).expressId;
145
142
  const relContainedId = editor.addEntity('IfcRelContainedInSpatialStructure', [
146
143
  generateIfcGuid(anchor.guidRandom),
@@ -1 +1 @@
1
- {"version":3,"file":"slab.js","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slab.js","sourceRoot":"","sources":["../../src/in-store/slab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** #6232: remove a single-flight stair assembly, retaining shared geometry
2
+ * and styles. Generic StoreEditor.removeEntity remains a one-record operation. */
3
+ import { type StoreEditor } from '@ifc-lite/mutations';
4
+ import { type IfcDataStore } from '@ifc-lite/parser';
5
+ /** Resolve the live unique assembly before deleting either product. Shape,
6
+ * placement, style and material leaves remain available to other products;
7
+ * STEP export applies its existing deleted-endpoint relationship filtering. */
8
+ export declare function removeStairInStore(store: IfcDataStore, editor: StoreEditor, stairId: number): {
9
+ stairId: number;
10
+ flightId: number;
11
+ };
12
+ /** Package-private guarded removal inside an already-owned atomic transaction. */
13
+ export declare function removeStairFromDraft(store: IfcDataStore, draft: StoreEditor, stairId: number): {
14
+ stairId: number;
15
+ flightId: number;
16
+ };
17
+ //# sourceMappingURL=stair-removal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stair-removal.d.ts","sourceRoot":"","sources":["../../src/in-store/stair-removal.ts"],"names":[],"mappings":"AAIA;kFACkF;AAClF,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAA+B,KAAK,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAsCvG;;+EAE+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAEnI;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAoEpI"}
@@ -0,0 +1,134 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /** #6232: remove a single-flight stair assembly, retaining shared geometry
5
+ * and styles. Generic StoreEditor.removeEntity remains a one-record operation. */
6
+ import { iterateEffectiveEntityIds } from '@ifc-lite/mutations';
7
+ import { getSchemaRegistryForVersion } from '@ifc-lite/parser';
8
+ import { AnchorEntityReader } from './resolve-anchor.js';
9
+ import { asRef, refList } from './style-entity-reader.js';
10
+ function referenceType(registry, type) {
11
+ const pending = [type], visited = new Set();
12
+ while (pending.length) {
13
+ const candidate = pending.pop();
14
+ if (visited.has(candidate))
15
+ continue;
16
+ visited.add(candidate);
17
+ if (registry.entities[candidate])
18
+ return true;
19
+ pending.push(...(registry.selects[candidate] ?? []));
20
+ const alias = registry.types[candidate];
21
+ if (alias)
22
+ pending.push(alias);
23
+ }
24
+ return false;
25
+ }
26
+ /** References in an admitted entity slot, without recursive file-supplied walks. */
27
+ function referencesPair(value, pair) {
28
+ const pending = [value], visited = new Set();
29
+ let work = 0;
30
+ while (pending.length) {
31
+ if (++work > 100_000)
32
+ throw new Error('removeStairInStore: incoming product references exceed the inspection budget');
33
+ const item = pending.pop();
34
+ if (Array.isArray(item)) {
35
+ if (visited.has(item))
36
+ continue;
37
+ visited.add(item);
38
+ if (item.length > 100_000 - work - pending.length)
39
+ throw new Error('removeStairInStore: incoming product references exceed the inspection budget');
40
+ for (const member of item)
41
+ pending.push(member);
42
+ }
43
+ else {
44
+ const id = asRef(item);
45
+ if (id !== null && pair.has(id))
46
+ return true;
47
+ }
48
+ }
49
+ return false;
50
+ }
51
+ /** Resolve the live unique assembly before deleting either product. Shape,
52
+ * placement, style and material leaves remain available to other products;
53
+ * STEP export applies its existing deleted-endpoint relationship filtering. */
54
+ export function removeStairInStore(store, editor, stairId) {
55
+ return editor.runAtomic(draft => removeStairFromDraft(store, draft, stairId));
56
+ }
57
+ /** Package-private guarded removal inside an already-owned atomic transaction. */
58
+ export function removeStairFromDraft(store, draft, stairId) {
59
+ const version = store.schemaVersion ?? 'IFC4';
60
+ if (version !== 'IFC2X3' && version !== 'IFC4' && version !== 'IFC4X3') {
61
+ throw new Error(`removeStairInStore: ${version} is not supported`);
62
+ }
63
+ const reader = new AnchorEntityReader(store, draft.getMutationView());
64
+ if (reader.entity(stairId)?.type.toUpperCase() !== 'IFCSTAIR') {
65
+ throw new Error(`removeStairInStore: #${stairId} is not a live IfcStair`);
66
+ }
67
+ const aggregates = [...reader.ids('IFCRELAGGREGATES')].map(id => {
68
+ const entity = reader.entity(id);
69
+ if (!entity)
70
+ throw new Error(`removeStairInStore: live IfcRelAggregates #${id} cannot be read`);
71
+ return entity;
72
+ });
73
+ const owned = aggregates.filter(entity => asRef(entity.attributes[4]) === stairId);
74
+ const rawMembers = owned.length === 1 ? owned[0].attributes[5] : null;
75
+ const flightId = Array.isArray(rawMembers) && rawMembers.length === 1 ? asRef(rawMembers[0]) : null;
76
+ if (flightId === null || reader.entity(flightId)?.type.toUpperCase() !== 'IFCSTAIRFLIGHT') {
77
+ throw new Error(`removeStairInStore: #${stairId} must aggregate exactly one live IfcStairFlight`);
78
+ }
79
+ if (aggregates.filter(entity => refList(entity.attributes[5]).includes(flightId)).length !== 1
80
+ || aggregates.some(entity => refList(entity.attributes[5]).includes(stairId) || asRef(entity.attributes[4]) === flightId)) {
81
+ throw new Error(`removeStairInStore: #${stairId} or flight #${flightId} belongs to another assembly`);
82
+ }
83
+ const registry = getSchemaRegistryForVersion(version);
84
+ const admitsReferences = new Map();
85
+ const productSlots = new Map();
86
+ for (const definition of Object.values(registry.entities)) {
87
+ if (definition.name !== 'IfcProduct' && !definition.inheritanceChain?.includes('IfcProduct'))
88
+ continue;
89
+ const slots = [];
90
+ for (const [index, attribute] of (definition.allAttributes ?? []).entries()) {
91
+ let admitted = admitsReferences.get(attribute.type);
92
+ if (admitted === undefined) {
93
+ admitted = referenceType(registry, attribute.type);
94
+ admitsReferences.set(attribute.type, admitted);
95
+ }
96
+ if (admitted)
97
+ slots.push({ index, name: attribute.name });
98
+ }
99
+ if (slots.length)
100
+ productSlots.set(definition.name.toUpperCase(), slots);
101
+ }
102
+ const pair = new Set([stairId, flightId]);
103
+ for (const id of reader.ids('IFCRELVOIDSELEMENT')) {
104
+ const relationship = reader.entity(id);
105
+ if (!relationship)
106
+ throw new Error(`removeStairInStore: void relationship #${id} cannot be read`);
107
+ const host = asRef(relationship.attributes[4]);
108
+ if (host !== null && pair.has(host)) {
109
+ throw new Error(`removeStairInStore: stair or flight hosts a live opening; edit the host in place`);
110
+ }
111
+ }
112
+ // Effective type buckets preserve overlay creations/retypes and exclude
113
+ // geometry/property records before the reader materializes attributes.
114
+ for (const { expressId, type } of iterateEffectiveEntityIds(store, draft.getMutationView(), [...productSlots.keys()])) {
115
+ if (pair.has(expressId))
116
+ continue;
117
+ const slots = productSlots.get(type);
118
+ if (!slots)
119
+ continue;
120
+ const entity = reader.entity(expressId);
121
+ if (!entity)
122
+ throw new Error(`removeStairInStore: live product #${expressId} cannot be read`);
123
+ for (const { index, name } of slots) {
124
+ if (referencesPair(entity.attributes[index], pair)) {
125
+ throw new Error(`removeStairInStore: foreign product #${expressId}.${name} references the stair or flight`);
126
+ }
127
+ }
128
+ }
129
+ if (!draft.removeEntity(flightId) || !draft.removeEntity(stairId)) {
130
+ throw new Error(`removeStairInStore: #${stairId} or flight #${flightId} could not be removed`);
131
+ }
132
+ return { stairId, flightId };
133
+ }
134
+ //# sourceMappingURL=stair-removal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stair-removal.js","sourceRoot":"","sources":["../../src/in-store/stair-removal.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@
21
21
  * schedule.
22
22
  */
23
23
  import { type IfcDataStore } from '@ifc-lite/parser';
24
+ import type { MutablePropertyView } from '@ifc-lite/mutations';
24
25
  import type { Vec2 } from './auto-space-detect.js';
25
26
  /**
26
27
  * A storey's placement chain reduced to a planar rigid motion in the model's
@@ -54,7 +55,7 @@ export interface StoreyPlanFrame {
54
55
  * - the chain closes on itself, so composing every link of it reaches no
55
56
  * world frame to express the result in.
56
57
  */
57
- export declare function storeyPlanFrame(store: IfcDataStore, storeyExpressId: number): StoreyPlanFrame | null;
58
+ export declare function storeyPlanFrame(store: IfcDataStore, storeyExpressId: number, view?: MutablePropertyView | null): StoreyPlanFrame | null;
58
59
  /**
59
60
  * World-frame point → the storey-local frame `addSpaceToStore` writes into:
60
61
  * `Rᵀ · (p − origin)`.
@@ -1 +1 @@
1
- {"version":3,"file":"storey-plan-frame.d.ts","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAUnD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,MAAM,EAAE,IAAI,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,IAAI,CAAC;CACb;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,GACtB,eAAe,GAAG,IAAI,CA6BxB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAKnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAMrE"}
1
+ {"version":3,"file":"storey-plan-frame.d.ts","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAUnD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,MAAM,EAAE,IAAI,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,IAAI,CAAC;CACb;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAChC,eAAe,GAAG,IAAI,CAqCxB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAKnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAMrE"}
@@ -24,6 +24,7 @@
24
24
  * schedule.
25
25
  */
26
26
  import { EntityExtractor } from '@ifc-lite/parser';
27
+ import { AnchorEntityReader } from './resolve-anchor.js';
27
28
  import { safeLengthUnitScale } from './length-unit-scale.js';
28
29
  import { numericAttr, readEntity, readVec3, storeyFrameAboveBy, storeyPlacementChain, } from './placement-frame.js';
29
30
  /** A placement `Axis` is treated as vertical within this of unit +Z. */
@@ -51,20 +52,28 @@ const IDENTITY_FRAME = { origin: [0, 0], axisX: [1, 0] };
51
52
  * - the chain closes on itself, so composing every link of it reaches no
52
53
  * world frame to express the result in.
53
54
  */
54
- export function storeyPlanFrame(store, storeyExpressId) {
55
+ export function storeyPlanFrame(store, storeyExpressId, view) {
55
56
  if (!store.source)
56
57
  return null;
57
58
  const extractor = new EntityExtractor(store.source);
58
- const storey = readEntity(store, extractor, undefined, storeyExpressId);
59
- if (!storey)
59
+ const reader = view ? new AnchorEntityReader(store, view) : null;
60
+ const overlay = reader ? {
61
+ getNewEntities: () => [], readEntity: id => {
62
+ const record = reader.entity(id);
63
+ // Native StoreEditor fields are strings/IfcAttributeValue positional values.
64
+ return record ? { type: record.type, attributes: record.attributes } : null;
65
+ },
66
+ } : undefined;
67
+ const storey = readEntity(store, extractor, overlay, storeyExpressId);
68
+ if (!storey || (view && storey.type?.toUpperCase() !== 'IFCBUILDINGSTOREY'))
60
69
  return null;
61
70
  if (numericAttr(storey.attributes[5]) === null)
62
71
  return IDENTITY_FRAME; // ObjectPlacement
63
- const chain = storeyPlacementChain(store, extractor, undefined, storeyExpressId);
72
+ const chain = storeyPlacementChain(store, extractor, overlay, storeyExpressId);
64
73
  if (!chain || chain.size === 0)
65
74
  return null;
66
75
  for (const placementId of chain.keys()) {
67
- if (!placementIsInPlan(store, extractor, placementId))
76
+ if (!placementIsInPlan(store, extractor, placementId, overlay))
68
77
  return null;
69
78
  }
70
79
  // `hops === chain.size` composes every link, so the result is expressed in
@@ -74,10 +83,10 @@ export function storeyPlanFrame(store, storeyExpressId) {
74
83
  // malformed IFC ends with a link that still has a parent, and composing every
75
84
  // link then lands in no frame at all rather than the world. Refuse.
76
85
  const last = [...chain.keys()][chain.size - 1];
77
- const lastPlacement = readEntity(store, extractor, undefined, last);
86
+ const lastPlacement = readEntity(store, extractor, overlay, last);
78
87
  if (lastPlacement && numericAttr(lastPlacement.attributes[0]) !== null)
79
88
  return null;
80
- const frame = storeyFrameAboveBy(store, extractor, undefined, chain, chain.size);
89
+ const frame = storeyFrameAboveBy(store, extractor, overlay, chain, chain.size);
81
90
  if (!frame)
82
91
  return null;
83
92
  // A thrown or degenerate unit lookup is not a reason to author a space a
@@ -127,21 +136,21 @@ export function fromStoreyLocal(frame, p) {
127
136
  * is silently taken for +Z — which is the guess this function exists to
128
137
  * prevent, on the one input where the guess cannot be checked.
129
138
  */
130
- function placementIsInPlan(store, extractor, placementId) {
131
- const placement = readEntity(store, extractor, undefined, placementId);
139
+ function placementIsInPlan(store, extractor, placementId, overlay) {
140
+ const placement = readEntity(store, extractor, overlay, placementId);
132
141
  if (!placement)
133
142
  return true;
134
143
  const axisPlacementId = numericAttr(placement.attributes[1]); // RelativePlacement
135
144
  if (axisPlacementId === null)
136
145
  return true;
137
- const axisPlacement = readEntity(store, extractor, undefined, axisPlacementId);
146
+ const axisPlacement = readEntity(store, extractor, overlay, axisPlacementId);
138
147
  if (!axisPlacement)
139
148
  return true;
140
149
  const axisId = numericAttr(axisPlacement.attributes[1]); // Axis
141
150
  if (axisId === null)
142
151
  return true; // absent: +Z by default, per IFC
143
152
  // Present from here on — any failure to read it is a refusal, not a default.
144
- const axisDir = readEntity(store, extractor, undefined, axisId);
153
+ const axisDir = readEntity(store, extractor, overlay, axisId);
145
154
  if (!axisDir)
146
155
  return false;
147
156
  const v = readVec3(axisDir.attributes[0]);
@@ -1 +1 @@
1
- {"version":3,"file":"storey-plan-frame.js","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAc9B,wEAAwE;AACxE,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,4EAA4E;AAC5E,MAAM,cAAc,GAAoB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAmB,EACnB,eAAuB;IAEvB,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC,CAAC,kBAAkB;IACzF,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACjF,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;IACrE,CAAC;IACD,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,+EAA+E;IAC/E,8EAA8E;IAC9E,oEAAoE;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACpE,IAAI,aAAa,IAAI,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACpF,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,yEAAyE;IACzE,wEAAwE;IACxE,gEAAgE;IAChE,sBAAsB;IACtB,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACtF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAC5F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAsB,EAAE,CAAO;IAC3D,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,CAAO;IAC7D,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACtC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,iBAAiB,CACxB,KAAmB,EACnB,SAA0B,EAC1B,WAAmB;IAEnB,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACvE,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB;IAClF,IAAI,eAAe,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC/E,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;IAChE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;IACnE,6EAA6E;IAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,YAAY;WACrC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,YAAY;WACnC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"storey-plan-frame.js","sourceRoot":"","sources":["../../src/in-store/storey-plan-frame.ts"],"names":[],"mappings":"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"}