@pascal-app/nodes 1.0.0 → 1.0.3

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 (439) hide show
  1. package/dist/block/definition.d.ts.map +1 -1
  2. package/dist/block/definition.js +4 -1
  3. package/dist/block/face-host.d.ts.map +1 -1
  4. package/dist/block/face-host.js +19 -2
  5. package/dist/block/hosted-edit.d.ts +13 -0
  6. package/dist/block/hosted-edit.d.ts.map +1 -0
  7. package/dist/block/hosted-edit.js +205 -0
  8. package/dist/block/last-operation.d.ts +1 -1
  9. package/dist/block/last-operation.d.ts.map +1 -1
  10. package/dist/block/last-operation.js +6 -4
  11. package/dist/block/modal-session.d.ts +2 -1
  12. package/dist/block/modal-session.d.ts.map +1 -1
  13. package/dist/block/modal-session.js +2 -2
  14. package/dist/block/selection.d.ts.map +1 -1
  15. package/dist/block/selection.js +82 -24
  16. package/dist/block/surface.d.ts +4 -0
  17. package/dist/block/surface.d.ts.map +1 -0
  18. package/dist/block/surface.js +54 -0
  19. package/dist/block/use-block-face-operation.d.ts +2 -2
  20. package/dist/block/use-block-face-operation.d.ts.map +1 -1
  21. package/dist/block/use-block-face-operation.js +25 -11
  22. package/dist/box-vent/definition.d.ts.map +1 -1
  23. package/dist/box-vent/definition.js +1 -0
  24. package/dist/box-vent/panel.js +4 -4
  25. package/dist/building/renderer.d.ts.map +1 -1
  26. package/dist/building/renderer.js +1 -1
  27. package/dist/cabinet/appliance-layout.d.ts +26 -0
  28. package/dist/cabinet/appliance-layout.d.ts.map +1 -0
  29. package/dist/cabinet/appliance-layout.js +52 -0
  30. package/dist/cabinet/countertop-layout.d.ts +173 -0
  31. package/dist/cabinet/countertop-layout.d.ts.map +1 -0
  32. package/dist/cabinet/countertop-layout.js +80 -0
  33. package/dist/cabinet/definition.d.ts.map +1 -1
  34. package/dist/cabinet/definition.js +17 -8
  35. package/dist/cabinet/geometry/cooktop.d.ts.map +1 -1
  36. package/dist/cabinet/geometry/cooktop.js +2 -2
  37. package/dist/cabinet/geometry/run.d.ts.map +1 -1
  38. package/dist/cabinet/geometry/run.js +10 -71
  39. package/dist/cabinet/geometry/sink.d.ts +2 -12
  40. package/dist/cabinet/geometry/sink.d.ts.map +1 -1
  41. package/dist/cabinet/geometry/sink.js +8 -39
  42. package/dist/cabinet/hosted-resize.d.ts +5 -0
  43. package/dist/cabinet/hosted-resize.d.ts.map +1 -0
  44. package/dist/cabinet/hosted-resize.js +14 -0
  45. package/dist/cabinet/placement-snap.d.ts.map +1 -1
  46. package/dist/cabinet/placement-snap.js +4 -2
  47. package/dist/cabinet/run-layout.d.ts +8 -1
  48. package/dist/cabinet/run-layout.d.ts.map +1 -1
  49. package/dist/cabinet/run-layout.js +22 -14
  50. package/dist/cabinet/run-ops.d.ts +3 -3
  51. package/dist/cabinet/run-ops.js +3 -3
  52. package/dist/cabinet/run-panel.d.ts +1 -1
  53. package/dist/cabinet/run-panel.d.ts.map +1 -1
  54. package/dist/cabinet/run-panel.js +16 -7
  55. package/dist/cabinet/surfaces.d.ts +5 -0
  56. package/dist/cabinet/surfaces.d.ts.map +1 -0
  57. package/dist/cabinet/surfaces.js +113 -0
  58. package/dist/cabinet/tool.d.ts.map +1 -1
  59. package/dist/cabinet/tool.js +8 -4
  60. package/dist/cabinet/tree-structure.d.ts.map +1 -1
  61. package/dist/cabinet/tree-structure.js +10 -9
  62. package/dist/ceiling/definition.d.ts.map +1 -1
  63. package/dist/ceiling/definition.js +6 -1
  64. package/dist/ceiling/floorplan-affordances.d.ts +4 -4
  65. package/dist/ceiling/panel.js +1 -1
  66. package/dist/ceiling/renderer.d.ts.map +1 -1
  67. package/dist/ceiling/renderer.js +3 -2
  68. package/dist/chimney/definition.d.ts.map +1 -1
  69. package/dist/chimney/definition.js +1 -0
  70. package/dist/chimney/panel.js +9 -9
  71. package/dist/column/definition.d.ts.map +1 -1
  72. package/dist/column/definition.js +10 -3
  73. package/dist/column/floorplan-affordances.d.ts.map +1 -1
  74. package/dist/column/floorplan-affordances.js +6 -1
  75. package/dist/column/floorplan.d.ts.map +1 -1
  76. package/dist/column/floorplan.js +23 -11
  77. package/dist/column/hosted-resize.d.ts +116 -0
  78. package/dist/column/hosted-resize.d.ts.map +1 -0
  79. package/dist/column/hosted-resize.js +9 -0
  80. package/dist/column/panel.d.ts.map +1 -1
  81. package/dist/column/panel.js +6 -3
  82. package/dist/column/renderer.d.ts.map +1 -1
  83. package/dist/column/renderer.js +25 -103
  84. package/dist/column/shape.d.ts +22 -0
  85. package/dist/column/shape.d.ts.map +1 -0
  86. package/dist/column/shape.js +120 -0
  87. package/dist/column/surface.d.ts +4 -0
  88. package/dist/column/surface.d.ts.map +1 -0
  89. package/dist/column/surface.js +66 -0
  90. package/dist/cupola/definition.d.ts.map +1 -1
  91. package/dist/cupola/definition.js +1 -0
  92. package/dist/cupola/panel.js +1 -1
  93. package/dist/door/definition.d.ts.map +1 -1
  94. package/dist/door/definition.js +40 -1
  95. package/dist/door/door-math.d.ts +1 -1
  96. package/dist/door/door-math.d.ts.map +1 -1
  97. package/dist/door/door-math.js +7 -10
  98. package/dist/door/floorplan-affordances.d.ts.map +1 -1
  99. package/dist/door/floorplan-affordances.js +8 -12
  100. package/dist/door/move-tool.d.ts.map +1 -1
  101. package/dist/door/move-tool.js +3 -4
  102. package/dist/door/panel.d.ts.map +1 -1
  103. package/dist/door/panel.js +28 -57
  104. package/dist/door/tool.d.ts.map +1 -1
  105. package/dist/door/tool.js +20 -2
  106. package/dist/dormer/definition.d.ts.map +1 -1
  107. package/dist/dormer/definition.js +1 -0
  108. package/dist/dormer/panel-position-section.js +2 -2
  109. package/dist/dormer/panel.js +1 -1
  110. package/dist/downspout/definition.d.ts.map +1 -1
  111. package/dist/downspout/definition.js +1 -0
  112. package/dist/duct-segment/parametrics.d.ts.map +1 -1
  113. package/dist/duct-segment/parametrics.js +5 -1
  114. package/dist/duct-segment/tool.d.ts +1 -0
  115. package/dist/duct-segment/tool.d.ts.map +1 -1
  116. package/dist/duct-segment/tool.js +21 -8
  117. package/dist/duct-terminal/tool.d.ts.map +1 -1
  118. package/dist/duct-terminal/tool.js +77 -8
  119. package/dist/elevator/definition.d.ts.map +1 -1
  120. package/dist/elevator/definition.js +2 -0
  121. package/dist/elevator/parametrics.d.ts.map +1 -1
  122. package/dist/elevator/parametrics.js +98 -1
  123. package/dist/eyebrow-vent/definition.d.ts.map +1 -1
  124. package/dist/eyebrow-vent/definition.js +1 -0
  125. package/dist/eyebrow-vent/panel.js +1 -1
  126. package/dist/fence/definition.d.ts.map +1 -1
  127. package/dist/fence/definition.js +1 -0
  128. package/dist/fence/inspector-editors.js +1 -1
  129. package/dist/fence/tool.js +2 -2
  130. package/dist/guide/definition.d.ts.map +1 -1
  131. package/dist/guide/definition.js +1 -0
  132. package/dist/gutter/definition.d.ts.map +1 -1
  133. package/dist/gutter/definition.js +1 -0
  134. package/dist/hvac-equipment/tool.d.ts.map +1 -1
  135. package/dist/hvac-equipment/tool.js +8 -2
  136. package/dist/imported-mesh/definition.d.ts +5 -0
  137. package/dist/imported-mesh/definition.d.ts.map +1 -0
  138. package/dist/imported-mesh/definition.js +38 -0
  139. package/dist/imported-mesh/floorplan.d.ts +4 -0
  140. package/dist/imported-mesh/floorplan.d.ts.map +1 -0
  141. package/dist/imported-mesh/floorplan.js +34 -0
  142. package/dist/imported-mesh/geometry.d.ts +5 -0
  143. package/dist/imported-mesh/geometry.d.ts.map +1 -0
  144. package/dist/imported-mesh/geometry.js +34 -0
  145. package/dist/imported-mesh/index.d.ts +4 -0
  146. package/dist/imported-mesh/index.d.ts.map +1 -0
  147. package/dist/imported-mesh/index.js +3 -0
  148. package/dist/imported-mesh/schema.d.ts +2 -0
  149. package/dist/imported-mesh/schema.d.ts.map +1 -0
  150. package/dist/imported-mesh/schema.js +1 -0
  151. package/dist/index.d.ts +2 -0
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +8 -0
  154. package/dist/item/__fixtures__/main-floorplan.d.ts +26 -0
  155. package/dist/item/__fixtures__/main-floorplan.d.ts.map +1 -0
  156. package/dist/item/__fixtures__/main-floorplan.js +297 -0
  157. package/dist/item/definition.d.ts.map +1 -1
  158. package/dist/item/definition.js +3 -1
  159. package/dist/item/floorplan-move.d.ts +9 -1
  160. package/dist/item/floorplan-move.d.ts.map +1 -1
  161. package/dist/item/floorplan-move.js +231 -99
  162. package/dist/item/floorplan.d.ts +22 -0
  163. package/dist/item/floorplan.d.ts.map +1 -1
  164. package/dist/item/floorplan.js +72 -2
  165. package/dist/item/move-tool.d.ts +1 -1
  166. package/dist/item/move-tool.d.ts.map +1 -1
  167. package/dist/item/move-tool.js +15 -7
  168. package/dist/item/panel.js +1 -1
  169. package/dist/item/renderer.d.ts.map +1 -1
  170. package/dist/item/renderer.js +8 -2
  171. package/dist/level/renderer.js +1 -1
  172. package/dist/lineset/tool.d.ts.map +1 -1
  173. package/dist/lineset/tool.js +1 -0
  174. package/dist/liquid-line/tool.d.ts.map +1 -1
  175. package/dist/liquid-line/tool.js +5 -1
  176. package/dist/measurement/definition.d.ts.map +1 -1
  177. package/dist/measurement/definition.js +1 -0
  178. package/dist/pipe-segment/parametrics.d.ts.map +1 -1
  179. package/dist/pipe-segment/parametrics.js +5 -1
  180. package/dist/pipe-segment/tool.d.ts.map +1 -1
  181. package/dist/pipe-segment/tool.js +14 -3
  182. package/dist/pipe-trap/tool.d.ts.map +1 -1
  183. package/dist/pipe-trap/tool.js +7 -8
  184. package/dist/procedural-item/definition.d.ts +4 -0
  185. package/dist/procedural-item/definition.d.ts.map +1 -0
  186. package/dist/procedural-item/definition.js +257 -0
  187. package/dist/procedural-item/geometry.d.ts +31 -0
  188. package/dist/procedural-item/geometry.d.ts.map +1 -0
  189. package/dist/procedural-item/geometry.js +88 -0
  190. package/dist/procedural-item/index.d.ts +3 -0
  191. package/dist/procedural-item/index.d.ts.map +1 -0
  192. package/dist/procedural-item/index.js +2 -0
  193. package/dist/procedural-item/move-session.d.ts +15 -0
  194. package/dist/procedural-item/move-session.d.ts.map +1 -0
  195. package/dist/procedural-item/move-session.js +197 -0
  196. package/dist/procedural-item/move-tool.d.ts +5 -0
  197. package/dist/procedural-item/move-tool.d.ts.map +1 -0
  198. package/dist/procedural-item/move-tool.js +193 -0
  199. package/dist/procedural-item/renderer.d.ts +5 -0
  200. package/dist/procedural-item/renderer.d.ts.map +1 -0
  201. package/dist/procedural-item/renderer.js +66 -0
  202. package/dist/ridge-vent/definition.d.ts.map +1 -1
  203. package/dist/ridge-vent/definition.js +1 -0
  204. package/dist/ridge-vent/panel.js +4 -4
  205. package/dist/roof/definition.d.ts.map +1 -1
  206. package/dist/roof/definition.js +4 -1
  207. package/dist/roof/panel-model.d.ts +4 -0
  208. package/dist/roof/panel-model.d.ts.map +1 -0
  209. package/dist/roof/panel-model.js +151 -0
  210. package/dist/roof/panel.d.ts.map +1 -1
  211. package/dist/roof/panel.js +9 -8
  212. package/dist/roof/parametrics.d.ts.map +1 -1
  213. package/dist/roof/parametrics.js +16 -1
  214. package/dist/roof-segment/definition.d.ts.map +1 -1
  215. package/dist/roof-segment/definition.js +1 -0
  216. package/dist/roof-segment/panel.d.ts.map +1 -1
  217. package/dist/roof-segment/panel.js +5 -5
  218. package/dist/roof-segment/parametrics.d.ts.map +1 -1
  219. package/dist/roof-segment/parametrics.js +176 -1
  220. package/dist/scan/definition.d.ts.map +1 -1
  221. package/dist/scan/definition.js +1 -0
  222. package/dist/shared/automatic-run-end-cap.d.ts +1 -0
  223. package/dist/shared/automatic-run-end-cap.d.ts.map +1 -1
  224. package/dist/shared/automatic-run-end-cap.js +10 -0
  225. package/dist/shared/commit-opening-move.d.ts +4 -0
  226. package/dist/shared/commit-opening-move.d.ts.map +1 -0
  227. package/dist/shared/commit-opening-move.js +9 -0
  228. package/dist/shared/curtain-opening-limits.d.ts +14 -0
  229. package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
  230. package/dist/shared/curtain-opening-limits.js +53 -0
  231. package/dist/shared/distribution-run-tool.d.ts +10 -0
  232. package/dist/shared/distribution-run-tool.d.ts.map +1 -1
  233. package/dist/shared/distribution-run-tool.js +56 -11
  234. package/dist/shared/draft-axis-guides.d.ts +0 -6
  235. package/dist/shared/draft-axis-guides.d.ts.map +1 -1
  236. package/dist/shared/draft-axis-guides.js +1 -8
  237. package/dist/shared/hosted-resize.d.ts +12 -0
  238. package/dist/shared/hosted-resize.d.ts.map +1 -0
  239. package/dist/shared/hosted-resize.js +166 -0
  240. package/dist/shared/opening-grid-follow.d.ts +8 -0
  241. package/dist/shared/opening-grid-follow.d.ts.map +1 -0
  242. package/dist/shared/opening-grid-follow.js +12 -0
  243. package/dist/shared/opening-property-preview-host.d.ts +3 -0
  244. package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
  245. package/dist/shared/opening-property-preview-host.js +21 -0
  246. package/dist/shared/opening-property-preview.d.ts +19 -0
  247. package/dist/shared/opening-property-preview.d.ts.map +1 -0
  248. package/dist/shared/opening-property-preview.js +99 -0
  249. package/dist/shared/panel-fields.d.ts +15 -0
  250. package/dist/shared/panel-fields.d.ts.map +1 -0
  251. package/dist/shared/panel-fields.js +31 -0
  252. package/dist/shared/resting-surface-plan.d.ts +4 -0
  253. package/dist/shared/resting-surface-plan.d.ts.map +1 -0
  254. package/dist/shared/resting-surface-plan.js +53 -0
  255. package/dist/shared/surface-counterparts.d.ts +12 -0
  256. package/dist/shared/surface-counterparts.d.ts.map +1 -0
  257. package/dist/shared/surface-counterparts.js +27 -0
  258. package/dist/shared/wall-attach-target.d.ts +1 -0
  259. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  260. package/dist/shared/wall-attach-target.js +4 -1
  261. package/dist/shared/wall-event-from-grid.d.ts +5 -0
  262. package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
  263. package/dist/shared/wall-event-from-grid.js +36 -0
  264. package/dist/shelf/definition.d.ts.map +1 -1
  265. package/dist/shelf/definition.js +5 -2
  266. package/dist/shelf/floorplan-affordances.d.ts.map +1 -1
  267. package/dist/shelf/floorplan-affordances.js +5 -3
  268. package/dist/shelf/floorplan-move.d.ts.map +1 -1
  269. package/dist/shelf/floorplan-move.js +3 -2
  270. package/dist/shelf/floorplan.d.ts.map +1 -1
  271. package/dist/shelf/floorplan.js +9 -2
  272. package/dist/shelf/geometry.d.ts.map +1 -1
  273. package/dist/shelf/geometry.js +2 -10
  274. package/dist/site/renderer.d.ts.map +1 -1
  275. package/dist/site/renderer.js +9 -2
  276. package/dist/skylight/definition.d.ts.map +1 -1
  277. package/dist/skylight/definition.js +1 -0
  278. package/dist/skylight/panel.js +6 -6
  279. package/dist/slab/definition.d.ts.map +1 -1
  280. package/dist/slab/definition.js +4 -0
  281. package/dist/slab/panel.js +1 -1
  282. package/dist/solar-panel/definition.d.ts.map +1 -1
  283. package/dist/solar-panel/definition.js +1 -0
  284. package/dist/solar-panel/panel.js +2 -2
  285. package/dist/spawn/definition.d.ts.map +1 -1
  286. package/dist/spawn/definition.js +1 -0
  287. package/dist/spawn/panel.js +1 -1
  288. package/dist/stair/definition.d.ts.map +1 -1
  289. package/dist/stair/definition.js +2 -0
  290. package/dist/stair/panel.d.ts.map +1 -1
  291. package/dist/stair/panel.js +9 -7
  292. package/dist/stair/parametrics.d.ts.map +1 -1
  293. package/dist/stair/parametrics.js +164 -1
  294. package/dist/stair-segment/definition.d.ts.map +1 -1
  295. package/dist/stair-segment/definition.js +1 -0
  296. package/dist/stair-segment/panel.js +4 -4
  297. package/dist/stair-segment/parametrics.d.ts.map +1 -1
  298. package/dist/stair-segment/parametrics.js +81 -1
  299. package/dist/turbine-vent/definition.d.ts.map +1 -1
  300. package/dist/turbine-vent/definition.js +1 -0
  301. package/dist/turbine-vent/panel.js +1 -1
  302. package/dist/unit/definition.d.ts +10 -0
  303. package/dist/unit/definition.d.ts.map +1 -0
  304. package/dist/unit/definition.js +38 -0
  305. package/dist/unit/index.d.ts +2 -0
  306. package/dist/unit/index.d.ts.map +1 -0
  307. package/dist/unit/index.js +1 -0
  308. package/dist/unit/parametrics.d.ts +3 -0
  309. package/dist/unit/parametrics.d.ts.map +1 -0
  310. package/dist/unit/parametrics.js +4 -0
  311. package/dist/unit/schema.d.ts +2 -0
  312. package/dist/unit/schema.d.ts.map +1 -0
  313. package/dist/unit/schema.js +1 -0
  314. package/dist/unit/unit-panel.d.ts +5 -0
  315. package/dist/unit/unit-panel.d.ts.map +1 -0
  316. package/dist/unit/unit-panel.js +61 -0
  317. package/dist/wall/actions.d.ts +3 -0
  318. package/dist/wall/actions.d.ts.map +1 -0
  319. package/dist/wall/actions.js +56 -0
  320. package/dist/wall/curtain-opening-frame.d.ts +14 -0
  321. package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
  322. package/dist/wall/curtain-opening-frame.js +111 -0
  323. package/dist/wall/curtain-panel-highlight.d.ts +3 -0
  324. package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
  325. package/dist/wall/curtain-panel-highlight.js +113 -0
  326. package/dist/wall/curtain-wall-adapter.d.ts +3 -0
  327. package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
  328. package/dist/wall/curtain-wall-adapter.js +55 -0
  329. package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
  330. package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
  331. package/dist/wall/curtain-wall-floorplan.js +91 -0
  332. package/dist/wall/curtain-wall-geometry.d.ts +4 -0
  333. package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
  334. package/dist/wall/curtain-wall-geometry.js +226 -0
  335. package/dist/wall/curtain-wall-layout.d.ts +16 -0
  336. package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
  337. package/dist/wall/curtain-wall-layout.js +176 -0
  338. package/dist/wall/curtain-wall-materials.d.ts +5 -0
  339. package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
  340. package/dist/wall/curtain-wall-materials.js +55 -0
  341. package/dist/wall/curtain-wall-panel.d.ts +14 -0
  342. package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
  343. package/dist/wall/curtain-wall-panel.js +167 -0
  344. package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
  345. package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
  346. package/dist/wall/curtain-wall-piece-geometry.js +220 -0
  347. package/dist/wall/curtain-wall-shadow.d.ts +4 -0
  348. package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
  349. package/dist/wall/curtain-wall-shadow.js +15 -0
  350. package/dist/wall/definition.d.ts +0 -15
  351. package/dist/wall/definition.d.ts.map +1 -1
  352. package/dist/wall/definition.js +65 -4
  353. package/dist/wall/drawing-mode.d.ts +12 -0
  354. package/dist/wall/drawing-mode.d.ts.map +1 -0
  355. package/dist/wall/drawing-mode.js +38 -0
  356. package/dist/wall/floorplan-tool.d.ts +4 -0
  357. package/dist/wall/floorplan-tool.d.ts.map +1 -0
  358. package/dist/wall/floorplan-tool.js +107 -0
  359. package/dist/wall/floorplan.d.ts.map +1 -1
  360. package/dist/wall/floorplan.js +6 -2
  361. package/dist/wall/length-patch.d.ts +3 -0
  362. package/dist/wall/length-patch.d.ts.map +1 -0
  363. package/dist/wall/length-patch.js +14 -0
  364. package/dist/wall/move-tool.d.ts.map +1 -1
  365. package/dist/wall/move-tool.js +23 -1
  366. package/dist/wall/paint.d.ts.map +1 -1
  367. package/dist/wall/paint.js +39 -4
  368. package/dist/wall/panel-model.d.ts +4 -0
  369. package/dist/wall/panel-model.d.ts.map +1 -0
  370. package/dist/wall/panel-model.js +117 -0
  371. package/dist/wall/panel.d.ts.map +1 -1
  372. package/dist/wall/panel.js +20 -24
  373. package/dist/wall/property-preview.d.ts +7 -0
  374. package/dist/wall/property-preview.d.ts.map +1 -0
  375. package/dist/wall/property-preview.js +31 -0
  376. package/dist/wall/rectangle-command.d.ts +149 -0
  377. package/dist/wall/rectangle-command.d.ts.map +1 -0
  378. package/dist/wall/rectangle-command.js +22 -0
  379. package/dist/wall/rectangle-tool.d.ts +2 -0
  380. package/dist/wall/rectangle-tool.d.ts.map +1 -0
  381. package/dist/wall/rectangle-tool.js +147 -0
  382. package/dist/wall/renderer.d.ts.map +1 -1
  383. package/dist/wall/renderer.js +7 -4
  384. package/dist/wall/slots.d.ts +2 -2
  385. package/dist/wall/slots.d.ts.map +1 -1
  386. package/dist/wall/slots.js +10 -2
  387. package/dist/wall/split-floorplan-layer.d.ts +4 -0
  388. package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
  389. package/dist/wall/split-floorplan-layer.js +71 -0
  390. package/dist/wall/split-pointer.d.ts +3 -0
  391. package/dist/wall/split-pointer.d.ts.map +1 -0
  392. package/dist/wall/split-pointer.js +95 -0
  393. package/dist/wall/split-preview.d.ts +55 -0
  394. package/dist/wall/split-preview.d.ts.map +1 -0
  395. package/dist/wall/split-preview.js +106 -0
  396. package/dist/wall/split-session.d.ts +16 -0
  397. package/dist/wall/split-session.d.ts.map +1 -0
  398. package/dist/wall/split-session.js +138 -0
  399. package/dist/wall/split-store.d.ts +16 -0
  400. package/dist/wall/split-store.d.ts.map +1 -0
  401. package/dist/wall/split-store.js +6 -0
  402. package/dist/wall/split-tool.d.ts +10 -0
  403. package/dist/wall/split-tool.d.ts.map +1 -0
  404. package/dist/wall/split-tool.js +95 -0
  405. package/dist/wall/system.d.ts.map +1 -1
  406. package/dist/wall/system.js +3 -1
  407. package/dist/wall/tool.d.ts.map +1 -1
  408. package/dist/wall/tool.js +14 -6
  409. package/dist/wall/wall-batch-system.d.ts.map +1 -1
  410. package/dist/wall/wall-batch-system.js +3 -0
  411. package/dist/window/definition.d.ts.map +1 -1
  412. package/dist/window/definition.js +48 -1
  413. package/dist/window/floorplan-affordances.d.ts.map +1 -1
  414. package/dist/window/floorplan-affordances.js +8 -10
  415. package/dist/window/move-tool.d.ts.map +1 -1
  416. package/dist/window/move-tool.js +4 -6
  417. package/dist/window/panel.d.ts.map +1 -1
  418. package/dist/window/panel.js +22 -60
  419. package/dist/window/tool.d.ts.map +1 -1
  420. package/dist/window/tool.js +34 -2
  421. package/dist/window/window-math.d.ts +1 -1
  422. package/dist/window/window-math.d.ts.map +1 -1
  423. package/dist/window/window-math.js +8 -11
  424. package/dist/zone/definition.d.ts.map +1 -1
  425. package/dist/zone/definition.js +8 -1
  426. package/dist/zone/floorplan.d.ts +1 -3
  427. package/dist/zone/floorplan.d.ts.map +1 -1
  428. package/dist/zone/floorplan.js +43 -28
  429. package/dist/zone/quantities-panel.d.ts.map +1 -1
  430. package/dist/zone/quantities-panel.js +32 -44
  431. package/dist/zone/renderer.d.ts.map +1 -1
  432. package/dist/zone/renderer.js +21 -7
  433. package/dist/zone/unit-membership.d.ts +12 -0
  434. package/dist/zone/unit-membership.d.ts.map +1 -0
  435. package/dist/zone/unit-membership.js +22 -0
  436. package/package.json +15 -9
  437. package/dist/shared/opening-documentation-fields.d.ts +0 -16
  438. package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
  439. package/dist/shared/opening-documentation-fields.js +0 -54
@@ -0,0 +1,55 @@
1
+ import { type AnyNode, type AnyNodeId, type WallNode, type WallPlanPoint } from '@pascal-app/core';
2
+ export declare const WALL_SPLIT_MAX_CUTS = 32;
3
+ /** Cut markers in both views: warm when the cuts can commit, red when they can't. */
4
+ export declare function wallSplitMarkerColor(valid: boolean): "#c86f45" | "#a63d2e";
5
+ /** The pointer projected onto the wall, as a distance from its start; curved walls included. */
6
+ export declare function wallSplitDistance(wall: WallNode, point: readonly [number, number]): number;
7
+ /** Like a loop cut: one cut follows the pointer, more cuts divide the wall evenly. */
8
+ export declare function wallSplitDistances(length: number, cuts: number, distance: number): number[];
9
+ export type WallSplitSnap = {
10
+ kind: 'grid';
11
+ } | {
12
+ kind: 'midpoint';
13
+ } | {
14
+ kind: 'alignment';
15
+ anchor: WallPlanPoint;
16
+ } | null;
17
+ export type WallSplitSnapOptions = {
18
+ /** Grid step while the 'grid' snapping mode is active. */
19
+ gridStep: number | null;
20
+ /** Other wall ends to align with while the 'lines' mode is active. */
21
+ anchors: readonly WallPlanPoint[] | null;
22
+ /** How far (m) the pointer may be from an alignment target to catch it. */
23
+ tolerance: number;
24
+ };
25
+ /**
26
+ * Snaps a single cut along its wall with the active snapping mode: grid steps
27
+ * counted from the wall start, or — in 'lines' — the midpoint and where the
28
+ * level's other wall ends project onto the wall.
29
+ */
30
+ export declare function snapWallSplitDistance(wall: WallNode, raw: number, options: WallSplitSnapOptions): {
31
+ distance: number;
32
+ snap: WallSplitSnap;
33
+ };
34
+ /** Ends of the level's other walls, for 'lines' alignment. */
35
+ export declare function wallSplitAnchors(nodes: Record<AnyNodeId, AnyNode>, wall: WallNode): WallPlanPoint[];
36
+ export declare function wallSplitPreview(nodes: Record<AnyNodeId, AnyNode>, wall: WallNode, distances: readonly number[]): {
37
+ distances: number[];
38
+ length: number;
39
+ frames: {
40
+ point: import("@pascal-app/core").Point2D;
41
+ tangent: import("@pascal-app/core").Point2D;
42
+ normal: import("@pascal-app/core").Point2D;
43
+ }[];
44
+ valid: boolean;
45
+ message: string;
46
+ };
47
+ export type WallSplitPreview = ReturnType<typeof wallSplitPreview>;
48
+ /** What to label: both sides of a single cut, or one length repeated across even cuts. */
49
+ export declare function wallSplitSegmentLabels(wall: WallNode, preview: WallSplitPreview): {
50
+ length: number;
51
+ count: number;
52
+ midpoint: WallPlanPoint;
53
+ direction: WallPlanPoint;
54
+ }[];
55
+ //# sourceMappingURL=split-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-preview.d.ts","sourceRoot":"","sources":["../../src/wall/split-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAKd,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAA;AAEzB,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,yBAElD;AAID,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAuB1F;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAG3F;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAC5C,IAAI,CAAA;AAER,MAAM,MAAM,oBAAoB,GAAG;IACjC,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,sEAAsE;IACtE,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAA;IACxC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,oBAAoB,GAC5B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAyB3C;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,IAAI,EAAE,QAAQ,GACb,aAAa,EAAE,CAQjB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,MAAM,EAAE;;;;;;;;;;EAqB7B;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAElE,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB;;;cAY1C,aAAa;eACR,aAAa;IAGvD"}
@@ -0,0 +1,106 @@
1
+ import { getWallArcData, getWallCurveFrameAt, getWallCurveLength, planWallDivisions, } from '@pascal-app/core';
2
+ export const WALL_SPLIT_MAX_CUTS = 32;
3
+ /** Cut markers in both views: warm when the cuts can commit, red when they can't. */
4
+ export function wallSplitMarkerColor(valid) {
5
+ return valid ? '#c86f45' : '#a63d2e';
6
+ }
7
+ // The planner refuses cuts closer than this to either end.
8
+ const END_CLEARANCE = 0.05;
9
+ /** The pointer projected onto the wall, as a distance from its start; curved walls included. */
10
+ export function wallSplitDistance(wall, point) {
11
+ const length = getWallCurveLength(wall);
12
+ const arc = getWallArcData(wall);
13
+ if (arc) {
14
+ const angle = Math.atan2(point[1] - arc.center.y, point[0] - arc.center.x);
15
+ const turn = Math.PI * 2;
16
+ const delta = (((arc.direction * (angle - arc.startAngle)) % turn) + turn) % turn;
17
+ if (delta <= Math.abs(arc.delta))
18
+ return (delta / Math.abs(arc.delta)) * length;
19
+ return Math.hypot(point[0] - wall.start[0], point[1] - wall.start[1]) <=
20
+ Math.hypot(point[0] - wall.end[0], point[1] - wall.end[1])
21
+ ? 0
22
+ : length;
23
+ }
24
+ if (length === 0)
25
+ return 0;
26
+ return Math.max(0, Math.min(length, ((point[0] - wall.start[0]) * (wall.end[0] - wall.start[0]) +
27
+ (point[1] - wall.start[1]) * (wall.end[1] - wall.start[1])) /
28
+ length));
29
+ }
30
+ /** Like a loop cut: one cut follows the pointer, more cuts divide the wall evenly. */
31
+ export function wallSplitDistances(length, cuts, distance) {
32
+ if (cuts <= 1)
33
+ return [distance];
34
+ return Array.from({ length: cuts }, (_, index) => (length * (index + 1)) / (cuts + 1));
35
+ }
36
+ /**
37
+ * Snaps a single cut along its wall with the active snapping mode: grid steps
38
+ * counted from the wall start, or — in 'lines' — the midpoint and where the
39
+ * level's other wall ends project onto the wall.
40
+ */
41
+ export function snapWallSplitDistance(wall, raw, options) {
42
+ const length = getWallCurveLength(wall);
43
+ const inside = (distance) => distance >= END_CLEARANCE && distance <= length - END_CLEARANCE;
44
+ if (options.gridStep) {
45
+ const snapped = Math.round(raw / options.gridStep) * options.gridStep;
46
+ return inside(snapped)
47
+ ? { distance: snapped, snap: { kind: 'grid' } }
48
+ : { distance: raw, snap: null };
49
+ }
50
+ if (!options.anchors)
51
+ return { distance: raw, snap: null };
52
+ let best = {
53
+ distance: raw,
54
+ snap: null,
55
+ gap: options.tolerance,
56
+ };
57
+ const consider = (distance, snap) => {
58
+ const gap = Math.abs(distance - raw);
59
+ if (gap < best.gap && inside(distance))
60
+ best = { distance, snap, gap };
61
+ };
62
+ consider(length / 2, { kind: 'midpoint' });
63
+ for (const anchor of options.anchors) {
64
+ consider(wallSplitDistance(wall, anchor), { kind: 'alignment', anchor });
65
+ }
66
+ return { distance: best.distance, snap: best.snap };
67
+ }
68
+ /** Ends of the level's other walls, for 'lines' alignment. */
69
+ export function wallSplitAnchors(nodes, wall) {
70
+ const own = (point) => [wall.start, wall.end].some((end) => end[0] === point[0] && end[1] === point[1]);
71
+ return Object.values(nodes).flatMap((node) => node.type === 'wall' && node.id !== wall.id && node.parentId === wall.parentId
72
+ ? [node.start, node.end].filter((point) => !own(point))
73
+ : []);
74
+ }
75
+ export function wallSplitPreview(nodes, wall, distances) {
76
+ const length = getWallCurveLength(wall);
77
+ const frames = distances.map((distance) => getWallCurveFrameAt(wall, length > 0 ? distance / length : 0));
78
+ let message = '';
79
+ if ([wall, ...Object.values(nodes).filter((n) => n.parentId === wall.id)].some((n) => n.metadata.arrayModifier || n.metadata.linkedArray)) {
80
+ message = 'Make the linked array real before splitting this wall.';
81
+ }
82
+ else {
83
+ try {
84
+ planWallDivisions(nodes, wall.id, distances);
85
+ }
86
+ catch (error) {
87
+ message = error instanceof Error ? error.message : 'This wall cannot be split here.';
88
+ }
89
+ }
90
+ return { distances: [...distances], length, frames, valid: !message, message };
91
+ }
92
+ /** What to label: both sides of a single cut, or one length repeated across even cuts. */
93
+ export function wallSplitSegmentLabels(wall, preview) {
94
+ const bounds = [0, ...preview.distances, preview.length];
95
+ const segments = bounds.slice(1).map((end, index) => [bounds[index], end]);
96
+ const count = preview.distances.length === 1 ? 1 : segments.length;
97
+ return (count === 1 ? segments : segments.slice(0, 1)).map(([from, to]) => {
98
+ const { point, tangent } = getWallCurveFrameAt(wall, preview.length > 0 ? (from + to) / 2 / preview.length : 0);
99
+ return {
100
+ length: to - from,
101
+ count,
102
+ midpoint: [point.x, point.y],
103
+ direction: [tangent.x, tangent.y],
104
+ };
105
+ });
106
+ }
@@ -0,0 +1,16 @@
1
+ import { type WallNode } from '@pascal-app/core';
2
+ /**
3
+ * A split session: the wall's `reshaping` scope (so the snapping chip and the
4
+ * kind's HUD hints resolve), one centred cut, and the watchers that end it —
5
+ * Esc, the wall or its edit rights going away, another interaction, leaving
6
+ * select mode. Both views render the same draft; either can commit.
7
+ */
8
+ export declare function openWallSplit(wall: WallNode): void;
9
+ export declare function closeWallSplit(): void;
10
+ /** Pointer projected onto the wall; Alt (`free`) skips snapping. */
11
+ export declare function hoverWallSplit(raw: number, free?: boolean): void;
12
+ export declare function setWallSplitCuts(cuts: number): void;
13
+ /** Re-plan against the current scene (after an external edit). */
14
+ export declare function refreshWallSplit(): void;
15
+ export declare function commitWallSplit(): void;
16
+ //# sourceMappingURL=split-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-session.d.ts","sourceRoot":"","sources":["../../src/wall/split-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAuCzB;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,QA6C3C;AAED,wBAAgB,cAAc,SAQ7B;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,UAAQ,QAevD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,QAQ5C;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,SAM/B;AAED,wBAAgB,eAAe,SAY9B"}
@@ -0,0 +1,138 @@
1
+ import { getWallCurveLength, planWallDivisions, runAsSingleSceneHistoryStep, useScene, } from '@pascal-app/core';
2
+ import { isGridSnapActive, isMagneticSnapActive, triggerSFX, useEditor, useInteractionScope, } from '@pascal-app/editor';
3
+ import { snapWallSplitDistance, WALL_SPLIT_MAX_CUTS, wallSplitAnchors, wallSplitDistances, wallSplitPreview, } from './split-preview';
4
+ import { useWallSplit } from './split-store';
5
+ // Pointer distance (m) within which a 'lines' alignment target catches the cut.
6
+ const ALIGNMENT_TOLERANCE = 0.2;
7
+ const ownsSplit = () => {
8
+ const { scope } = useInteractionScope.getState();
9
+ return scope.kind === 'reshaping' && scope.reshape === 'split';
10
+ };
11
+ const currentWall = (draft) => {
12
+ const wall = useScene.getState().nodes[draft.wallId];
13
+ return wall?.type === 'wall' ? wall : null;
14
+ };
15
+ const withPreview = (draft, wall) => ({
16
+ ...draft,
17
+ preview: wallSplitPreview(useScene.getState().nodes, wall, wallSplitDistances(getWallCurveLength(wall), draft.cuts, draft.distance)),
18
+ });
19
+ let teardown = null;
20
+ /**
21
+ * A split session: the wall's `reshaping` scope (so the snapping chip and the
22
+ * kind's HUD hints resolve), one centred cut, and the watchers that end it —
23
+ * Esc, the wall or its edit rights going away, another interaction, leaving
24
+ * select mode. Both views render the same draft; either can commit.
25
+ */
26
+ export function openWallSplit(wall) {
27
+ if (useScene.getState().readOnly)
28
+ return;
29
+ closeWallSplit();
30
+ useEditor.getState().setMode('select');
31
+ useInteractionScope
32
+ .getState()
33
+ .begin({ kind: 'reshaping', nodeId: wall.id, reshape: 'split', driver: 'tool' });
34
+ useWallSplit
35
+ .getState()
36
+ .setDraft(withPreview({ wallId: wall.id, cuts: 1, distance: getWallCurveLength(wall) / 2, snap: null }, wall));
37
+ const onKey = (event) => {
38
+ if (event.key !== 'Escape')
39
+ return;
40
+ event.preventDefault();
41
+ event.stopImmediatePropagation();
42
+ closeWallSplit();
43
+ };
44
+ const stopScene = useScene.subscribe((state, previous) => {
45
+ if (state.readOnly || state.nodes[wall.id]?.type !== 'wall')
46
+ closeWallSplit();
47
+ else if (state.nodes !== previous.nodes)
48
+ refreshWallSplit();
49
+ });
50
+ const stopScope = useInteractionScope.subscribe(({ scope }) => {
51
+ if (!(scope.kind === 'reshaping' && scope.reshape === 'split'))
52
+ closeWallSplit();
53
+ });
54
+ const stopEditor = useEditor.subscribe((state) => {
55
+ if (state.mode !== 'select' ||
56
+ state.isCaptureMode ||
57
+ state.isPreviewMode ||
58
+ state.isFirstPersonMode)
59
+ closeWallSplit();
60
+ });
61
+ const hasWindow = typeof window !== 'undefined';
62
+ if (hasWindow)
63
+ window.addEventListener('keydown', onKey, true);
64
+ teardown = () => {
65
+ if (hasWindow)
66
+ window.removeEventListener('keydown', onKey, true);
67
+ stopScene();
68
+ stopScope();
69
+ stopEditor();
70
+ };
71
+ }
72
+ export function closeWallSplit() {
73
+ const stop = teardown;
74
+ teardown = null;
75
+ stop?.();
76
+ useWallSplit.getState().setDraft(null);
77
+ useInteractionScope
78
+ .getState()
79
+ .endIf((scope) => scope.kind === 'reshaping' && scope.reshape === 'split');
80
+ }
81
+ /** Pointer projected onto the wall; Alt (`free`) skips snapping. */
82
+ export function hoverWallSplit(raw, free = false) {
83
+ const draft = useWallSplit.getState().draft;
84
+ // Several cuts stay evenly spaced, so the pointer has nothing to move.
85
+ if (!draft || draft.cuts > 1 || !ownsSplit())
86
+ return;
87
+ const wall = currentWall(draft);
88
+ if (!wall)
89
+ return closeWallSplit();
90
+ const { distance, snap } = free
91
+ ? { distance: raw, snap: null }
92
+ : snapWallSplitDistance(wall, raw, {
93
+ gridStep: isGridSnapActive() ? useEditor.getState().gridSnapStep : null,
94
+ anchors: isMagneticSnapActive() ? wallSplitAnchors(useScene.getState().nodes, wall) : null,
95
+ tolerance: ALIGNMENT_TOLERANCE,
96
+ });
97
+ if (distance === draft.distance && snap?.kind === draft.snap?.kind)
98
+ return;
99
+ useWallSplit.getState().setDraft(withPreview({ ...draft, distance, snap }, wall));
100
+ }
101
+ export function setWallSplitCuts(cuts) {
102
+ const draft = useWallSplit.getState().draft;
103
+ if (!draft || !ownsSplit())
104
+ return;
105
+ const next = Math.min(WALL_SPLIT_MAX_CUTS, Math.max(1, Math.round(cuts)));
106
+ if (next === draft.cuts)
107
+ return;
108
+ const wall = currentWall(draft);
109
+ if (!wall)
110
+ return closeWallSplit();
111
+ useWallSplit.getState().setDraft(withPreview({ ...draft, cuts: next }, wall));
112
+ }
113
+ /** Re-plan against the current scene (after an external edit). */
114
+ export function refreshWallSplit() {
115
+ const draft = useWallSplit.getState().draft;
116
+ if (!draft)
117
+ return;
118
+ const wall = currentWall(draft);
119
+ if (!wall)
120
+ return closeWallSplit();
121
+ useWallSplit.getState().setDraft(withPreview(draft, wall));
122
+ }
123
+ export function commitWallSplit() {
124
+ const draft = useWallSplit.getState().draft;
125
+ const current = useScene.getState();
126
+ if (!draft || current.readOnly || !ownsSplit())
127
+ return;
128
+ const wall = currentWall(draft);
129
+ if (!wall)
130
+ return closeWallSplit();
131
+ const checked = withPreview(draft, wall);
132
+ if (!checked.preview.valid)
133
+ return useWallSplit.getState().setDraft(checked);
134
+ const plan = planWallDivisions(current.nodes, wall.id, checked.preview.distances);
135
+ runAsSingleSceneHistoryStep(useScene, () => current.applyNodeChanges(plan.changes));
136
+ closeWallSplit();
137
+ triggerSFX('sfx:structure-build');
138
+ }
@@ -0,0 +1,16 @@
1
+ import type { WallNode } from '@pascal-app/core';
2
+ import type { WallSplitPreview, WallSplitSnap } from './split-preview';
3
+ export type WallSplitDraft = {
4
+ wallId: WallNode['id'];
5
+ cuts: number;
6
+ /** The single cut's snapped distance from the wall start; more cuts are evenly spaced. */
7
+ distance: number;
8
+ snap: WallSplitSnap;
9
+ preview: WallSplitPreview;
10
+ };
11
+ /** The open split's cut preview. Every transition lives in `split-session.ts`. */
12
+ export declare const useWallSplit: import("zustand").UseBoundStore<import("zustand").StoreApi<{
13
+ draft: WallSplitDraft | null;
14
+ setDraft: (draft: WallSplitDraft | null) => void;
15
+ }>>;
16
+ //# sourceMappingURL=split-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-store.d.ts","sourceRoot":"","sources":["../../src/wall/split-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEtE,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,YAAY;WAChB,cAAc,GAAG,IAAI;cAClB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI;GAI/C,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { create } from 'zustand';
2
+ /** The open split's cut preview. Every transition lives in `split-session.ts`. */
3
+ export const useWallSplit = create((set) => ({
4
+ draft: null,
5
+ setDraft: (draft) => set({ draft }),
6
+ }));
@@ -0,0 +1,10 @@
1
+ import { type AnyNode } from '@pascal-app/core';
2
+ /**
3
+ * The wall's `split` affordance (3D): cut markers, segment lengths and the
4
+ * pointer binding. The session (`split-session.ts`) owns the scope and draft;
5
+ * the plan layer renders the same draft.
6
+ */
7
+ export default function WallSplitTool(_props: {
8
+ node: AnyNode;
9
+ }): import("react").JSX.Element | null;
10
+ //# sourceMappingURL=split-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-tool.d.ts","sourceRoot":"","sources":["../../src/wall/split-tool.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAA6C,MAAM,kBAAkB,CAAA;AAgB1F;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,sCA8J9D"}
@@ -0,0 +1,95 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { getWallThickness, sceneRegistry, useScene } from '@pascal-app/core';
4
+ import { DRAFT_LABEL_Y_OFFSET, DraftMeasurementLabel, EDITOR_LAYER, formatLinearMeasurement, NO_RAYCAST, } from '@pascal-app/editor';
5
+ import { BATCHED_LAYER, getSceneTheme, SCENE_LAYER, useViewer } from '@pascal-app/viewer';
6
+ import { useFrame, useThree } from '@react-three/fiber';
7
+ import { useEffect, useRef } from 'react';
8
+ import { Raycaster, Vector2 } from 'three';
9
+ import { bindWallSplitPointer } from './split-pointer';
10
+ import { wallSplitDistance, wallSplitMarkerColor, wallSplitSegmentLabels } from './split-preview';
11
+ import { useWallSplit } from './split-store';
12
+ /**
13
+ * The wall's `split` affordance (3D): cut markers, segment lengths and the
14
+ * pointer binding. The session (`split-session.ts`) owns the scope and draft;
15
+ * the plan layer renders the same draft.
16
+ */
17
+ export default function WallSplitTool(_props) {
18
+ const draft = useWallSplit((s) => s.draft);
19
+ const wallId = draft?.wallId;
20
+ const wall = useScene((s) => (draft ? s.nodes[draft.wallId] : undefined));
21
+ const unit = useViewer((s) => s.unit);
22
+ const metricNotation = useViewer((s) => s.metricNotation);
23
+ const isDark = useViewer((s) => getSceneTheme(s.sceneTheme).appearance === 'dark');
24
+ const { gl, camera } = useThree();
25
+ const root = useRef(null);
26
+ const column = useRef(null);
27
+ const top = useRef(null);
28
+ const base = useRef(null);
29
+ useEffect(() => {
30
+ if (!wallId)
31
+ return;
32
+ const surface = gl.domElement;
33
+ const raycaster = new Raycaster();
34
+ raycaster.layers.set(SCENE_LAYER);
35
+ raycaster.layers.enable(BATCHED_LAYER);
36
+ const pointer = new Vector2();
37
+ return bindWallSplitPointer(surface, (event) => {
38
+ if (event.target !== surface)
39
+ return null;
40
+ const current = useScene.getState().nodes[wallId];
41
+ const object = sceneRegistry.nodes.get(wallId);
42
+ if (current?.type !== 'wall' || !object?.parent)
43
+ return null;
44
+ const rect = surface.getBoundingClientRect();
45
+ if (!rect.width || !rect.height)
46
+ return null;
47
+ pointer.set(((event.clientX - rect.left) / rect.width) * 2 - 1, 1 - ((event.clientY - rect.top) / rect.height) * 2);
48
+ raycaster.setFromCamera(pointer, camera);
49
+ object.updateWorldMatrix(true, true);
50
+ const hit = raycaster.intersectObject(object, true)[0];
51
+ if (!hit)
52
+ return null;
53
+ const local = object.parent.worldToLocal(hit.point.clone());
54
+ return wallSplitDistance(current, [local.x, local.z]);
55
+ });
56
+ }, [wallId, gl, camera]);
57
+ useFrame(() => {
58
+ if (!(root.current && column.current && top.current && base.current))
59
+ return;
60
+ if (wall?.type !== 'wall' || !draft)
61
+ return;
62
+ const object = sceneRegistry.nodes.get(wall.id);
63
+ if (!object?.parent || !object.geometry) {
64
+ root.current.visible = false;
65
+ return;
66
+ }
67
+ root.current.visible = true;
68
+ object.updateWorldMatrix(true, false);
69
+ root.current.matrix.copy(object.parent.matrixWorld);
70
+ if (!object.geometry.boundingBox)
71
+ object.geometry.computeBoundingBox();
72
+ const bounds = object.geometry.boundingBox;
73
+ const bottom = object.position.y + (bounds?.min.y ?? 0);
74
+ const height = bounds ? bounds.max.y - bounds.min.y : (wall.height ?? 3);
75
+ column.current.position.y = bottom + height / 2;
76
+ column.current.scale.y = Math.max(0.05, height + 0.05);
77
+ top.current.position.y = bottom + height + DRAFT_LABEL_Y_OFFSET;
78
+ base.current.position.y = bottom + 0.01;
79
+ });
80
+ if (!draft || wall?.type !== 'wall')
81
+ return null;
82
+ const { preview, snap } = draft;
83
+ const thickness = getWallThickness(wall);
84
+ const color = wallSplitMarkerColor(preview.valid);
85
+ const cut = preview.frames[0]?.point;
86
+ const guide = snap?.kind === 'alignment' && cut
87
+ ? {
88
+ x: (snap.anchor[0] + cut.x) / 2,
89
+ z: (snap.anchor[1] + cut.y) / 2,
90
+ length: Math.hypot(cut.x - snap.anchor[0], cut.y - snap.anchor[1]),
91
+ angle: -Math.atan2(cut.y - snap.anchor[1], cut.x - snap.anchor[0]),
92
+ }
93
+ : null;
94
+ return (_jsxs("group", { ref: root, matrixAutoUpdate: false, children: [_jsx("group", { ref: column, children: preview.frames.map(({ point, tangent }, index) => (_jsxs("group", { position: [point.x, 0, point.y], rotation: [0, -Math.atan2(tangent.y, tangent.x), 0], userData: { testId: 'pascal-split-marker', valid: preview.valid }, children: [_jsxs("mesh", { layers: EDITOR_LAYER, raycast: NO_RAYCAST, renderOrder: 8900, scale: [0.074, 1, thickness + 0.12], children: [_jsx("boxGeometry", {}), _jsx("meshBasicMaterial", { color: preview.valid ? '#f7f3ed' : '#faece9', depthTest: false, depthWrite: false, toneMapped: false })] }), _jsxs("mesh", { layers: EDITOR_LAYER, raycast: NO_RAYCAST, renderOrder: 8910, scale: [0.026, 1.001, thickness + 0.07], children: [_jsx("boxGeometry", {}), _jsx("meshBasicMaterial", { color: color, depthTest: false, depthWrite: false, toneMapped: false })] })] }, index))) }), _jsx("group", { ref: top, children: !preview.valid && cut ? (_jsx(DraftMeasurementLabel, { color: color, label: preview.message, position: [cut.x, 0, cut.y], shadowColor: isDark ? '#111111' : '#ffffff' })) : (wallSplitSegmentLabels(wall, preview).map((segment, index) => (_jsx(DraftMeasurementLabel, { color: isDark ? '#ffffff' : '#111111', label: `${formatLinearMeasurement(segment.length, unit, metricNotation)}${segment.count > 1 ? ` × ${segment.count}` : ''}`, position: [segment.midpoint[0], 0, segment.midpoint[1]], shadowColor: isDark ? '#111111' : '#ffffff' }, index)))) }), _jsx("group", { ref: base, children: guide && (_jsxs("mesh", { layers: EDITOR_LAYER, position: [guide.x, 0, guide.z], raycast: NO_RAYCAST, renderOrder: 8890, rotation: [0, guide.angle, 0], scale: [guide.length, 0.01, 0.02], children: [_jsx("boxGeometry", {}), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, depthWrite: false, opacity: 0.8, toneMapped: false, transparent: true })] })) })] }));
95
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/wall/system.tsx"],"names":[],"mappings":"AAkCA,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAyChD;AASD;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,mCAShB,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/wall/system.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAyChD;AASD;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,mCAShB,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -4,6 +4,8 @@ import { useLiveNodeOverrides, useScene } from '@pascal-app/core';
4
4
  import { timeSpan, WallCutout, WallSystem } from '@pascal-app/viewer';
5
5
  import { useFrame } from '@react-three/fiber';
6
6
  import { useEffect } from 'react';
7
+ import { curtainWallGeometryAdapter } from './curtain-wall-adapter';
8
+ import { getCurtainAwareWallMaterials } from './curtain-wall-materials';
7
9
  import { buildWallTreatmentLevelData, clearWallTreatmentMiterCache, sameTreatmentWalls, treatmentProudKeys, useWallTreatmentLevelData, } from './treatment-level-data';
8
10
  import { wallTreatmentProudOffsets } from './treatments';
9
11
  import { WallBatchSystem } from './wall-batch-system';
@@ -93,6 +95,6 @@ const WallTreatmentMiterSystem = () => {
93
95
  * draw calls instead of one per wall face run.
94
96
  */
95
97
  const WallSystems = () => {
96
- return (_jsxs(_Fragment, { children: [_jsx(WallTreatmentMiterSystem, {}), _jsx(WallSystem, {}), _jsx(WallCutout, {}), _jsx(WallBatchSystem, {})] }));
98
+ return (_jsxs(_Fragment, { children: [_jsx(WallTreatmentMiterSystem, {}), _jsx(WallSystem, { geometryAdapter: curtainWallGeometryAdapter }), _jsx(WallCutout, { materialResolver: getCurtainAwareWallMaterials }), _jsx(WallBatchSystem, {})] }));
97
99
  };
98
100
  export default WallSystems;
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/wall/tool.tsx"],"names":[],"mappings":"AA6bA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAuf5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/wall/tool.tsx"],"names":[],"mappings":"AAs7BA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAS5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
package/dist/wall/tool.js CHANGED
@@ -1,11 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { calculateLevelMiters, collectAlignmentAnchors, DEFAULT_LEVEL_HEIGHT, emitter, GROUND_SUPPORT_ID, getWallMiterBoundaryPoints, resolveAlignment, resolveBuildingForLevel, sceneRegistry, useScene, wallClosesRoom, } from '@pascal-app/core';
3
- import { CursorSphere, chainEndJoinsExistingWall, clearPlacementSurface, createWallOnCurrentLevel, EDITOR_LAYER, formatAngleRadians, formatLinearMeasurement, getAngleArcToSegmentReference, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, isAlignmentGuideActive, isAngleSnapActive, isMagneticSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolvePointerSupportSurface, snapWallDraftPointDetailed, triggerSFX, useAlignmentGuides, useEditor, useFloorplanDraftPreview, useSegmentDraftChain, useWallSnapIndicator, WALL_CONNECT_SNAP_RADIUS, WALL_JOIN_SNAP_RADIUS, } from '@pascal-app/editor';
3
+ import { CursorSphere, chainEndJoinsExistingWall, clearPlacementSurface, createWallOnCurrentLevel, DraftMeasurementLabel, EDITOR_LAYER, formatAngleRadians, formatLinearMeasurement, getAngleArcToSegmentReference, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, isAlignmentGuideActive, isAngleSnapActive, isMagneticSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolvePointerSupportSurface, snapWallDraftPointDetailed, triggerSFX, useAlignmentGuides, useEditor, useFloorplanDraftPreview, useSegmentDraftChain, useWallSnapIndicator, WALL_CONNECT_SNAP_RADIUS, WALL_JOIN_SNAP_RADIUS, } from '@pascal-app/editor';
4
4
  import { getSceneTheme, useViewer } from '@pascal-app/viewer';
5
5
  import { useThree } from '@react-three/fiber';
6
6
  import { useEffect, useRef, useState } from 'react';
7
7
  import { DoubleSide, Vector3 } from 'three';
8
- import { DraftAngleArc, DraftAxisGuides, DraftMeasurementLabel, getNearestAxisAngleLabel, } from '../shared/draft-axis-guides';
8
+ import { DraftAngleArc, DraftAxisGuides, getNearestAxisAngleLabel, } from '../shared/draft-axis-guides';
9
+ import { useWallDrawingMode, useWallDrawingModeKeys } from './drawing-mode';
10
+ import RectangleWallTool from './rectangle-tool';
9
11
  /**
10
12
  * Phase 5 Stage D — wall placement tool (kind-owned).
11
13
  *
@@ -289,7 +291,7 @@ function getBelowLevelWalls() {
289
291
  .sort((a, b) => b.level - a.level)[0];
290
292
  return getLevelWalls(belowLevel?.id ?? null, nodes);
291
293
  }
292
- export const WallTool = () => {
294
+ const LineWallTool = () => {
293
295
  const unit = useViewer((state) => state.unit);
294
296
  const metricNotation = useViewer((state) => state.metricNotation);
295
297
  const isDark = useViewer((state) => getSceneTheme(state.sceneTheme).appearance === 'dark');
@@ -331,9 +333,6 @@ export const WallTool = () => {
331
333
  const [axisGuide, setAxisGuide] = useState(null);
332
334
  const measurementColor = isDark ? '#ffffff' : '#111111';
333
335
  const measurementShadowColor = isDark ? '#111111' : '#ffffff';
334
- // Clear preset-seeded defaults on deactivation so a later manual wall draw
335
- // isn't built with a stale preset's parameters. Unmount-only.
336
- useEffect(() => () => useEditor.getState().setToolDefaults('wall', null), []);
337
336
  useEffect(() => {
338
337
  let gridPosition = [0, 0];
339
338
  let previousWallEnd = null;
@@ -382,6 +381,7 @@ export const WallTool = () => {
382
381
  const pointedSurfaceFor = (event) => event.nativeEvent?.target instanceof HTMLCanvasElement
383
382
  ? resolvePointerSupportSurface(cameraRef.current, event.position, {
384
383
  includeNodeTopSurfaces: true,
384
+ pointerRay: event.nativeEvent.ray,
385
385
  })
386
386
  : null;
387
387
  const snappedWallConstructionPlane = (targetWallIds, walls) => {
@@ -679,4 +679,12 @@ export const WallTool = () => {
679
679
  }, [unit, metricNotation]);
680
680
  return (_jsxs("group", { children: [_jsx(DraftAxisGuides, { guide: axisGuide, labelColor: measurementColor, labelShadowColor: measurementShadowColor }), _jsx(CursorSphere, { height: previewHeight, ref: cursorRef }), _jsxs("mesh", { layers: EDITOR_LAYER, ref: wallPreviewRef, renderOrder: 1, visible: false, children: [_jsx("boxGeometry", {}), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, depthWrite: false, opacity: 0.5, side: DoubleSide, transparent: true })] }), draftMeasurement && (_jsxs(_Fragment, { children: [_jsx(DraftMeasurementLabel, { color: measurementColor, label: draftMeasurement.lengthLabel, position: draftMeasurement.lengthPosition, shadowColor: measurementShadowColor }), draftMeasurement.angleLabels.map((angleLabel) => (_jsxs("group", { children: [_jsx(DraftAngleArc, { arc: angleLabel.arc, color: measurementColor }), _jsx(DraftMeasurementLabel, { color: measurementColor, label: angleLabel.label, position: angleLabel.position, shadowColor: measurementShadowColor })] }, angleLabel.id)))] }))] }));
681
681
  };
682
+ export const WallTool = () => {
683
+ // Clear preset-seeded defaults on deactivation so a later manual wall draw
684
+ // isn't built with a stale preset's parameters. Unmount-only.
685
+ useEffect(() => () => useEditor.getState().setToolDefaults('wall', null), []);
686
+ useWallDrawingModeKeys();
687
+ const mode = useWallDrawingMode((s) => s.mode);
688
+ return mode === 'rectangle' ? _jsx(RectangleWallTool, {}) : _jsx(LineWallTool, {});
689
+ };
682
690
  export default WallTool;
@@ -1 +1 @@
1
- {"version":3,"file":"wall-batch-system.d.ts","sourceRoot":"","sources":["../../src/wall/wall-batch-system.tsx"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,KAAK,QAAQ,EAAW,IAAI,EAAiB,MAAM,OAAO,CAAA;AAkGnE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAKnD;AA6BD,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAA;AA+BtF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAEnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAW5E;AAMD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,eAAe,GAAE,WAAW,CAAC,MAAM,CAAa,GAC/C,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAoBnC;AAsFD,eAAO,MAAM,eAAe,YAmE3B,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,IAAI,EACtB,OAAO,EAAE;IAAE,OAAO,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAA;CAAE,QAyI3D"}
1
+ {"version":3,"file":"wall-batch-system.d.ts","sourceRoot":"","sources":["../../src/wall/wall-batch-system.tsx"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,KAAK,QAAQ,EAAW,IAAI,EAAiB,MAAM,OAAO,CAAA;AAkGnE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAKnD;AA6BD,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAA;AAiCtF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAEnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAW5E;AAMD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,eAAe,GAAE,WAAW,CAAC,MAAM,CAAa,GAC/C,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAoBnC;AAsFD,eAAO,MAAM,eAAe,YAmE3B,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,IAAI,EACtB,OAAO,EAAE;IAAE,OAAO,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAA;CAAE,QAyI3D"}
@@ -103,6 +103,9 @@ function toCandidate(nodeId, node, excludedNodeIds = EMPTY_IDS) {
103
103
  return null;
104
104
  if (node.visible === false)
105
105
  return null;
106
+ // Curtain walls use a separate caster that excludes their transparent panes.
107
+ if (node.wallType === 'curtain')
108
+ return null;
106
109
  const mesh = sceneRegistry.nodes.get(nodeId);
107
110
  if (!mesh?.visible)
108
111
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/window/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,cAAc,EAEd,QAAQ,EAER,UAAU,IAAI,cAAc,EAC7B,MAAM,kBAAkB,CAAA;AAqBzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAQrC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAC3B,SAAS,GAAG,IAAI,CAWlB;AA0JD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CAqG9D,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/window/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,cAAc,EAEd,QAAQ,EAER,UAAU,IAAI,cAAc,EAC7B,MAAM,kBAAkB,CAAA;AAwBzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAQrC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAC3B,SAAS,GAAG,IAAI,CAWlB;AAwMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CAsG9D,CAAA"}