@pascal-app/nodes 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (708) hide show
  1. package/dist/block/definition.d.ts.map +1 -1
  2. package/dist/block/definition.js +18 -3
  3. package/dist/block/floorplan.d.ts +11 -1
  4. package/dist/block/floorplan.d.ts.map +1 -1
  5. package/dist/block/floorplan.js +81 -13
  6. package/dist/block/geometry.d.ts +2 -2
  7. package/dist/block/geometry.d.ts.map +1 -1
  8. package/dist/block/geometry.js +39 -24
  9. package/dist/block/hosted-edit.d.ts.map +1 -1
  10. package/dist/block/hosted-edit.js +25 -0
  11. package/dist/block/material-slots.d.ts +1 -3
  12. package/dist/block/material-slots.d.ts.map +1 -1
  13. package/dist/block/material-slots.js +1 -11
  14. package/dist/block/paint.d.ts.map +1 -1
  15. package/dist/block/paint.js +4 -10
  16. package/dist/block/panel.d.ts.map +1 -1
  17. package/dist/block/panel.js +8 -3
  18. package/dist/block/selection.d.ts.map +1 -1
  19. package/dist/block/selection.js +2 -2
  20. package/dist/box-vent/definition.d.ts.map +1 -1
  21. package/dist/box-vent/definition.js +2 -5
  22. package/dist/box-vent/panel.d.ts.map +1 -1
  23. package/dist/box-vent/panel.js +5 -28
  24. package/dist/cabinet/countertop-layout.d.ts +13 -2
  25. package/dist/cabinet/countertop-layout.d.ts.map +1 -1
  26. package/dist/cabinet/definition.d.ts.map +1 -1
  27. package/dist/cabinet/definition.js +1 -2
  28. package/dist/cabinet/floorplan.d.ts.map +1 -1
  29. package/dist/cabinet/floorplan.js +125 -28
  30. package/dist/cabinet/geometry/shared.d.ts +1 -2
  31. package/dist/cabinet/geometry/shared.d.ts.map +1 -1
  32. package/dist/cabinet/geometry/shared.js +1 -2
  33. package/dist/cabinet/run-layout.d.ts.map +1 -1
  34. package/dist/cabinet/run-layout.js +8 -5
  35. package/dist/cabinet/run-ops.d.ts +13 -2
  36. package/dist/cabinet/run-ops.d.ts.map +1 -1
  37. package/dist/cabinet/tool.d.ts.map +1 -1
  38. package/dist/cabinet/tool.js +22 -24
  39. package/dist/cabinet/wall-snap.d.ts.map +1 -1
  40. package/dist/cabinet/wall-snap.js +8 -8
  41. package/dist/ceiling/boundary-editor.d.ts.map +1 -1
  42. package/dist/ceiling/boundary-editor.js +5 -3
  43. package/dist/ceiling/definition.d.ts +4 -4
  44. package/dist/ceiling/definition.d.ts.map +1 -1
  45. package/dist/ceiling/definition.js +15 -15
  46. package/dist/ceiling/floorplan-affordances.d.ts +84 -4
  47. package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
  48. package/dist/ceiling/floorplan-affordances.js +0 -1
  49. package/dist/ceiling/floorplan-move.d.ts.map +1 -1
  50. package/dist/ceiling/floorplan-move.js +0 -1
  51. package/dist/ceiling/floorplan.d.ts +1 -1
  52. package/dist/ceiling/floorplan.d.ts.map +1 -1
  53. package/dist/ceiling/floorplan.js +2 -1
  54. package/dist/ceiling/height-bounds.d.ts +19 -0
  55. package/dist/ceiling/height-bounds.d.ts.map +1 -0
  56. package/dist/ceiling/height-bounds.js +24 -0
  57. package/dist/ceiling/hole-editor.d.ts.map +1 -1
  58. package/dist/ceiling/hole-editor.js +3 -4
  59. package/dist/ceiling/materials.d.ts +1 -1
  60. package/dist/ceiling/materials.d.ts.map +1 -1
  61. package/dist/ceiling/materials.js +10 -3
  62. package/dist/ceiling/paint.d.ts +2 -8
  63. package/dist/ceiling/paint.d.ts.map +1 -1
  64. package/dist/ceiling/paint.js +121 -24
  65. package/dist/ceiling/panel.d.ts.map +1 -1
  66. package/dist/ceiling/panel.js +40 -23
  67. package/dist/ceiling/renderer.d.ts.map +1 -1
  68. package/dist/ceiling/renderer.js +41 -5
  69. package/dist/chimney/move-tool.d.ts.map +1 -1
  70. package/dist/chimney/move-tool.js +8 -2
  71. package/dist/chimney/paint.d.ts.map +1 -1
  72. package/dist/chimney/paint.js +3 -10
  73. package/dist/column/definition.d.ts.map +1 -1
  74. package/dist/column/definition.js +24 -2
  75. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  76. package/dist/column/floorplan-affordances.js +5 -0
  77. package/dist/column/floorplan.d.ts +1 -1
  78. package/dist/column/floorplan.d.ts.map +1 -1
  79. package/dist/column/floorplan.js +47 -2
  80. package/dist/column/hosted-resize.d.ts +101 -2
  81. package/dist/column/hosted-resize.d.ts.map +1 -1
  82. package/dist/column/panel.d.ts.map +1 -1
  83. package/dist/column/panel.js +147 -146
  84. package/dist/column/renderer.d.ts.map +1 -1
  85. package/dist/column/renderer.js +6 -4
  86. package/dist/column/surface.d.ts.map +1 -1
  87. package/dist/column/surface.js +7 -0
  88. package/dist/construction-dimension/floorplan.js +7 -3
  89. package/dist/cupola/definition.d.ts.map +1 -1
  90. package/dist/cupola/definition.js +2 -8
  91. package/dist/cupola/panel.d.ts.map +1 -1
  92. package/dist/cupola/panel.js +5 -23
  93. package/dist/door/definition.d.ts.map +1 -1
  94. package/dist/door/definition.js +12 -3
  95. package/dist/door/door-math.d.ts +5 -10
  96. package/dist/door/door-math.d.ts.map +1 -1
  97. package/dist/door/door-math.js +14 -15
  98. package/dist/door/floorplan-move.d.ts.map +1 -1
  99. package/dist/door/floorplan-move.js +3 -1
  100. package/dist/door/floorplan.d.ts.map +1 -1
  101. package/dist/door/floorplan.js +55 -21
  102. package/dist/door/mechanism.d.ts +4 -0
  103. package/dist/door/mechanism.d.ts.map +1 -0
  104. package/dist/door/mechanism.js +24 -0
  105. package/dist/door/move-tool.d.ts.map +1 -1
  106. package/dist/door/move-tool.js +72 -48
  107. package/dist/door/paint.d.ts.map +1 -1
  108. package/dist/door/paint.js +3 -0
  109. package/dist/door/panel.d.ts.map +1 -1
  110. package/dist/door/panel.js +34 -259
  111. package/dist/door/placement.d.ts +45 -0
  112. package/dist/door/placement.d.ts.map +1 -0
  113. package/dist/door/placement.js +51 -0
  114. package/dist/door/preview.d.ts.map +1 -1
  115. package/dist/door/preview.js +2 -0
  116. package/dist/door/renderer.d.ts.map +1 -1
  117. package/dist/door/renderer.js +3 -2
  118. package/dist/door/tool.d.ts.map +1 -1
  119. package/dist/door/tool.js +92 -21
  120. package/dist/dormer/csg-geometry.d.ts.map +1 -1
  121. package/dist/dormer/csg-geometry.js +2 -0
  122. package/dist/dormer/paint.d.ts.map +1 -1
  123. package/dist/dormer/paint.js +2 -5
  124. package/dist/dormer/panel.d.ts.map +1 -1
  125. package/dist/dormer/panel.js +4 -14
  126. package/dist/downspout/definition.d.ts.map +1 -1
  127. package/dist/downspout/definition.js +2 -2
  128. package/dist/duct-fitting/definition.d.ts.map +1 -1
  129. package/dist/duct-fitting/definition.js +2 -1
  130. package/dist/duct-fitting/geometry.d.ts.map +1 -1
  131. package/dist/duct-fitting/geometry.js +1 -1
  132. package/dist/duct-fitting/move-tool.d.ts.map +1 -1
  133. package/dist/duct-fitting/move-tool.js +8 -2
  134. package/dist/duct-segment/definition.d.ts.map +1 -1
  135. package/dist/duct-segment/definition.js +2 -2
  136. package/dist/duct-segment/geometry.d.ts.map +1 -1
  137. package/dist/duct-segment/geometry.js +1 -1
  138. package/dist/duct-segment/move-tool.d.ts.map +1 -1
  139. package/dist/duct-segment/move-tool.js +8 -2
  140. package/dist/elevator/definition.d.ts.map +1 -1
  141. package/dist/elevator/definition.js +1 -2
  142. package/dist/elevator/panel.d.ts.map +1 -1
  143. package/dist/elevator/panel.js +5 -27
  144. package/dist/elevator/parametrics.js +1 -1
  145. package/dist/elevator/renderer.d.ts.map +1 -1
  146. package/dist/elevator/renderer.js +3 -4
  147. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  148. package/dist/eyebrow-vent/definition.js +2 -5
  149. package/dist/eyebrow-vent/paint.d.ts.map +1 -1
  150. package/dist/eyebrow-vent/paint.js +3 -6
  151. package/dist/eyebrow-vent/panel.d.ts.map +1 -1
  152. package/dist/eyebrow-vent/panel.js +5 -23
  153. package/dist/fence/actions/move-endpoint.d.ts +1 -1
  154. package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
  155. package/dist/fence/actions/move-endpoint.js +2 -1
  156. package/dist/fence/definition.d.ts +2 -1
  157. package/dist/fence/definition.d.ts.map +1 -1
  158. package/dist/fence/definition.js +83 -28
  159. package/dist/fence/drafting.d.ts +36 -0
  160. package/dist/fence/drafting.d.ts.map +1 -0
  161. package/dist/fence/drafting.js +210 -0
  162. package/dist/fence/feature-tool.d.ts +4 -0
  163. package/dist/fence/feature-tool.d.ts.map +1 -0
  164. package/dist/fence/feature-tool.js +140 -0
  165. package/dist/fence/features.d.ts +2 -0
  166. package/dist/fence/features.d.ts.map +1 -0
  167. package/dist/fence/features.js +12 -0
  168. package/dist/fence/floorplan-affordances.d.ts.map +1 -1
  169. package/dist/fence/floorplan-affordances.js +2 -1
  170. package/dist/fence/floorplan.d.ts +2 -3
  171. package/dist/fence/floorplan.d.ts.map +1 -1
  172. package/dist/fence/floorplan.js +131 -71
  173. package/dist/fence/geometry-parts.d.ts +50 -0
  174. package/dist/fence/geometry-parts.d.ts.map +1 -0
  175. package/dist/fence/geometry-parts.js +1144 -0
  176. package/dist/fence/geometry.d.ts +2 -3
  177. package/dist/fence/geometry.d.ts.map +1 -1
  178. package/dist/fence/geometry.js +84 -7
  179. package/dist/fence/index.d.ts +1 -0
  180. package/dist/fence/index.d.ts.map +1 -1
  181. package/dist/fence/index.js +1 -0
  182. package/dist/fence/inspector-editors.d.ts +15 -0
  183. package/dist/fence/inspector-editors.d.ts.map +1 -1
  184. package/dist/fence/inspector-editors.js +128 -3
  185. package/dist/fence/lift.d.ts.map +1 -1
  186. package/dist/fence/lift.js +5 -2
  187. package/dist/fence/move-tool.js +2 -1
  188. package/dist/fence/panel-model.d.ts +4 -0
  189. package/dist/fence/panel-model.d.ts.map +1 -0
  190. package/dist/fence/panel-model.js +12 -0
  191. package/dist/fence/parametrics.d.ts +0 -12
  192. package/dist/fence/parametrics.d.ts.map +1 -1
  193. package/dist/fence/parametrics.js +185 -18
  194. package/dist/fence/system.d.ts.map +1 -1
  195. package/dist/fence/system.js +141 -31
  196. package/dist/fence/tool.d.ts.map +1 -1
  197. package/dist/fence/tool.js +256 -47
  198. package/dist/fence-feature/actions.d.ts +7 -0
  199. package/dist/fence-feature/actions.d.ts.map +1 -0
  200. package/dist/fence-feature/actions.js +26 -0
  201. package/dist/fence-feature/definition.d.ts +4 -0
  202. package/dist/fence-feature/definition.d.ts.map +1 -0
  203. package/dist/fence-feature/definition.js +112 -0
  204. package/dist/fence-feature/floorplan-affordances.d.ts +3 -0
  205. package/dist/fence-feature/floorplan-affordances.d.ts.map +1 -0
  206. package/dist/fence-feature/floorplan-affordances.js +37 -0
  207. package/dist/fence-feature/floorplan.d.ts +4 -0
  208. package/dist/fence-feature/floorplan.d.ts.map +1 -0
  209. package/dist/fence-feature/floorplan.js +120 -0
  210. package/dist/fence-feature/geometry.d.ts +5 -0
  211. package/dist/fence-feature/geometry.d.ts.map +1 -0
  212. package/dist/fence-feature/geometry.js +43 -0
  213. package/dist/fence-feature/handles.d.ts +5 -0
  214. package/dist/fence-feature/handles.d.ts.map +1 -0
  215. package/dist/fence-feature/handles.js +84 -0
  216. package/dist/fence-feature/inspector.d.ts +6 -0
  217. package/dist/fence-feature/inspector.d.ts.map +1 -0
  218. package/dist/fence-feature/inspector.js +214 -0
  219. package/dist/fence-feature/interaction.d.ts +3 -0
  220. package/dist/fence-feature/interaction.d.ts.map +1 -0
  221. package/dist/fence-feature/interaction.js +41 -0
  222. package/dist/fence-feature/move-session.d.ts +9 -0
  223. package/dist/fence-feature/move-session.d.ts.map +1 -0
  224. package/dist/fence-feature/move-session.js +48 -0
  225. package/dist/fence-feature/move-tool.d.ts +5 -0
  226. package/dist/fence-feature/move-tool.d.ts.map +1 -0
  227. package/dist/fence-feature/move-tool.js +58 -0
  228. package/dist/fence-feature/pick-target.d.ts +7 -0
  229. package/dist/fence-feature/pick-target.d.ts.map +1 -0
  230. package/dist/fence-feature/pick-target.js +52 -0
  231. package/dist/floor-opening/definition.d.ts +3 -0
  232. package/dist/floor-opening/definition.d.ts.map +1 -0
  233. package/dist/floor-opening/definition.js +41 -0
  234. package/dist/floor-opening/floorplan.d.ts +156 -0
  235. package/dist/floor-opening/floorplan.d.ts.map +1 -0
  236. package/dist/floor-opening/floorplan.js +63 -0
  237. package/dist/gutter/definition.d.ts.map +1 -1
  238. package/dist/gutter/definition.js +2 -2
  239. package/dist/imported-mesh/definition.d.ts.map +1 -1
  240. package/dist/imported-mesh/definition.js +2 -0
  241. package/dist/imported-mesh/geometry.d.ts +1 -1
  242. package/dist/imported-mesh/geometry.d.ts.map +1 -1
  243. package/dist/imported-mesh/geometry.js +40 -12
  244. package/dist/index.d.ts +13 -2
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +20 -2
  247. package/dist/item/authored-face-host.d.ts +10 -0
  248. package/dist/item/authored-face-host.d.ts.map +1 -0
  249. package/dist/item/authored-face-host.js +87 -0
  250. package/dist/item/authored-params.d.ts +15 -0
  251. package/dist/item/authored-params.d.ts.map +1 -0
  252. package/dist/item/authored-params.js +72 -0
  253. package/dist/item/definition.d.ts +2 -2
  254. package/dist/item/definition.d.ts.map +1 -1
  255. package/dist/item/definition.js +33 -4
  256. package/dist/item/floorplan.d.ts +1 -1
  257. package/dist/item/floorplan.d.ts.map +1 -1
  258. package/dist/item/floorplan.js +35 -5
  259. package/dist/item/index.d.ts +1 -0
  260. package/dist/item/index.d.ts.map +1 -1
  261. package/dist/item/index.js +1 -0
  262. package/dist/item/model-loader.d.ts +2 -0
  263. package/dist/item/model-loader.d.ts.map +1 -1
  264. package/dist/item/model-loader.js +55 -23
  265. package/dist/item/move-tool.js +4 -4
  266. package/dist/item/paint.d.ts.map +1 -1
  267. package/dist/item/paint.js +5 -24
  268. package/dist/item/panel.d.ts +1 -3
  269. package/dist/item/panel.d.ts.map +1 -1
  270. package/dist/item/panel.js +20 -24
  271. package/dist/item/placement-notice.d.ts +14 -0
  272. package/dist/item/placement-notice.d.ts.map +1 -0
  273. package/dist/item/placement-notice.js +38 -0
  274. package/dist/item/plan-symbols.d.ts +67 -0
  275. package/dist/item/plan-symbols.d.ts.map +1 -0
  276. package/dist/item/plan-symbols.js +407 -0
  277. package/dist/item/renderer.d.ts +10 -0
  278. package/dist/item/renderer.d.ts.map +1 -1
  279. package/dist/item/renderer.js +64 -38
  280. package/dist/item/script-param-defaults.d.ts +12 -0
  281. package/dist/item/script-param-defaults.d.ts.map +1 -0
  282. package/dist/item/script-param-defaults.js +34 -0
  283. package/dist/lean-to-extension/definition.d.ts.map +1 -1
  284. package/dist/lean-to-extension/definition.js +1 -2
  285. package/dist/lean-to-extension/geometry.d.ts.map +1 -1
  286. package/dist/lean-to-extension/geometry.js +1 -1
  287. package/dist/lean-to-extension/layout.d.ts.map +1 -1
  288. package/dist/lean-to-extension/layout.js +2 -3
  289. package/dist/lean-to-extension/placement-validation.d.ts.map +1 -1
  290. package/dist/lean-to-extension/placement-validation.js +5 -5
  291. package/dist/lean-to-extension/tool.d.ts.map +1 -1
  292. package/dist/lean-to-extension/tool.js +5 -5
  293. package/dist/lineset/move-tool.d.ts.map +1 -1
  294. package/dist/lineset/move-tool.js +8 -2
  295. package/dist/liquid-line/move-tool.d.ts.map +1 -1
  296. package/dist/liquid-line/move-tool.js +8 -2
  297. package/dist/measurement/definition.js +1 -1
  298. package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
  299. package/dist/pipe-fitting/move-tool.js +8 -2
  300. package/dist/pipe-segment/move-tool.d.ts.map +1 -1
  301. package/dist/pipe-segment/move-tool.js +8 -2
  302. package/dist/procedural-item/animation.d.ts +8 -0
  303. package/dist/procedural-item/animation.d.ts.map +1 -0
  304. package/dist/procedural-item/animation.js +116 -0
  305. package/dist/procedural-item/definition.d.ts.map +1 -1
  306. package/dist/procedural-item/definition.js +74 -8
  307. package/dist/procedural-item/geometry.d.ts +5 -1
  308. package/dist/procedural-item/geometry.d.ts.map +1 -1
  309. package/dist/procedural-item/geometry.js +239 -15
  310. package/dist/procedural-item/renderer.d.ts.map +1 -1
  311. package/dist/procedural-item/renderer.js +272 -23
  312. package/dist/ridge-vent/panel.d.ts.map +1 -1
  313. package/dist/ridge-vent/panel.js +5 -23
  314. package/dist/ridge-vent/renderer.d.ts.map +1 -1
  315. package/dist/ridge-vent/renderer.js +9 -8
  316. package/dist/roof/definition.d.ts.map +1 -1
  317. package/dist/roof/definition.js +4 -1
  318. package/dist/roof/floorplan.d.ts +8 -0
  319. package/dist/roof/floorplan.d.ts.map +1 -1
  320. package/dist/roof/floorplan.js +194 -18
  321. package/dist/roof/panel-model.d.ts.map +1 -1
  322. package/dist/roof/panel-model.js +10 -6
  323. package/dist/roof/panel.d.ts.map +1 -1
  324. package/dist/roof/panel.js +3 -10
  325. package/dist/roof/renderer.d.ts.map +1 -1
  326. package/dist/roof/renderer.js +5 -2
  327. package/dist/roof-segment/panel.d.ts.map +1 -1
  328. package/dist/roof-segment/panel.js +5 -24
  329. package/dist/roof-segment/renderer.d.ts.map +1 -1
  330. package/dist/roof-segment/renderer.js +17 -8
  331. package/dist/separator/definition.d.ts +3 -0
  332. package/dist/separator/definition.d.ts.map +1 -0
  333. package/dist/separator/definition.js +39 -0
  334. package/dist/separator/renderer.d.ts +5 -0
  335. package/dist/separator/renderer.d.ts.map +1 -0
  336. package/dist/separator/renderer.js +36 -0
  337. package/dist/shared/duct-body-paint.d.ts +0 -4
  338. package/dist/shared/duct-body-paint.d.ts.map +1 -1
  339. package/dist/shared/duct-body-paint.js +1 -5
  340. package/dist/shared/item-interaction-actions.d.ts +6 -0
  341. package/dist/shared/item-interaction-actions.d.ts.map +1 -0
  342. package/dist/shared/item-interaction-actions.js +27 -0
  343. package/dist/shared/item-interactions.d.ts +9 -0
  344. package/dist/shared/item-interactions.d.ts.map +1 -0
  345. package/dist/shared/item-interactions.js +74 -0
  346. package/dist/shared/item-light-placement.d.ts +2 -0
  347. package/dist/shared/item-light-placement.d.ts.map +1 -0
  348. package/dist/shared/item-light-placement.js +3 -0
  349. package/dist/shared/move-roof-tool.js +2 -1
  350. package/dist/shared/node-batch/batchable.d.ts +12 -0
  351. package/dist/shared/node-batch/batchable.d.ts.map +1 -0
  352. package/dist/shared/node-batch/batchable.js +41 -0
  353. package/dist/shared/node-batch/candidates.d.ts +7 -5
  354. package/dist/shared/node-batch/candidates.d.ts.map +1 -1
  355. package/dist/shared/node-batch/candidates.js +43 -59
  356. package/dist/shared/node-batch/release.d.ts +8 -0
  357. package/dist/shared/node-batch/release.d.ts.map +1 -0
  358. package/dist/shared/node-batch/release.js +16 -0
  359. package/dist/shared/node-batch/system.d.ts.map +1 -1
  360. package/dist/shared/node-batch/system.js +17 -12
  361. package/dist/shared/node-batch/types.d.ts +4 -1
  362. package/dist/shared/node-batch/types.d.ts.map +1 -1
  363. package/dist/shared/opening-documentation.d.ts +13 -1
  364. package/dist/shared/opening-documentation.d.ts.map +1 -1
  365. package/dist/shared/opening-documentation.js +245 -59
  366. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  367. package/dist/shared/opening-guides-runtime.js +17 -14
  368. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  369. package/dist/shared/opening-placement-dimensions.js +3 -3
  370. package/dist/shared/opening-plane-offset.d.ts +23 -0
  371. package/dist/shared/opening-plane-offset.d.ts.map +1 -0
  372. package/dist/shared/opening-plane-offset.js +24 -0
  373. package/dist/shared/polygon-centroid-move.d.ts.map +1 -1
  374. package/dist/shared/polygon-centroid-move.js +4 -1
  375. package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
  376. package/dist/shared/polygon-vertex-affordance.js +19 -15
  377. package/dist/shared/run-hangers.d.ts.map +1 -1
  378. package/dist/shared/run-hangers.js +5 -4
  379. package/dist/shared/scripted-opening-handles.d.ts +18 -0
  380. package/dist/shared/scripted-opening-handles.d.ts.map +1 -0
  381. package/dist/shared/scripted-opening-handles.js +53 -0
  382. package/dist/shared/scripted-opening.d.ts +25 -0
  383. package/dist/shared/scripted-opening.d.ts.map +1 -0
  384. package/dist/shared/scripted-opening.js +72 -0
  385. package/dist/shared/slot-paint.d.ts +14 -2
  386. package/dist/shared/slot-paint.d.ts.map +1 -1
  387. package/dist/shared/slot-paint.js +29 -29
  388. package/dist/shared/surface-paint.d.ts.map +1 -1
  389. package/dist/shared/surface-paint.js +2 -5
  390. package/dist/shared/swap-preview-material.d.ts +11 -0
  391. package/dist/shared/swap-preview-material.d.ts.map +1 -0
  392. package/dist/shared/swap-preview-material.js +16 -0
  393. package/dist/shared/system-checks.d.ts.map +1 -1
  394. package/dist/shared/system-checks.js +5 -3
  395. package/dist/shared/wall-attach-target.d.ts +3 -10
  396. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  397. package/dist/shared/wall-attach-target.js +3 -63
  398. package/dist/shared/wall-opening-ceiling.d.ts +5 -15
  399. package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
  400. package/dist/shared/wall-opening-ceiling.js +10 -18
  401. package/dist/shelf/definition.d.ts.map +1 -1
  402. package/dist/shelf/definition.js +1 -1
  403. package/dist/shelf/geometry.d.ts.map +1 -1
  404. package/dist/shelf/geometry.js +1 -2
  405. package/dist/shelf/paint.d.ts.map +1 -1
  406. package/dist/shelf/paint.js +4 -10
  407. package/dist/site/line-ribbon.d.ts +31 -0
  408. package/dist/site/line-ribbon.d.ts.map +1 -0
  409. package/dist/site/line-ribbon.js +117 -0
  410. package/dist/site/lot-mask.d.ts +18 -0
  411. package/dist/site/lot-mask.d.ts.map +1 -0
  412. package/dist/site/lot-mask.js +35 -0
  413. package/dist/site/panel.d.ts +10 -0
  414. package/dist/site/panel.d.ts.map +1 -0
  415. package/dist/site/panel.js +155 -0
  416. package/dist/site/parametrics.d.ts +7 -0
  417. package/dist/site/parametrics.d.ts.map +1 -1
  418. package/dist/site/parametrics.js +8 -0
  419. package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
  420. package/dist/site/recessed-slab-ground-holes.js +5 -2
  421. package/dist/site/renderer.d.ts.map +1 -1
  422. package/dist/site/renderer.js +150 -19
  423. package/dist/site/setbacks.d.ts +33 -0
  424. package/dist/site/setbacks.d.ts.map +1 -0
  425. package/dist/site/setbacks.js +204 -0
  426. package/dist/site/terrain-geometry.d.ts +28 -1
  427. package/dist/site/terrain-geometry.d.ts.map +1 -1
  428. package/dist/site/terrain-geometry.js +78 -4
  429. package/dist/site/terrain-holes.d.ts +15 -0
  430. package/dist/site/terrain-holes.d.ts.map +1 -0
  431. package/dist/site/terrain-holes.js +74 -0
  432. package/dist/site/terrain-mesh.d.ts +9 -2
  433. package/dist/site/terrain-mesh.d.ts.map +1 -1
  434. package/dist/site/terrain-mesh.js +36 -9
  435. package/dist/site/terrain-renderer.d.ts +9 -2
  436. package/dist/site/terrain-renderer.d.ts.map +1 -1
  437. package/dist/site/terrain-renderer.js +14 -4
  438. package/dist/slab/boundary-editor.d.ts +1 -1
  439. package/dist/slab/boundary-editor.d.ts.map +1 -1
  440. package/dist/slab/boundary-editor.js +13 -13
  441. package/dist/slab/definition.d.ts.map +1 -1
  442. package/dist/slab/definition.js +19 -3
  443. package/dist/slab/dependency-tracker.d.ts.map +1 -1
  444. package/dist/slab/dependency-tracker.js +67 -7
  445. package/dist/slab/elevation-limit.d.ts.map +1 -1
  446. package/dist/slab/elevation-limit.js +2 -2
  447. package/dist/slab/floorplan-affordances.d.ts +176 -4
  448. package/dist/slab/floorplan-affordances.d.ts.map +1 -1
  449. package/dist/slab/floorplan-affordances.js +0 -1
  450. package/dist/slab/floorplan-move.d.ts.map +1 -1
  451. package/dist/slab/floorplan-move.js +3 -4
  452. package/dist/slab/floorplan.d.ts +7 -0
  453. package/dist/slab/floorplan.d.ts.map +1 -1
  454. package/dist/slab/floorplan.js +22 -5
  455. package/dist/slab/geometry.d.ts.map +1 -1
  456. package/dist/slab/geometry.js +186 -76
  457. package/dist/slab/move-tool.js +7 -6
  458. package/dist/slab/paint.d.ts +18 -5
  459. package/dist/slab/paint.d.ts.map +1 -1
  460. package/dist/slab/paint.js +458 -9
  461. package/dist/slab/panel.d.ts.map +1 -1
  462. package/dist/slab/panel.js +28 -9
  463. package/dist/slab/placement-ownership.d.ts +2 -1
  464. package/dist/slab/placement-ownership.d.ts.map +1 -1
  465. package/dist/slab/placement-ownership.js +2 -2
  466. package/dist/slab/surface-split.d.ts +24 -0
  467. package/dist/slab/surface-split.d.ts.map +1 -0
  468. package/dist/slab/surface-split.js +389 -0
  469. package/dist/slab/tool.d.ts.map +1 -1
  470. package/dist/slab/tool.js +3 -3
  471. package/dist/stair/baluster-geometry.d.ts +21 -0
  472. package/dist/stair/baluster-geometry.d.ts.map +1 -0
  473. package/dist/stair/baluster-geometry.js +74 -0
  474. package/dist/stair/baluster-guard.d.ts +50 -0
  475. package/dist/stair/baluster-guard.d.ts.map +1 -0
  476. package/dist/stair/baluster-guard.js +71 -0
  477. package/dist/stair/boards-guard.d.ts +37 -0
  478. package/dist/stair/boards-guard.d.ts.map +1 -0
  479. package/dist/stair/boards-guard.js +61 -0
  480. package/dist/stair/cable-guard.d.ts +39 -0
  481. package/dist/stair/cable-guard.d.ts.map +1 -0
  482. package/dist/stair/cable-guard.js +105 -0
  483. package/dist/stair/construction-controls.d.ts +15 -0
  484. package/dist/stair/construction-controls.d.ts.map +1 -0
  485. package/dist/stair/construction-controls.js +29 -0
  486. package/dist/stair/continuous-railings.d.ts +10 -0
  487. package/dist/stair/continuous-railings.d.ts.map +1 -0
  488. package/dist/stair/continuous-railings.js +159 -0
  489. package/dist/stair/definition.d.ts.map +1 -1
  490. package/dist/stair/definition.js +16 -37
  491. package/dist/stair/documentation.d.ts +1 -1
  492. package/dist/stair/documentation.d.ts.map +1 -1
  493. package/dist/stair/documentation.js +10 -17
  494. package/dist/stair/floorplan-affordances.d.ts.map +1 -1
  495. package/dist/stair/floorplan-affordances.js +9 -25
  496. package/dist/stair/floorplan.d.ts +1 -23
  497. package/dist/stair/floorplan.d.ts.map +1 -1
  498. package/dist/stair/floorplan.js +102 -86
  499. package/dist/stair/glass-guard.d.ts +72 -0
  500. package/dist/stair/glass-guard.d.ts.map +1 -0
  501. package/dist/stair/glass-guard.js +167 -0
  502. package/dist/stair/guard-path.d.ts +119 -0
  503. package/dist/stair/guard-path.d.ts.map +1 -0
  504. package/dist/stair/guard-path.js +208 -0
  505. package/dist/stair/materials.d.ts +11 -0
  506. package/dist/stair/materials.d.ts.map +1 -0
  507. package/dist/stair/materials.js +51 -0
  508. package/dist/stair/metal-guard.d.ts +38 -0
  509. package/dist/stair/metal-guard.d.ts.map +1 -0
  510. package/dist/stair/metal-guard.js +79 -0
  511. package/dist/stair/paint.d.ts +32 -0
  512. package/dist/stair/paint.d.ts.map +1 -1
  513. package/dist/stair/paint.js +75 -36
  514. package/dist/stair/panel.d.ts.map +1 -1
  515. package/dist/stair/panel.js +154 -17
  516. package/dist/stair/parametrics.d.ts +1 -1
  517. package/dist/stair/parametrics.d.ts.map +1 -1
  518. package/dist/stair/parametrics.js +32 -15
  519. package/dist/stair/plan-entry.d.ts +31 -0
  520. package/dist/stair/plan-entry.d.ts.map +1 -0
  521. package/dist/stair/plan-entry.js +325 -0
  522. package/dist/stair/post-and-rail-guard.d.ts +31 -0
  523. package/dist/stair/post-and-rail-guard.d.ts.map +1 -0
  524. package/dist/stair/post-and-rail-guard.js +63 -0
  525. package/dist/stair/railing-controls.d.ts +9 -0
  526. package/dist/stair/railing-controls.d.ts.map +1 -0
  527. package/dist/stair/railing-controls.js +49 -0
  528. package/dist/stair/renderer.d.ts.map +1 -1
  529. package/dist/stair/renderer.js +259 -259
  530. package/dist/stair/use-stair-render-data.d.ts +317 -0
  531. package/dist/stair/use-stair-render-data.d.ts.map +1 -0
  532. package/dist/stair/use-stair-render-data.js +73 -0
  533. package/dist/stair-segment/definition.d.ts.map +1 -1
  534. package/dist/stair-segment/definition.js +51 -10
  535. package/dist/stair-segment/panel.d.ts.map +1 -1
  536. package/dist/stair-segment/panel.js +36 -42
  537. package/dist/stair-segment/parametrics.d.ts +1 -1
  538. package/dist/stair-segment/parametrics.d.ts.map +1 -1
  539. package/dist/stair-segment/parametrics.js +21 -8
  540. package/dist/stair-segment/renderer.d.ts.map +1 -1
  541. package/dist/stair-segment/renderer.js +16 -28
  542. package/dist/turbine-vent/definition.d.ts.map +1 -1
  543. package/dist/turbine-vent/definition.js +2 -5
  544. package/dist/turbine-vent/paint.d.ts.map +1 -1
  545. package/dist/turbine-vent/paint.js +2 -5
  546. package/dist/turbine-vent/panel.d.ts.map +1 -1
  547. package/dist/turbine-vent/panel.js +5 -23
  548. package/dist/unit/unit-panel.d.ts.map +1 -1
  549. package/dist/unit/unit-panel.js +6 -1
  550. package/dist/wall/actions.d.ts.map +1 -1
  551. package/dist/wall/actions.js +7 -2
  552. package/dist/wall/construction-dimensions.js +8 -5
  553. package/dist/wall/contextual-dimensions.js +4 -4
  554. package/dist/wall/curtain-wall-materials.d.ts +1 -1
  555. package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
  556. package/dist/wall/curtain-wall-materials.js +2 -2
  557. package/dist/wall/curve-tool.d.ts.map +1 -1
  558. package/dist/wall/curve-tool.js +4 -0
  559. package/dist/wall/definition.d.ts.map +1 -1
  560. package/dist/wall/definition.js +41 -17
  561. package/dist/wall/floorplan-move.d.ts +1 -1
  562. package/dist/wall/floorplan-move.d.ts.map +1 -1
  563. package/dist/wall/floorplan-move.js +20 -83
  564. package/dist/wall/floorplan-tool.d.ts.map +1 -1
  565. package/dist/wall/floorplan-tool.js +10 -11
  566. package/dist/wall/floorplan.d.ts +3 -1
  567. package/dist/wall/floorplan.d.ts.map +1 -1
  568. package/dist/wall/floorplan.js +184 -21
  569. package/dist/wall/measurement.d.ts.map +1 -1
  570. package/dist/wall/measurement.js +5 -5
  571. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  572. package/dist/wall/move-endpoint-tool.js +20 -7
  573. package/dist/wall/move-shared.d.ts.map +1 -1
  574. package/dist/wall/move-shared.js +11 -7
  575. package/dist/wall/move-tool.d.ts.map +1 -1
  576. package/dist/wall/move-tool.js +118 -148
  577. package/dist/wall/paint.d.ts +26 -15
  578. package/dist/wall/paint.d.ts.map +1 -1
  579. package/dist/wall/paint.js +306 -117
  580. package/dist/wall/panel-model.d.ts +18 -0
  581. package/dist/wall/panel-model.d.ts.map +1 -1
  582. package/dist/wall/panel-model.js +77 -19
  583. package/dist/wall/panel.d.ts.map +1 -1
  584. package/dist/wall/panel.js +217 -41
  585. package/dist/wall/parametrics.d.ts.map +1 -1
  586. package/dist/wall/parametrics.js +3 -0
  587. package/dist/wall/rectangle-command.d.ts +111 -12
  588. package/dist/wall/rectangle-command.d.ts.map +1 -1
  589. package/dist/wall/rectangle-tool.d.ts.map +1 -1
  590. package/dist/wall/rectangle-tool.js +26 -8
  591. package/dist/wall/renderer.d.ts.map +1 -1
  592. package/dist/wall/renderer.js +4 -2
  593. package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
  594. package/dist/wall/split-floorplan-layer.js +7 -7
  595. package/dist/wall/split-session.d.ts.map +1 -1
  596. package/dist/wall/split-session.js +7 -1
  597. package/dist/wall/system.d.ts.map +1 -1
  598. package/dist/wall/system.js +36 -4
  599. package/dist/wall/tool.d.ts.map +1 -1
  600. package/dist/wall/tool.js +105 -49
  601. package/dist/wall/treatment-level-data.d.ts +3 -2
  602. package/dist/wall/treatment-level-data.d.ts.map +1 -1
  603. package/dist/wall/treatment-level-data.js +17 -13
  604. package/dist/wall/treatments.d.ts +10 -10
  605. package/dist/wall/treatments.d.ts.map +1 -1
  606. package/dist/wall/treatments.js +67 -54
  607. package/dist/wall/wall-batch-system.d.ts +7 -0
  608. package/dist/wall/wall-batch-system.d.ts.map +1 -1
  609. package/dist/wall/wall-batch-system.js +35 -3
  610. package/dist/wall/wall-batch.d.ts +6 -0
  611. package/dist/wall/wall-batch.d.ts.map +1 -1
  612. package/dist/wall/wall-batch.js +7 -1
  613. package/dist/window/definition.d.ts.map +1 -1
  614. package/dist/window/definition.js +12 -4
  615. package/dist/window/floorplan-move.d.ts.map +1 -1
  616. package/dist/window/floorplan-move.js +3 -1
  617. package/dist/window/floorplan.d.ts.map +1 -1
  618. package/dist/window/floorplan.js +145 -60
  619. package/dist/window/mechanism.d.ts +4 -0
  620. package/dist/window/mechanism.d.ts.map +1 -0
  621. package/dist/window/mechanism.js +20 -0
  622. package/dist/window/move-tool.d.ts.map +1 -1
  623. package/dist/window/move-tool.js +79 -48
  624. package/dist/window/paint.d.ts.map +1 -1
  625. package/dist/window/paint.js +3 -0
  626. package/dist/window/panel.d.ts.map +1 -1
  627. package/dist/window/panel.js +32 -88
  628. package/dist/window/placement.d.ts +23 -0
  629. package/dist/window/placement.d.ts.map +1 -0
  630. package/dist/window/placement.js +66 -0
  631. package/dist/window/preview.d.ts.map +1 -1
  632. package/dist/window/preview.js +2 -0
  633. package/dist/window/renderer.d.ts.map +1 -1
  634. package/dist/window/renderer.js +3 -2
  635. package/dist/window/tool.d.ts.map +1 -1
  636. package/dist/window/tool.js +96 -24
  637. package/dist/window/window-math.d.ts +6 -14
  638. package/dist/window/window-math.d.ts.map +1 -1
  639. package/dist/window/window-math.js +14 -20
  640. package/dist/zone/contextual-dimensions.d.ts.map +1 -1
  641. package/dist/zone/contextual-dimensions.js +6 -28
  642. package/dist/zone/definition.d.ts.map +1 -1
  643. package/dist/zone/definition.js +3 -3
  644. package/dist/zone/floorplan-affordances.d.ts +200 -0
  645. package/dist/zone/floorplan-affordances.d.ts.map +1 -1
  646. package/dist/zone/floorplan.d.ts +1 -1
  647. package/dist/zone/floorplan.d.ts.map +1 -1
  648. package/dist/zone/floorplan.js +93 -53
  649. package/dist/zone/quantities-panel.d.ts.map +1 -1
  650. package/dist/zone/quantities-panel.js +3 -14
  651. package/dist/zone/quick-measurement.d.ts +2 -2
  652. package/dist/zone/quick-measurement.d.ts.map +1 -1
  653. package/dist/zone/quick-measurement.js +6 -5
  654. package/dist/zone/renderer.d.ts +1 -1
  655. package/dist/zone/renderer.d.ts.map +1 -1
  656. package/dist/zone/renderer.js +58 -146
  657. package/dist/zone/room-clear-dimensions.js +3 -3
  658. package/dist/zone/room-documentation.d.ts.map +1 -1
  659. package/dist/zone/room-documentation.js +2 -6
  660. package/package.json +11 -11
  661. package/dist/block/slots.d.ts +0 -4
  662. package/dist/block/slots.d.ts.map +0 -1
  663. package/dist/block/slots.js +0 -17
  664. package/dist/cabinet/slots.d.ts +0 -4
  665. package/dist/cabinet/slots.d.ts.map +0 -1
  666. package/dist/cabinet/slots.js +0 -24
  667. package/dist/ceiling/slots.d.ts +0 -6
  668. package/dist/ceiling/slots.d.ts.map +0 -1
  669. package/dist/ceiling/slots.js +0 -7
  670. package/dist/column/slots.d.ts +0 -9
  671. package/dist/column/slots.d.ts.map +0 -1
  672. package/dist/column/slots.js +0 -19
  673. package/dist/door/slots.d.ts +0 -9
  674. package/dist/door/slots.d.ts.map +0 -1
  675. package/dist/door/slots.js +0 -20
  676. package/dist/elevator/slots.d.ts +0 -8
  677. package/dist/elevator/slots.d.ts.map +0 -1
  678. package/dist/elevator/slots.js +0 -17
  679. package/dist/fence/slots.d.ts +0 -10
  680. package/dist/fence/slots.d.ts.map +0 -1
  681. package/dist/fence/slots.js +0 -23
  682. package/dist/item/__fixtures__/main-floorplan.d.ts +0 -26
  683. package/dist/item/__fixtures__/main-floorplan.d.ts.map +0 -1
  684. package/dist/item/__fixtures__/main-floorplan.js +0 -297
  685. package/dist/lean-to-extension/slots.d.ts +0 -5
  686. package/dist/lean-to-extension/slots.d.ts.map +0 -1
  687. package/dist/lean-to-extension/slots.js +0 -15
  688. package/dist/shelf/slots.d.ts +0 -9
  689. package/dist/shelf/slots.d.ts.map +0 -1
  690. package/dist/shelf/slots.js +0 -30
  691. package/dist/slab/slots.d.ts +0 -10
  692. package/dist/slab/slots.d.ts.map +0 -1
  693. package/dist/slab/slots.js +0 -20
  694. package/dist/stair/floor-stack.d.ts +0 -10
  695. package/dist/stair/floor-stack.d.ts.map +0 -1
  696. package/dist/stair/floor-stack.js +0 -115
  697. package/dist/stair/slots.d.ts +0 -7
  698. package/dist/stair/slots.d.ts.map +0 -1
  699. package/dist/stair/slots.js +0 -13
  700. package/dist/wall/drawing-mode.d.ts +0 -12
  701. package/dist/wall/drawing-mode.d.ts.map +0 -1
  702. package/dist/wall/drawing-mode.js +0 -38
  703. package/dist/wall/slots.d.ts +0 -10
  704. package/dist/wall/slots.d.ts.map +0 -1
  705. package/dist/wall/slots.js +0 -92
  706. package/dist/window/slots.d.ts +0 -5
  707. package/dist/window/slots.d.ts.map +0 -1
  708. package/dist/window/slots.js +0 -11
@@ -23,6 +23,20 @@ function buildRingPatch(node, holeIndex, nextRing, boundaryCommitData) {
23
23
  const nextHoles = (node.holes ?? []).map((hole, i) => i === holeIndex ? nextRing : hole.map(([x, y]) => [x, y]));
24
24
  return { holes: nextHoles };
25
25
  }
26
+ /**
27
+ * Commit a ring edit. A BOUNDARY reshape is the sanctioned conversion of a
28
+ * reconciler-owned slab or ceiling into an authored surface, so it goes
29
+ * through `detachDerivedNode` (which also carries the kind's own
30
+ * `boundaryCommitData`). A HOLE edit only touches authored cut-outs, so it
31
+ * stays an ordinary update and leaves the derivation in place.
32
+ */
33
+ function commitRingPatch(id, holeIndex, patch) {
34
+ const scene = useScene.getState();
35
+ if (holeIndex === undefined)
36
+ scene.detachDerivedNode(id, patch);
37
+ else
38
+ scene.updateNodes([{ id, data: patch }]);
39
+ }
26
40
  function resolveAffordancePlanPoint(options, context) {
27
41
  return options?.resolvePlanPoint?.(context) ?? context.fallbackPoint;
28
42
  }
@@ -60,9 +74,7 @@ export function createPolygonVertexAffordance(kind, options) {
60
74
  });
61
75
  const nextRing = originalRing.map((p, i) => i === vertexIndex ? [snapped[0], snapped[1]] : p);
62
76
  const patch = buildRingPatch(node, holeIndex, nextRing, options?.boundaryCommitData);
63
- useScene
64
- .getState()
65
- .updateNodes([{ id: node.id, data: patch }]);
77
+ commitRingPatch(node.id, holeIndex, patch);
66
78
  },
67
79
  canCommit() {
68
80
  const final = useScene.getState().nodes[node.id];
@@ -118,9 +130,7 @@ export function createPolygonAddVertexAffordance(kind, options) {
118
130
  // Apply the insert immediately so the user sees the new vertex
119
131
  // before they even move.
120
132
  const initialPatch = buildRingPatch(node, holeIndex, initialRing, options?.boundaryCommitData);
121
- useScene
122
- .getState()
123
- .updateNodes([{ id: node.id, data: initialPatch }]);
133
+ commitRingPatch(node.id, holeIndex, initialPatch);
124
134
  return {
125
135
  affectedIds: [node.id],
126
136
  apply({ planPoint, modifiers }) {
@@ -141,9 +151,7 @@ export function createPolygonAddVertexAffordance(kind, options) {
141
151
  });
142
152
  const nextRing = initialRing.map((p, i) => i === newVertexIndex ? [snapped[0], snapped[1]] : p);
143
153
  const patch = buildRingPatch(node, holeIndex, nextRing, options?.boundaryCommitData);
144
- useScene
145
- .getState()
146
- .updateNodes([{ id: node.id, data: patch }]);
154
+ commitRingPatch(node.id, holeIndex, patch);
147
155
  },
148
156
  canCommit() {
149
157
  const final = useScene.getState().nodes[node.id];
@@ -189,9 +197,7 @@ export function createPolygonDeleteVertexAffordance(kind, options) {
189
197
  }
190
198
  const nextRing = ring.filter((_, index) => index !== vertexIndex);
191
199
  const patch = buildRingPatch(current, holeIndex, nextRing, options?.boundaryCommitData);
192
- useScene
193
- .getState()
194
- .updateNodes([{ id: node.id, data: patch }]);
200
+ commitRingPatch(node.id, holeIndex, patch);
195
201
  },
196
202
  };
197
203
  },
@@ -308,9 +314,7 @@ export function createPolygonMoveEdgeAffordance(kind, options) {
308
314
  return [p[0], p[1]];
309
315
  });
310
316
  const patch = buildRingPatch(node, holeIndex, nextRing, options?.boundaryCommitData);
311
- useScene
312
- .getState()
313
- .updateNodes([{ id: node.id, data: patch }]);
317
+ commitRingPatch(node.id, holeIndex, patch);
314
318
  },
315
319
  canCommit() {
316
320
  const final = useScene.getState().nodes[node.id];
@@ -1 +1 @@
1
- {"version":3,"file":"run-hangers.d.ts","sourceRoot":"","sources":["../../src/shared/run-hangers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAKpB,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,eAAe,EACf,KAAK,EAOL,OAAO,EACR,MAAM,OAAO,CAAA;AAId,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,eAAe,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA;AAEnG,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAqBlF;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAChC,aAAa,EAAE,CA4EjB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAEhG;AA0CD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,GAAG,eAAe,CAQ1E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CA+B7F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,KAAK,CAsC/E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAqC/F"}
1
+ {"version":3,"file":"run-hangers.d.ts","sourceRoot":"","sources":["../../src/shared/run-hangers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAMpB,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,eAAe,EACf,KAAK,EAOL,OAAO,EACR,MAAM,OAAO,CAAA;AAId,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,eAAe,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA;AAEnG,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAqBlF;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAChC,aAAa,EAAE,CA6EjB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAEhG;AA0CD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,GAAG,eAAe,CAQ1E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CA+B7F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,KAAK,CAsC/E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAqC/F"}
@@ -1,4 +1,4 @@
1
- import { getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes, getWallThickness, pointInPolygon, resolveCeilingHeight, } from '@pascal-app/core';
1
+ import { getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes, getWallLocalFaceZ, getWallThickness, pointInPolygon, resolveCeilingHeight, } from '@pascal-app/core';
2
2
  import { BoxGeometry, CylinderGeometry, ExtrudeGeometry, Group, Matrix4, Mesh, MeshStandardMaterial, Path, Shape, Vector2, Vector3, } from 'three';
3
3
  import { rectSectionAxes } from '../duct-segment/geometry';
4
4
  import { hasWallChildOverlap, resolveWallAttachmentAtPlanPoint } from './wall-attach-target';
@@ -30,7 +30,7 @@ export function hangerSceneNodes(ctx) {
30
30
  return nodes;
31
31
  }
32
32
  export function planRunHangerSlots(run, nodes) {
33
- if (!run.autoHangers || !run.parentId)
33
+ if (!(run.autoHangers && run.parentId))
34
34
  return [];
35
35
  const spacing = run.hangerSpacing ?? 1.5;
36
36
  const reach = run.hangerMaxReach ?? 2;
@@ -79,8 +79,9 @@ export function planRunHangerSlots(run, nodes) {
79
79
  continue;
80
80
  const frame = getWallCurveFrameAt(host, hit.localX / hit.wallLength);
81
81
  const side = hit.perpDistance >= 0 ? 1 : -1;
82
- anchor = new Vector3(frame.point.x - (hit.dirY * side * thickness) / 2, center.y, frame.point.y + (hit.dirX * side * thickness) / 2);
83
- if (Math.abs(hit.perpDistance) < thickness / 2 - 0.001)
82
+ const faceOffset = getWallLocalFaceZ(host, side > 0 ? 'a' : 'b');
83
+ anchor = new Vector3(frame.point.x - hit.dirY * faceOffset, center.y, frame.point.y + hit.dirX * faceOffset);
84
+ if (Math.abs(hit.perpDistance) < faceOffset * side - 0.001)
84
85
  continue;
85
86
  }
86
87
  else
@@ -0,0 +1,18 @@
1
+ import type { ColumnNode, DoorNode, HandleDescriptor, WindowNode } from '@pascal-app/core';
2
+ type Opening = WindowNode | DoorNode;
3
+ /**
4
+ * A window or door built from a script resizes only through the params its
5
+ * script declares: a `width` param keeps the side arrows, a `height` param
6
+ * the top arrow (the bottom stays on its sill or threshold), and nothing
7
+ * else shows. The drag previews the box; release rebuilds the script with
8
+ * the param moved by the dragged amount (trim around the opening included).
9
+ */
10
+ export declare function scriptedOpeningHandles<N extends Opening>(node: N, width: (side: 'left' | 'right') => HandleDescriptor<N>, height: () => HandleDescriptor<N>): HandleDescriptor<N>[];
11
+ /**
12
+ * A scripted window, door or column resized by a handle: each size param its
13
+ * script declares moves by the dragged amount, within the param's range, and
14
+ * the script reruns once.
15
+ */
16
+ export declare function rebuildScriptedSize<N extends Opening | ColumnNode>(initial: N, patch: Partial<N>, position?: N['position']): void;
17
+ export {};
18
+ //# sourceMappingURL=scripted-opening-handles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripted-opening-handles.d.ts","sourceRoot":"","sources":["../../src/shared/scripted-opening-handles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,gBAAgB,EAEhB,UAAU,EACX,MAAM,kBAAkB,CAAA;AAGzB,KAAK,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEpC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,OAAO,EACtD,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,EACtD,MAAM,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAChC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAQvB;AAiBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,OAAO,GAAG,UAAU,EAChE,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EACjB,QAAQ,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GACvB,IAAI,CAiBN"}
@@ -0,0 +1,53 @@
1
+ import { rebuildAuthoredObject } from '@pascal-app/editor';
2
+ /**
3
+ * A window or door built from a script resizes only through the params its
4
+ * script declares: a `width` param keeps the side arrows, a `height` param
5
+ * the top arrow (the bottom stays on its sill or threshold), and nothing
6
+ * else shows. The drag previews the box; release rebuilds the script with
7
+ * the param moved by the dragged amount (trim around the opening included).
8
+ */
9
+ export function scriptedOpeningHandles(node, width, height) {
10
+ const declared = new Set(node.source?.manifest.params.map((spec) => spec.id));
11
+ const handles = [];
12
+ if (declared.has('width')) {
13
+ handles.push(byParam(width('left'), 'width'), byParam(width('right'), 'width'));
14
+ }
15
+ if (declared.has('height'))
16
+ handles.push(byParam(height(), 'height'));
17
+ return handles;
18
+ }
19
+ function byParam(handle, param) {
20
+ const linear = handle;
21
+ return {
22
+ ...linear,
23
+ commit: (initial, patch) =>
24
+ // A side arrow keeps the opposite edge: the rebuild takes the moved centre.
25
+ rebuildScriptedSize(initial, patch, param === 'width' ? patch.position : undefined),
26
+ };
27
+ }
28
+ const SIZE_PARAMS = new Set(['width', 'height', 'depth']);
29
+ /**
30
+ * A scripted window, door or column resized by a handle: each size param its
31
+ * script declares moves by the dragged amount, within the param's range, and
32
+ * the script reruns once.
33
+ */
34
+ export function rebuildScriptedSize(initial, patch, position) {
35
+ const source = initial.source;
36
+ if (!source)
37
+ return;
38
+ const params = { ...source.params };
39
+ let moved = false;
40
+ for (const spec of source.manifest.params) {
41
+ const next = patch[spec.id];
42
+ if (!SIZE_PARAMS.has(spec.id) || typeof next !== 'number')
43
+ continue;
44
+ const before = initial[spec.id];
45
+ const current = Number(source.params[spec.id] ?? spec.default ?? before);
46
+ params[spec.id] = clamp(current + (next - before), spec.min, spec.max);
47
+ moved = true;
48
+ }
49
+ if (!moved)
50
+ return;
51
+ rebuildAuthoredObject(initial.id, params, position).catch((reason) => console.error('[scripted] resize failed', reason));
52
+ }
53
+ const clamp = (value, min, max) => Math.min(max ?? Number.POSITIVE_INFINITY, Math.max(min ?? Number.NEGATIVE_INFINITY, value));
@@ -0,0 +1,25 @@
1
+ import { type ColumnNode, type DoorNode, type WindowNode } from '@pascal-app/core';
2
+ /**
3
+ * A window, door or column built from a script, rendered exactly as an authored
4
+ * item: the same artifact, paint slots, clips and lights. The artifact's origin
5
+ * is its bottom centre: an opening's mesh is centred on the opening, a column's
6
+ * sits on its support point.
7
+ */
8
+ export declare function ScriptedOpeningModel({ node }: {
9
+ node: WindowNode | DoorNode | ColumnNode;
10
+ }): import("react").JSX.Element;
11
+ /** Open and Close for a window or door built from a script: its `open` clip, through the item toggles. */
12
+ export declare const scriptedOpening: {
13
+ has: (node: {
14
+ source?: WindowNode["source"];
15
+ }) => boolean;
16
+ isOn: (node: {
17
+ id: string;
18
+ source?: WindowNode["source"];
19
+ }) => boolean;
20
+ set: (node: {
21
+ id: string;
22
+ source?: WindowNode["source"];
23
+ }, on: boolean) => void;
24
+ };
25
+ //# sourceMappingURL=scripted-opening.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripted-opening.d.ts","sourceRoot":"","sources":["../../src/shared/scripted-opening.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,QAAQ,EAQb,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAMzB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAA;CAAE,+BA8C1F;AAWD,0GAA0G;AAC1G,eAAO,MAAM,eAAe;gBACd;QAAE,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE;iBAChC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE;gBAK9C;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;KAAE,MAAM,OAAO;CAKvE,CAAA"}
@@ -0,0 +1,72 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { artifactUrl, scriptedOrigin, scriptedSize, scriptInteractive, useInteractive, useScene, } from '@pascal-app/core';
4
+ import { SCRIPTED_MODEL_FLAG } from '@pascal-app/viewer';
5
+ import { useCallback, useMemo, useRef } from 'react';
6
+ import { ScriptedModel } from '../item/renderer';
7
+ /**
8
+ * A window, door or column built from a script, rendered exactly as an authored
9
+ * item: the same artifact, paint slots, clips and lights. The artifact's origin
10
+ * is its bottom centre: an opening's mesh is centred on the opening, a column's
11
+ * sits on its support point.
12
+ */
13
+ export function ScriptedOpeningModel({ node }) {
14
+ const source = node.source;
15
+ const ref = useRef(null);
16
+ const modelData = useMemo(() => ({ [SCRIPTED_MODEL_FLAG]: true }), []);
17
+ const view = useMemo(() => {
18
+ const [width, height, depth] = scriptedSize(source.manifest);
19
+ return {
20
+ id: node.id,
21
+ type: 'item',
22
+ parentId: node.parentId,
23
+ metadata: node.metadata,
24
+ slots: node.slots,
25
+ source,
26
+ scale: [1, 1, 1],
27
+ asset: {
28
+ src: artifactUrl(source.artifact),
29
+ dimensions: [width, height, depth],
30
+ offset: [0, 0, 0],
31
+ rotation: [0, 0, 0],
32
+ scale: [1, 1, 1],
33
+ interactive: scriptInteractive(source.manifest, scriptedOrigin({ type: node.type, source })),
34
+ },
35
+ };
36
+ }, [node.id, node.type, node.parentId, node.metadata, node.slots, source]);
37
+ const setSettled = useCallback((settled) => {
38
+ if (ref.current) {
39
+ ref.current.userData.itemModelSettled = settled;
40
+ // A column has no system of its own: its renderer and batch read the flag on the node's group.
41
+ if (node.type === 'column' && ref.current.parent)
42
+ ref.current.parent.userData.itemModelSettled = settled;
43
+ }
44
+ // The opening's system holds its dirty mark until the artifact has loaded.
45
+ if (settled)
46
+ useScene.getState().markDirty(node.id);
47
+ }, [node.id, node.type]);
48
+ const [, height] = scriptedSize(source.manifest);
49
+ return (_jsx("group", { "position-y": node.type === 'column' ? 0 : -height / 2, ref: ref, userData: modelData, children: _jsx(ScriptedModel, { setSettled: setSettled, view: view }) }));
50
+ }
51
+ /** The toggle that plays a scripted opening's `open` clip, as the item's Open control. */
52
+ function openControl(node) {
53
+ if (!node.source)
54
+ return undefined;
55
+ const effect = scriptInteractive(node.source.manifest)?.effects.find((candidate) => candidate.kind === 'animation' && candidate.mode === 'open-close');
56
+ return effect?.kind === 'animation' ? effect.control : undefined;
57
+ }
58
+ /** Open and Close for a window or door built from a script: its `open` clip, through the item toggles. */
59
+ export const scriptedOpening = {
60
+ has: (node) => openControl(node) !== undefined,
61
+ isOn: (node) => {
62
+ const control = openControl(node);
63
+ if (control === undefined)
64
+ return false;
65
+ return Boolean(useInteractive.getState().items[node.id]?.controlValues[control]);
66
+ },
67
+ set: (node, on) => {
68
+ const control = openControl(node);
69
+ if (control !== undefined)
70
+ useInteractive.getState().setControlValue(node.id, control, on);
71
+ },
72
+ };
@@ -8,14 +8,14 @@ export type SlotPaintMaterialResolution = {
8
8
  };
9
9
  export declare function resolveSlotPaintMaterialRef(materials: Record<SceneMaterialId, SceneMaterial>, material: MaterialSchema | undefined, materialPreset: string | undefined): SlotPaintMaterialResolution | null;
10
10
  /** Preview material for a slot paint — mirrors the commit's resolution. */
11
- export declare function buildSlotPreviewMaterial(material: MaterialSchema | undefined, materialPreset: string | undefined): Material | null;
11
+ export declare function buildSlotPreviewMaterial(material: MaterialSchema | undefined, materialPreset: string | undefined, materials?: Record<SceneMaterialId, SceneMaterial>): Material | null;
12
12
  /**
13
13
  * Preview for kinds whose meshes are produced by `def.geometry` and tagged
14
14
  * with `userData.slotId` (+ `__fromGeometry`). Swaps every builder mesh whose
15
15
  * slot matches `role`, leaving hosted-child meshes (which can carry a colliding
16
16
  * `userData.slotId` from their own GLB) untouched.
17
17
  */
18
- export declare function previewGeometrySlot(args: PaintPreviewArgs): (() => void) | null;
18
+ export declare function previewGeometrySlot(args: PaintPreviewArgs, matches?: (meshRole: string) => boolean): (() => void) | null;
19
19
  /**
20
20
  * Preview for kinds whose meshes are built by a viewer system (window, door)
21
21
  * and tagged with `userData.slotId` — no `__fromGeometry` marker and no hosted
@@ -48,6 +48,18 @@ export type SlotPaintConfig = {
48
48
  } | null;
49
49
  /** Opt into the painter's `room` application scope (walls, slabs). */
50
50
  roomScope?: boolean;
51
+ /**
52
+ * What `role` shows once erased, for the eraser's hover preview (the eraser
53
+ * itself writes no finish). Defaults to the slot's declared `default`; null
54
+ * leaves the preview to `applyPreview`.
55
+ */
56
+ erasedLook?: (args: PaintPreviewArgs) => PaintLook | null;
57
+ };
58
+ export type PaintLook = {
59
+ material?: MaterialSchema;
60
+ materialPreset?: string;
51
61
  };
62
+ /** A slot's declared default, as a look: what an unpainted slot draws. */
63
+ export declare function declaredSlotLook(node: AnyNode, role: string): PaintLook | null;
52
64
  export declare function createSlotPaintCapability(config: SlotPaintConfig): PaintCapability;
53
65
  //# sourceMappingURL=slot-paint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot-paint.d.ts","sourceRoot":"","sources":["../../src/shared/slot-paint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,KAAK,eAAe,EAIrB,MAAM,kBAAkB,CAAA;AAQzB,OAAO,EAAE,KAAK,QAAQ,EAAuC,MAAM,OAAO,CAAA;AAsB1E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzF;AA4DD,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,gBAAgB,EAAE,aAAa,GAAG,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,EACjD,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,2BAA2B,GAAG,IAAI,CAmBpC;AA2CD,2EAA2E;AAC3E,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,QAAQ,GAAG,IAAI,CAYjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CA4B/E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CA0BjF;AAMD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAW5E;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,2EAA2E;IAC3E,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,GAAG,IAAI,CAAA;IACtD,iEAAiE;IACjE,YAAY,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7D;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,KACT;QAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,IAAI,CAAA;IACxF,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAmDlF"}
1
+ {"version":3,"file":"slot-paint.d.ts","sourceRoot":"","sources":["../../src/shared/slot-paint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,KAAK,eAAe,EAMrB,MAAM,kBAAkB,CAAA;AAQzB,OAAO,EAAE,KAAK,QAAQ,EAAuC,MAAM,OAAO,CAAA;AAuB1E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzF;AA4DD,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,gBAAgB,EAAE,aAAa,GAAG,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,EACjD,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,2BAA2B,GAAG,IAAI,CAmBpC;AA2CD,2EAA2E;AAC3E,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,SAAS,GAAE,MAAM,CAAC,eAAe,EAAE,aAAa,CAAiC,GAChF,QAAQ,GAAG,IAAI,CAYjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAA8C,GAC5E,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CA6BrB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAsBjF;AAMD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAW5E;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,2EAA2E;IAC3E,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,GAAG,IAAI,CAAA;IACtD,iEAAiE;IACjE,YAAY,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7D;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,KACT;QAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,IAAI,CAAA;IACxF,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,SAAS,GAAG,IAAI,CAAA;CAC1D,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9E,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM9E;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAoDlF"}
@@ -1,6 +1,7 @@
1
- import { generateSceneMaterialId, parseMaterialRef, sceneRegistry, toSceneMaterialRef, useScene, } from '@pascal-app/core';
1
+ import { generateSceneMaterialId, nodeRegistry, parseMaterialRef, sceneRegistry, slotDefaultPaintMaterial, slotPaintMaterial, toSceneMaterialRef, useScene, } from '@pascal-app/core';
2
2
  import { createMaterial, createMaterialFromPresetRef, registerMaterialCacheCleanup, setSurfaceRaycastLayers, useViewer, } from '@pascal-app/viewer';
3
3
  import { Raycaster } from 'three';
4
+ import { swapPreviewMaterial } from './swap-preview-material';
4
5
  /**
5
6
  * Shared paint capability for procedural kinds on the unified slot model
6
7
  * (`node.slots: Record<slotId, MaterialRef>` + the shared scene-material
@@ -152,12 +153,12 @@ function commitSlotPaint(node, role, material, materialPreset) {
152
153
  state.updateNode(nodeId, { slots: nextSlots });
153
154
  }
154
155
  /** Preview material for a slot paint — mirrors the commit's resolution. */
155
- export function buildSlotPreviewMaterial(material, materialPreset) {
156
+ export function buildSlotPreviewMaterial(material, materialPreset, materials = useScene.getState().materials) {
156
157
  const shading = useViewer.getState().shading;
157
158
  if (materialPreset) {
158
159
  const parsed = parseMaterialRef(materialPreset);
159
160
  if (parsed?.kind === 'scene') {
160
- const sceneMaterial = useScene.getState().materials[parsed.id];
161
+ const sceneMaterial = materials[parsed.id];
161
162
  return sceneMaterial ? createMaterial(sceneMaterial.material, shading) : null;
162
163
  }
163
164
  return createMaterialFromPresetRef(materialPreset, shading);
@@ -172,8 +173,8 @@ export function buildSlotPreviewMaterial(material, materialPreset) {
172
173
  * slot matches `role`, leaving hosted-child meshes (which can carry a colliding
173
174
  * `userData.slotId` from their own GLB) untouched.
174
175
  */
175
- export function previewGeometrySlot(args) {
176
- const { role, root, material, materialPreset } = args;
176
+ export function previewGeometrySlot(args, matches = (meshRole) => meshRole === args.role) {
177
+ const { root, material, materialPreset } = args;
177
178
  const preview = buildSlotPreviewMaterial(material, materialPreset);
178
179
  if (!preview)
179
180
  return () => { };
@@ -186,13 +187,10 @@ export function previewGeometrySlot(args) {
186
187
  const userData = mesh.userData;
187
188
  if (userData.__fromGeometry !== true)
188
189
  return;
189
- if (userData.slotId !== role)
190
+ const meshRole = userData.paintRole ?? userData.slotId;
191
+ if (!(meshRole && matches(meshRole)))
190
192
  return;
191
- const previous = mesh.material;
192
- mesh.material = preview;
193
- restores.push(() => {
194
- mesh.material = previous;
195
- });
193
+ restores.push(swapPreviewMaterial(mesh, preview));
196
194
  });
197
195
  if (restores.length === 0)
198
196
  return null;
@@ -223,11 +221,7 @@ export function previewSlotByUserData(args) {
223
221
  return;
224
222
  if (mesh.userData.slotId !== role)
225
223
  return;
226
- const previous = mesh.material;
227
- mesh.material = preview;
228
- restores.push(() => {
229
- mesh.material = previous;
230
- });
224
+ restores.push(swapPreviewMaterial(mesh, preview));
231
225
  });
232
226
  if (restores.length === 0)
233
227
  return null;
@@ -266,6 +260,14 @@ export function resolveSlotByReRaycast(args) {
266
260
  }
267
261
  return null;
268
262
  }
263
+ /** A slot's declared default, as a look: what an unpainted slot draws. */
264
+ export function declaredSlotLook(node, role) {
265
+ const declared = nodeRegistry
266
+ .get(node.type)
267
+ ?.capabilities?.slots?.(node)
268
+ .find((slot) => slot.slotId === role);
269
+ return slotDefaultPaintMaterial(declared?.default);
270
+ }
269
271
  export function createSlotPaintCapability(config) {
270
272
  return {
271
273
  materialTarget: config.materialTarget,
@@ -284,8 +286,15 @@ export function createSlotPaintCapability(config) {
284
286
  // Release before swapping materials, including each room/all-matching target.
285
287
  const end = beginSlotPaintPreview(args.node.id);
286
288
  let restore;
289
+ // The eraser previews what the surface looks like once erased.
290
+ const erasing = args.material === undefined && args.materialPreset === undefined;
291
+ const look = erasing
292
+ ? config.erasedLook
293
+ ? config.erasedLook(args)
294
+ : declaredSlotLook(args.node, args.role)
295
+ : null;
287
296
  try {
288
- restore = config.applyPreview(args);
297
+ restore = config.applyPreview(look ? { ...args, ...look } : args);
289
298
  }
290
299
  catch (error) {
291
300
  end();
@@ -312,17 +321,8 @@ export function createSlotPaintCapability(config) {
312
321
  };
313
322
  return Object.assign(() => finish(false), { commit: () => finish(true) });
314
323
  },
315
- getEffectiveMaterial: ({ node, role }) => {
316
- const ref = node.slots?.[role];
317
- const parsed = parseMaterialRef(ref);
318
- if (parsed) {
319
- if (parsed.kind === 'library')
320
- return { material: undefined, materialPreset: ref };
321
- const sceneMaterial = useScene.getState().materials[parsed.id];
322
- if (sceneMaterial)
323
- return { material: sceneMaterial.material, materialPreset: undefined };
324
- }
325
- return config.legacyEffective?.(node, role) ?? null;
326
- },
324
+ getEffectiveMaterial: ({ node, role, materials = {} }) => slotPaintMaterial(node.slots?.[role], materials) ??
325
+ config.legacyEffective?.(node, role) ??
326
+ null,
327
327
  };
328
328
  }
@@ -1 +1 @@
1
- {"version":3,"file":"surface-paint.d.ts","sourceRoot":"","sources":["../../src/shared/surface-paint.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,4CAwBjC,CAAA"}
1
+ {"version":3,"file":"surface-paint.d.ts","sourceRoot":"","sources":["../../src/shared/surface-paint.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,4CAoBjC,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { buildSlotPreviewMaterial, createSlotPaintCapability } from './slot-paint';
2
+ import { swapPreviewMaterial } from './swap-preview-material';
2
3
  export const surfacePaintCapability = createSlotPaintCapability({
3
4
  resolveRole: () => 'surface',
4
5
  applyPreview: ({ material, materialPreset, root }) => {
@@ -10,11 +11,7 @@ export const surfacePaintCapability = createSlotPaintCapability({
10
11
  const mesh = object;
11
12
  if (!mesh.isMesh)
12
13
  return;
13
- const previous = mesh.material;
14
- mesh.material = preview;
15
- restores.push(() => {
16
- mesh.material = previous;
17
- });
14
+ restores.push(swapPreviewMaterial(mesh, preview));
18
15
  });
19
16
  if (restores.length === 0)
20
17
  return null;
@@ -0,0 +1,11 @@
1
+ import type { Material, Mesh } from 'three';
2
+ /**
3
+ * Shows a paint preview by giving `mesh` another material (or material
4
+ * array), and returns the undo. The undo puts the original back only while the
5
+ * mesh still wears the preview: a commit or rebuild that gave it new materials
6
+ * meanwhile (a new finish adds a palette entry and a geometry group) keeps
7
+ * them — restoring the older, shorter array would leave a group with no
8
+ * material, which the next raycast trips over.
9
+ */
10
+ export declare function swapPreviewMaterial(mesh: Mesh, preview: Material | Material[]): () => void;
11
+ //# sourceMappingURL=swap-preview-material.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap-preview-material.d.ts","sourceRoot":"","sources":["../../src/shared/swap-preview-material.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAE3C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,MAAM,IAAI,CAM1F"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shows a paint preview by giving `mesh` another material (or material
3
+ * array), and returns the undo. The undo puts the original back only while the
4
+ * mesh still wears the preview: a commit or rebuild that gave it new materials
5
+ * meanwhile (a new finish adds a palette entry and a geometry group) keeps
6
+ * them — restoring the older, shorter array would leave a group with no
7
+ * material, which the next raycast trips over.
8
+ */
9
+ export function swapPreviewMaterial(mesh, preview) {
10
+ const previous = mesh.material;
11
+ mesh.material = preview;
12
+ return () => {
13
+ if (mesh.material === preview)
14
+ mesh.material = previous;
15
+ };
16
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"system-checks.d.ts","sourceRoot":"","sources":["../../src/shared/system-checks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUf,MAAM,kBAAkB,CAAA;AAKzB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B,CAAA;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,aAAa,EAAE,CAmI3F"}
1
+ {"version":3,"file":"system-checks.d.ts","sourceRoot":"","sources":["../../src/shared/system-checks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUf,MAAM,kBAAkB,CAAA;AAKzB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B,CAAA;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,aAAa,EAAE,CAqI3F"}
@@ -1,4 +1,4 @@
1
- import { buildPortComponents, collectSystemPorts, distributionPointToWorld, getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes, getWallThickness, nodeRegistry, validateDwv, } from '@pascal-app/core';
1
+ import { buildPortComponents, collectSystemPorts, distributionPointToWorld, getWallBaseElevationForNodes, getWallCurveFrameAt, getWallEffectiveHeightForNodes, getWallFaceOffsets, nodeRegistry, validateDwv, } from '@pascal-app/core';
2
2
  import { Box3, Ray, Vector3 } from 'three';
3
3
  import { connectionCompatibility } from './connection-compatibility';
4
4
  import { planRunHangerSlots } from './run-hangers';
@@ -99,7 +99,9 @@ export function checkDistributionSystems(nodes) {
99
99
  const frame = getWallCurveFrameAt(wall, i / 16);
100
100
  points.push(world(wall, [frame.point.x, base, frame.point.y]), world(wall, [frame.point.x, top, frame.point.y]));
101
101
  }
102
- const box = new Box3().setFromPoints(points).expandByScalar(getWallThickness(wall) / 2);
102
+ const box = new Box3()
103
+ .setFromPoints(points)
104
+ .expandByScalar(Math.max(getWallFaceOffsets(wall).a, -getWallFaceOffsets(wall).b));
103
105
  for (const segment of segments) {
104
106
  if (segment.run.wallAttachment?.wallId === wall.id)
105
107
  continue;
@@ -108,7 +110,7 @@ export function checkDistributionSystems(nodes) {
108
110
  }
109
111
  }
110
112
  for (const run of runs) {
111
- const missing = planRunHangerSlots(run, nodes).filter((slot) => !slot.skipped && !slot.hanger);
113
+ const missing = planRunHangerSlots(run, nodes).filter((slot) => !(slot.skipped || slot.hanger));
112
114
  if (missing.length)
113
115
  findings.push({
114
116
  code: 'unsupported-hanger',
@@ -87,17 +87,10 @@ export declare function snapLocalXToNeighbors(args: {
87
87
  threshold?: number;
88
88
  }): number | null;
89
89
  /**
90
- * Does a wall-hosted opening of `width × height` centred at `(clampedX,
91
- * clampedY)` (wall-local) overlap any OTHER child of `wallId` (door / window /
92
- * wall-mounted item)? AABB test in the wall's local face plane. `ignoreId`
93
- * excludes the moving node itself. Returns `true` (blocked) if the wall is
94
- * gone.
95
- *
96
- * Single source of truth for door + window placement collision — door-math and
97
- * window-math had byte-identical copies of this. Y conventions differ per kind
98
- * (items store bottom Y; doors/windows store centre Y), handled inline.
90
+ * Whether a wall-hosted opening would overlap another child of its wall. The rule lives in
91
+ * core, shared with every agent surface (`planWallOpening`); re-exported for the tools here.
99
92
  */
100
- export declare function hasWallChildOverlap(wallId: string, nodes: Readonly<Record<string, AnyNode>>, clampedX: number, clampedY: number, width: number, height: number, ignoreId?: string): boolean;
93
+ export { hasWallChildOverlap } from '@pascal-app/core/building';
101
94
  /** Placement state for a wall-hosted opening — the SINGLE decision the preview
102
95
  * tint and the commit gate both consume so they can never disagree. */
103
96
  export type OpeningPlacement = {
@@ -1 +1 @@
1
- {"version":3,"file":"wall-attach-target.d.ts","sourceRoot":"","sources":["../../src/shared/wall-attach-target.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUd,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IACtB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,GACT,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CA+BhB;AAWD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG;IACvD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAyCD,8EAA8E;AAC9E,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,SAAuB,GACjC,kBAAkB,GAAG,IAAI,CA0C3B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CAehB;AAwBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,MAAM,GAAG,IAAI,CAiChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAkDT;AAED;wEACwE;AACxE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4EAA4E;IAC5E,QAAQ,EAAE,OAAO,CAAA;IACjB;+BAC2B;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,sDAAsD;IACtD,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB,GAAG,gBAAgB,CAOnB"}
1
+ {"version":3,"file":"wall-attach-target.d.ts","sourceRoot":"","sources":["../../src/shared/wall-attach-target.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAUd,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IACtB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,GACT,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CA+BhB;AAWD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG;IACvD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAyCD,8EAA8E;AAC9E,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,SAAuB,GACjC,kBAAkB,GAAG,IAAI,CA0C3B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,GAAG,IAAI,CAehB;AAwBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,MAAM,GAAG,IAAI,CAiChB;AAED;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D;wEACwE;AACxE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4EAA4E;IAC5E,QAAQ,EAAE,OAAO,CAAA;IACjB;+BAC2B;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,sDAAsD;IACtD,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB,GAAG,gBAAgB,CAOnB"}