@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
@@ -1,16 +1,14 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { resolveAutoZonePolygon, useLiveNodeOverrides, useRegistry, useScene, } from '@pascal-app/core';
4
- import { useNodeEvents, useViewer, ZONE_LAYER } from '@pascal-app/viewer';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { polygonInteriorPoint, useLiveNodeOverrides, useRegistry, useScene, } from '@pascal-app/core';
4
+ import { createZoneShape, createZoneWallGeometry, useNodeEvents, useViewer, ZONE_LAYER, } from '@pascal-app/viewer';
5
5
  import { Html } from '@react-three/drei';
6
- import { useMemo, useRef } from 'react';
7
- import { BufferGeometry, Color, DoubleSide, Float32BufferAttribute, Shape } from 'three';
6
+ import { useEffect, useMemo, useRef } from 'react';
7
+ import { Color, DoubleSide } from 'three';
8
8
  import { color, float, uniform, uv } from 'three/tsl';
9
9
  import { MeshBasicNodeMaterial } from 'three/webgpu';
10
- import { useShallow } from 'zustand/react/shallow';
11
10
  import { owningUnitForZone } from './unit-membership';
12
11
  const Y_OFFSET = 0.01;
13
- const WALL_HEIGHT = 2.3;
14
12
  /**
15
13
  * Creates a gradient material for zone walls using TSL
16
14
  * Gradient goes from zone color at bottom to transparent at top
@@ -50,117 +48,28 @@ const createFloorMaterial = (zoneColor) => {
50
48
  userData: { uOpacity: opacity },
51
49
  });
52
50
  };
53
- /**
54
- * Creates wall geometry for zone borders
55
- * Each wall segment is a vertical quad from one polygon point to the next
56
- */
57
- const createWallGeometry = (polygon) => {
58
- const geometry = new BufferGeometry();
59
- if (polygon.length < 2)
60
- return geometry;
61
- const positions = [];
62
- const uvs = [];
63
- const indices = [];
64
- // Create a wall segment for each edge of the polygon
65
- for (let i = 0; i < polygon.length; i++) {
66
- const current = polygon[i];
67
- const next = polygon[(i + 1) % polygon.length];
68
- const baseIndex = i * 4;
69
- // Four vertices per wall segment (two triangles forming a quad)
70
- // Bottom-left
71
- positions.push(current[0], Y_OFFSET, current[1]);
72
- uvs.push(0, 0);
73
- // Bottom-right
74
- positions.push(next[0], Y_OFFSET, next[1]);
75
- uvs.push(1, 0);
76
- // Top-right
77
- positions.push(next[0], Y_OFFSET + WALL_HEIGHT, next[1]);
78
- uvs.push(1, 1);
79
- // Top-left
80
- positions.push(current[0], Y_OFFSET + WALL_HEIGHT, current[1]);
81
- uvs.push(0, 1);
82
- // Two triangles for the quad
83
- indices.push(baseIndex, baseIndex + 1, baseIndex + 2, baseIndex, baseIndex + 2, baseIndex + 3);
84
- }
85
- geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
86
- geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
87
- geometry.setIndex(indices);
88
- geometry.computeVertexNormals();
89
- return geometry;
90
- };
91
51
  export const ZoneRenderer = ({ node }) => {
92
52
  const ref = useRef(null);
93
53
  useRegistry(node.id, 'zone', ref);
94
- // When zones are toggled off (editor outside the zones layer) the visuals
95
- // unmount entirely — a drei <Html> keeps costing per-frame matrix work and
96
- // live DOM even at opacity 0. The registered group stays so the zone keeps
97
- // its scene identity (selection registry, GLB export polygon stamping).
98
- const showZones = useViewer((s) => s.showZones);
54
+ const showZones = useViewer((state) => state.showZones);
55
+ return (_jsx("group", { ref: ref, visible: node.visible !== false, children: showZones ? _jsx(ZoneVisuals, { node: node }) : null }));
56
+ };
57
+ function ZoneVisuals({ node }) {
99
58
  // Group-transform drags publish a translated/rotated polygon to
100
59
  // `useLiveNodeOverrides`; merge it so the zone previews live instead of
101
60
  // snapping only on commit (slab/ceiling get this via their systems'
102
61
  // `getEffectiveNode`). Per-node subscription — unrelated overrides don't
103
62
  // re-render this zone.
104
- const livePolygon = useLiveNodeOverrides((s) => s.overrides.get(node.id)?.polygon);
105
- const dependencyIds = node.autoFromWalls ? node.boundaryWallIds : [];
106
- const dependencyNodes = useScene(useShallow((state) => dependencyIds.map((id) => state.nodes[id])));
107
- const dependencyOverrides = useLiveNodeOverrides(useShallow((state) => dependencyIds.map((id) => state.overrides.get(id))));
108
- const proceduralPolygon = useMemo(() => resolveAutoZonePolygon(node, (id) => {
109
- const index = dependencyIds.indexOf(id);
110
- const dependency = dependencyNodes[index];
111
- if (!dependency)
112
- return undefined;
113
- const override = dependencyOverrides[index];
114
- return override ? { ...dependency, ...override } : dependency;
115
- }), [dependencyIds, dependencyNodes, dependencyOverrides, node]);
116
- const polygon = livePolygon ?? proceduralPolygon;
63
+ const live = useLiveNodeOverrides((s) => s.overrides.get(node.id));
64
+ const polygon = live?.polygon ?? node.polygon;
65
+ const holes = live?.holes ?? node.holes;
117
66
  // The selector returns the unit node itself, so only edits to that unit
118
67
  // or its membership re-render this zone.
119
68
  const unit = useScene((s) => owningUnitForZone(node, (id) => s.nodes[id]));
120
69
  const tintColor = unit?.color ?? node.color;
121
- // Create floor shape from polygon
122
- const floorShape = useMemo(() => {
123
- if (!polygon || polygon.length < 3)
124
- return null;
125
- const shape = new Shape();
126
- const firstPt = polygon[0];
127
- // Shape is in X-Y plane, we rotate it to X-Z plane
128
- // Negate Y (which becomes Z) to get correct orientation
129
- shape.moveTo(firstPt[0], -firstPt[1]);
130
- for (let i = 1; i < polygon.length; i++) {
131
- const pt = polygon[i];
132
- shape.lineTo(pt[0], -pt[1]);
133
- }
134
- shape.closePath();
135
- return shape;
136
- }, [polygon]);
137
- // Create wall geometry from polygon
138
- const wallGeometry = useMemo(() => {
139
- if (!polygon || polygon.length < 2)
140
- return null;
141
- return createWallGeometry(polygon);
142
- }, [polygon]);
143
- // Calculate polygon centroid for label positioning using the geometric centroid formula
144
- // This correctly handles polygons regardless of vertex distribution along edges
145
- const centroid = useMemo(() => {
146
- if (!polygon || polygon.length < 3)
147
- return [0, 0];
148
- let signedArea = 0;
149
- let cx = 0;
150
- let cz = 0;
151
- for (let i = 0; i < polygon.length; i++) {
152
- const [x0, z0] = polygon[i];
153
- const [x1, z1] = polygon[(i + 1) % polygon.length];
154
- // Cross product for signed area
155
- const cross = x0 * z1 - x1 * z0;
156
- signedArea += cross;
157
- cx += (x0 + x1) * cross;
158
- cz += (z0 + z1) * cross;
159
- }
160
- signedArea /= 2;
161
- const factor = 1 / (6 * signedArea);
162
- return [cx * factor, cz * factor];
163
- }, [polygon]);
70
+ const floorShape = useMemo(() => (polygon.length >= 3 ? createZoneShape({ polygon, holes }) : null), [polygon, holes]);
71
+ const wallGeometry = useMemo(() => (polygon.length >= 3 ? createZoneWallGeometry({ polygon, holes }) : null), [polygon, holes]);
72
+ const centroid = useMemo(() => polygonInteriorPoint({ polygon, holes }), [polygon, holes]);
164
73
  // Create materials
165
74
  const floorMaterial = useMemo(() => {
166
75
  if (!tintColor)
@@ -172,48 +81,51 @@ export const ZoneRenderer = ({ node }) => {
172
81
  return null;
173
82
  return createWallGradientMaterial(node.color);
174
83
  }, [node.color]);
84
+ useEffect(() => () => wallGeometry?.dispose(), [wallGeometry]);
85
+ useEffect(() => () => floorMaterial?.dispose(), [floorMaterial]);
86
+ useEffect(() => () => wallMaterial?.dispose(), [wallMaterial]);
175
87
  const handlers = useNodeEvents(node, 'zone');
176
88
  if (!(node && floorShape && wallGeometry && floorMaterial && wallMaterial)) {
177
89
  return null;
178
90
  }
179
- return (_jsx("group", { ref: ref, visible: node.visible !== false, ...handlers, userData: { labelPosition: [centroid[0], 1, centroid[1]] }, children: showZones && (_jsxs(_Fragment, { children: [_jsx(Html, { name: "label", position: [centroid[0], 1, centroid[1]], style: { pointerEvents: 'none' }, zIndexRange: [10, 0], children: _jsxs("div", { id: `${node.id}-label`, style: {
180
- display: 'flex',
181
- flexDirection: 'column',
182
- alignItems: 'center',
183
- transform: 'translate3d(-50%, -50%, 0)',
184
- opacity: 0,
185
- transition: 'opacity 0.3s ease-in-out',
186
- }, children: [_jsx("div", { style: {
187
- width: 'max-content',
188
- color: 'white',
189
- textShadow: `-1px -1px 0 ${node.color}, 1px -1px 0 ${node.color}, -1px 1px 0 ${node.color}, 1px 1px 0 ${node.color}`,
190
- textAlign: 'center',
191
- }, children: _jsx("span", { children: node.name }) }), unit && (_jsx("div", { style: {
192
- marginTop: '2px',
193
- padding: '1px 6px',
194
- borderRadius: '999px',
195
- backgroundColor: tintColor,
196
- color: 'white',
197
- fontSize: '10px',
198
- lineHeight: '14px',
199
- whiteSpace: 'nowrap',
200
- }, children: unit.name })), _jsxs("div", { className: "label-pin", style: {
201
- display: 'flex',
202
- flexDirection: 'column',
203
- alignItems: 'center',
204
- marginTop: '2px',
205
- opacity: 0,
206
- transition: 'opacity 0.5s ease-in-out',
207
- }, children: [_jsx("div", { style: {
208
- width: '2px',
209
- height: '40px',
210
- backgroundColor: node.color,
211
- } }), _jsx("div", { style: {
212
- width: '10px',
213
- height: '10px',
214
- borderRadius: '50%',
215
- backgroundColor: node.color,
216
- border: '1px solid white',
217
- } })] })] }) }), _jsx("mesh", { layers: ZONE_LAYER, material: floorMaterial, name: "floor", position: [0, Y_OFFSET, 0], rotation: [-Math.PI / 2, 0, 0], children: _jsx("shapeGeometry", { args: [floorShape] }) }), _jsx("mesh", { geometry: wallGeometry, layers: ZONE_LAYER, material: wallMaterial, name: "walls" })] })) }));
218
- };
91
+ return (_jsxs("group", { ...handlers, userData: { labelPosition: [centroid[0], 1, centroid[1]] }, children: [_jsx(Html, { name: "label", position: [centroid[0], 1, centroid[1]], style: { pointerEvents: 'none' }, zIndexRange: [10, 0], children: _jsxs("div", { id: `${node.id}-label`, style: {
92
+ display: 'flex',
93
+ flexDirection: 'column',
94
+ alignItems: 'center',
95
+ transform: 'translate3d(-50%, -50%, 0)',
96
+ opacity: 0,
97
+ transition: 'opacity 0.3s ease-in-out',
98
+ }, children: [_jsx("div", { style: {
99
+ width: 'max-content',
100
+ color: 'white',
101
+ textShadow: `-1px -1px 0 ${node.color}, 1px -1px 0 ${node.color}, -1px 1px 0 ${node.color}, 1px 1px 0 ${node.color}`,
102
+ textAlign: 'center',
103
+ }, children: _jsx("span", { children: node.name }) }), unit && (_jsx("div", { style: {
104
+ marginTop: '2px',
105
+ padding: '1px 6px',
106
+ borderRadius: '999px',
107
+ backgroundColor: tintColor,
108
+ color: 'white',
109
+ fontSize: '10px',
110
+ lineHeight: '14px',
111
+ whiteSpace: 'nowrap',
112
+ }, children: unit.name })), _jsxs("div", { className: "label-pin", style: {
113
+ display: 'flex',
114
+ flexDirection: 'column',
115
+ alignItems: 'center',
116
+ marginTop: '2px',
117
+ opacity: 0,
118
+ transition: 'opacity 0.5s ease-in-out',
119
+ }, children: [_jsx("div", { style: {
120
+ width: '2px',
121
+ height: '40px',
122
+ backgroundColor: node.color,
123
+ } }), _jsx("div", { style: {
124
+ width: '10px',
125
+ height: '10px',
126
+ borderRadius: '50%',
127
+ backgroundColor: node.color,
128
+ border: '1px solid white',
129
+ } })] })] }) }), _jsx("mesh", { layers: ZONE_LAYER, material: floorMaterial, name: "floor", position: [0, Y_OFFSET, 0], rotation: [-Math.PI / 2, 0, 0], children: _jsx("shapeGeometry", { args: [floorShape] }) }), _jsx("mesh", { geometry: wallGeometry, layers: ZONE_LAYER, material: wallMaterial, name: "walls" })] }));
130
+ }
219
131
  export default ZoneRenderer;
@@ -1,4 +1,4 @@
1
- import { detectSpacesForLevel, getWallThickness, } from '@pascal-app/core';
1
+ import { detectSpacesForLevel, getWallLocalFaceZ, } from '@pascal-app/core';
2
2
  import { readFloorplanContext } from '@pascal-app/editor';
3
3
  import { formatConstructionLength, } from '../shared/construction-length';
4
4
  const LINE_TOLERANCE = 1e-4;
@@ -99,7 +99,7 @@ function buildRectangleClearDimensions(rectangle, unit, profile, metricNotation,
99
99
  }
100
100
  function buildRectilinearClearDimensions(faceLines, unit, profile, metricNotation, stroke) {
101
101
  const vertices = clearFacePolygon(faceLines);
102
- if (!vertices || !isRectilinearPolygon(vertices))
102
+ if (!(vertices && isRectilinearPolygon(vertices)))
103
103
  return [];
104
104
  const dimensions = [];
105
105
  const seen = new Set();
@@ -137,7 +137,7 @@ function offsetBoundaryFace(boundary, wall) {
137
137
  return null;
138
138
  const normal = [-wallDirection[1], wallDirection[0]];
139
139
  const side = boundary.face === 'front' ? 1 : -1;
140
- const offset = (getWallThickness(wall) / 2) * side;
140
+ const offset = getWallLocalFaceZ(wall, side > 0 ? 'a' : 'b');
141
141
  return {
142
142
  start: [first[0] + normal[0] * offset, first[1] + normal[1] * offset],
143
143
  end: [last[0] + normal[0] * offset, last[1] + normal[1] * offset],
@@ -1 +1 @@
1
- {"version":3,"file":"room-documentation.d.ts","sourceRoot":"","sources":["../../src/zone/room-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAA;AAKtC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;CACpC,GAAG,iBAAiB,GAAG,IAAI,CA8C3B"}
1
+ {"version":3,"file":"room-documentation.d.ts","sourceRoot":"","sources":["../../src/zone/room-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAA;AAKtC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;CACpC,GAAG,iBAAiB,GAAG,IAAI,CA0C3B"}
@@ -1,15 +1,11 @@
1
- import { deriveZoneQuantityReport, resolveAutoZonePolygon, } from '@pascal-app/core';
1
+ import { deriveZoneQuantityReport } from '@pascal-app/core';
2
2
  import { formatConstructionLength, } from '../shared/construction-length';
3
3
  const SQUARE_FEET_PER_SQUARE_METER = 10.76391041671;
4
4
  const ROOM_NUMBER_COLLATOR = new Intl.Collator('en', { numeric: true, sensitivity: 'base' });
5
5
  export function buildRoomFloorplanSchedule(args) {
6
6
  const rooms = args.siblings
7
7
  .filter((zone) => zone.spaceRole === 'room')
8
- .map((zone) => {
9
- const polygon = resolveAutoZonePolygon(zone, (id) => args.nodes[id]);
10
- const resolvedZone = polygon === zone.polygon ? zone : { ...zone, polygon };
11
- return { zone: resolvedZone, report: deriveZoneQuantityReport(resolvedZone, args.nodes) };
12
- })
8
+ .map((zone) => ({ zone, report: deriveZoneQuantityReport(zone, args.nodes) }))
13
9
  .sort((a, b) => compareRooms(a.zone, b.zone));
14
10
  if (rooms.length === 0)
15
11
  return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pascal-app/nodes",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Built-in node bundles for the Pascal 3D editor — one folder per kind, exported as `builtinPlugin`",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,15 +22,15 @@
22
22
  "README.md"
23
23
  ],
24
24
  "scripts": {
25
- "build": "tsc --build",
25
+ "build": "NODE_OPTIONS=--max-old-space-size=6144 tsc --build",
26
26
  "dev": "tsgo --build --watch",
27
27
  "test": "bun test",
28
28
  "prepublishOnly": "bun run build && bun test"
29
29
  },
30
30
  "peerDependencies": {
31
- "@pascal-app/core": "^1.0.3",
32
- "@pascal-app/editor": "^1.0.3",
33
- "@pascal-app/viewer": "^1.0.3",
31
+ "@pascal-app/core": "^1.0.4",
32
+ "@pascal-app/editor": "^1.0.4",
33
+ "@pascal-app/viewer": "^1.0.4",
34
34
  "@react-three/drei": "^10",
35
35
  "@react-three/fiber": "^9",
36
36
  "lucide-react": "^1",
@@ -40,15 +40,15 @@
40
40
  "zustand": "^5"
41
41
  },
42
42
  "devDependencies": {
43
- "@pascal-app/core": "^1.0.3",
44
- "@pascal-app/editor": "^1.0.3",
45
- "@pascal-app/viewer": "^1.0.3",
43
+ "@pascal-app/core": "^1.0.4",
44
+ "@pascal-app/editor": "^1.0.4",
45
+ "@pascal-app/viewer": "^1.0.4",
46
46
  "@pascal/typescript-config": "*",
47
47
  "@react-three/test-renderer": "^9.1.0",
48
- "@types/bun": "^1.3.0",
48
+ "@types/bun": "^1.4.2",
49
49
  "@types/node": "^22.19.12",
50
- "@types/react": "^19.2.2",
51
- "@types/react-dom": "^19.2.3",
50
+ "@types/react": "19.3.0",
51
+ "@types/react-dom": "19.3.0",
52
52
  "@types/three": "^0.184.0",
53
53
  "typescript": "6.0.3"
54
54
  },
@@ -1,4 +0,0 @@
1
- import type { BlockNode, SlotDeclaration } from '@pascal-app/core';
2
- export declare const BLOCK_SLOT_ID = "body";
3
- export declare function blockSlots(node: BlockNode): SlotDeclaration[];
4
- //# sourceMappingURL=slots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/block/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGlE,eAAO,MAAM,aAAa,SAAqB,CAAA;AAW/C,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,EAAE,CAK7D"}
@@ -1,17 +0,0 @@
1
- import { BLOCK_BODY_SLOT_ID, blockMaterialSlotIds } from './material-slots';
2
- export const BLOCK_SLOT_ID = BLOCK_BODY_SLOT_ID;
3
- function slotLabel(slotId) {
4
- if (slotId === BLOCK_SLOT_ID)
5
- return 'Body';
6
- return slotId
7
- .split('-')
8
- .filter(Boolean)
9
- .map((part) => `${part[0]?.toUpperCase() ?? ''}${part.slice(1)}`)
10
- .join(' ');
11
- }
12
- export function blockSlots(node) {
13
- return blockMaterialSlotIds(node.topology, node.slots, node.slotNames).map((slotId) => ({
14
- slotId,
15
- label: node.slotNames?.[slotId]?.trim() || slotLabel(slotId),
16
- }));
17
- }
@@ -1,4 +0,0 @@
1
- import type { SlotDeclaration } from '@pascal-app/core';
2
- export type CabinetSlotId = 'front' | 'carcass' | 'countertop' | 'plinth' | 'hardware' | 'glass' | 'appliance' | 'applianceInterior';
3
- export declare function cabinetSlots(): SlotDeclaration[];
4
- //# sourceMappingURL=slots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/cabinet/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,OAAO,GACP,WAAW,GACX,mBAAmB,CAAA;AAWvB,wBAAgB,YAAY,IAAI,eAAe,EAAE,CAehD"}
@@ -1,24 +0,0 @@
1
- const FRONT_DEFAULT = 'library:preset-softwhite';
2
- const CARCASS_DEFAULT = 'library:preset-softwhite';
3
- const COUNTERTOP_DEFAULT = 'library:wood-finewood27';
4
- const PLINTH_DEFAULT = 'library:preset-softwhite';
5
- const HARDWARE_DEFAULT = 'library:metal-chrome';
6
- const GLASS_DEFAULT = 'library:preset-glass';
7
- const APPLIANCE_DEFAULT = 'library:metal-steel';
8
- const APPLIANCE_INTERIOR_DEFAULT = 'library:preset-charcoal';
9
- export function cabinetSlots() {
10
- return [
11
- { slotId: 'front', label: 'Front', default: FRONT_DEFAULT },
12
- { slotId: 'carcass', label: 'Carcass', default: CARCASS_DEFAULT },
13
- { slotId: 'countertop', label: 'Countertop', default: COUNTERTOP_DEFAULT },
14
- { slotId: 'plinth', label: 'Plinth', default: PLINTH_DEFAULT },
15
- { slotId: 'hardware', label: 'Hardware', default: HARDWARE_DEFAULT },
16
- { slotId: 'glass', label: 'Glass', default: GLASS_DEFAULT },
17
- { slotId: 'appliance', label: 'Appliance', default: APPLIANCE_DEFAULT },
18
- {
19
- slotId: 'applianceInterior',
20
- label: 'Appliance Interior',
21
- default: APPLIANCE_INTERIOR_DEFAULT,
22
- },
23
- ];
24
- }
@@ -1,6 +0,0 @@
1
- import type { SlotDeclaration } from '@pascal-app/core';
2
- export type CeilingSlotId = 'surface';
3
- export declare const CEILING_SLOT_DEFAULT_COLOR = "#f2eee6";
4
- /** A ceiling exposes a single paintable underside surface. */
5
- export declare function ceilingSlots(): SlotDeclaration[];
6
- //# sourceMappingURL=slots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/ceiling/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,MAAM,aAAa,GAAG,SAAS,CAAA;AAIrC,eAAO,MAAM,0BAA0B,YAAY,CAAA;AAEnD,8DAA8D;AAC9D,wBAAgB,YAAY,IAAI,eAAe,EAAE,CAEhD"}
@@ -1,7 +0,0 @@
1
- // Soft white — the default underside colour for an unpainted ceiling. (A
2
- // ceiling renders flat-tinted, so this is a colour, not a `library:` finish.)
3
- export const CEILING_SLOT_DEFAULT_COLOR = '#f2eee6';
4
- /** A ceiling exposes a single paintable underside surface. */
5
- export function ceilingSlots() {
6
- return [{ slotId: 'surface', label: 'Surface', default: CEILING_SLOT_DEFAULT_COLOR }];
7
- }
@@ -1,9 +0,0 @@
1
- import type { SlotDeclaration } from '@pascal-app/core';
2
- import type { ColumnNode } from './schema';
3
- export type ColumnSlotId = 'shaft' | 'base' | 'capital' | 'frame';
4
- export declare const COLUMN_SHAFT_DEFAULT = "library:concrete-plaster";
5
- export declare const COLUMN_BASE_DEFAULT = "library:concrete-plaster";
6
- export declare const COLUMN_CAPITAL_DEFAULT = "library:concrete-plaster";
7
- export declare const COLUMN_FRAME_DEFAULT = "library:metal-steel";
8
- export declare function columnSlots(node: ColumnNode): SlotDeclaration[];
9
- //# sourceMappingURL=slots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/column/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAEjE,eAAO,MAAM,oBAAoB,6BAA6B,CAAA;AAC9D,eAAO,MAAM,mBAAmB,6BAA6B,CAAA;AAC7D,eAAO,MAAM,sBAAsB,6BAA6B,CAAA;AAChE,eAAO,MAAM,oBAAoB,wBAAwB,CAAA;AAEzD,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,EAAE,CAkB/D"}
@@ -1,19 +0,0 @@
1
- export const COLUMN_SHAFT_DEFAULT = 'library:concrete-plaster';
2
- export const COLUMN_BASE_DEFAULT = 'library:concrete-plaster';
3
- export const COLUMN_CAPITAL_DEFAULT = 'library:concrete-plaster';
4
- export const COLUMN_FRAME_DEFAULT = 'library:metal-steel';
5
- export function columnSlots(node) {
6
- const slots = [
7
- { slotId: 'shaft', label: 'Shaft', default: COLUMN_SHAFT_DEFAULT },
8
- ];
9
- if (node.baseStyle !== 'none') {
10
- slots.push({ slotId: 'base', label: 'Base', default: COLUMN_BASE_DEFAULT });
11
- }
12
- if (node.capitalStyle !== 'none') {
13
- slots.push({ slotId: 'capital', label: 'Capital', default: COLUMN_CAPITAL_DEFAULT });
14
- }
15
- if (node.supportStyle !== 'vertical') {
16
- slots.push({ slotId: 'frame', label: 'Frame', default: COLUMN_FRAME_DEFAULT });
17
- }
18
- return slots;
19
- }
@@ -1,9 +0,0 @@
1
- import type { SlotDeclaration } from '@pascal-app/core';
2
- export type DoorSlotId = 'panel' | 'frame' | 'glass' | 'hardware';
3
- /**
4
- * A door exposes four paintable slots: `panel` (leaf faces), `frame`, `glass`,
5
- * and `hardware` (handle / hinges / closer / panic bar). The opening reveal
6
- * keeps its own material.
7
- */
8
- export declare function doorSlots(): SlotDeclaration[];
9
- //# sourceMappingURL=slots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/door/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;AAUjE;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,eAAe,EAAE,CAO7C"}
@@ -1,20 +0,0 @@
1
- // Picker swatches. Rendering falls back to the live body/glass/hardware defaults
2
- // (which already track shading + theme), so these are just the indicator colours.
3
- const PANEL_DEFAULT = 'library:preset-softwhite';
4
- const FRAME_DEFAULT = 'library:preset-softwhite';
5
- const GLASS_DEFAULT = 'library:preset-glass';
6
- // Chrome — a flat (non-PBR) catalog metal finish.
7
- const HARDWARE_DEFAULT = 'library:metal-chrome';
8
- /**
9
- * A door exposes four paintable slots: `panel` (leaf faces), `frame`, `glass`,
10
- * and `hardware` (handle / hinges / closer / panic bar). The opening reveal
11
- * keeps its own material.
12
- */
13
- export function doorSlots() {
14
- return [
15
- { slotId: 'panel', label: 'Panel', default: PANEL_DEFAULT },
16
- { slotId: 'frame', label: 'Frame', default: FRAME_DEFAULT },
17
- { slotId: 'glass', label: 'Glass', default: GLASS_DEFAULT },
18
- { slotId: 'hardware', label: 'Hardware', default: HARDWARE_DEFAULT },
19
- ];
20
- }
@@ -1,8 +0,0 @@
1
- import { type ElevatorNode, type SlotDeclaration } from '@pascal-app/core';
2
- export type ElevatorSlotId = 'cab' | 'doors' | 'shaft' | 'glass';
3
- export declare const ELEVATOR_CAB_SLOT_DEFAULT = "library:preset-softwhite";
4
- export declare const ELEVATOR_DOORS_SLOT_DEFAULT = "library:metal-steel";
5
- export declare const ELEVATOR_SHAFT_SLOT_DEFAULT = "library:preset-lightgrey";
6
- export declare const ELEVATOR_GLASS_SLOT_DEFAULT = "library:preset-glass";
7
- export declare function elevatorSlots(node: ElevatorNode): SlotDeclaration[];
8
- //# sourceMappingURL=slots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/elevator/slots.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAEhE,eAAO,MAAM,yBAAyB,6BAA6B,CAAA;AACnE,eAAO,MAAM,2BAA2B,wBAAwB,CAAA;AAChE,eAAO,MAAM,2BAA2B,6BAA6B,CAAA;AACrE,eAAO,MAAM,2BAA2B,yBAAyB,CAAA;AAEjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,EAAE,CAenE"}
@@ -1,17 +0,0 @@
1
- import { getResolvedElevatorDoorPanelStyle, getResolvedElevatorShaftStyle, } from '@pascal-app/core';
2
- export const ELEVATOR_CAB_SLOT_DEFAULT = 'library:preset-softwhite';
3
- export const ELEVATOR_DOORS_SLOT_DEFAULT = 'library:metal-steel';
4
- export const ELEVATOR_SHAFT_SLOT_DEFAULT = 'library:preset-lightgrey';
5
- export const ELEVATOR_GLASS_SLOT_DEFAULT = 'library:preset-glass';
6
- export function elevatorSlots(node) {
7
- const slots = [
8
- { slotId: 'cab', label: 'Cab', default: ELEVATOR_CAB_SLOT_DEFAULT },
9
- { slotId: 'doors', label: 'Doors', default: ELEVATOR_DOORS_SLOT_DEFAULT },
10
- { slotId: 'shaft', label: 'Shaft', default: ELEVATOR_SHAFT_SLOT_DEFAULT },
11
- ];
12
- const hasGlass = getResolvedElevatorShaftStyle(node.shaftStyle) === 'glass' ||
13
- getResolvedElevatorDoorPanelStyle(node.doorPanelStyle) === 'glass-frame';
14
- if (hasGlass)
15
- slots.push({ slotId: 'glass', label: 'Glass', default: ELEVATOR_GLASS_SLOT_DEFAULT });
16
- return slots;
17
- }
@@ -1,10 +0,0 @@
1
- import type { SlotDeclaration } from '@pascal-app/core';
2
- import type { FenceNode } from './schema';
3
- export type FenceSlotId = 'posts' | 'infill' | 'base' | 'rail';
4
- export declare const FENCE_POSTS_SLOT_DEFAULT = "library:preset-charcoal";
5
- export declare const FENCE_INFILL_SLOT_DEFAULT = "library:preset-charcoal";
6
- export declare const FENCE_BASE_SLOT_DEFAULT = "library:preset-greige";
7
- export declare const FENCE_RAIL_SLOT_DEFAULT = "library:preset-greige";
8
- export declare const FENCE_SLOT_DEFAULTS: Record<FenceSlotId, string>;
9
- export declare function fenceSlots(node: FenceNode): SlotDeclaration[];
10
- //# sourceMappingURL=slots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/fence/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIzC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;AAE9D,eAAO,MAAM,wBAAwB,4BAA4B,CAAA;AACjE,eAAO,MAAM,yBAAyB,4BAA4B,CAAA;AAClE,eAAO,MAAM,uBAAuB,0BAA0B,CAAA;AAC9D,eAAO,MAAM,uBAAuB,0BAA0B,CAAA;AAE9D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAK3D,CAAA;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,EAAE,CAY7D"}
@@ -1,23 +0,0 @@
1
- export const FENCE_POSTS_SLOT_DEFAULT = 'library:preset-charcoal';
2
- export const FENCE_INFILL_SLOT_DEFAULT = 'library:preset-charcoal';
3
- export const FENCE_BASE_SLOT_DEFAULT = 'library:preset-greige';
4
- export const FENCE_RAIL_SLOT_DEFAULT = 'library:preset-greige';
5
- export const FENCE_SLOT_DEFAULTS = {
6
- posts: FENCE_POSTS_SLOT_DEFAULT,
7
- infill: FENCE_INFILL_SLOT_DEFAULT,
8
- base: FENCE_BASE_SLOT_DEFAULT,
9
- rail: FENCE_RAIL_SLOT_DEFAULT,
10
- };
11
- export function fenceSlots(node) {
12
- const slots = [
13
- { slotId: 'posts', label: 'Posts', default: FENCE_POSTS_SLOT_DEFAULT },
14
- ];
15
- if (node.showInfill !== false) {
16
- slots.push({ slotId: 'infill', label: 'Infill', default: FENCE_INFILL_SLOT_DEFAULT });
17
- }
18
- if (node.baseStyle !== 'floating') {
19
- slots.push({ slotId: 'base', label: 'Base', default: FENCE_BASE_SLOT_DEFAULT });
20
- }
21
- slots.push({ slotId: 'rail', label: 'Rail', default: FENCE_RAIL_SLOT_DEFAULT });
22
- return slots;
23
- }
@@ -1,26 +0,0 @@
1
- import { type FloorplanGeometry, type GeometryContext, type ItemNode } from '@pascal-app/core';
2
- /**
3
- * Stage C floor-plan builder for item.
4
- *
5
- * Items can be parented to a wall, ceiling, slab, or another item.
6
- * Position is in the parent's local frame, so we walk the parent chain
7
- * via `ctx.resolve` to compute the world-space (level-local) transform.
8
- *
9
- * Mirrors `getItemFloorplanTransform` from editor/lib/floorplan/items.ts
10
- * but uses the registry's resolve callback instead of a node map. Logic
11
- * is identical so visual output matches the legacy.
12
- *
13
- * Returns a rotated rectangle of width × depth at the resolved position.
14
- * Phase 5 follow-up may render `asset.floorPlanUrl` as a custom image
15
- * overlay when present.
16
- */
17
- type Transform = {
18
- x: number;
19
- y: number;
20
- rotation: number;
21
- };
22
- export declare function resolveItemTransform(item: ItemNode, ctx: GeometryContext, cache?: Map<`roof_${string}` | `rseg_${string}` | `site_${string}` | `building_${string}` | `level_${string}` | `elevator_${string}` | `unit_${string}` | `zone_${string}` | `block_${string}` | `ceiling_${string}` | `item_${string}` | `procedural-item_${string}` | `column_${string}` | `construction-dimension_${string}` | `wall_${string}` | `slab_${string}` | `fence_${string}` | `structural-grid_${string}` | `imesh_${string}` | `stair_${string}` | `scan_${string}` | `guide_${string}` | `measurement_${string}` | `spawn_${string}` | `shelf_${string}` | `duct-segment_${string}` | `duct-fitting_${string}` | `duct-terminal_${string}` | `hvac-equipment_${string}` | `lineset_${string}` | `liquid-line_${string}` | `pipe-segment_${string}` | `pipe-fitting_${string}` | `pipe-trap_${string}` | `leanto_${string}` | `door_${string}` | `window_${string}` | `cabinet_${string}` | `cabinet-module_${string}` | `sseg_${string}` | `bvent_${string}` | `rvent_${string}` | `tvent_${string}` | `cupola_${string}` | `eyebrow-vent_${string}` | `gutter_${string}` | `chimney_${string}` | `solarpanel_${string}` | `skylight_${string}` | `dormer_${string}` | `downspout_${string}`, Transform | null>): Transform | null;
23
- export declare function buildItemContextualDimensions(node: ItemNode, ctx: GeometryContext): FloorplanGeometry | null;
24
- export declare function buildItemFloorplan(node: ItemNode, ctx: GeometryContext): FloorplanGeometry | null;
25
- export {};
26
- //# sourceMappingURL=main-floorplan.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main-floorplan.d.ts","sourceRoot":"","sources":["../../../src/item/__fixtures__/main-floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAIpB,KAAK,QAAQ,EAId,MAAM,kBAAkB,CAAA;AAIzB;;;;;;;;;;;;;;GAcG;AACH,KAAK,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAe3D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,EACpB,KAAK,0pCAAyC,GAC7C,SAAS,GAAG,IAAI,CA6JlB;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CA+C1B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAmGjG"}