@pascal-app/nodes 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1717) hide show
  1. package/dist/box-vent/definition.d.ts +30 -0
  2. package/dist/box-vent/definition.d.ts.map +1 -0
  3. package/dist/box-vent/definition.js +210 -0
  4. package/dist/box-vent/floorplan.d.ts +15 -0
  5. package/dist/box-vent/floorplan.d.ts.map +1 -0
  6. package/dist/box-vent/floorplan.js +187 -0
  7. package/dist/box-vent/geometry.d.ts +40 -0
  8. package/dist/box-vent/geometry.d.ts.map +1 -0
  9. package/dist/box-vent/geometry.js +421 -0
  10. package/dist/box-vent/index.d.ts +4 -0
  11. package/dist/box-vent/index.d.ts.map +1 -0
  12. package/dist/box-vent/index.js +3 -0
  13. package/dist/box-vent/move-tool.d.ts +14 -0
  14. package/dist/box-vent/move-tool.d.ts.map +1 -0
  15. package/dist/box-vent/move-tool.js +217 -0
  16. package/dist/box-vent/panel.d.ts +14 -0
  17. package/dist/box-vent/panel.d.ts.map +1 -0
  18. package/dist/box-vent/panel.js +143 -0
  19. package/dist/box-vent/parametrics.d.ts +9 -0
  20. package/dist/box-vent/parametrics.d.ts.map +1 -0
  21. package/dist/box-vent/parametrics.js +35 -0
  22. package/dist/box-vent/preview.d.ts +17 -0
  23. package/dist/box-vent/preview.d.ts.map +1 -0
  24. package/dist/box-vent/preview.js +41 -0
  25. package/dist/box-vent/renderer.d.ts +26 -0
  26. package/dist/box-vent/renderer.d.ts.map +1 -0
  27. package/dist/box-vent/renderer.js +127 -0
  28. package/dist/box-vent/schema.d.ts +2 -0
  29. package/dist/box-vent/schema.d.ts.map +1 -0
  30. package/dist/box-vent/schema.js +3 -0
  31. package/dist/box-vent/tool.d.ts +13 -0
  32. package/dist/box-vent/tool.d.ts.map +1 -0
  33. package/dist/box-vent/tool.js +116 -0
  34. package/dist/building/definition.d.ts +12 -0
  35. package/dist/building/definition.d.ts.map +1 -0
  36. package/dist/building/definition.js +53 -0
  37. package/dist/building/index.d.ts +2 -0
  38. package/dist/building/index.d.ts.map +1 -0
  39. package/dist/building/index.js +1 -0
  40. package/dist/building/move-tool.d.ts +6 -0
  41. package/dist/building/move-tool.d.ts.map +1 -0
  42. package/dist/building/move-tool.js +187 -0
  43. package/dist/building/parametrics.d.ts +3 -0
  44. package/dist/building/parametrics.d.ts.map +1 -0
  45. package/dist/building/parametrics.js +3 -0
  46. package/dist/building/renderer.d.ts +6 -0
  47. package/dist/building/renderer.d.ts.map +1 -0
  48. package/dist/building/renderer.js +12 -0
  49. package/dist/building/schema.d.ts +2 -0
  50. package/dist/building/schema.d.ts.map +1 -0
  51. package/dist/building/schema.js +1 -0
  52. package/dist/cabinet/animation.d.ts +5 -0
  53. package/dist/cabinet/animation.d.ts.map +1 -0
  54. package/dist/cabinet/animation.js +48 -0
  55. package/dist/cabinet/compartment-card.d.ts +17 -0
  56. package/dist/cabinet/compartment-card.d.ts.map +1 -0
  57. package/dist/cabinet/compartment-card.js +145 -0
  58. package/dist/cabinet/continuous-placement.d.ts +49 -0
  59. package/dist/cabinet/continuous-placement.d.ts.map +1 -0
  60. package/dist/cabinet/continuous-placement.js +110 -0
  61. package/dist/cabinet/cooktop-flame.d.ts +14 -0
  62. package/dist/cabinet/cooktop-flame.d.ts.map +1 -0
  63. package/dist/cabinet/cooktop-flame.js +115 -0
  64. package/dist/cabinet/definition.d.ts +26 -0
  65. package/dist/cabinet/definition.d.ts.map +1 -0
  66. package/dist/cabinet/definition.js +1016 -0
  67. package/dist/cabinet/floorplan-move.d.ts +15 -0
  68. package/dist/cabinet/floorplan-move.d.ts.map +1 -0
  69. package/dist/cabinet/floorplan-move.js +192 -0
  70. package/dist/cabinet/floorplan-overrides.d.ts +16 -0
  71. package/dist/cabinet/floorplan-overrides.d.ts.map +1 -0
  72. package/dist/cabinet/floorplan-overrides.js +47 -0
  73. package/dist/cabinet/floorplan.d.ts +4 -0
  74. package/dist/cabinet/floorplan.d.ts.map +1 -0
  75. package/dist/cabinet/floorplan.js +311 -0
  76. package/dist/cabinet/geometry/cooktop.d.ts +20 -0
  77. package/dist/cabinet/geometry/cooktop.d.ts.map +1 -0
  78. package/dist/cabinet/geometry/cooktop.js +269 -0
  79. package/dist/cabinet/geometry/dishwasher.d.ts +4 -0
  80. package/dist/cabinet/geometry/dishwasher.d.ts.map +1 -0
  81. package/dist/cabinet/geometry/dishwasher.js +100 -0
  82. package/dist/cabinet/geometry/fridge.d.ts +5 -0
  83. package/dist/cabinet/geometry/fridge.d.ts.map +1 -0
  84. package/dist/cabinet/geometry/fridge.js +393 -0
  85. package/dist/cabinet/geometry/fronts.d.ts +9 -0
  86. package/dist/cabinet/geometry/fronts.d.ts.map +1 -0
  87. package/dist/cabinet/geometry/fronts.js +468 -0
  88. package/dist/cabinet/geometry/hood.d.ts +6 -0
  89. package/dist/cabinet/geometry/hood.d.ts.map +1 -0
  90. package/dist/cabinet/geometry/hood.js +108 -0
  91. package/dist/cabinet/geometry/oven-microwave.d.ts +5 -0
  92. package/dist/cabinet/geometry/oven-microwave.d.ts.map +1 -0
  93. package/dist/cabinet/geometry/oven-microwave.js +292 -0
  94. package/dist/cabinet/geometry/pantry.d.ts +5 -0
  95. package/dist/cabinet/geometry/pantry.d.ts.map +1 -0
  96. package/dist/cabinet/geometry/pantry.js +80 -0
  97. package/dist/cabinet/geometry/run.d.ts +6 -0
  98. package/dist/cabinet/geometry/run.d.ts.map +1 -0
  99. package/dist/cabinet/geometry/run.js +124 -0
  100. package/dist/cabinet/geometry/shared.d.ts +46 -0
  101. package/dist/cabinet/geometry/shared.d.ts.map +1 -0
  102. package/dist/cabinet/geometry/shared.js +356 -0
  103. package/dist/cabinet/geometry/sink.d.ts +29 -0
  104. package/dist/cabinet/geometry/sink.d.ts.map +1 -0
  105. package/dist/cabinet/geometry/sink.js +262 -0
  106. package/dist/cabinet/geometry.d.ts +6 -0
  107. package/dist/cabinet/geometry.d.ts.map +1 -0
  108. package/dist/cabinet/geometry.js +219 -0
  109. package/dist/cabinet/index.d.ts +5 -0
  110. package/dist/cabinet/index.d.ts.map +1 -0
  111. package/dist/cabinet/index.js +4 -0
  112. package/dist/cabinet/interaction.d.ts +15 -0
  113. package/dist/cabinet/interaction.d.ts.map +1 -0
  114. package/dist/cabinet/interaction.js +109 -0
  115. package/dist/cabinet/move-frame.d.ts +3 -0
  116. package/dist/cabinet/move-frame.d.ts.map +1 -0
  117. package/dist/cabinet/move-frame.js +252 -0
  118. package/dist/cabinet/paint.d.ts +2 -0
  119. package/dist/cabinet/paint.d.ts.map +1 -0
  120. package/dist/cabinet/paint.js +17 -0
  121. package/dist/cabinet/panel.d.ts +2 -0
  122. package/dist/cabinet/panel.d.ts.map +1 -0
  123. package/dist/cabinet/panel.js +356 -0
  124. package/dist/cabinet/parametrics.d.ts +4 -0
  125. package/dist/cabinet/parametrics.d.ts.map +1 -0
  126. package/dist/cabinet/parametrics.js +46 -0
  127. package/dist/cabinet/placement-status.d.ts +7 -0
  128. package/dist/cabinet/placement-status.d.ts.map +1 -0
  129. package/dist/cabinet/placement-status.js +6 -0
  130. package/dist/cabinet/placement-type.d.ts +9 -0
  131. package/dist/cabinet/placement-type.d.ts.map +1 -0
  132. package/dist/cabinet/placement-type.js +13 -0
  133. package/dist/cabinet/presets.d.ts +10 -0
  134. package/dist/cabinet/presets.d.ts.map +1 -0
  135. package/dist/cabinet/presets.js +168 -0
  136. package/dist/cabinet/quick-action-icons.d.ts +13 -0
  137. package/dist/cabinet/quick-action-icons.d.ts.map +1 -0
  138. package/dist/cabinet/quick-action-icons.js +29 -0
  139. package/dist/cabinet/quick-actions.d.ts +6 -0
  140. package/dist/cabinet/quick-actions.d.ts.map +1 -0
  141. package/dist/cabinet/quick-actions.js +203 -0
  142. package/dist/cabinet/run-layout.d.ts +94 -0
  143. package/dist/cabinet/run-layout.d.ts.map +1 -0
  144. package/dist/cabinet/run-layout.js +315 -0
  145. package/dist/cabinet/run-ops.d.ts +140 -0
  146. package/dist/cabinet/run-ops.d.ts.map +1 -0
  147. package/dist/cabinet/run-ops.js +1472 -0
  148. package/dist/cabinet/run-panel.d.ts +17 -0
  149. package/dist/cabinet/run-panel.d.ts.map +1 -0
  150. package/dist/cabinet/run-panel.js +220 -0
  151. package/dist/cabinet/scene-action.d.ts +8 -0
  152. package/dist/cabinet/scene-action.d.ts.map +1 -0
  153. package/dist/cabinet/scene-action.js +130 -0
  154. package/dist/cabinet/schema.d.ts +2 -0
  155. package/dist/cabinet/schema.d.ts.map +1 -0
  156. package/dist/cabinet/schema.js +1 -0
  157. package/dist/cabinet/slots.d.ts +4 -0
  158. package/dist/cabinet/slots.d.ts.map +1 -0
  159. package/dist/cabinet/slots.js +24 -0
  160. package/dist/cabinet/stack-transitions.d.ts +12 -0
  161. package/dist/cabinet/stack-transitions.d.ts.map +1 -0
  162. package/dist/cabinet/stack-transitions.js +112 -0
  163. package/dist/cabinet/stack.d.ts +102 -0
  164. package/dist/cabinet/stack.d.ts.map +1 -0
  165. package/dist/cabinet/stack.js +388 -0
  166. package/dist/cabinet/system.d.ts +13 -0
  167. package/dist/cabinet/system.d.ts.map +1 -0
  168. package/dist/cabinet/system.js +116 -0
  169. package/dist/cabinet/tool.d.ts +3 -0
  170. package/dist/cabinet/tool.d.ts.map +1 -0
  171. package/dist/cabinet/tool.js +850 -0
  172. package/dist/cabinet/tree-structure.d.ts +13 -0
  173. package/dist/cabinet/tree-structure.d.ts.map +1 -0
  174. package/dist/cabinet/tree-structure.js +138 -0
  175. package/dist/cabinet/wall-snap.d.ts +66 -0
  176. package/dist/cabinet/wall-snap.d.ts.map +1 -0
  177. package/dist/cabinet/wall-snap.js +255 -0
  178. package/dist/ceiling/boundary-editor.d.ts +17 -0
  179. package/dist/ceiling/boundary-editor.d.ts.map +1 -0
  180. package/dist/ceiling/boundary-editor.js +118 -0
  181. package/dist/ceiling/definition.d.ts +20 -0
  182. package/dist/ceiling/definition.d.ts.map +1 -0
  183. package/dist/ceiling/definition.js +161 -0
  184. package/dist/ceiling/floorplan-affordances.d.ts +181 -0
  185. package/dist/ceiling/floorplan-affordances.d.ts.map +1 -0
  186. package/dist/ceiling/floorplan-affordances.js +28 -0
  187. package/dist/ceiling/floorplan-move.d.ts +12 -0
  188. package/dist/ceiling/floorplan-move.d.ts.map +1 -0
  189. package/dist/ceiling/floorplan-move.js +16 -0
  190. package/dist/ceiling/floorplan.d.ts +9 -0
  191. package/dist/ceiling/floorplan.d.ts.map +1 -0
  192. package/dist/ceiling/floorplan.js +90 -0
  193. package/dist/ceiling/hole-editor.d.ts +10 -0
  194. package/dist/ceiling/hole-editor.d.ts.map +1 -0
  195. package/dist/ceiling/hole-editor.js +45 -0
  196. package/dist/ceiling/index.d.ts +3 -0
  197. package/dist/ceiling/index.d.ts.map +1 -0
  198. package/dist/ceiling/index.js +2 -0
  199. package/dist/ceiling/materials.d.ts +15 -0
  200. package/dist/ceiling/materials.d.ts.map +1 -0
  201. package/dist/ceiling/materials.js +61 -0
  202. package/dist/ceiling/move-tool.d.ts +6 -0
  203. package/dist/ceiling/move-tool.d.ts.map +1 -0
  204. package/dist/ceiling/move-tool.js +264 -0
  205. package/dist/ceiling/paint.d.ts +9 -0
  206. package/dist/ceiling/paint.d.ts.map +1 -0
  207. package/dist/ceiling/paint.js +37 -0
  208. package/dist/ceiling/panel.d.ts +11 -0
  209. package/dist/ceiling/panel.d.ts.map +1 -0
  210. package/dist/ceiling/panel.js +138 -0
  211. package/dist/ceiling/parametrics.d.ts +11 -0
  212. package/dist/ceiling/parametrics.d.ts.map +1 -0
  213. package/dist/ceiling/parametrics.js +16 -0
  214. package/dist/ceiling/renderer.d.ts +6 -0
  215. package/dist/ceiling/renderer.d.ts.map +1 -0
  216. package/dist/ceiling/renderer.js +87 -0
  217. package/dist/ceiling/schema.d.ts +2 -0
  218. package/dist/ceiling/schema.d.ts.map +1 -0
  219. package/dist/ceiling/schema.js +1 -0
  220. package/dist/ceiling/slots.d.ts +6 -0
  221. package/dist/ceiling/slots.d.ts.map +1 -0
  222. package/dist/ceiling/slots.js +7 -0
  223. package/dist/ceiling/system.d.ts +10 -0
  224. package/dist/ceiling/system.d.ts.map +1 -0
  225. package/dist/ceiling/system.js +14 -0
  226. package/dist/ceiling/tool.d.ts +3 -0
  227. package/dist/ceiling/tool.d.ts.map +1 -0
  228. package/dist/ceiling/tool.js +227 -0
  229. package/dist/chimney/definition.d.ts +18 -0
  230. package/dist/chimney/definition.d.ts.map +1 -0
  231. package/dist/chimney/definition.js +387 -0
  232. package/dist/chimney/floorplan.d.ts +17 -0
  233. package/dist/chimney/floorplan.d.ts.map +1 -0
  234. package/dist/chimney/floorplan.js +190 -0
  235. package/dist/chimney/geometry.d.ts +29 -0
  236. package/dist/chimney/geometry.d.ts.map +1 -0
  237. package/dist/chimney/geometry.js +500 -0
  238. package/dist/chimney/holes.d.ts +30 -0
  239. package/dist/chimney/holes.d.ts.map +1 -0
  240. package/dist/chimney/holes.js +310 -0
  241. package/dist/chimney/index.d.ts +4 -0
  242. package/dist/chimney/index.d.ts.map +1 -0
  243. package/dist/chimney/index.js +3 -0
  244. package/dist/chimney/move-tool.d.ts +19 -0
  245. package/dist/chimney/move-tool.d.ts.map +1 -0
  246. package/dist/chimney/move-tool.js +286 -0
  247. package/dist/chimney/paint.d.ts +24 -0
  248. package/dist/chimney/paint.d.ts.map +1 -0
  249. package/dist/chimney/paint.js +96 -0
  250. package/dist/chimney/panel.d.ts +2 -0
  251. package/dist/chimney/panel.d.ts.map +1 -0
  252. package/dist/chimney/panel.js +350 -0
  253. package/dist/chimney/parametrics.d.ts +4 -0
  254. package/dist/chimney/parametrics.d.ts.map +1 -0
  255. package/dist/chimney/parametrics.js +177 -0
  256. package/dist/chimney/presets.d.ts +27 -0
  257. package/dist/chimney/presets.d.ts.map +1 -0
  258. package/dist/chimney/presets.js +93 -0
  259. package/dist/chimney/preview.d.ts +14 -0
  260. package/dist/chimney/preview.d.ts.map +1 -0
  261. package/dist/chimney/preview.js +74 -0
  262. package/dist/chimney/renderer.d.ts +17 -0
  263. package/dist/chimney/renderer.d.ts.map +1 -0
  264. package/dist/chimney/renderer.js +193 -0
  265. package/dist/chimney/roof-trim.d.ts +23 -0
  266. package/dist/chimney/roof-trim.d.ts.map +1 -0
  267. package/dist/chimney/roof-trim.js +94 -0
  268. package/dist/chimney/schema.d.ts +2 -0
  269. package/dist/chimney/schema.d.ts.map +1 -0
  270. package/dist/chimney/schema.js +1 -0
  271. package/dist/chimney/tool.d.ts +3 -0
  272. package/dist/chimney/tool.d.ts.map +1 -0
  273. package/dist/chimney/tool.js +126 -0
  274. package/dist/column/definition.d.ts +21 -0
  275. package/dist/column/definition.d.ts.map +1 -0
  276. package/dist/column/definition.js +375 -0
  277. package/dist/column/floorplan-affordances.d.ts +32 -0
  278. package/dist/column/floorplan-affordances.d.ts.map +1 -0
  279. package/dist/column/floorplan-affordances.js +126 -0
  280. package/dist/column/floorplan-move.d.ts +11 -0
  281. package/dist/column/floorplan-move.d.ts.map +1 -0
  282. package/dist/column/floorplan-move.js +66 -0
  283. package/dist/column/floorplan.d.ts +15 -0
  284. package/dist/column/floorplan.d.ts.map +1 -0
  285. package/dist/column/floorplan.js +238 -0
  286. package/dist/column/index.d.ts +2 -0
  287. package/dist/column/index.d.ts.map +1 -0
  288. package/dist/column/index.js +1 -0
  289. package/dist/column/paint.d.ts +2 -0
  290. package/dist/column/paint.d.ts.map +1 -0
  291. package/dist/column/paint.js +15 -0
  292. package/dist/column/panel.d.ts +2 -0
  293. package/dist/column/panel.d.ts.map +1 -0
  294. package/dist/column/panel.js +414 -0
  295. package/dist/column/parametrics.d.ts +12 -0
  296. package/dist/column/parametrics.d.ts.map +1 -0
  297. package/dist/column/parametrics.js +21 -0
  298. package/dist/column/renderer.d.ts +20 -0
  299. package/dist/column/renderer.d.ts.map +1 -0
  300. package/dist/column/renderer.js +1016 -0
  301. package/dist/column/schema.d.ts +2 -0
  302. package/dist/column/schema.d.ts.map +1 -0
  303. package/dist/column/schema.js +1 -0
  304. package/dist/column/slots.d.ts +9 -0
  305. package/dist/column/slots.d.ts.map +1 -0
  306. package/dist/column/slots.js +19 -0
  307. package/dist/column/tool.d.ts +14 -0
  308. package/dist/column/tool.d.ts.map +1 -0
  309. package/dist/column/tool.js +133 -0
  310. package/dist/cupola/definition.d.ts +11 -0
  311. package/dist/cupola/definition.d.ts.map +1 -0
  312. package/dist/cupola/definition.js +143 -0
  313. package/dist/cupola/floorplan.d.ts +9 -0
  314. package/dist/cupola/floorplan.d.ts.map +1 -0
  315. package/dist/cupola/floorplan.js +89 -0
  316. package/dist/cupola/geometry.d.ts +23 -0
  317. package/dist/cupola/geometry.d.ts.map +1 -0
  318. package/dist/cupola/geometry.js +262 -0
  319. package/dist/cupola/index.d.ts +4 -0
  320. package/dist/cupola/index.d.ts.map +1 -0
  321. package/dist/cupola/index.js +3 -0
  322. package/dist/cupola/move-tool.d.ts +12 -0
  323. package/dist/cupola/move-tool.d.ts.map +1 -0
  324. package/dist/cupola/move-tool.js +206 -0
  325. package/dist/cupola/panel.d.ts +7 -0
  326. package/dist/cupola/panel.d.ts.map +1 -0
  327. package/dist/cupola/panel.js +106 -0
  328. package/dist/cupola/parametrics.d.ts +9 -0
  329. package/dist/cupola/parametrics.d.ts.map +1 -0
  330. package/dist/cupola/parametrics.js +30 -0
  331. package/dist/cupola/preview.d.ts +13 -0
  332. package/dist/cupola/preview.d.ts.map +1 -0
  333. package/dist/cupola/preview.js +37 -0
  334. package/dist/cupola/renderer.d.ts +12 -0
  335. package/dist/cupola/renderer.d.ts.map +1 -0
  336. package/dist/cupola/renderer.js +66 -0
  337. package/dist/cupola/schema.d.ts +2 -0
  338. package/dist/cupola/schema.d.ts.map +1 -0
  339. package/dist/cupola/schema.js +3 -0
  340. package/dist/cupola/tool.d.ts +8 -0
  341. package/dist/cupola/tool.d.ts.map +1 -0
  342. package/dist/cupola/tool.js +105 -0
  343. package/dist/door/definition.d.ts +23 -0
  344. package/dist/door/definition.d.ts.map +1 -0
  345. package/dist/door/definition.js +257 -0
  346. package/dist/door/door-math.d.ts +23 -0
  347. package/dist/door/door-math.d.ts.map +1 -0
  348. package/dist/door/door-math.js +38 -0
  349. package/dist/door/floorplan-affordances.d.ts +21 -0
  350. package/dist/door/floorplan-affordances.d.ts.map +1 -0
  351. package/dist/door/floorplan-affordances.js +102 -0
  352. package/dist/door/floorplan-move.d.ts +18 -0
  353. package/dist/door/floorplan-move.d.ts.map +1 -0
  354. package/dist/door/floorplan-move.js +239 -0
  355. package/dist/door/floorplan.d.ts +37 -0
  356. package/dist/door/floorplan.d.ts.map +1 -0
  357. package/dist/door/floorplan.js +702 -0
  358. package/dist/door/index.d.ts +3 -0
  359. package/dist/door/index.d.ts.map +1 -0
  360. package/dist/door/index.js +2 -0
  361. package/dist/door/move-tool.d.ts +6 -0
  362. package/dist/door/move-tool.d.ts.map +1 -0
  363. package/dist/door/move-tool.js +898 -0
  364. package/dist/door/paint.d.ts +8 -0
  365. package/dist/door/paint.d.ts.map +1 -0
  366. package/dist/door/paint.js +11 -0
  367. package/dist/door/panel.d.ts +2 -0
  368. package/dist/door/panel.d.ts.map +1 -0
  369. package/dist/door/panel.js +576 -0
  370. package/dist/door/parametrics.d.ts +12 -0
  371. package/dist/door/parametrics.d.ts.map +1 -0
  372. package/dist/door/parametrics.js +27 -0
  373. package/dist/door/preview.d.ts +18 -0
  374. package/dist/door/preview.d.ts.map +1 -0
  375. package/dist/door/preview.js +36 -0
  376. package/dist/door/renderer.d.ts +6 -0
  377. package/dist/door/renderer.d.ts.map +1 -0
  378. package/dist/door/renderer.js +26 -0
  379. package/dist/door/schema.d.ts +2 -0
  380. package/dist/door/schema.d.ts.map +1 -0
  381. package/dist/door/schema.js +1 -0
  382. package/dist/door/slots.d.ts +9 -0
  383. package/dist/door/slots.d.ts.map +1 -0
  384. package/dist/door/slots.js +20 -0
  385. package/dist/door/system.d.ts +18 -0
  386. package/dist/door/system.d.ts.map +1 -0
  387. package/dist/door/system.js +22 -0
  388. package/dist/door/tool.d.ts +15 -0
  389. package/dist/door/tool.d.ts.map +1 -0
  390. package/dist/door/tool.js +555 -0
  391. package/dist/dormer/csg-geometry.d.ts +104 -0
  392. package/dist/dormer/csg-geometry.d.ts.map +1 -0
  393. package/dist/dormer/csg-geometry.js +755 -0
  394. package/dist/dormer/definition.d.ts +20 -0
  395. package/dist/dormer/definition.d.ts.map +1 -0
  396. package/dist/dormer/definition.js +491 -0
  397. package/dist/dormer/floorplan.d.ts +23 -0
  398. package/dist/dormer/floorplan.d.ts.map +1 -0
  399. package/dist/dormer/floorplan.js +193 -0
  400. package/dist/dormer/geometry.d.ts +42 -0
  401. package/dist/dormer/geometry.d.ts.map +1 -0
  402. package/dist/dormer/geometry.js +63 -0
  403. package/dist/dormer/index.d.ts +5 -0
  404. package/dist/dormer/index.d.ts.map +1 -0
  405. package/dist/dormer/index.js +3 -0
  406. package/dist/dormer/move-tool.d.ts +16 -0
  407. package/dist/dormer/move-tool.d.ts.map +1 -0
  408. package/dist/dormer/move-tool.js +136 -0
  409. package/dist/dormer/paint.d.ts +24 -0
  410. package/dist/dormer/paint.d.ts.map +1 -0
  411. package/dist/dormer/paint.js +103 -0
  412. package/dist/dormer/panel-actions-section.d.ts +10 -0
  413. package/dist/dormer/panel-actions-section.d.ts.map +1 -0
  414. package/dist/dormer/panel-actions-section.js +11 -0
  415. package/dist/dormer/panel-position-section.d.ts +17 -0
  416. package/dist/dormer/panel-position-section.d.ts.map +1 -0
  417. package/dist/dormer/panel-position-section.js +162 -0
  418. package/dist/dormer/panel-window-section.d.ts +14 -0
  419. package/dist/dormer/panel-window-section.d.ts.map +1 -0
  420. package/dist/dormer/panel-window-section.js +59 -0
  421. package/dist/dormer/panel.d.ts +2 -0
  422. package/dist/dormer/panel.d.ts.map +1 -0
  423. package/dist/dormer/panel.js +134 -0
  424. package/dist/dormer/parametrics.d.ts +4 -0
  425. package/dist/dormer/parametrics.d.ts.map +1 -0
  426. package/dist/dormer/parametrics.js +110 -0
  427. package/dist/dormer/placement-guides.d.ts +28 -0
  428. package/dist/dormer/placement-guides.d.ts.map +1 -0
  429. package/dist/dormer/placement-guides.js +170 -0
  430. package/dist/dormer/preview.d.ts +7 -0
  431. package/dist/dormer/preview.d.ts.map +1 -0
  432. package/dist/dormer/preview.js +29 -0
  433. package/dist/dormer/renderer.d.ts +8 -0
  434. package/dist/dormer/renderer.d.ts.map +1 -0
  435. package/dist/dormer/renderer.js +134 -0
  436. package/dist/dormer/schema.d.ts +3 -0
  437. package/dist/dormer/schema.d.ts.map +1 -0
  438. package/dist/dormer/schema.js +1 -0
  439. package/dist/dormer/tool.d.ts +11 -0
  440. package/dist/dormer/tool.d.ts.map +1 -0
  441. package/dist/dormer/tool.js +69 -0
  442. package/dist/dormer/use-dormer-placement.d.ts +44 -0
  443. package/dist/dormer/use-dormer-placement.d.ts.map +1 -0
  444. package/dist/dormer/use-dormer-placement.js +166 -0
  445. package/dist/dormer/window-assembly.d.ts +22 -0
  446. package/dist/dormer/window-assembly.d.ts.map +1 -0
  447. package/dist/dormer/window-assembly.js +111 -0
  448. package/dist/dormer/window-frame.d.ts +24 -0
  449. package/dist/dormer/window-frame.d.ts.map +1 -0
  450. package/dist/dormer/window-frame.js +100 -0
  451. package/dist/downspout/definition.d.ts +17 -0
  452. package/dist/downspout/definition.d.ts.map +1 -0
  453. package/dist/downspout/definition.js +173 -0
  454. package/dist/downspout/geometry.d.ts +5 -0
  455. package/dist/downspout/geometry.d.ts.map +1 -0
  456. package/dist/downspout/geometry.js +204 -0
  457. package/dist/downspout/index.d.ts +4 -0
  458. package/dist/downspout/index.d.ts.map +1 -0
  459. package/dist/downspout/index.js +3 -0
  460. package/dist/downspout/inspector-editors.d.ts +25 -0
  461. package/dist/downspout/inspector-editors.d.ts.map +1 -0
  462. package/dist/downspout/inspector-editors.js +61 -0
  463. package/dist/downspout/parametrics.d.ts +4 -0
  464. package/dist/downspout/parametrics.d.ts.map +1 -0
  465. package/dist/downspout/parametrics.js +66 -0
  466. package/dist/downspout/preview.d.ts +19 -0
  467. package/dist/downspout/preview.d.ts.map +1 -0
  468. package/dist/downspout/preview.js +48 -0
  469. package/dist/downspout/renderer.d.ts +22 -0
  470. package/dist/downspout/renderer.d.ts.map +1 -0
  471. package/dist/downspout/renderer.js +153 -0
  472. package/dist/downspout/routing.d.ts +81 -0
  473. package/dist/downspout/routing.d.ts.map +1 -0
  474. package/dist/downspout/routing.js +131 -0
  475. package/dist/downspout/schema.d.ts +2 -0
  476. package/dist/downspout/schema.d.ts.map +1 -0
  477. package/dist/downspout/schema.js +3 -0
  478. package/dist/downspout/tool.d.ts +3 -0
  479. package/dist/downspout/tool.d.ts.map +1 -0
  480. package/dist/downspout/tool.js +148 -0
  481. package/dist/duct-fitting/definition.d.ts +12 -0
  482. package/dist/duct-fitting/definition.d.ts.map +1 -0
  483. package/dist/duct-fitting/definition.js +124 -0
  484. package/dist/duct-fitting/floorplan.d.ts +12 -0
  485. package/dist/duct-fitting/floorplan.d.ts.map +1 -0
  486. package/dist/duct-fitting/floorplan.js +59 -0
  487. package/dist/duct-fitting/geometry.d.ts +26 -0
  488. package/dist/duct-fitting/geometry.d.ts.map +1 -0
  489. package/dist/duct-fitting/geometry.js +341 -0
  490. package/dist/duct-fitting/index.d.ts +5 -0
  491. package/dist/duct-fitting/index.d.ts.map +1 -0
  492. package/dist/duct-fitting/index.js +4 -0
  493. package/dist/duct-fitting/inspector-editors.d.ts +6 -0
  494. package/dist/duct-fitting/inspector-editors.d.ts.map +1 -0
  495. package/dist/duct-fitting/inspector-editors.js +16 -0
  496. package/dist/duct-fitting/move-tool.d.ts +23 -0
  497. package/dist/duct-fitting/move-tool.d.ts.map +1 -0
  498. package/dist/duct-fitting/move-tool.js +302 -0
  499. package/dist/duct-fitting/parametrics.d.ts +4 -0
  500. package/dist/duct-fitting/parametrics.d.ts.map +1 -0
  501. package/dist/duct-fitting/parametrics.js +328 -0
  502. package/dist/duct-fitting/ports.d.ts +32 -0
  503. package/dist/duct-fitting/ports.d.ts.map +1 -0
  504. package/dist/duct-fitting/ports.js +140 -0
  505. package/dist/duct-fitting/schema.d.ts +2 -0
  506. package/dist/duct-fitting/schema.d.ts.map +1 -0
  507. package/dist/duct-fitting/schema.js +1 -0
  508. package/dist/duct-fitting/selection.d.ts +27 -0
  509. package/dist/duct-fitting/selection.d.ts.map +1 -0
  510. package/dist/duct-fitting/selection.js +677 -0
  511. package/dist/duct-fitting/tool.d.ts +18 -0
  512. package/dist/duct-fitting/tool.d.ts.map +1 -0
  513. package/dist/duct-fitting/tool.js +160 -0
  514. package/dist/duct-segment/definition.d.ts +4 -0
  515. package/dist/duct-segment/definition.d.ts.map +1 -0
  516. package/dist/duct-segment/definition.js +180 -0
  517. package/dist/duct-segment/floorplan.d.ts +12 -0
  518. package/dist/duct-segment/floorplan.d.ts.map +1 -0
  519. package/dist/duct-segment/floorplan.js +121 -0
  520. package/dist/duct-segment/geometry.d.ts +99 -0
  521. package/dist/duct-segment/geometry.d.ts.map +1 -0
  522. package/dist/duct-segment/geometry.js +368 -0
  523. package/dist/duct-segment/index.d.ts +4 -0
  524. package/dist/duct-segment/index.d.ts.map +1 -0
  525. package/dist/duct-segment/index.js +3 -0
  526. package/dist/duct-segment/move-tool.d.ts +22 -0
  527. package/dist/duct-segment/move-tool.d.ts.map +1 -0
  528. package/dist/duct-segment/move-tool.js +347 -0
  529. package/dist/duct-segment/parametrics.d.ts +4 -0
  530. package/dist/duct-segment/parametrics.d.ts.map +1 -0
  531. package/dist/duct-segment/parametrics.js +165 -0
  532. package/dist/duct-segment/schema.d.ts +2 -0
  533. package/dist/duct-segment/schema.d.ts.map +1 -0
  534. package/dist/duct-segment/schema.js +1 -0
  535. package/dist/duct-segment/selection.d.ts +34 -0
  536. package/dist/duct-segment/selection.d.ts.map +1 -0
  537. package/dist/duct-segment/selection.js +1395 -0
  538. package/dist/duct-segment/tool.d.ts +3 -0
  539. package/dist/duct-segment/tool.d.ts.map +1 -0
  540. package/dist/duct-segment/tool.js +924 -0
  541. package/dist/duct-terminal/definition.d.ts +13 -0
  542. package/dist/duct-terminal/definition.d.ts.map +1 -0
  543. package/dist/duct-terminal/definition.js +87 -0
  544. package/dist/duct-terminal/floorplan.d.ts +11 -0
  545. package/dist/duct-terminal/floorplan.d.ts.map +1 -0
  546. package/dist/duct-terminal/floorplan.js +61 -0
  547. package/dist/duct-terminal/geometry.d.ts +14 -0
  548. package/dist/duct-terminal/geometry.d.ts.map +1 -0
  549. package/dist/duct-terminal/geometry.js +78 -0
  550. package/dist/duct-terminal/index.d.ts +5 -0
  551. package/dist/duct-terminal/index.d.ts.map +1 -0
  552. package/dist/duct-terminal/index.js +4 -0
  553. package/dist/duct-terminal/parametrics.d.ts +4 -0
  554. package/dist/duct-terminal/parametrics.d.ts.map +1 -0
  555. package/dist/duct-terminal/parametrics.js +69 -0
  556. package/dist/duct-terminal/ports.d.ts +27 -0
  557. package/dist/duct-terminal/ports.d.ts.map +1 -0
  558. package/dist/duct-terminal/ports.js +60 -0
  559. package/dist/duct-terminal/schema.d.ts +2 -0
  560. package/dist/duct-terminal/schema.d.ts.map +1 -0
  561. package/dist/duct-terminal/schema.js +1 -0
  562. package/dist/duct-terminal/tool.d.ts +13 -0
  563. package/dist/duct-terminal/tool.d.ts.map +1 -0
  564. package/dist/duct-terminal/tool.js +360 -0
  565. package/dist/elevator/definition.d.ts +11 -0
  566. package/dist/elevator/definition.d.ts.map +1 -0
  567. package/dist/elevator/definition.js +255 -0
  568. package/dist/elevator/floorplan-affordances.d.ts +21 -0
  569. package/dist/elevator/floorplan-affordances.d.ts.map +1 -0
  570. package/dist/elevator/floorplan-affordances.js +94 -0
  571. package/dist/elevator/floorplan.d.ts +3 -0
  572. package/dist/elevator/floorplan.d.ts.map +1 -0
  573. package/dist/elevator/floorplan.js +360 -0
  574. package/dist/elevator/index.d.ts +2 -0
  575. package/dist/elevator/index.d.ts.map +1 -0
  576. package/dist/elevator/index.js +1 -0
  577. package/dist/elevator/paint.d.ts +2 -0
  578. package/dist/elevator/paint.d.ts.map +1 -0
  579. package/dist/elevator/paint.js +6 -0
  580. package/dist/elevator/panel.d.ts +2 -0
  581. package/dist/elevator/panel.d.ts.map +1 -0
  582. package/dist/elevator/panel.js +397 -0
  583. package/dist/elevator/parametrics.d.ts +3 -0
  584. package/dist/elevator/parametrics.d.ts.map +1 -0
  585. package/dist/elevator/parametrics.js +4 -0
  586. package/dist/elevator/renderer.d.ts +6 -0
  587. package/dist/elevator/renderer.d.ts.map +1 -0
  588. package/dist/elevator/renderer.js +583 -0
  589. package/dist/elevator/schema.d.ts +2 -0
  590. package/dist/elevator/schema.d.ts.map +1 -0
  591. package/dist/elevator/schema.js +1 -0
  592. package/dist/elevator/slots.d.ts +8 -0
  593. package/dist/elevator/slots.d.ts.map +1 -0
  594. package/dist/elevator/slots.js +17 -0
  595. package/dist/elevator/system.d.ts +8 -0
  596. package/dist/elevator/system.d.ts.map +1 -0
  597. package/dist/elevator/system.js +13 -0
  598. package/dist/eyebrow-vent/definition.d.ts +12 -0
  599. package/dist/eyebrow-vent/definition.d.ts.map +1 -0
  600. package/dist/eyebrow-vent/definition.js +150 -0
  601. package/dist/eyebrow-vent/floorplan.d.ts +9 -0
  602. package/dist/eyebrow-vent/floorplan.d.ts.map +1 -0
  603. package/dist/eyebrow-vent/floorplan.js +86 -0
  604. package/dist/eyebrow-vent/geometry.d.ts +25 -0
  605. package/dist/eyebrow-vent/geometry.d.ts.map +1 -0
  606. package/dist/eyebrow-vent/geometry.js +313 -0
  607. package/dist/eyebrow-vent/index.d.ts +4 -0
  608. package/dist/eyebrow-vent/index.d.ts.map +1 -0
  609. package/dist/eyebrow-vent/index.js +3 -0
  610. package/dist/eyebrow-vent/move-tool.d.ts +13 -0
  611. package/dist/eyebrow-vent/move-tool.d.ts.map +1 -0
  612. package/dist/eyebrow-vent/move-tool.js +207 -0
  613. package/dist/eyebrow-vent/panel.d.ts +7 -0
  614. package/dist/eyebrow-vent/panel.d.ts.map +1 -0
  615. package/dist/eyebrow-vent/panel.js +106 -0
  616. package/dist/eyebrow-vent/parametrics.d.ts +9 -0
  617. package/dist/eyebrow-vent/parametrics.d.ts.map +1 -0
  618. package/dist/eyebrow-vent/parametrics.js +31 -0
  619. package/dist/eyebrow-vent/preview.d.ts +13 -0
  620. package/dist/eyebrow-vent/preview.d.ts.map +1 -0
  621. package/dist/eyebrow-vent/preview.js +37 -0
  622. package/dist/eyebrow-vent/renderer.d.ts +12 -0
  623. package/dist/eyebrow-vent/renderer.d.ts.map +1 -0
  624. package/dist/eyebrow-vent/renderer.js +68 -0
  625. package/dist/eyebrow-vent/schema.d.ts +2 -0
  626. package/dist/eyebrow-vent/schema.d.ts.map +1 -0
  627. package/dist/eyebrow-vent/schema.js +3 -0
  628. package/dist/eyebrow-vent/tool.d.ts +9 -0
  629. package/dist/eyebrow-vent/tool.d.ts.map +1 -0
  630. package/dist/eyebrow-vent/tool.js +111 -0
  631. package/dist/fence/actions/move-endpoint.d.ts +32 -0
  632. package/dist/fence/actions/move-endpoint.d.ts.map +1 -0
  633. package/dist/fence/actions/move-endpoint.js +201 -0
  634. package/dist/fence/curve-tool.d.ts +17 -0
  635. package/dist/fence/curve-tool.d.ts.map +1 -0
  636. package/dist/fence/curve-tool.js +122 -0
  637. package/dist/fence/definition.d.ts +17 -0
  638. package/dist/fence/definition.d.ts.map +1 -0
  639. package/dist/fence/definition.js +281 -0
  640. package/dist/fence/floorplan-affordances.d.ts +31 -0
  641. package/dist/fence/floorplan-affordances.d.ts.map +1 -0
  642. package/dist/fence/floorplan-affordances.js +271 -0
  643. package/dist/fence/floorplan-move.d.ts +10 -0
  644. package/dist/fence/floorplan-move.d.ts.map +1 -0
  645. package/dist/fence/floorplan-move.js +162 -0
  646. package/dist/fence/floorplan.d.ts +4 -0
  647. package/dist/fence/floorplan.d.ts.map +1 -0
  648. package/dist/fence/floorplan.js +452 -0
  649. package/dist/fence/geometry.d.ts +6 -0
  650. package/dist/fence/geometry.d.ts.map +1 -0
  651. package/dist/fence/geometry.js +65 -0
  652. package/dist/fence/index.d.ts +3 -0
  653. package/dist/fence/index.d.ts.map +1 -0
  654. package/dist/fence/index.js +2 -0
  655. package/dist/fence/inspector-editors.d.ts +24 -0
  656. package/dist/fence/inspector-editors.d.ts.map +1 -0
  657. package/dist/fence/inspector-editors.js +43 -0
  658. package/dist/fence/move-control-point-tool.d.ts +9 -0
  659. package/dist/fence/move-control-point-tool.d.ts.map +1 -0
  660. package/dist/fence/move-control-point-tool.js +91 -0
  661. package/dist/fence/move-endpoint-tool.d.ts +27 -0
  662. package/dist/fence/move-endpoint-tool.d.ts.map +1 -0
  663. package/dist/fence/move-endpoint-tool.js +190 -0
  664. package/dist/fence/move-tangent-tool.d.ts +10 -0
  665. package/dist/fence/move-tangent-tool.d.ts.map +1 -0
  666. package/dist/fence/move-tangent-tool.js +88 -0
  667. package/dist/fence/move-tool.d.ts +6 -0
  668. package/dist/fence/move-tool.d.ts.map +1 -0
  669. package/dist/fence/move-tool.js +271 -0
  670. package/dist/fence/paint.d.ts +2 -0
  671. package/dist/fence/paint.d.ts.map +1 -0
  672. package/dist/fence/paint.js +17 -0
  673. package/dist/fence/parametrics.d.ts +16 -0
  674. package/dist/fence/parametrics.d.ts.map +1 -0
  675. package/dist/fence/parametrics.js +86 -0
  676. package/dist/fence/schema.d.ts +10 -0
  677. package/dist/fence/schema.d.ts.map +1 -0
  678. package/dist/fence/schema.js +9 -0
  679. package/dist/fence/slots.d.ts +10 -0
  680. package/dist/fence/slots.d.ts.map +1 -0
  681. package/dist/fence/slots.js +23 -0
  682. package/dist/fence/tool.d.ts +3 -0
  683. package/dist/fence/tool.d.ts.map +1 -0
  684. package/dist/fence/tool.js +563 -0
  685. package/dist/guide/definition.d.ts +10 -0
  686. package/dist/guide/definition.d.ts.map +1 -0
  687. package/dist/guide/definition.js +52 -0
  688. package/dist/guide/index.d.ts +2 -0
  689. package/dist/guide/index.d.ts.map +1 -0
  690. package/dist/guide/index.js +1 -0
  691. package/dist/guide/parametrics.d.ts +3 -0
  692. package/dist/guide/parametrics.d.ts.map +1 -0
  693. package/dist/guide/parametrics.js +3 -0
  694. package/dist/guide/renderer.d.ts +6 -0
  695. package/dist/guide/renderer.d.ts.map +1 -0
  696. package/dist/guide/renderer.js +52 -0
  697. package/dist/guide/schema.d.ts +2 -0
  698. package/dist/guide/schema.d.ts.map +1 -0
  699. package/dist/guide/schema.js +1 -0
  700. package/dist/guide/system.d.ts +3 -0
  701. package/dist/guide/system.d.ts.map +1 -0
  702. package/dist/guide/system.js +3 -0
  703. package/dist/gutter/corner-mitre.d.ts +88 -0
  704. package/dist/gutter/corner-mitre.d.ts.map +1 -0
  705. package/dist/gutter/corner-mitre.js +176 -0
  706. package/dist/gutter/definition.d.ts +19 -0
  707. package/dist/gutter/definition.d.ts.map +1 -0
  708. package/dist/gutter/definition.js +164 -0
  709. package/dist/gutter/downspouts-panel.d.ts +8 -0
  710. package/dist/gutter/downspouts-panel.d.ts.map +1 -0
  711. package/dist/gutter/downspouts-panel.js +111 -0
  712. package/dist/gutter/eave-align.d.ts +33 -0
  713. package/dist/gutter/eave-align.d.ts.map +1 -0
  714. package/dist/gutter/eave-align.js +50 -0
  715. package/dist/gutter/eave-snap.d.ts +45 -0
  716. package/dist/gutter/eave-snap.d.ts.map +1 -0
  717. package/dist/gutter/eave-snap.js +128 -0
  718. package/dist/gutter/floorplan.d.ts +18 -0
  719. package/dist/gutter/floorplan.d.ts.map +1 -0
  720. package/dist/gutter/floorplan.js +274 -0
  721. package/dist/gutter/geometry.d.ts +39 -0
  722. package/dist/gutter/geometry.d.ts.map +1 -0
  723. package/dist/gutter/geometry.js +532 -0
  724. package/dist/gutter/index.d.ts +4 -0
  725. package/dist/gutter/index.d.ts.map +1 -0
  726. package/dist/gutter/index.js +3 -0
  727. package/dist/gutter/length-snap.d.ts +16 -0
  728. package/dist/gutter/length-snap.d.ts.map +1 -0
  729. package/dist/gutter/length-snap.js +177 -0
  730. package/dist/gutter/move-tool.d.ts +21 -0
  731. package/dist/gutter/move-tool.d.ts.map +1 -0
  732. package/dist/gutter/move-tool.js +223 -0
  733. package/dist/gutter/outlet-lookup.d.ts +43 -0
  734. package/dist/gutter/outlet-lookup.d.ts.map +1 -0
  735. package/dist/gutter/outlet-lookup.js +50 -0
  736. package/dist/gutter/parametrics.d.ts +4 -0
  737. package/dist/gutter/parametrics.d.ts.map +1 -0
  738. package/dist/gutter/parametrics.js +62 -0
  739. package/dist/gutter/preview.d.ts +22 -0
  740. package/dist/gutter/preview.d.ts.map +1 -0
  741. package/dist/gutter/preview.js +57 -0
  742. package/dist/gutter/profile-geometry.d.ts +44 -0
  743. package/dist/gutter/profile-geometry.d.ts.map +1 -0
  744. package/dist/gutter/profile-geometry.js +56 -0
  745. package/dist/gutter/renderer.d.ts +22 -0
  746. package/dist/gutter/renderer.d.ts.map +1 -0
  747. package/dist/gutter/renderer.js +202 -0
  748. package/dist/gutter/schema.d.ts +2 -0
  749. package/dist/gutter/schema.d.ts.map +1 -0
  750. package/dist/gutter/schema.js +3 -0
  751. package/dist/gutter/tool.d.ts +25 -0
  752. package/dist/gutter/tool.d.ts.map +1 -0
  753. package/dist/gutter/tool.js +124 -0
  754. package/dist/hvac-equipment/definition.d.ts +13 -0
  755. package/dist/hvac-equipment/definition.d.ts.map +1 -0
  756. package/dist/hvac-equipment/definition.js +92 -0
  757. package/dist/hvac-equipment/floorplan.d.ts +10 -0
  758. package/dist/hvac-equipment/floorplan.d.ts.map +1 -0
  759. package/dist/hvac-equipment/floorplan.js +71 -0
  760. package/dist/hvac-equipment/geometry.d.ts +20 -0
  761. package/dist/hvac-equipment/geometry.d.ts.map +1 -0
  762. package/dist/hvac-equipment/geometry.js +701 -0
  763. package/dist/hvac-equipment/index.d.ts +5 -0
  764. package/dist/hvac-equipment/index.d.ts.map +1 -0
  765. package/dist/hvac-equipment/index.js +4 -0
  766. package/dist/hvac-equipment/parametrics.d.ts +4 -0
  767. package/dist/hvac-equipment/parametrics.d.ts.map +1 -0
  768. package/dist/hvac-equipment/parametrics.js +101 -0
  769. package/dist/hvac-equipment/ports.d.ts +36 -0
  770. package/dist/hvac-equipment/ports.d.ts.map +1 -0
  771. package/dist/hvac-equipment/ports.js +91 -0
  772. package/dist/hvac-equipment/schema.d.ts +2 -0
  773. package/dist/hvac-equipment/schema.d.ts.map +1 -0
  774. package/dist/hvac-equipment/schema.js +1 -0
  775. package/dist/hvac-equipment/tool.d.ts +11 -0
  776. package/dist/hvac-equipment/tool.d.ts.map +1 -0
  777. package/dist/hvac-equipment/tool.js +103 -0
  778. package/dist/index.d.ts +62 -0
  779. package/dist/index.d.ts.map +1 -0
  780. package/dist/index.js +158 -0
  781. package/dist/item/definition.d.ts +32 -0
  782. package/dist/item/definition.d.ts.map +1 -0
  783. package/dist/item/definition.js +309 -0
  784. package/dist/item/floorplan-move.d.ts +3 -0
  785. package/dist/item/floorplan-move.d.ts.map +1 -0
  786. package/dist/item/floorplan-move.js +307 -0
  787. package/dist/item/floorplan.d.ts +3 -0
  788. package/dist/item/floorplan.d.ts.map +1 -0
  789. package/dist/item/floorplan.js +204 -0
  790. package/dist/item/index.d.ts +3 -0
  791. package/dist/item/index.d.ts.map +1 -0
  792. package/dist/item/index.js +2 -0
  793. package/dist/item/model-loader.d.ts +18 -0
  794. package/dist/item/model-loader.d.ts.map +1 -0
  795. package/dist/item/model-loader.js +131 -0
  796. package/dist/item/move-tool.d.ts +6 -0
  797. package/dist/item/move-tool.d.ts.map +1 -0
  798. package/dist/item/move-tool.js +150 -0
  799. package/dist/item/paint.d.ts +3 -0
  800. package/dist/item/paint.d.ts.map +1 -0
  801. package/dist/item/paint.js +214 -0
  802. package/dist/item/panel.d.ts +16 -0
  803. package/dist/item/panel.d.ts.map +1 -0
  804. package/dist/item/panel.js +103 -0
  805. package/dist/item/parametrics.d.ts +12 -0
  806. package/dist/item/parametrics.d.ts.map +1 -0
  807. package/dist/item/parametrics.js +12 -0
  808. package/dist/item/renderer.d.ts +6 -0
  809. package/dist/item/renderer.d.ts.map +1 -0
  810. package/dist/item/renderer.js +425 -0
  811. package/dist/item/schema.d.ts +2 -0
  812. package/dist/item/schema.d.ts.map +1 -0
  813. package/dist/item/schema.js +1 -0
  814. package/dist/item/system.d.ts +11 -0
  815. package/dist/item/system.d.ts.map +1 -0
  816. package/dist/item/system.js +15 -0
  817. package/dist/item/tool.d.ts +3 -0
  818. package/dist/item/tool.d.ts.map +1 -0
  819. package/dist/item/tool.js +46 -0
  820. package/dist/level/definition.d.ts +9 -0
  821. package/dist/level/definition.d.ts.map +1 -0
  822. package/dist/level/definition.js +55 -0
  823. package/dist/level/index.d.ts +2 -0
  824. package/dist/level/index.d.ts.map +1 -0
  825. package/dist/level/index.js +1 -0
  826. package/dist/level/parametrics.d.ts +3 -0
  827. package/dist/level/parametrics.d.ts.map +1 -0
  828. package/dist/level/parametrics.js +3 -0
  829. package/dist/level/renderer.d.ts +6 -0
  830. package/dist/level/renderer.d.ts.map +1 -0
  831. package/dist/level/renderer.js +12 -0
  832. package/dist/level/schema.d.ts +2 -0
  833. package/dist/level/schema.d.ts.map +1 -0
  834. package/dist/level/schema.js +1 -0
  835. package/dist/level/system.d.ts +3 -0
  836. package/dist/level/system.d.ts.map +1 -0
  837. package/dist/level/system.js +3 -0
  838. package/dist/lineset/definition.d.ts +15 -0
  839. package/dist/lineset/definition.d.ts.map +1 -0
  840. package/dist/lineset/definition.js +118 -0
  841. package/dist/lineset/floorplan.d.ts +10 -0
  842. package/dist/lineset/floorplan.d.ts.map +1 -0
  843. package/dist/lineset/floorplan.js +78 -0
  844. package/dist/lineset/geometry.d.ts +20 -0
  845. package/dist/lineset/geometry.d.ts.map +1 -0
  846. package/dist/lineset/geometry.js +87 -0
  847. package/dist/lineset/index.d.ts +4 -0
  848. package/dist/lineset/index.d.ts.map +1 -0
  849. package/dist/lineset/index.js +3 -0
  850. package/dist/lineset/move-tool.d.ts +27 -0
  851. package/dist/lineset/move-tool.d.ts.map +1 -0
  852. package/dist/lineset/move-tool.js +256 -0
  853. package/dist/lineset/parametrics.d.ts +4 -0
  854. package/dist/lineset/parametrics.d.ts.map +1 -0
  855. package/dist/lineset/parametrics.js +34 -0
  856. package/dist/lineset/schema.d.ts +2 -0
  857. package/dist/lineset/schema.d.ts.map +1 -0
  858. package/dist/lineset/schema.js +1 -0
  859. package/dist/lineset/selection.d.ts +3 -0
  860. package/dist/lineset/selection.d.ts.map +1 -0
  861. package/dist/lineset/selection.js +3 -0
  862. package/dist/lineset/tool.d.ts +3 -0
  863. package/dist/lineset/tool.d.ts.map +1 -0
  864. package/dist/lineset/tool.js +298 -0
  865. package/dist/liquid-line/definition.d.ts +16 -0
  866. package/dist/liquid-line/definition.d.ts.map +1 -0
  867. package/dist/liquid-line/definition.js +110 -0
  868. package/dist/liquid-line/floorplan.d.ts +10 -0
  869. package/dist/liquid-line/floorplan.d.ts.map +1 -0
  870. package/dist/liquid-line/floorplan.js +66 -0
  871. package/dist/liquid-line/geometry.d.ts +16 -0
  872. package/dist/liquid-line/geometry.d.ts.map +1 -0
  873. package/dist/liquid-line/geometry.js +57 -0
  874. package/dist/liquid-line/index.d.ts +5 -0
  875. package/dist/liquid-line/index.d.ts.map +1 -0
  876. package/dist/liquid-line/index.js +4 -0
  877. package/dist/liquid-line/move-tool.d.ts +23 -0
  878. package/dist/liquid-line/move-tool.d.ts.map +1 -0
  879. package/dist/liquid-line/move-tool.js +231 -0
  880. package/dist/liquid-line/options.d.ts +16 -0
  881. package/dist/liquid-line/options.d.ts.map +1 -0
  882. package/dist/liquid-line/options.js +6 -0
  883. package/dist/liquid-line/parametrics.d.ts +4 -0
  884. package/dist/liquid-line/parametrics.d.ts.map +1 -0
  885. package/dist/liquid-line/parametrics.js +17 -0
  886. package/dist/liquid-line/schema.d.ts +2 -0
  887. package/dist/liquid-line/schema.d.ts.map +1 -0
  888. package/dist/liquid-line/schema.js +1 -0
  889. package/dist/liquid-line/selection.d.ts +3 -0
  890. package/dist/liquid-line/selection.d.ts.map +1 -0
  891. package/dist/liquid-line/selection.js +3 -0
  892. package/dist/liquid-line/tool.d.ts +3 -0
  893. package/dist/liquid-line/tool.d.ts.map +1 -0
  894. package/dist/liquid-line/tool.js +517 -0
  895. package/dist/measurement/definition.d.ts +4 -0
  896. package/dist/measurement/definition.d.ts.map +1 -0
  897. package/dist/measurement/definition.js +61 -0
  898. package/dist/measurement/edit.d.ts +9 -0
  899. package/dist/measurement/edit.d.ts.map +1 -0
  900. package/dist/measurement/edit.js +97 -0
  901. package/dist/measurement/floorplan-affordance.d.ts +3 -0
  902. package/dist/measurement/floorplan-affordance.d.ts.map +1 -0
  903. package/dist/measurement/floorplan-affordance.js +90 -0
  904. package/dist/measurement/floorplan.d.ts +3 -0
  905. package/dist/measurement/floorplan.d.ts.map +1 -0
  906. package/dist/measurement/floorplan.js +195 -0
  907. package/dist/measurement/index.d.ts +3 -0
  908. package/dist/measurement/index.d.ts.map +1 -0
  909. package/dist/measurement/index.js +2 -0
  910. package/dist/measurement/renderer.d.ts +8 -0
  911. package/dist/measurement/renderer.d.ts.map +1 -0
  912. package/dist/measurement/renderer.js +285 -0
  913. package/dist/measurement/resolve.d.ts +42 -0
  914. package/dist/measurement/resolve.d.ts.map +1 -0
  915. package/dist/measurement/resolve.js +207 -0
  916. package/dist/measurement/schema.d.ts +2 -0
  917. package/dist/measurement/schema.d.ts.map +1 -0
  918. package/dist/measurement/schema.js +1 -0
  919. package/dist/measurement/selection.d.ts +3 -0
  920. package/dist/measurement/selection.d.ts.map +1 -0
  921. package/dist/measurement/selection.js +259 -0
  922. package/dist/measurement/smart-surface.d.ts +4 -0
  923. package/dist/measurement/smart-surface.d.ts.map +1 -0
  924. package/dist/measurement/smart-surface.js +21 -0
  925. package/dist/measurement/smart-tool.d.ts +3 -0
  926. package/dist/measurement/smart-tool.d.ts.map +1 -0
  927. package/dist/measurement/smart-tool.js +264 -0
  928. package/dist/measurement/surface-query.d.ts +90 -0
  929. package/dist/measurement/surface-query.d.ts.map +1 -0
  930. package/dist/measurement/surface-query.js +519 -0
  931. package/dist/measurement/tool-router.d.ts +2 -0
  932. package/dist/measurement/tool-router.d.ts.map +1 -0
  933. package/dist/measurement/tool-router.js +9 -0
  934. package/dist/measurement/tool.d.ts +62 -0
  935. package/dist/measurement/tool.d.ts.map +1 -0
  936. package/dist/measurement/tool.js +1342 -0
  937. package/dist/pipe-fitting/definition.d.ts +10 -0
  938. package/dist/pipe-fitting/definition.d.ts.map +1 -0
  939. package/dist/pipe-fitting/definition.js +91 -0
  940. package/dist/pipe-fitting/floorplan.d.ts +10 -0
  941. package/dist/pipe-fitting/floorplan.d.ts.map +1 -0
  942. package/dist/pipe-fitting/floorplan.js +50 -0
  943. package/dist/pipe-fitting/geometry.d.ts +11 -0
  944. package/dist/pipe-fitting/geometry.d.ts.map +1 -0
  945. package/dist/pipe-fitting/geometry.js +31 -0
  946. package/dist/pipe-fitting/index.d.ts +5 -0
  947. package/dist/pipe-fitting/index.d.ts.map +1 -0
  948. package/dist/pipe-fitting/index.js +4 -0
  949. package/dist/pipe-fitting/move-tool.d.ts +30 -0
  950. package/dist/pipe-fitting/move-tool.d.ts.map +1 -0
  951. package/dist/pipe-fitting/move-tool.js +312 -0
  952. package/dist/pipe-fitting/parametrics.d.ts +4 -0
  953. package/dist/pipe-fitting/parametrics.d.ts.map +1 -0
  954. package/dist/pipe-fitting/parametrics.js +105 -0
  955. package/dist/pipe-fitting/ports.d.ts +26 -0
  956. package/dist/pipe-fitting/ports.d.ts.map +1 -0
  957. package/dist/pipe-fitting/ports.js +93 -0
  958. package/dist/pipe-fitting/schema.d.ts +2 -0
  959. package/dist/pipe-fitting/schema.d.ts.map +1 -0
  960. package/dist/pipe-fitting/schema.js +1 -0
  961. package/dist/pipe-fitting/selection.d.ts +3 -0
  962. package/dist/pipe-fitting/selection.d.ts.map +1 -0
  963. package/dist/pipe-fitting/selection.js +579 -0
  964. package/dist/pipe-fitting/tool.d.ts +19 -0
  965. package/dist/pipe-fitting/tool.d.ts.map +1 -0
  966. package/dist/pipe-fitting/tool.js +162 -0
  967. package/dist/pipe-segment/definition.d.ts +14 -0
  968. package/dist/pipe-segment/definition.d.ts.map +1 -0
  969. package/dist/pipe-segment/definition.js +116 -0
  970. package/dist/pipe-segment/floorplan.d.ts +9 -0
  971. package/dist/pipe-segment/floorplan.d.ts.map +1 -0
  972. package/dist/pipe-segment/floorplan.js +87 -0
  973. package/dist/pipe-segment/geometry.d.ts +16 -0
  974. package/dist/pipe-segment/geometry.d.ts.map +1 -0
  975. package/dist/pipe-segment/geometry.js +54 -0
  976. package/dist/pipe-segment/index.d.ts +4 -0
  977. package/dist/pipe-segment/index.d.ts.map +1 -0
  978. package/dist/pipe-segment/index.js +3 -0
  979. package/dist/pipe-segment/move-tool.d.ts +25 -0
  980. package/dist/pipe-segment/move-tool.d.ts.map +1 -0
  981. package/dist/pipe-segment/move-tool.js +254 -0
  982. package/dist/pipe-segment/parametrics.d.ts +4 -0
  983. package/dist/pipe-segment/parametrics.d.ts.map +1 -0
  984. package/dist/pipe-segment/parametrics.js +33 -0
  985. package/dist/pipe-segment/schema.d.ts +2 -0
  986. package/dist/pipe-segment/schema.d.ts.map +1 -0
  987. package/dist/pipe-segment/schema.js +1 -0
  988. package/dist/pipe-segment/selection.d.ts +31 -0
  989. package/dist/pipe-segment/selection.d.ts.map +1 -0
  990. package/dist/pipe-segment/selection.js +841 -0
  991. package/dist/pipe-segment/tool.d.ts +3 -0
  992. package/dist/pipe-segment/tool.d.ts.map +1 -0
  993. package/dist/pipe-segment/tool.js +595 -0
  994. package/dist/pipe-trap/definition.d.ts +10 -0
  995. package/dist/pipe-trap/definition.d.ts.map +1 -0
  996. package/dist/pipe-trap/definition.js +59 -0
  997. package/dist/pipe-trap/floorplan.d.ts +10 -0
  998. package/dist/pipe-trap/floorplan.d.ts.map +1 -0
  999. package/dist/pipe-trap/floorplan.js +41 -0
  1000. package/dist/pipe-trap/geometry.d.ts +16 -0
  1001. package/dist/pipe-trap/geometry.d.ts.map +1 -0
  1002. package/dist/pipe-trap/geometry.js +74 -0
  1003. package/dist/pipe-trap/index.d.ts +5 -0
  1004. package/dist/pipe-trap/index.d.ts.map +1 -0
  1005. package/dist/pipe-trap/index.js +4 -0
  1006. package/dist/pipe-trap/parametrics.d.ts +4 -0
  1007. package/dist/pipe-trap/parametrics.d.ts.map +1 -0
  1008. package/dist/pipe-trap/parametrics.js +16 -0
  1009. package/dist/pipe-trap/ports.d.ts +11 -0
  1010. package/dist/pipe-trap/ports.d.ts.map +1 -0
  1011. package/dist/pipe-trap/ports.js +32 -0
  1012. package/dist/pipe-trap/schema.d.ts +2 -0
  1013. package/dist/pipe-trap/schema.d.ts.map +1 -0
  1014. package/dist/pipe-trap/schema.js +1 -0
  1015. package/dist/pipe-trap/tool.d.ts +9 -0
  1016. package/dist/pipe-trap/tool.d.ts.map +1 -0
  1017. package/dist/pipe-trap/tool.js +99 -0
  1018. package/dist/ridge-vent/definition.d.ts +16 -0
  1019. package/dist/ridge-vent/definition.d.ts.map +1 -0
  1020. package/dist/ridge-vent/definition.js +195 -0
  1021. package/dist/ridge-vent/floorplan.d.ts +15 -0
  1022. package/dist/ridge-vent/floorplan.d.ts.map +1 -0
  1023. package/dist/ridge-vent/floorplan.js +121 -0
  1024. package/dist/ridge-vent/geometry.d.ts +22 -0
  1025. package/dist/ridge-vent/geometry.d.ts.map +1 -0
  1026. package/dist/ridge-vent/geometry.js +526 -0
  1027. package/dist/ridge-vent/index.d.ts +4 -0
  1028. package/dist/ridge-vent/index.d.ts.map +1 -0
  1029. package/dist/ridge-vent/index.js +3 -0
  1030. package/dist/ridge-vent/move-tool.d.ts +12 -0
  1031. package/dist/ridge-vent/move-tool.d.ts.map +1 -0
  1032. package/dist/ridge-vent/move-tool.js +210 -0
  1033. package/dist/ridge-vent/panel.d.ts +7 -0
  1034. package/dist/ridge-vent/panel.d.ts.map +1 -0
  1035. package/dist/ridge-vent/panel.js +118 -0
  1036. package/dist/ridge-vent/parametrics.d.ts +4 -0
  1037. package/dist/ridge-vent/parametrics.d.ts.map +1 -0
  1038. package/dist/ridge-vent/parametrics.js +28 -0
  1039. package/dist/ridge-vent/preview.d.ts +7 -0
  1040. package/dist/ridge-vent/preview.d.ts.map +1 -0
  1041. package/dist/ridge-vent/preview.js +31 -0
  1042. package/dist/ridge-vent/renderer.d.ts +20 -0
  1043. package/dist/ridge-vent/renderer.d.ts.map +1 -0
  1044. package/dist/ridge-vent/renderer.js +205 -0
  1045. package/dist/ridge-vent/schema.d.ts +2 -0
  1046. package/dist/ridge-vent/schema.d.ts.map +1 -0
  1047. package/dist/ridge-vent/schema.js +2 -0
  1048. package/dist/ridge-vent/tool.d.ts +8 -0
  1049. package/dist/ridge-vent/tool.d.ts.map +1 -0
  1050. package/dist/ridge-vent/tool.js +130 -0
  1051. package/dist/roof/definition.d.ts +16 -0
  1052. package/dist/roof/definition.d.ts.map +1 -0
  1053. package/dist/roof/definition.js +170 -0
  1054. package/dist/roof/floorplan.d.ts +21 -0
  1055. package/dist/roof/floorplan.d.ts.map +1 -0
  1056. package/dist/roof/floorplan.js +271 -0
  1057. package/dist/roof/index.d.ts +3 -0
  1058. package/dist/roof/index.d.ts.map +1 -0
  1059. package/dist/roof/index.js +2 -0
  1060. package/dist/roof/panel.d.ts +2 -0
  1061. package/dist/roof/panel.d.ts.map +1 -0
  1062. package/dist/roof/panel.js +214 -0
  1063. package/dist/roof/parametrics.d.ts +3 -0
  1064. package/dist/roof/parametrics.d.ts.map +1 -0
  1065. package/dist/roof/parametrics.js +4 -0
  1066. package/dist/roof/renderer.d.ts +6 -0
  1067. package/dist/roof/renderer.d.ts.map +1 -0
  1068. package/dist/roof/renderer.js +79 -0
  1069. package/dist/roof/roof-materials.d.ts +5 -0
  1070. package/dist/roof/roof-materials.d.ts.map +1 -0
  1071. package/dist/roof/roof-materials.js +43 -0
  1072. package/dist/roof/schema.d.ts +2 -0
  1073. package/dist/roof/schema.d.ts.map +1 -0
  1074. package/dist/roof/schema.js +1 -0
  1075. package/dist/roof/system.d.ts +3 -0
  1076. package/dist/roof/system.d.ts.map +1 -0
  1077. package/dist/roof/system.js +3 -0
  1078. package/dist/roof-segment/definition.d.ts +10 -0
  1079. package/dist/roof-segment/definition.d.ts.map +1 -0
  1080. package/dist/roof-segment/definition.js +305 -0
  1081. package/dist/roof-segment/floorplan-affordances.d.ts +31 -0
  1082. package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -0
  1083. package/dist/roof-segment/floorplan-affordances.js +170 -0
  1084. package/dist/roof-segment/floorplan.d.ts +41 -0
  1085. package/dist/roof-segment/floorplan.d.ts.map +1 -0
  1086. package/dist/roof-segment/floorplan.js +265 -0
  1087. package/dist/roof-segment/index.d.ts +2 -0
  1088. package/dist/roof-segment/index.d.ts.map +1 -0
  1089. package/dist/roof-segment/index.js +1 -0
  1090. package/dist/roof-segment/measurement.d.ts +4 -0
  1091. package/dist/roof-segment/measurement.d.ts.map +1 -0
  1092. package/dist/roof-segment/measurement.js +64 -0
  1093. package/dist/roof-segment/panel.d.ts +2 -0
  1094. package/dist/roof-segment/panel.d.ts.map +1 -0
  1095. package/dist/roof-segment/panel.js +180 -0
  1096. package/dist/roof-segment/parametrics.d.ts +3 -0
  1097. package/dist/roof-segment/parametrics.d.ts.map +1 -0
  1098. package/dist/roof-segment/parametrics.js +4 -0
  1099. package/dist/roof-segment/renderer.d.ts +6 -0
  1100. package/dist/roof-segment/renderer.d.ts.map +1 -0
  1101. package/dist/roof-segment/renderer.js +93 -0
  1102. package/dist/roof-segment/schema.d.ts +2 -0
  1103. package/dist/roof-segment/schema.d.ts.map +1 -0
  1104. package/dist/roof-segment/schema.js +1 -0
  1105. package/dist/scan/definition.d.ts +9 -0
  1106. package/dist/scan/definition.d.ts.map +1 -0
  1107. package/dist/scan/definition.js +49 -0
  1108. package/dist/scan/index.d.ts +2 -0
  1109. package/dist/scan/index.d.ts.map +1 -0
  1110. package/dist/scan/index.js +1 -0
  1111. package/dist/scan/parametrics.d.ts +3 -0
  1112. package/dist/scan/parametrics.d.ts.map +1 -0
  1113. package/dist/scan/parametrics.js +3 -0
  1114. package/dist/scan/renderer.d.ts +6 -0
  1115. package/dist/scan/renderer.d.ts.map +1 -0
  1116. package/dist/scan/renderer.js +54 -0
  1117. package/dist/scan/schema.d.ts +2 -0
  1118. package/dist/scan/schema.d.ts.map +1 -0
  1119. package/dist/scan/schema.js +1 -0
  1120. package/dist/scan/system.d.ts +3 -0
  1121. package/dist/scan/system.d.ts.map +1 -0
  1122. package/dist/scan/system.js +3 -0
  1123. package/dist/shared/auto-fitting.d.ts +253 -0
  1124. package/dist/shared/auto-fitting.d.ts.map +1 -0
  1125. package/dist/shared/auto-fitting.js +659 -0
  1126. package/dist/shared/auto-offset-tag.d.ts +67 -0
  1127. package/dist/shared/auto-offset-tag.d.ts.map +1 -0
  1128. package/dist/shared/auto-offset-tag.js +94 -0
  1129. package/dist/shared/draw-alignment.d.ts +25 -0
  1130. package/dist/shared/draw-alignment.d.ts.map +1 -0
  1131. package/dist/shared/draw-alignment.js +30 -0
  1132. package/dist/shared/duct-body-paint.d.ts +6 -0
  1133. package/dist/shared/duct-body-paint.d.ts.map +1 -0
  1134. package/dist/shared/duct-body-paint.js +13 -0
  1135. package/dist/shared/fitting-endpoint-reaim.d.ts +72 -0
  1136. package/dist/shared/fitting-endpoint-reaim.d.ts.map +1 -0
  1137. package/dist/shared/fitting-endpoint-reaim.js +123 -0
  1138. package/dist/shared/fitting-rotation.d.ts +21 -0
  1139. package/dist/shared/fitting-rotation.d.ts.map +1 -0
  1140. package/dist/shared/fitting-rotation.js +39 -0
  1141. package/dist/shared/floor-placement.d.ts +25 -0
  1142. package/dist/shared/floor-placement.d.ts.map +1 -0
  1143. package/dist/shared/floor-placement.js +109 -0
  1144. package/dist/shared/floorplan-cursor.d.ts +11 -0
  1145. package/dist/shared/floorplan-cursor.d.ts.map +1 -0
  1146. package/dist/shared/floorplan-cursor.js +17 -0
  1147. package/dist/shared/ghost-alignment.d.ts +31 -0
  1148. package/dist/shared/ghost-alignment.d.ts.map +1 -0
  1149. package/dist/shared/ghost-alignment.js +29 -0
  1150. package/dist/shared/ghost-materials.d.ts +29 -0
  1151. package/dist/shared/ghost-materials.d.ts.map +1 -0
  1152. package/dist/shared/ghost-materials.js +81 -0
  1153. package/dist/shared/level-offset-group.d.ts +18 -0
  1154. package/dist/shared/level-offset-group.d.ts.map +1 -0
  1155. package/dist/shared/level-offset-group.js +31 -0
  1156. package/dist/shared/mep-ghost.d.ts +37 -0
  1157. package/dist/shared/mep-ghost.d.ts.map +1 -0
  1158. package/dist/shared/mep-ghost.js +83 -0
  1159. package/dist/shared/move-roof-tool.d.ts +6 -0
  1160. package/dist/shared/move-roof-tool.d.ts.map +1 -0
  1161. package/dist/shared/move-roof-tool.js +420 -0
  1162. package/dist/shared/opening-guides-runtime.d.ts +70 -0
  1163. package/dist/shared/opening-guides-runtime.d.ts.map +1 -0
  1164. package/dist/shared/opening-guides-runtime.js +182 -0
  1165. package/dist/shared/opening-placement-dimensions.d.ts +19 -0
  1166. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -0
  1167. package/dist/shared/opening-placement-dimensions.js +152 -0
  1168. package/dist/shared/path-offset.d.ts +10 -0
  1169. package/dist/shared/path-offset.d.ts.map +1 -0
  1170. package/dist/shared/path-offset.js +74 -0
  1171. package/dist/shared/path-point-affordance.d.ts +34 -0
  1172. package/dist/shared/path-point-affordance.d.ts.map +1 -0
  1173. package/dist/shared/path-point-affordance.js +97 -0
  1174. package/dist/shared/path-segment-affordance.d.ts +33 -0
  1175. package/dist/shared/path-segment-affordance.d.ts.map +1 -0
  1176. package/dist/shared/path-segment-affordance.js +77 -0
  1177. package/dist/shared/pipe-run-translation-offset.d.ts +27 -0
  1178. package/dist/shared/pipe-run-translation-offset.d.ts.map +1 -0
  1179. package/dist/shared/pipe-run-translation-offset.js +131 -0
  1180. package/dist/shared/pipe-vertical-offset.d.ts +98 -0
  1181. package/dist/shared/pipe-vertical-offset.d.ts.map +1 -0
  1182. package/dist/shared/pipe-vertical-offset.js +836 -0
  1183. package/dist/shared/placeholder-geometry.d.ts +22 -0
  1184. package/dist/shared/placeholder-geometry.d.ts.map +1 -0
  1185. package/dist/shared/placeholder-geometry.js +31 -0
  1186. package/dist/shared/polygon-centroid-move.d.ts +21 -0
  1187. package/dist/shared/polygon-centroid-move.d.ts.map +1 -0
  1188. package/dist/shared/polygon-centroid-move.js +117 -0
  1189. package/dist/shared/polygon-measurement.d.ts +10 -0
  1190. package/dist/shared/polygon-measurement.d.ts.map +1 -0
  1191. package/dist/shared/polygon-measurement.js +35 -0
  1192. package/dist/shared/polygon-vertex-affordance.d.ts +108 -0
  1193. package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -0
  1194. package/dist/shared/polygon-vertex-affordance.js +325 -0
  1195. package/dist/shared/ports.d.ts +75 -0
  1196. package/dist/shared/ports.d.ts.map +1 -0
  1197. package/dist/shared/ports.js +164 -0
  1198. package/dist/shared/quick-measurement.d.ts +8 -0
  1199. package/dist/shared/quick-measurement.d.ts.map +1 -0
  1200. package/dist/shared/quick-measurement.js +15 -0
  1201. package/dist/shared/refrigerant-line-selection.d.ts +4 -0
  1202. package/dist/shared/refrigerant-line-selection.d.ts.map +1 -0
  1203. package/dist/shared/refrigerant-line-selection.js +405 -0
  1204. package/dist/shared/relative-roof-drag.d.ts +18 -0
  1205. package/dist/shared/relative-roof-drag.d.ts.map +1 -0
  1206. package/dist/shared/relative-roof-drag.js +83 -0
  1207. package/dist/shared/ridge-snap.d.ts +31 -0
  1208. package/dist/shared/ridge-snap.d.ts.map +1 -0
  1209. package/dist/shared/ridge-snap.js +61 -0
  1210. package/dist/shared/roof-attachment-fallback-preview.d.ts +14 -0
  1211. package/dist/shared/roof-attachment-fallback-preview.d.ts.map +1 -0
  1212. package/dist/shared/roof-attachment-fallback-preview.js +84 -0
  1213. package/dist/shared/roof-face-host.d.ts +17 -0
  1214. package/dist/shared/roof-face-host.d.ts.map +1 -0
  1215. package/dist/shared/roof-face-host.js +24 -0
  1216. package/dist/shared/roof-opening-host.d.ts +66 -0
  1217. package/dist/shared/roof-opening-host.d.ts.map +1 -0
  1218. package/dist/shared/roof-opening-host.js +98 -0
  1219. package/dist/shared/roof-segment-hit.d.ts +34 -0
  1220. package/dist/shared/roof-segment-hit.d.ts.map +1 -0
  1221. package/dist/shared/roof-segment-hit.js +72 -0
  1222. package/dist/shared/roof-surface-placement-guides.d.ts +68 -0
  1223. package/dist/shared/roof-surface-placement-guides.d.ts.map +1 -0
  1224. package/dist/shared/roof-surface-placement-guides.js +716 -0
  1225. package/dist/shared/roof-surface.d.ts +20 -0
  1226. package/dist/shared/roof-surface.d.ts.map +1 -0
  1227. package/dist/shared/roof-surface.js +467 -0
  1228. package/dist/shared/roof-wall-opening-cut.d.ts +16 -0
  1229. package/dist/shared/roof-wall-opening-cut.d.ts.map +1 -0
  1230. package/dist/shared/roof-wall-opening-cut.js +52 -0
  1231. package/dist/shared/roof-wall-opening-placement.d.ts +53 -0
  1232. package/dist/shared/roof-wall-opening-placement.d.ts.map +1 -0
  1233. package/dist/shared/roof-wall-opening-placement.js +58 -0
  1234. package/dist/shared/rotate-affordance.d.ts +16 -0
  1235. package/dist/shared/rotate-affordance.d.ts.map +1 -0
  1236. package/dist/shared/rotate-affordance.js +20 -0
  1237. package/dist/shared/run-move-connectivity.d.ts +52 -0
  1238. package/dist/shared/run-move-connectivity.d.ts.map +1 -0
  1239. package/dist/shared/run-move-connectivity.js +82 -0
  1240. package/dist/shared/run-translation-offset.d.ts +24 -0
  1241. package/dist/shared/run-translation-offset.d.ts.map +1 -0
  1242. package/dist/shared/run-translation-offset.js +140 -0
  1243. package/dist/shared/selection-handles.d.ts +51 -0
  1244. package/dist/shared/selection-handles.d.ts.map +1 -0
  1245. package/dist/shared/selection-handles.js +74 -0
  1246. package/dist/shared/slot-paint.d.ts +46 -0
  1247. package/dist/shared/slot-paint.d.ts.map +1 -0
  1248. package/dist/shared/slot-paint.js +235 -0
  1249. package/dist/shared/surface-paint.d.ts +3 -0
  1250. package/dist/shared/surface-paint.d.ts.map +1 -0
  1251. package/dist/shared/surface-paint.js +41 -0
  1252. package/dist/shared/use-segment-trim-clip.d.ts +44 -0
  1253. package/dist/shared/use-segment-trim-clip.d.ts.map +1 -0
  1254. package/dist/shared/use-segment-trim-clip.js +149 -0
  1255. package/dist/shared/vertical-offset.d.ts +95 -0
  1256. package/dist/shared/vertical-offset.d.ts.map +1 -0
  1257. package/dist/shared/vertical-offset.js +851 -0
  1258. package/dist/shared/wall-attach-target.d.ts +109 -0
  1259. package/dist/shared/wall-attach-target.d.ts.map +1 -0
  1260. package/dist/shared/wall-attach-target.js +192 -0
  1261. package/dist/shared/wall-opening-alignment.d.ts +34 -0
  1262. package/dist/shared/wall-opening-alignment.d.ts.map +1 -0
  1263. package/dist/shared/wall-opening-alignment.js +113 -0
  1264. package/dist/shelf/definition.d.ts +4 -0
  1265. package/dist/shelf/definition.d.ts.map +1 -0
  1266. package/dist/shelf/definition.js +265 -0
  1267. package/dist/shelf/dimensions.d.ts +3 -0
  1268. package/dist/shelf/dimensions.d.ts.map +1 -0
  1269. package/dist/shelf/dimensions.js +15 -0
  1270. package/dist/shelf/floorplan-affordances.d.ts +26 -0
  1271. package/dist/shelf/floorplan-affordances.d.ts.map +1 -0
  1272. package/dist/shelf/floorplan-affordances.js +88 -0
  1273. package/dist/shelf/floorplan-move.d.ts +25 -0
  1274. package/dist/shelf/floorplan-move.d.ts.map +1 -0
  1275. package/dist/shelf/floorplan-move.js +90 -0
  1276. package/dist/shelf/floorplan.d.ts +20 -0
  1277. package/dist/shelf/floorplan.d.ts.map +1 -0
  1278. package/dist/shelf/floorplan.js +124 -0
  1279. package/dist/shelf/geometry.d.ts +15 -0
  1280. package/dist/shelf/geometry.d.ts.map +1 -0
  1281. package/dist/shelf/geometry.js +304 -0
  1282. package/dist/shelf/index.d.ts +4 -0
  1283. package/dist/shelf/index.d.ts.map +1 -0
  1284. package/dist/shelf/index.js +3 -0
  1285. package/dist/shelf/paint.d.ts +3 -0
  1286. package/dist/shelf/paint.d.ts.map +1 -0
  1287. package/dist/shelf/paint.js +181 -0
  1288. package/dist/shelf/parametrics.d.ts +14 -0
  1289. package/dist/shelf/parametrics.d.ts.map +1 -0
  1290. package/dist/shelf/parametrics.js +81 -0
  1291. package/dist/shelf/preview.d.ts +31 -0
  1292. package/dist/shelf/preview.d.ts.map +1 -0
  1293. package/dist/shelf/preview.js +77 -0
  1294. package/dist/shelf/schema.d.ts +2 -0
  1295. package/dist/shelf/schema.d.ts.map +1 -0
  1296. package/dist/shelf/schema.js +6 -0
  1297. package/dist/shelf/slots.d.ts +9 -0
  1298. package/dist/shelf/slots.d.ts.map +1 -0
  1299. package/dist/shelf/slots.js +30 -0
  1300. package/dist/shelf/tool.d.ts +3 -0
  1301. package/dist/shelf/tool.d.ts.map +1 -0
  1302. package/dist/shelf/tool.js +125 -0
  1303. package/dist/site/definition.d.ts +10 -0
  1304. package/dist/site/definition.d.ts.map +1 -0
  1305. package/dist/site/definition.js +54 -0
  1306. package/dist/site/index.d.ts +2 -0
  1307. package/dist/site/index.d.ts.map +1 -0
  1308. package/dist/site/index.js +1 -0
  1309. package/dist/site/parametrics.d.ts +3 -0
  1310. package/dist/site/parametrics.d.ts.map +1 -0
  1311. package/dist/site/parametrics.js +3 -0
  1312. package/dist/site/recessed-slab-ground-holes.d.ts +3 -0
  1313. package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -0
  1314. package/dist/site/recessed-slab-ground-holes.js +46 -0
  1315. package/dist/site/renderer.d.ts +6 -0
  1316. package/dist/site/renderer.d.ts.map +1 -0
  1317. package/dist/site/renderer.js +196 -0
  1318. package/dist/site/schema.d.ts +2 -0
  1319. package/dist/site/schema.d.ts.map +1 -0
  1320. package/dist/site/schema.js +1 -0
  1321. package/dist/skylight/definition.d.ts +10 -0
  1322. package/dist/skylight/definition.d.ts.map +1 -0
  1323. package/dist/skylight/definition.js +268 -0
  1324. package/dist/skylight/floorplan.d.ts +16 -0
  1325. package/dist/skylight/floorplan.d.ts.map +1 -0
  1326. package/dist/skylight/floorplan.js +129 -0
  1327. package/dist/skylight/frame-csg.d.ts +4 -0
  1328. package/dist/skylight/frame-csg.d.ts.map +1 -0
  1329. package/dist/skylight/frame-csg.js +49 -0
  1330. package/dist/skylight/geometry.d.ts +7 -0
  1331. package/dist/skylight/geometry.d.ts.map +1 -0
  1332. package/dist/skylight/geometry.js +114 -0
  1333. package/dist/skylight/index.d.ts +5 -0
  1334. package/dist/skylight/index.d.ts.map +1 -0
  1335. package/dist/skylight/index.js +4 -0
  1336. package/dist/skylight/interaction.d.ts +11 -0
  1337. package/dist/skylight/interaction.d.ts.map +1 -0
  1338. package/dist/skylight/interaction.js +42 -0
  1339. package/dist/skylight/move-tool.d.ts +5 -0
  1340. package/dist/skylight/move-tool.d.ts.map +1 -0
  1341. package/dist/skylight/move-tool.js +233 -0
  1342. package/dist/skylight/panel.d.ts +2 -0
  1343. package/dist/skylight/panel.d.ts.map +1 -0
  1344. package/dist/skylight/panel.js +253 -0
  1345. package/dist/skylight/parametrics.d.ts +4 -0
  1346. package/dist/skylight/parametrics.d.ts.map +1 -0
  1347. package/dist/skylight/parametrics.js +99 -0
  1348. package/dist/skylight/preview.d.ts +7 -0
  1349. package/dist/skylight/preview.d.ts.map +1 -0
  1350. package/dist/skylight/preview.js +49 -0
  1351. package/dist/skylight/renderer.d.ts +6 -0
  1352. package/dist/skylight/renderer.d.ts.map +1 -0
  1353. package/dist/skylight/renderer.js +303 -0
  1354. package/dist/skylight/roof-cut.d.ts +21 -0
  1355. package/dist/skylight/roof-cut.d.ts.map +1 -0
  1356. package/dist/skylight/roof-cut.js +61 -0
  1357. package/dist/skylight/schema.d.ts +2 -0
  1358. package/dist/skylight/schema.d.ts.map +1 -0
  1359. package/dist/skylight/schema.js +1 -0
  1360. package/dist/skylight/system.d.ts +3 -0
  1361. package/dist/skylight/system.d.ts.map +1 -0
  1362. package/dist/skylight/system.js +49 -0
  1363. package/dist/skylight/tool.d.ts +3 -0
  1364. package/dist/skylight/tool.d.ts.map +1 -0
  1365. package/dist/skylight/tool.js +100 -0
  1366. package/dist/slab/boundary-editor.d.ts +24 -0
  1367. package/dist/slab/boundary-editor.d.ts.map +1 -0
  1368. package/dist/slab/boundary-editor.js +127 -0
  1369. package/dist/slab/definition.d.ts +20 -0
  1370. package/dist/slab/definition.d.ts.map +1 -0
  1371. package/dist/slab/definition.js +218 -0
  1372. package/dist/slab/floorplan-affordances.d.ts +177 -0
  1373. package/dist/slab/floorplan-affordances.d.ts.map +1 -0
  1374. package/dist/slab/floorplan-affordances.js +52 -0
  1375. package/dist/slab/floorplan-move.d.ts +12 -0
  1376. package/dist/slab/floorplan-move.d.ts.map +1 -0
  1377. package/dist/slab/floorplan-move.js +19 -0
  1378. package/dist/slab/floorplan.d.ts +20 -0
  1379. package/dist/slab/floorplan.d.ts.map +1 -0
  1380. package/dist/slab/floorplan.js +144 -0
  1381. package/dist/slab/geometry.d.ts +5 -0
  1382. package/dist/slab/geometry.d.ts.map +1 -0
  1383. package/dist/slab/geometry.js +133 -0
  1384. package/dist/slab/hole-editor.d.ts +14 -0
  1385. package/dist/slab/hole-editor.d.ts.map +1 -0
  1386. package/dist/slab/hole-editor.js +54 -0
  1387. package/dist/slab/index.d.ts +3 -0
  1388. package/dist/slab/index.d.ts.map +1 -0
  1389. package/dist/slab/index.js +2 -0
  1390. package/dist/slab/move-tool.d.ts +6 -0
  1391. package/dist/slab/move-tool.d.ts.map +1 -0
  1392. package/dist/slab/move-tool.js +232 -0
  1393. package/dist/slab/paint.d.ts +8 -0
  1394. package/dist/slab/paint.d.ts.map +1 -0
  1395. package/dist/slab/paint.js +26 -0
  1396. package/dist/slab/panel.d.ts +14 -0
  1397. package/dist/slab/panel.d.ts.map +1 -0
  1398. package/dist/slab/panel.js +144 -0
  1399. package/dist/slab/parametrics.d.ts +14 -0
  1400. package/dist/slab/parametrics.d.ts.map +1 -0
  1401. package/dist/slab/parametrics.js +19 -0
  1402. package/dist/slab/quick-measurement.d.ts +3 -0
  1403. package/dist/slab/quick-measurement.d.ts.map +1 -0
  1404. package/dist/slab/quick-measurement.js +35 -0
  1405. package/dist/slab/schema.d.ts +2 -0
  1406. package/dist/slab/schema.d.ts.map +1 -0
  1407. package/dist/slab/schema.js +1 -0
  1408. package/dist/slab/slots.d.ts +10 -0
  1409. package/dist/slab/slots.d.ts.map +1 -0
  1410. package/dist/slab/slots.js +20 -0
  1411. package/dist/slab/system.d.ts +3 -0
  1412. package/dist/slab/system.d.ts.map +1 -0
  1413. package/dist/slab/system.js +63 -0
  1414. package/dist/slab/tool.d.ts +3 -0
  1415. package/dist/slab/tool.d.ts.map +1 -0
  1416. package/dist/slab/tool.js +204 -0
  1417. package/dist/solar-panel/definition.d.ts +15 -0
  1418. package/dist/solar-panel/definition.d.ts.map +1 -0
  1419. package/dist/solar-panel/definition.js +260 -0
  1420. package/dist/solar-panel/floorplan.d.ts +21 -0
  1421. package/dist/solar-panel/floorplan.d.ts.map +1 -0
  1422. package/dist/solar-panel/floorplan.js +120 -0
  1423. package/dist/solar-panel/geometry.d.ts +29 -0
  1424. package/dist/solar-panel/geometry.d.ts.map +1 -0
  1425. package/dist/solar-panel/geometry.js +196 -0
  1426. package/dist/solar-panel/index.d.ts +5 -0
  1427. package/dist/solar-panel/index.d.ts.map +1 -0
  1428. package/dist/solar-panel/index.js +4 -0
  1429. package/dist/solar-panel/move-tool.d.ts +5 -0
  1430. package/dist/solar-panel/move-tool.d.ts.map +1 -0
  1431. package/dist/solar-panel/move-tool.js +257 -0
  1432. package/dist/solar-panel/panel.d.ts +2 -0
  1433. package/dist/solar-panel/panel.d.ts.map +1 -0
  1434. package/dist/solar-panel/panel.js +146 -0
  1435. package/dist/solar-panel/parametrics.d.ts +4 -0
  1436. package/dist/solar-panel/parametrics.d.ts.map +1 -0
  1437. package/dist/solar-panel/parametrics.js +52 -0
  1438. package/dist/solar-panel/preview.d.ts +7 -0
  1439. package/dist/solar-panel/preview.d.ts.map +1 -0
  1440. package/dist/solar-panel/preview.js +46 -0
  1441. package/dist/solar-panel/renderer.d.ts +26 -0
  1442. package/dist/solar-panel/renderer.d.ts.map +1 -0
  1443. package/dist/solar-panel/renderer.js +162 -0
  1444. package/dist/solar-panel/schema.d.ts +2 -0
  1445. package/dist/solar-panel/schema.d.ts.map +1 -0
  1446. package/dist/solar-panel/schema.js +1 -0
  1447. package/dist/solar-panel/tool.d.ts +11 -0
  1448. package/dist/solar-panel/tool.d.ts.map +1 -0
  1449. package/dist/solar-panel/tool.js +120 -0
  1450. package/dist/spawn/definition.d.ts +4 -0
  1451. package/dist/spawn/definition.d.ts.map +1 -0
  1452. package/dist/spawn/definition.js +107 -0
  1453. package/dist/spawn/floorplan-affordances.d.ts +3 -0
  1454. package/dist/spawn/floorplan-affordances.d.ts.map +1 -0
  1455. package/dist/spawn/floorplan-affordances.js +31 -0
  1456. package/dist/spawn/floorplan-move.d.ts +3 -0
  1457. package/dist/spawn/floorplan-move.d.ts.map +1 -0
  1458. package/dist/spawn/floorplan-move.js +31 -0
  1459. package/dist/spawn/floorplan.d.ts +14 -0
  1460. package/dist/spawn/floorplan.d.ts.map +1 -0
  1461. package/dist/spawn/floorplan.js +135 -0
  1462. package/dist/spawn/index.d.ts +3 -0
  1463. package/dist/spawn/index.d.ts.map +1 -0
  1464. package/dist/spawn/index.js +2 -0
  1465. package/dist/spawn/panel.d.ts +2 -0
  1466. package/dist/spawn/panel.d.ts.map +1 -0
  1467. package/dist/spawn/panel.js +71 -0
  1468. package/dist/spawn/parametrics.d.ts +8 -0
  1469. package/dist/spawn/parametrics.d.ts.map +1 -0
  1470. package/dist/spawn/parametrics.js +23 -0
  1471. package/dist/spawn/renderer.d.ts +16 -0
  1472. package/dist/spawn/renderer.d.ts.map +1 -0
  1473. package/dist/spawn/renderer.js +47 -0
  1474. package/dist/spawn/schema.d.ts +2 -0
  1475. package/dist/spawn/schema.d.ts.map +1 -0
  1476. package/dist/spawn/schema.js +5 -0
  1477. package/dist/spawn/tool.d.ts +10 -0
  1478. package/dist/spawn/tool.d.ts.map +1 -0
  1479. package/dist/spawn/tool.js +109 -0
  1480. package/dist/stair/definition.d.ts +9 -0
  1481. package/dist/stair/definition.d.ts.map +1 -0
  1482. package/dist/stair/definition.js +440 -0
  1483. package/dist/stair/floor-stack.d.ts +10 -0
  1484. package/dist/stair/floor-stack.d.ts.map +1 -0
  1485. package/dist/stair/floor-stack.js +77 -0
  1486. package/dist/stair/floorplan-affordances.d.ts +53 -0
  1487. package/dist/stair/floorplan-affordances.d.ts.map +1 -0
  1488. package/dist/stair/floorplan-affordances.js +266 -0
  1489. package/dist/stair/floorplan-move.d.ts +17 -0
  1490. package/dist/stair/floorplan-move.d.ts.map +1 -0
  1491. package/dist/stair/floorplan-move.js +64 -0
  1492. package/dist/stair/floorplan.d.ts +26 -0
  1493. package/dist/stair/floorplan.d.ts.map +1 -0
  1494. package/dist/stair/floorplan.js +455 -0
  1495. package/dist/stair/index.d.ts +2 -0
  1496. package/dist/stair/index.d.ts.map +1 -0
  1497. package/dist/stair/index.js +1 -0
  1498. package/dist/stair/paint.d.ts +2 -0
  1499. package/dist/stair/paint.d.ts.map +1 -0
  1500. package/dist/stair/paint.js +86 -0
  1501. package/dist/stair/panel.d.ts +2 -0
  1502. package/dist/stair/panel.d.ts.map +1 -0
  1503. package/dist/stair/panel.js +196 -0
  1504. package/dist/stair/parametrics.d.ts +3 -0
  1505. package/dist/stair/parametrics.d.ts.map +1 -0
  1506. package/dist/stair/parametrics.js +4 -0
  1507. package/dist/stair/renderer.d.ts +6 -0
  1508. package/dist/stair/renderer.d.ts.map +1 -0
  1509. package/dist/stair/renderer.js +667 -0
  1510. package/dist/stair/schema.d.ts +2 -0
  1511. package/dist/stair/schema.d.ts.map +1 -0
  1512. package/dist/stair/schema.js +1 -0
  1513. package/dist/stair/slots.d.ts +7 -0
  1514. package/dist/stair/slots.d.ts.map +1 -0
  1515. package/dist/stair/slots.js +13 -0
  1516. package/dist/stair/system.d.ts +3 -0
  1517. package/dist/stair/system.d.ts.map +1 -0
  1518. package/dist/stair/system.js +3 -0
  1519. package/dist/stair-segment/definition.d.ts +8 -0
  1520. package/dist/stair-segment/definition.d.ts.map +1 -0
  1521. package/dist/stair-segment/definition.js +133 -0
  1522. package/dist/stair-segment/index.d.ts +2 -0
  1523. package/dist/stair-segment/index.d.ts.map +1 -0
  1524. package/dist/stair-segment/index.js +1 -0
  1525. package/dist/stair-segment/panel.d.ts +2 -0
  1526. package/dist/stair-segment/panel.d.ts.map +1 -0
  1527. package/dist/stair-segment/panel.js +126 -0
  1528. package/dist/stair-segment/parametrics.d.ts +3 -0
  1529. package/dist/stair-segment/parametrics.d.ts.map +1 -0
  1530. package/dist/stair-segment/parametrics.js +4 -0
  1531. package/dist/stair-segment/renderer.d.ts +6 -0
  1532. package/dist/stair-segment/renderer.d.ts.map +1 -0
  1533. package/dist/stair-segment/renderer.js +55 -0
  1534. package/dist/stair-segment/schema.d.ts +2 -0
  1535. package/dist/stair-segment/schema.d.ts.map +1 -0
  1536. package/dist/stair-segment/schema.js +1 -0
  1537. package/dist/turbine-vent/definition.d.ts +24 -0
  1538. package/dist/turbine-vent/definition.d.ts.map +1 -0
  1539. package/dist/turbine-vent/definition.js +119 -0
  1540. package/dist/turbine-vent/floorplan.d.ts +13 -0
  1541. package/dist/turbine-vent/floorplan.d.ts.map +1 -0
  1542. package/dist/turbine-vent/floorplan.js +111 -0
  1543. package/dist/turbine-vent/geometry.d.ts +6 -0
  1544. package/dist/turbine-vent/geometry.d.ts.map +1 -0
  1545. package/dist/turbine-vent/geometry.js +284 -0
  1546. package/dist/turbine-vent/index.d.ts +4 -0
  1547. package/dist/turbine-vent/index.d.ts.map +1 -0
  1548. package/dist/turbine-vent/index.js +3 -0
  1549. package/dist/turbine-vent/move-tool.d.ts +13 -0
  1550. package/dist/turbine-vent/move-tool.d.ts.map +1 -0
  1551. package/dist/turbine-vent/move-tool.js +207 -0
  1552. package/dist/turbine-vent/panel.d.ts +8 -0
  1553. package/dist/turbine-vent/panel.d.ts.map +1 -0
  1554. package/dist/turbine-vent/panel.js +127 -0
  1555. package/dist/turbine-vent/parametrics.d.ts +9 -0
  1556. package/dist/turbine-vent/parametrics.d.ts.map +1 -0
  1557. package/dist/turbine-vent/parametrics.js +34 -0
  1558. package/dist/turbine-vent/preview.d.ts +14 -0
  1559. package/dist/turbine-vent/preview.d.ts.map +1 -0
  1560. package/dist/turbine-vent/preview.js +38 -0
  1561. package/dist/turbine-vent/renderer.d.ts +18 -0
  1562. package/dist/turbine-vent/renderer.d.ts.map +1 -0
  1563. package/dist/turbine-vent/renderer.js +107 -0
  1564. package/dist/turbine-vent/schema.d.ts +2 -0
  1565. package/dist/turbine-vent/schema.d.ts.map +1 -0
  1566. package/dist/turbine-vent/schema.js +3 -0
  1567. package/dist/turbine-vent/tool.d.ts +9 -0
  1568. package/dist/turbine-vent/tool.d.ts.map +1 -0
  1569. package/dist/turbine-vent/tool.js +111 -0
  1570. package/dist/wall/curve-tool.d.ts +14 -0
  1571. package/dist/wall/curve-tool.d.ts.map +1 -0
  1572. package/dist/wall/curve-tool.js +123 -0
  1573. package/dist/wall/definition.d.ts +19 -0
  1574. package/dist/wall/definition.d.ts.map +1 -0
  1575. package/dist/wall/definition.js +132 -0
  1576. package/dist/wall/floorplan-affordances.d.ts +13 -0
  1577. package/dist/wall/floorplan-affordances.d.ts.map +1 -0
  1578. package/dist/wall/floorplan-affordances.js +241 -0
  1579. package/dist/wall/floorplan-move.d.ts +32 -0
  1580. package/dist/wall/floorplan-move.d.ts.map +1 -0
  1581. package/dist/wall/floorplan-move.js +259 -0
  1582. package/dist/wall/floorplan-overrides.d.ts +22 -0
  1583. package/dist/wall/floorplan-overrides.d.ts.map +1 -0
  1584. package/dist/wall/floorplan-overrides.js +32 -0
  1585. package/dist/wall/floorplan.d.ts +23 -0
  1586. package/dist/wall/floorplan.d.ts.map +1 -0
  1587. package/dist/wall/floorplan.js +249 -0
  1588. package/dist/wall/index.d.ts +3 -0
  1589. package/dist/wall/index.d.ts.map +1 -0
  1590. package/dist/wall/index.js +2 -0
  1591. package/dist/wall/measurement.d.ts +5 -0
  1592. package/dist/wall/measurement.d.ts.map +1 -0
  1593. package/dist/wall/measurement.js +174 -0
  1594. package/dist/wall/move-endpoint-tool.d.ts +22 -0
  1595. package/dist/wall/move-endpoint-tool.d.ts.map +1 -0
  1596. package/dist/wall/move-endpoint-tool.js +450 -0
  1597. package/dist/wall/move-shared.d.ts +48 -0
  1598. package/dist/wall/move-shared.d.ts.map +1 -0
  1599. package/dist/wall/move-shared.js +162 -0
  1600. package/dist/wall/move-tool.d.ts +6 -0
  1601. package/dist/wall/move-tool.d.ts.map +1 -0
  1602. package/dist/wall/move-tool.js +523 -0
  1603. package/dist/wall/paint.d.ts +33 -0
  1604. package/dist/wall/paint.d.ts.map +1 -0
  1605. package/dist/wall/paint.js +176 -0
  1606. package/dist/wall/panel.d.ts +2 -0
  1607. package/dist/wall/panel.d.ts.map +1 -0
  1608. package/dist/wall/panel.js +198 -0
  1609. package/dist/wall/parametrics.d.ts +16 -0
  1610. package/dist/wall/parametrics.d.ts.map +1 -0
  1611. package/dist/wall/parametrics.js +30 -0
  1612. package/dist/wall/quick-measurement.d.ts +3 -0
  1613. package/dist/wall/quick-measurement.d.ts.map +1 -0
  1614. package/dist/wall/quick-measurement.js +30 -0
  1615. package/dist/wall/renderer.d.ts +25 -0
  1616. package/dist/wall/renderer.d.ts.map +1 -0
  1617. package/dist/wall/renderer.js +65 -0
  1618. package/dist/wall/schema.d.ts +12 -0
  1619. package/dist/wall/schema.d.ts.map +1 -0
  1620. package/dist/wall/schema.js +10 -0
  1621. package/dist/wall/slots.d.ts +10 -0
  1622. package/dist/wall/slots.d.ts.map +1 -0
  1623. package/dist/wall/slots.js +84 -0
  1624. package/dist/wall/system.d.ts +14 -0
  1625. package/dist/wall/system.d.ts.map +1 -0
  1626. package/dist/wall/system.js +18 -0
  1627. package/dist/wall/tool.d.ts +3 -0
  1628. package/dist/wall/tool.d.ts.map +1 -0
  1629. package/dist/wall/tool.js +628 -0
  1630. package/dist/wall/treatments.d.ts +26 -0
  1631. package/dist/wall/treatments.d.ts.map +1 -0
  1632. package/dist/wall/treatments.js +503 -0
  1633. package/dist/window/definition.d.ts +15 -0
  1634. package/dist/window/definition.d.ts.map +1 -0
  1635. package/dist/window/definition.js +237 -0
  1636. package/dist/window/floor-projection.d.ts +9 -0
  1637. package/dist/window/floor-projection.d.ts.map +1 -0
  1638. package/dist/window/floor-projection.js +84 -0
  1639. package/dist/window/floorplan-affordances.d.ts +22 -0
  1640. package/dist/window/floorplan-affordances.d.ts.map +1 -0
  1641. package/dist/window/floorplan-affordances.js +82 -0
  1642. package/dist/window/floorplan-move.d.ts +14 -0
  1643. package/dist/window/floorplan-move.d.ts.map +1 -0
  1644. package/dist/window/floorplan-move.js +223 -0
  1645. package/dist/window/floorplan.d.ts +16 -0
  1646. package/dist/window/floorplan.d.ts.map +1 -0
  1647. package/dist/window/floorplan.js +151 -0
  1648. package/dist/window/index.d.ts +3 -0
  1649. package/dist/window/index.d.ts.map +1 -0
  1650. package/dist/window/index.js +2 -0
  1651. package/dist/window/move-tool.d.ts +18 -0
  1652. package/dist/window/move-tool.d.ts.map +1 -0
  1653. package/dist/window/move-tool.js +914 -0
  1654. package/dist/window/paint.d.ts +8 -0
  1655. package/dist/window/paint.d.ts.map +1 -0
  1656. package/dist/window/paint.js +11 -0
  1657. package/dist/window/panel.d.ts +2 -0
  1658. package/dist/window/panel.d.ts.map +1 -0
  1659. package/dist/window/panel.js +384 -0
  1660. package/dist/window/parametrics.d.ts +11 -0
  1661. package/dist/window/parametrics.d.ts.map +1 -0
  1662. package/dist/window/parametrics.js +22 -0
  1663. package/dist/window/preview.d.ts +18 -0
  1664. package/dist/window/preview.d.ts.map +1 -0
  1665. package/dist/window/preview.js +36 -0
  1666. package/dist/window/renderer.d.ts +6 -0
  1667. package/dist/window/renderer.d.ts.map +1 -0
  1668. package/dist/window/renderer.js +37 -0
  1669. package/dist/window/schema.d.ts +2 -0
  1670. package/dist/window/schema.d.ts.map +1 -0
  1671. package/dist/window/schema.js +1 -0
  1672. package/dist/window/slots.d.ts +5 -0
  1673. package/dist/window/slots.d.ts.map +1 -0
  1674. package/dist/window/slots.js +11 -0
  1675. package/dist/window/system.d.ts +12 -0
  1676. package/dist/window/system.d.ts.map +1 -0
  1677. package/dist/window/system.js +16 -0
  1678. package/dist/window/tool.d.ts +13 -0
  1679. package/dist/window/tool.d.ts.map +1 -0
  1680. package/dist/window/tool.js +580 -0
  1681. package/dist/window/window-math.d.ts +31 -0
  1682. package/dist/window/window-math.d.ts.map +1 -0
  1683. package/dist/window/window-math.js +41 -0
  1684. package/dist/zone/definition.d.ts +10 -0
  1685. package/dist/zone/definition.d.ts.map +1 -0
  1686. package/dist/zone/definition.js +80 -0
  1687. package/dist/zone/floorplan-affordances.d.ts +81 -0
  1688. package/dist/zone/floorplan-affordances.d.ts.map +1 -0
  1689. package/dist/zone/floorplan-affordances.js +19 -0
  1690. package/dist/zone/floorplan-move.d.ts +13 -0
  1691. package/dist/zone/floorplan-move.d.ts.map +1 -0
  1692. package/dist/zone/floorplan-move.js +17 -0
  1693. package/dist/zone/floorplan.d.ts +13 -0
  1694. package/dist/zone/floorplan.d.ts.map +1 -0
  1695. package/dist/zone/floorplan.js +147 -0
  1696. package/dist/zone/index.d.ts +2 -0
  1697. package/dist/zone/index.d.ts.map +1 -0
  1698. package/dist/zone/index.js +1 -0
  1699. package/dist/zone/parametrics.d.ts +3 -0
  1700. package/dist/zone/parametrics.d.ts.map +1 -0
  1701. package/dist/zone/parametrics.js +4 -0
  1702. package/dist/zone/quantities-panel.d.ts +2 -0
  1703. package/dist/zone/quantities-panel.d.ts.map +1 -0
  1704. package/dist/zone/quantities-panel.js +83 -0
  1705. package/dist/zone/quick-measurement.d.ts +3 -0
  1706. package/dist/zone/quick-measurement.d.ts.map +1 -0
  1707. package/dist/zone/quick-measurement.js +29 -0
  1708. package/dist/zone/renderer.d.ts +6 -0
  1709. package/dist/zone/renderer.d.ts.map +1 -0
  1710. package/dist/zone/renderer.js +205 -0
  1711. package/dist/zone/schema.d.ts +2 -0
  1712. package/dist/zone/schema.d.ts.map +1 -0
  1713. package/dist/zone/schema.js +1 -0
  1714. package/dist/zone/system.d.ts +3 -0
  1715. package/dist/zone/system.d.ts.map +1 -0
  1716. package/dist/zone/system.js +3 -0
  1717. package/package.json +61 -0
@@ -0,0 +1,1342 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { collectAlignmentAnchors, emitter, measurementAngle, measurementArea, measurementCentroid, measurementDistance, measurementFeatureLength, measurementPerimeter, measurementPrismVolume, sceneRegistry, useScene, } from '@pascal-app/core';
4
+ import { buildMeasurementAngleArcPoints, commitMeasurementDraft, EDITOR_LAYER, finishMeasurementDraft, formatAngleRadians, formatAreaLabel, formatLinearMeasurement, formatVolumeLabel, getLinearUnitLabel, handleMeasurementDraftEscape, isAlignmentGuideActive, isGridSnapActive, linearUnitToMeters, MEASUREMENT_ACTIVE_COLOR, markToolCancelConsumed, measurementPolygonLabelAnchor, measurementPolygonMidpoints, metersToLinearUnit, useEditor, useInteractionScope, useMeasurementDraft, } from '@pascal-app/editor';
5
+ import { SCENE_LAYER, useViewer } from '@pascal-app/viewer';
6
+ import { Html } from '@react-three/drei';
7
+ import { useFrame, useThree } from '@react-three/fiber';
8
+ import { useEffect, useMemo, useRef, useState } from 'react';
9
+ import { BufferGeometry, DoubleSide, Float32BufferAttribute, MathUtils, Matrix3, Matrix4, Quaternion, Raycaster, Vector2, Vector3, } from 'three';
10
+ import { MeshBasicNodeMaterial } from 'three/webgpu';
11
+ import { matchMeasurementFeatureForNode } from './resolve';
12
+ import { createMeasurementSurfaceQuerySession, } from './surface-query';
13
+ const AXIS_SNAP_DISTANCE_PX = 16;
14
+ const AXIS_SNAP_RELEASE_DISTANCE_PX = 24;
15
+ const PROXIMITY_GUIDE_DISTANCE_PX = 40;
16
+ const VERTEX_HANDLE_DISTANCE_PX = 12;
17
+ const MIDPOINT_HANDLE_DISTANCE_PX = 10;
18
+ const VERTEX_DRAG_ACTIVATION_PX = 4;
19
+ const AXIS_GUIDE_HALF_LENGTH = 20;
20
+ const AXIS_INTERSECTION_MARKER_RADIUS_PX = 8;
21
+ const SURFACE_RETICLE_RADIUS_PX = 16;
22
+ const MAX_DRAFT_DASH_SEGMENTS = 512;
23
+ const SURFACE_VERIFY_HALF_SPAN = 0.08;
24
+ const SURFACE_VERIFY_TOLERANCE = 0.012;
25
+ const SEMANTIC_FEATURE_SNAP_DISTANCE = 0.2;
26
+ const AXIS_INTERSECTION_MIN_DISTANCE = 0.05;
27
+ const MAX_AXIS_INTERSECTIONS_PER_DIRECTION = 4;
28
+ const DRAFT_COLOR = MEASUREMENT_ACTIVE_COLOR;
29
+ const RETICLE_COLOR = MEASUREMENT_ACTIVE_COLOR;
30
+ const GUIDE_COLORS = {
31
+ x: '#ef4444',
32
+ y: '#22c55e',
33
+ z: '#3b82f6',
34
+ };
35
+ const RETICLE_PLANE_NORMAL = new Vector3(0, 0, 1);
36
+ const RETICLE_NORMAL_POINTS = [new Vector3(0, 0, 0), new Vector3(0, 0, 0.9)];
37
+ const NO_RAYCAST = () => { };
38
+ function areSameMeasurementPoint(first, second) {
39
+ return Boolean(first &&
40
+ second &&
41
+ Math.abs(first[0] - second[0]) <= 1e-9 &&
42
+ Math.abs(first[1] - second[1]) <= 1e-9 &&
43
+ Math.abs(first[2] - second[2]) <= 1e-9);
44
+ }
45
+ function selectClosestAxisCandidate(candidates, threshold, lockedAxis, releaseThreshold, lockedFrom = null) {
46
+ if (lockedAxis) {
47
+ const locked = candidates.reduce((closest, candidate) => {
48
+ if (candidate.axis !== lockedAxis ||
49
+ (lockedFrom && !areSameMeasurementPoint(candidate.anchor, lockedFrom)) ||
50
+ !candidate.verified ||
51
+ candidate.screenDistance > releaseThreshold) {
52
+ return closest;
53
+ }
54
+ return !closest || candidate.screenDistance < closest.screenDistance ? candidate : closest;
55
+ }, null);
56
+ if (locked)
57
+ return locked;
58
+ }
59
+ return candidates.reduce((closest, candidate) => {
60
+ if (!candidate.verified || candidate.screenDistance > threshold)
61
+ return closest;
62
+ return !closest || candidate.screenDistance < closest.screenDistance ? candidate : closest;
63
+ }, null);
64
+ }
65
+ export function projectMeasurementPointToAxes(anchor, point) {
66
+ return [
67
+ { axis: 'x', point: [point[0], anchor[1], anchor[2]] },
68
+ { axis: 'y', point: [anchor[0], point[1], anchor[2]] },
69
+ { axis: 'z', point: [anchor[0], anchor[1], point[2]] },
70
+ ];
71
+ }
72
+ export function projectMeasurementPointToPlanarAxes(anchor, point) {
73
+ return projectMeasurementPointToAxes(anchor, point).filter((candidate) => candidate.axis === 'x' || candidate.axis === 'z');
74
+ }
75
+ export function selectClosestVerifiedAxisProjection(candidates, threshold = AXIS_SNAP_DISTANCE_PX, lockedAxis = null, releaseThreshold = AXIS_SNAP_RELEASE_DISTANCE_PX, lockedFrom = null) {
76
+ const closest = selectClosestAxisCandidate(candidates, threshold, lockedAxis, releaseThreshold, lockedFrom);
77
+ return closest ? { axis: closest.axis, point: [...closest.point] } : null;
78
+ }
79
+ export function selectAxisCandidateForSurfaceVerification(candidates, threshold = AXIS_SNAP_DISTANCE_PX, lockedAxis = null, releaseThreshold = AXIS_SNAP_RELEASE_DISTANCE_PX, lockedFrom = null) {
80
+ if (lockedAxis) {
81
+ const locked = candidates.reduce((closest, candidate) => {
82
+ if (candidate.axis !== lockedAxis ||
83
+ (lockedFrom && !areSameMeasurementPoint(candidate.anchor, lockedFrom)) ||
84
+ candidate.screenDistance > releaseThreshold) {
85
+ return closest;
86
+ }
87
+ return !closest || candidate.screenDistance < closest.screenDistance ? candidate : closest;
88
+ }, null);
89
+ if (locked)
90
+ return locked;
91
+ }
92
+ return candidates.reduce((closest, candidate) => {
93
+ if (candidate.screenDistance > threshold)
94
+ return closest;
95
+ return !closest || candidate.screenDistance < closest.screenDistance ? candidate : closest;
96
+ }, null);
97
+ }
98
+ export function measurementVertexSnapAnchors(points, index, polygon) {
99
+ if (!Number.isInteger(index) || index < 0 || index >= points.length || points.length < 2)
100
+ return [];
101
+ const neighborIndices = polygon && points.length >= 3
102
+ ? [(index - 1 + points.length) % points.length, (index + 1) % points.length]
103
+ : [index - 1, index + 1];
104
+ return Array.from(new Set(neighborIndices))
105
+ .filter((neighborIndex) => neighborIndex >= 0 && neighborIndex < points.length && neighborIndex !== index)
106
+ .map((neighborIndex) => [...points[neighborIndex]]);
107
+ }
108
+ export function selectClosestMeasurementVertexIndex(screenDistances, threshold = VERTEX_HANDLE_DISTANCE_PX) {
109
+ let closestIndex = null;
110
+ let closestDistance = threshold;
111
+ for (let index = 0; index < screenDistances.length; index += 1) {
112
+ const distance = screenDistances[index];
113
+ if (!Number.isFinite(distance) || distance > closestDistance)
114
+ continue;
115
+ closestDistance = distance;
116
+ closestIndex = index;
117
+ }
118
+ return closestIndex;
119
+ }
120
+ function isMeasurementKind(value) {
121
+ return (value === 'distance' ||
122
+ value === 'angle' ||
123
+ value === 'area' ||
124
+ value === 'perimeter' ||
125
+ value === 'volume');
126
+ }
127
+ function polygonSurfacePreference(kind, plane) {
128
+ if (kind !== 'area' && kind !== 'perimeter' && kind !== 'volume')
129
+ return null;
130
+ return plane
131
+ ? { kind: 'plane', point: plane.point, normal: plane.normal }
132
+ : { kind: 'horizontal' };
133
+ }
134
+ function isEffectivelyVisible(object) {
135
+ let current = object;
136
+ while (current) {
137
+ if (!current.visible)
138
+ return false;
139
+ current = current.parent;
140
+ }
141
+ return true;
142
+ }
143
+ export function isMeasurementSurfaceMaterialVisible(object, materialIndex = 0) {
144
+ const material = object.material;
145
+ if (!material)
146
+ return true;
147
+ const hitMaterial = Array.isArray(material) ? material[materialIndex] : material;
148
+ return Boolean(hitMaterial?.visible &&
149
+ hitMaterial.opacity > 0.001 &&
150
+ hitMaterial.colorWrite &&
151
+ hitMaterial.depthTest);
152
+ }
153
+ export function isMeasurementSurfaceEligible(object) {
154
+ let current = object;
155
+ while (current) {
156
+ if (current.userData.measurementSurface === false)
157
+ return false;
158
+ current = current.parent;
159
+ }
160
+ return true;
161
+ }
162
+ function nearestRegisteredOwner(object, ownerByObject) {
163
+ let current = object;
164
+ while (current) {
165
+ const owner = ownerByObject.get(current);
166
+ if (owner)
167
+ return owner;
168
+ current = current.parent;
169
+ }
170
+ return null;
171
+ }
172
+ export function collectMeasurementSurfaceRoots(scene, registeredRoots) {
173
+ const roots = [...registeredRoots];
174
+ scene.traverse((object) => {
175
+ if (object.userData.measurementSurface !== true)
176
+ return;
177
+ let ancestor = object;
178
+ while (ancestor) {
179
+ if (roots.includes(ancestor))
180
+ return;
181
+ ancestor = ancestor.parent;
182
+ }
183
+ roots.push(object);
184
+ });
185
+ return roots;
186
+ }
187
+ function getMeasurementRaycastContext(scene) {
188
+ const entries = Array.from(sceneRegistry.nodes.entries());
189
+ const ownerByObject = new Map(entries.map(([id, object]) => [object, id]));
190
+ const registeredObjects = new Set(entries.map(([, object]) => object));
191
+ const nodes = useScene.getState().nodes;
192
+ const registeredRoots = entries
193
+ .filter(([id, object]) => {
194
+ const node = nodes[id];
195
+ if (!node || node.type === 'measurement' || node.type === 'guide' || node.type === 'scan') {
196
+ return false;
197
+ }
198
+ if (!isEffectivelyVisible(object))
199
+ return false;
200
+ let parent = object.parent;
201
+ while (parent) {
202
+ if (registeredObjects.has(parent))
203
+ return false;
204
+ parent = parent.parent;
205
+ }
206
+ return true;
207
+ })
208
+ .map(([, object]) => object);
209
+ return {
210
+ ownerByObject,
211
+ roots: collectMeasurementSurfaceRoots(scene, registeredRoots),
212
+ };
213
+ }
214
+ export function castVisibleMeasurementSurface(raycaster, context) {
215
+ return collectVisibleMeasurementSurfaceHits(raycaster, context)[0] ?? null;
216
+ }
217
+ function collectVisibleMeasurementSurfaceHits(raycaster, context) {
218
+ const nodes = useScene.getState().nodes;
219
+ const intersections = raycaster.intersectObjects(context.roots, true);
220
+ const hits = [];
221
+ for (const intersection of intersections) {
222
+ if (!intersection.face)
223
+ continue;
224
+ if (!isEffectivelyVisible(intersection.object) ||
225
+ !isMeasurementSurfaceEligible(intersection.object) ||
226
+ !isMeasurementSurfaceMaterialVisible(intersection.object, intersection.face.materialIndex))
227
+ continue;
228
+ const targetNodeId = nearestRegisteredOwner(intersection.object, context.ownerByObject);
229
+ if (targetNodeId) {
230
+ const type = nodes[targetNodeId]?.type;
231
+ if (!type || type === 'measurement' || type === 'guide' || type === 'scan')
232
+ continue;
233
+ }
234
+ hits.push({ intersection, targetNodeId });
235
+ }
236
+ return hits;
237
+ }
238
+ export function collectMeasurementAxisSurfaceIntersections(scene, levelObject, anchor, maxDistance = AXIS_GUIDE_HALF_LENGTH) {
239
+ if (!(Number.isFinite(maxDistance) && maxDistance > AXIS_INTERSECTION_MIN_DISTANCE))
240
+ return [];
241
+ const context = getMeasurementRaycastContext(scene);
242
+ if (context.roots.length === 0)
243
+ return [];
244
+ levelObject.updateWorldMatrix(true, false);
245
+ const origin = levelObject.localToWorld(new Vector3(...anchor));
246
+ const levelRotation = levelObject.getWorldQuaternion(new Quaternion());
247
+ const raycaster = new Raycaster();
248
+ raycaster.layers.set(SCENE_LAYER);
249
+ raycaster.near = 0;
250
+ raycaster.far = maxDistance;
251
+ const intersections = [];
252
+ for (const axis of ['x', 'y', 'z']) {
253
+ const localDirection = axis === 'x'
254
+ ? new Vector3(1, 0, 0)
255
+ : axis === 'y'
256
+ ? new Vector3(0, 1, 0)
257
+ : new Vector3(0, 0, 1);
258
+ for (const sign of [-1, 1]) {
259
+ const direction = localDirection
260
+ .clone()
261
+ .multiplyScalar(sign)
262
+ .applyQuaternion(levelRotation)
263
+ .normalize();
264
+ raycaster.set(origin.clone().addScaledVector(direction, AXIS_INTERSECTION_MIN_DISTANCE), direction);
265
+ const hits = collectVisibleMeasurementSurfaceHits(raycaster, context);
266
+ let accepted = 0;
267
+ for (const hit of hits) {
268
+ const worldDistance = hit.intersection.point.distanceTo(origin);
269
+ if (worldDistance < AXIS_INTERSECTION_MIN_DISTANCE ||
270
+ worldDistance > maxDistance + AXIS_INTERSECTION_MIN_DISTANCE) {
271
+ continue;
272
+ }
273
+ const local = levelObject.worldToLocal(hit.intersection.point.clone());
274
+ const point = [local.x, local.y, local.z];
275
+ if (intersections.some((candidate) => candidate.axis === axis && measurementDistance(candidate.point, point) < 0.025)) {
276
+ continue;
277
+ }
278
+ intersections.push({ axis, point });
279
+ accepted += 1;
280
+ if (accepted >= MAX_AXIS_INTERSECTIONS_PER_DIRECTION)
281
+ break;
282
+ }
283
+ }
284
+ }
285
+ return intersections;
286
+ }
287
+ export function measurementIntersectionWorldNormal(intersection) {
288
+ const object = intersection.object;
289
+ const worldMatrix = object.matrixWorld.clone();
290
+ const instancedMesh = object;
291
+ if (instancedMesh.isInstancedMesh && intersection.instanceId !== undefined) {
292
+ const instanceMatrix = new Matrix4();
293
+ instancedMesh.getMatrixAt(intersection.instanceId, instanceMatrix);
294
+ worldMatrix.multiply(instanceMatrix);
295
+ }
296
+ return intersection
297
+ .face.normal.clone()
298
+ .applyNormalMatrix(new Matrix3().getNormalMatrix(worldMatrix))
299
+ .normalize();
300
+ }
301
+ function toLocalSurfaceHit(hit, levelObject) {
302
+ hit.intersection.object.updateWorldMatrix(true, false);
303
+ levelObject.updateWorldMatrix(true, false);
304
+ const point = levelObject.worldToLocal(hit.intersection.point.clone());
305
+ const normal = measurementIntersectionWorldNormal(hit.intersection);
306
+ const inverseLevelRotation = levelObject.getWorldQuaternion(new Quaternion()).invert();
307
+ normal.applyQuaternion(inverseLevelRotation).normalize();
308
+ return {
309
+ point: [point.x, point.y, point.z],
310
+ normal: [normal.x, normal.y, normal.z],
311
+ targetNodeId: hit.targetNodeId,
312
+ };
313
+ }
314
+ function setRayFromPointer(raycaster, pointer, event, camera, canvas) {
315
+ const rect = canvas.getBoundingClientRect();
316
+ pointer.set(((event.clientX - rect.left) / rect.width) * 2 - 1, -((event.clientY - rect.top) / rect.height) * 2 + 1);
317
+ raycaster.setFromCamera(pointer, camera);
318
+ }
319
+ function worldPointScreenDistance(point, event, camera, canvas) {
320
+ const rect = canvas.getBoundingClientRect();
321
+ const projected = point.clone().project(camera);
322
+ if (!Number.isFinite(projected.z) || projected.z < -1 || projected.z > 1) {
323
+ return Number.POSITIVE_INFINITY;
324
+ }
325
+ const x = rect.left + ((projected.x + 1) / 2) * rect.width;
326
+ const y = rect.top + ((1 - projected.y) / 2) * rect.height;
327
+ return Math.hypot(event.clientX - x, event.clientY - y);
328
+ }
329
+ function axisGuideToPoint(axis, from, point, snapped, proximity = false) {
330
+ const to = [...from];
331
+ const index = axis === 'x' ? 0 : axis === 'y' ? 1 : 2;
332
+ to[index] = point[index];
333
+ return {
334
+ axis,
335
+ from: [...from],
336
+ to,
337
+ snapped,
338
+ ...(proximity ? { proximity: true } : {}),
339
+ };
340
+ }
341
+ function verifyProjectedSurfacePoint(candidateWorld, surfaceNormalWorld, raycaster, context) {
342
+ for (const sign of [-1, 1]) {
343
+ const direction = surfaceNormalWorld.clone().multiplyScalar(-sign);
344
+ raycaster.set(candidateWorld.clone().addScaledVector(surfaceNormalWorld, SURFACE_VERIFY_HALF_SPAN * sign), direction);
345
+ raycaster.near = 0;
346
+ raycaster.far = SURFACE_VERIFY_HALF_SPAN * 2;
347
+ const hit = castVisibleMeasurementSurface(raycaster, context);
348
+ if (hit && hit.intersection.point.distanceTo(candidateWorld) <= SURFACE_VERIFY_TOLERANCE) {
349
+ return hit;
350
+ }
351
+ }
352
+ return null;
353
+ }
354
+ export function resolveSurfacePoint(event, camera, canvas, raycaster, pointer, scene, levelObject, anchorOrAnchors, lockedGuide = null, planarProximityAnchors = []) {
355
+ const context = getMeasurementRaycastContext(scene);
356
+ if (context.roots.length === 0)
357
+ return null;
358
+ raycaster.near = 0;
359
+ raycaster.far = Number.POSITIVE_INFINITY;
360
+ setRayFromPointer(raycaster, pointer, event, camera, canvas);
361
+ const rawWorldHit = castVisibleMeasurementSurface(raycaster, context);
362
+ if (!rawWorldHit)
363
+ return null;
364
+ const rawHit = toLocalSurfaceHit(rawWorldHit, levelObject);
365
+ const anchors = !anchorOrAnchors
366
+ ? []
367
+ : typeof anchorOrAnchors[0] === 'number'
368
+ ? [anchorOrAnchors]
369
+ : anchorOrAnchors;
370
+ const supportsPlanarProximity = Math.abs(rawHit.normal[1]) >= 0.65;
371
+ if (anchors.length === 0 && (!supportsPlanarProximity || planarProximityAnchors.length === 0)) {
372
+ return { hit: rawHit, guide: null };
373
+ }
374
+ levelObject.updateWorldMatrix(true, false);
375
+ const levelRotation = levelObject.getWorldQuaternion(new Quaternion());
376
+ const rawNormalWorld = new Vector3(...rawHit.normal).applyQuaternion(levelRotation).normalize();
377
+ const projectedCandidates = [
378
+ ...anchors.flatMap((anchor) => projectMeasurementPointToAxes(anchor, rawHit.point).map((candidate) => ({
379
+ ...candidate,
380
+ anchor,
381
+ proximity: false,
382
+ }))),
383
+ ...(supportsPlanarProximity
384
+ ? planarProximityAnchors.flatMap((proximityAnchor) => {
385
+ const anchor = [proximityAnchor.x, rawHit.point[1], proximityAnchor.z];
386
+ return projectMeasurementPointToPlanarAxes(anchor, rawHit.point).map((candidate) => ({
387
+ ...candidate,
388
+ anchor,
389
+ proximity: true,
390
+ }));
391
+ })
392
+ : []),
393
+ ].map((candidate) => {
394
+ const candidateWorld = levelObject.localToWorld(new Vector3(...candidate.point));
395
+ return {
396
+ ...candidate,
397
+ candidateWorld,
398
+ screenDistance: worldPointScreenDistance(candidateWorld, event, camera, canvas),
399
+ verified: false,
400
+ verifiedHit: null,
401
+ };
402
+ });
403
+ const candidateToVerify = selectAxisCandidateForSurfaceVerification(projectedCandidates, AXIS_SNAP_DISTANCE_PX, lockedGuide?.axis ?? null, AXIS_SNAP_RELEASE_DISTANCE_PX, lockedGuide?.from ?? null);
404
+ if (candidateToVerify) {
405
+ const verifiedHit = verifyProjectedSurfacePoint(candidateToVerify.candidateWorld, rawNormalWorld, raycaster, {
406
+ ownerByObject: context.ownerByObject,
407
+ roots: [rawWorldHit.intersection.object],
408
+ });
409
+ candidateToVerify.verified = verifiedHit !== null;
410
+ candidateToVerify.verifiedHit = verifiedHit;
411
+ }
412
+ const selected = selectClosestAxisCandidate(projectedCandidates, AXIS_SNAP_DISTANCE_PX, lockedGuide?.axis ?? null, AXIS_SNAP_RELEASE_DISTANCE_PX, lockedGuide?.from ?? null);
413
+ if (selected) {
414
+ if (selected.verifiedHit) {
415
+ const surfaceHit = toLocalSurfaceHit(selected.verifiedHit, levelObject);
416
+ const guide = axisGuideToPoint(selected.axis, selected.anchor, selected.point, true, selected.proximity);
417
+ return { hit: { ...surfaceHit, point: [...selected.point] }, guide };
418
+ }
419
+ }
420
+ const passive = projectedCandidates
421
+ .filter((candidate) => !candidate.proximity || candidate.screenDistance <= PROXIMITY_GUIDE_DISTANCE_PX)
422
+ .reduce((closest, candidate) => !closest || candidate.screenDistance < closest.screenDistance ? candidate : closest, null);
423
+ return {
424
+ hit: rawHit,
425
+ guide: passive
426
+ ? axisGuideToPoint(passive.axis, passive.anchor, passive.point, false, passive.proximity)
427
+ : null,
428
+ };
429
+ }
430
+ export function associateSurfaceHit(hit, maxDistance = SEMANTIC_FEATURE_SNAP_DISTANCE) {
431
+ if (!hit.targetNodeId)
432
+ return hit;
433
+ const nodes = useScene.getState().nodes;
434
+ const node = nodes[hit.targetNodeId];
435
+ if (!node)
436
+ return hit;
437
+ const match = matchMeasurementFeatureForNode(node, (id) => nodes[id], hit.point, maxDistance);
438
+ if (!match)
439
+ return hit;
440
+ return {
441
+ ...hit,
442
+ point: match.point,
443
+ anchor: {
444
+ kind: 'feature',
445
+ reference: {
446
+ nodeId: node.id,
447
+ featureId: match.feature.id,
448
+ parameters: match.parameters,
449
+ },
450
+ fallback: match.point,
451
+ },
452
+ semantic: {
453
+ label: match.feature.label,
454
+ length: measurementFeatureLength(match.feature),
455
+ snapKind: match.feature.snapKind,
456
+ },
457
+ };
458
+ }
459
+ export function closestMeasurementExtrusionHeight(rayOrigin, rayDirection, axisOrigin, axisDirection) {
460
+ const originDelta = new Vector3(...rayOrigin).sub(new Vector3(...axisOrigin));
461
+ const ray = new Vector3(...rayDirection).normalize();
462
+ const axis = new Vector3(...axisDirection).normalize();
463
+ const b = ray.dot(axis);
464
+ const denominator = 1 - b * b;
465
+ if (Math.abs(denominator) < 1e-6)
466
+ return null;
467
+ const d = ray.dot(originDelta);
468
+ const e = axis.dot(originDelta);
469
+ const height = (e - b * d) / denominator;
470
+ return Number.isFinite(height) ? height : null;
471
+ }
472
+ export function parseMeasurementExtrusionHeight(value, unit) {
473
+ const numericValue = Number.parseFloat(value);
474
+ return Number.isFinite(numericValue) ? linearUnitToMeters(numericValue, unit) : null;
475
+ }
476
+ function extrusionHeightFromPointer(event, camera, canvas, raycaster, pointer, levelObject, base, normal) {
477
+ const centroid = measurementCentroid(base);
478
+ if (!centroid)
479
+ return null;
480
+ setRayFromPointer(raycaster, pointer, event, camera, canvas);
481
+ const axisOrigin = levelObject.localToWorld(new Vector3(...centroid));
482
+ const levelRotation = levelObject.getWorldQuaternion(new Quaternion());
483
+ const axisDirection = new Vector3(...normal).applyQuaternion(levelRotation).normalize();
484
+ let height = closestMeasurementExtrusionHeight([raycaster.ray.origin.x, raycaster.ray.origin.y, raycaster.ray.origin.z], [raycaster.ray.direction.x, raycaster.ray.direction.y, raycaster.ray.direction.z], [axisOrigin.x, axisOrigin.y, axisOrigin.z], [axisDirection.x, axisDirection.y, axisDirection.z]);
485
+ if (height === null)
486
+ return null;
487
+ if (isGridSnapActive()) {
488
+ const step = useEditor.getState().gridSnapStep;
489
+ if (step > 0)
490
+ height = Math.round(height / step) * step;
491
+ }
492
+ return height;
493
+ }
494
+ function shouldIgnoreKeyboardTarget(target) {
495
+ return (target instanceof HTMLElement &&
496
+ (target.isContentEditable ||
497
+ target instanceof HTMLInputElement ||
498
+ target instanceof HTMLTextAreaElement));
499
+ }
500
+ function localToPreviewFrame(levelObject, buildingObject, point) {
501
+ const worldPoint = levelObject.localToWorld(new Vector3(...point));
502
+ return buildingObject ? buildingObject.worldToLocal(worldPoint) : worldPoint;
503
+ }
504
+ export function localNormalToPreviewFrame(levelObject, buildingObject, normal) {
505
+ levelObject.updateWorldMatrix(true, false);
506
+ buildingObject?.updateWorldMatrix(true, false);
507
+ const result = new Vector3(...normal).applyQuaternion(levelObject.getWorldQuaternion(new Quaternion()));
508
+ if (buildingObject) {
509
+ result.applyQuaternion(buildingObject.getWorldQuaternion(new Quaternion()).invert());
510
+ }
511
+ return result.normalize();
512
+ }
513
+ function midpoint(start, end) {
514
+ return [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2, (start[2] + end[2]) / 2];
515
+ }
516
+ export function buildMeasurementDraftLinePositions(points, dashSize = 0, gapSize = 0) {
517
+ const positions = [];
518
+ const isFiniteFloat32 = (value) => Number.isFinite(Math.fround(value));
519
+ const pushSegment = (start, end) => {
520
+ const coordinates = [start.x, start.y, start.z, end.x, end.y, end.z];
521
+ if (!coordinates.every(isFiniteFloat32))
522
+ return;
523
+ positions.push(...coordinates);
524
+ };
525
+ const dashed = Number.isFinite(dashSize) &&
526
+ dashSize > 0 &&
527
+ Number.isFinite(gapSize) &&
528
+ gapSize >= 0 &&
529
+ dashSize + gapSize > 0;
530
+ for (let index = 0; index < points.length - 1; index++) {
531
+ const start = points[index];
532
+ const end = points[index + 1];
533
+ if (!isFiniteFloat32(start.x) ||
534
+ !isFiniteFloat32(start.y) ||
535
+ !isFiniteFloat32(start.z) ||
536
+ !isFiniteFloat32(end.x) ||
537
+ !isFiniteFloat32(end.y) ||
538
+ !isFiniteFloat32(end.z)) {
539
+ continue;
540
+ }
541
+ const delta = end.clone().sub(start);
542
+ if (delta.lengthSq() <= 1e-18)
543
+ continue;
544
+ if (!dashed) {
545
+ pushSegment(start, end);
546
+ continue;
547
+ }
548
+ const length = delta.length();
549
+ if (!Number.isFinite(length) || length <= 1e-9)
550
+ continue;
551
+ const direction = delta.multiplyScalar(1 / length);
552
+ const requestedStride = dashSize + gapSize;
553
+ const requestedCount = Math.ceil(length / requestedStride);
554
+ const dashCount = Math.min(requestedCount, MAX_DRAFT_DASH_SEGMENTS);
555
+ const stride = requestedCount > dashCount ? length / dashCount : requestedStride;
556
+ const effectiveDashSize = stride * (dashSize / requestedStride);
557
+ for (let dashIndex = 0; dashIndex < dashCount; dashIndex++) {
558
+ const offset = dashIndex * stride;
559
+ const segmentEnd = Math.min(offset + effectiveDashSize, length);
560
+ if (segmentEnd <= offset)
561
+ break;
562
+ const from = start.clone().addScaledVector(direction, offset);
563
+ const to = start.clone().addScaledVector(direction, segmentEnd);
564
+ pushSegment(from, to);
565
+ }
566
+ }
567
+ return positions;
568
+ }
569
+ function DraftLine({ color, dashSize = 0, gapSize = 0, lineWidth = 1, opacity = 1, points, }) {
570
+ const geometry = useMemo(() => {
571
+ const next = new BufferGeometry();
572
+ next.setAttribute('position', new Float32BufferAttribute(buildMeasurementDraftLinePositions(points, dashSize, gapSize), 3));
573
+ return next;
574
+ }, [dashSize, gapSize, points]);
575
+ useEffect(() => () => geometry.dispose(), [geometry]);
576
+ if (geometry.getAttribute('position').count < 2)
577
+ return null;
578
+ return (_jsx("lineSegments", { frustumCulled: false, geometry: geometry, layers: EDITOR_LAYER, raycast: NO_RAYCAST, renderOrder: 1001, userData: { measurementSurface: false }, children: _jsx("lineBasicNodeMaterial", { color: color, depthTest: false, depthWrite: false, linewidth: lineWidth, opacity: opacity, transparent: true }) }));
579
+ }
580
+ function useScreenSizedGroup(radiusPx, maxScale) {
581
+ const ref = useRef(null);
582
+ const worldPosition = useMemo(() => new Vector3(), []);
583
+ const cameraSpacePosition = useMemo(() => new Vector3(), []);
584
+ useFrame(({ camera, size }) => {
585
+ const group = ref.current;
586
+ if (!group)
587
+ return;
588
+ group.getWorldPosition(worldPosition);
589
+ let worldUnitsPerPixel = 0.01;
590
+ if (camera.isPerspectiveCamera) {
591
+ const perspective = camera;
592
+ const cameraDepth = Math.abs(cameraSpacePosition.copy(worldPosition).applyMatrix4(perspective.matrixWorldInverse).z);
593
+ worldUnitsPerPixel =
594
+ (2 * cameraDepth * Math.tan(MathUtils.degToRad(perspective.getEffectiveFOV() * 0.5))) /
595
+ Math.max(size.height, 1);
596
+ }
597
+ else if (camera.isOrthographicCamera) {
598
+ const orthographic = camera;
599
+ worldUnitsPerPixel =
600
+ (orthographic.top - orthographic.bottom) / Math.max(orthographic.zoom * size.height, 1);
601
+ }
602
+ const scale = worldUnitsPerPixel * radiusPx;
603
+ if (Number.isFinite(scale))
604
+ group.scale.setScalar(MathUtils.clamp(scale, 0.002, maxScale));
605
+ });
606
+ return ref;
607
+ }
608
+ function AxisSurfaceIntersectionMarker({ active, axis, locked, normal, position, }) {
609
+ const emphasis = locked ? 1.35 : active ? 1.16 : 1;
610
+ const ref = useScreenSizedGroup(AXIS_INTERSECTION_MARKER_RADIUS_PX * emphasis, 0.32);
611
+ const rotation = useMemo(() => new Quaternion().setFromUnitVectors(RETICLE_PLANE_NORMAL, normal.lengthSq() > 1e-12 ? normal.clone().normalize() : RETICLE_PLANE_NORMAL), [normal]);
612
+ const materials = useMemo(() => ({
613
+ halo: new MeshBasicNodeMaterial({
614
+ color: '#f8fafc',
615
+ depthTest: true,
616
+ depthWrite: false,
617
+ opacity: active ? 0.95 : 0.78,
618
+ polygonOffset: true,
619
+ polygonOffsetFactor: -2,
620
+ polygonOffsetUnits: -2,
621
+ side: DoubleSide,
622
+ transparent: true,
623
+ }),
624
+ target: new MeshBasicNodeMaterial({
625
+ color: GUIDE_COLORS[axis],
626
+ depthTest: true,
627
+ depthWrite: false,
628
+ opacity: active ? 1 : 0.86,
629
+ polygonOffset: true,
630
+ polygonOffsetFactor: -3,
631
+ polygonOffsetUnits: -3,
632
+ side: DoubleSide,
633
+ transparent: true,
634
+ }),
635
+ }), [active, axis]);
636
+ useEffect(() => () => {
637
+ materials.halo.dispose();
638
+ materials.target.dispose();
639
+ }, [materials]);
640
+ return (_jsxs("group", { position: position, quaternion: rotation, ref: ref, userData: { measurementSurface: false }, children: [_jsx("mesh", { layers: EDITOR_LAYER, material: materials.halo, raycast: NO_RAYCAST, renderOrder: 1002, children: _jsx("ringGeometry", { args: [0.48, 1, 40] }) }), _jsx("mesh", { layers: EDITOR_LAYER, material: materials.target, raycast: NO_RAYCAST, renderOrder: 1003, children: _jsx("ringGeometry", { args: [0.62, 0.86, 40] }) })] }));
641
+ }
642
+ function SurfaceReticle({ activeAxis, axisDirections, normal, position, snappedAxis, }) {
643
+ const ref = useScreenSizedGroup(SURFACE_RETICLE_RADIUS_PX, 0.5);
644
+ const rotation = useMemo(() => new Quaternion().setFromUnitVectors(RETICLE_PLANE_NORMAL, normal.lengthSq() > 1e-12 ? normal.clone().normalize() : RETICLE_PLANE_NORMAL), [normal]);
645
+ const counterRotation = useMemo(() => rotation.clone().invert(), [rotation]);
646
+ const axisPoints = useMemo(() => Object.fromEntries(['x', 'y', 'z'].map((axis) => {
647
+ const direction = axisDirections[axis].clone().normalize().multiplyScalar(0.68);
648
+ return [axis, [direction.clone().negate(), direction]];
649
+ })), [axisDirections]);
650
+ const color = snappedAxis ? GUIDE_COLORS[snappedAxis] : RETICLE_COLOR;
651
+ const materials = useMemo(() => ({
652
+ center: new MeshBasicNodeMaterial({
653
+ color,
654
+ depthTest: false,
655
+ depthWrite: false,
656
+ side: DoubleSide,
657
+ }),
658
+ inner: new MeshBasicNodeMaterial({
659
+ color,
660
+ depthTest: false,
661
+ depthWrite: false,
662
+ opacity: 0.72,
663
+ side: DoubleSide,
664
+ transparent: true,
665
+ }),
666
+ outer: new MeshBasicNodeMaterial({
667
+ color,
668
+ depthTest: false,
669
+ depthWrite: false,
670
+ opacity: 0.95,
671
+ side: DoubleSide,
672
+ transparent: true,
673
+ }),
674
+ }), [color]);
675
+ useEffect(() => () => {
676
+ materials.center.dispose();
677
+ materials.inner.dispose();
678
+ materials.outer.dispose();
679
+ }, [materials]);
680
+ return (_jsxs("group", { position: position, quaternion: rotation, ref: ref, userData: { measurementSurface: false }, children: [_jsx("mesh", { layers: EDITOR_LAYER, material: materials.outer, raycast: NO_RAYCAST, renderOrder: 1003, children: _jsx("ringGeometry", { args: [0.78, 1, 48] }) }), _jsx("mesh", { layers: EDITOR_LAYER, material: materials.inner, raycast: NO_RAYCAST, renderOrder: 1003, children: _jsx("ringGeometry", { args: [0.42, 0.54, 48] }) }), _jsx("mesh", { layers: EDITOR_LAYER, material: materials.center, raycast: NO_RAYCAST, renderOrder: 1004, children: _jsx("circleGeometry", { args: [0.12, 24] }) }), _jsx("group", { quaternion: counterRotation, children: Object.keys(GUIDE_COLORS).map((axis) => (_jsx(DraftLine, { color: GUIDE_COLORS[axis], lineWidth: activeAxis === axis ? (snappedAxis === axis ? 3 : 2.25) : 1.1, opacity: activeAxis === axis ? 1 : 0.52, points: axisPoints[axis] }, `measurement-reticle-${axis}`))) }), _jsx(DraftLine, { color: color, lineWidth: 1.5, points: RETICLE_NORMAL_POINTS })] }));
681
+ }
682
+ function DraftLabel({ position, children, appearance = 'plate', offset = false, tone = 'primary', }) {
683
+ return (_jsx(Html, { center: true, position: position, style: { pointerEvents: 'none' }, zIndexRange: [90, 0], children: _jsx("div", { className: `whitespace-nowrap text-[11px] ${offset ? '-translate-y-4' : ''} ${appearance === 'outlined'
684
+ ? 'font-medium text-white'
685
+ : `rounded-full border bg-background/95 px-2.5 py-1 font-mono font-semibold tabular-nums shadow-sm backdrop-blur ${tone === 'error'
686
+ ? 'border-red-700/70 text-red-700 dark:border-red-400/70 dark:text-red-400'
687
+ : tone === 'secondary'
688
+ ? 'border-border/50 text-muted-foreground'
689
+ : 'border-indigo-400/70 text-foreground'}`}`, style: appearance === 'outlined'
690
+ ? {
691
+ textShadow: `-1px -1px 0 ${DRAFT_COLOR}, 1px -1px 0 ${DRAFT_COLOR}, -1px 1px 0 ${DRAFT_COLOR}, 1px 1px 0 ${DRAFT_COLOR}`,
692
+ }
693
+ : undefined, children: children }) }));
694
+ }
695
+ function DraftExtrusionControl({ position }) {
696
+ const unit = useViewer((state) => state.unit);
697
+ const extrusionHeight = useMeasurementDraft((state) => state.extrusionHeight);
698
+ const points = useMeasurementDraft((state) => state.points);
699
+ const baseNormal = useMeasurementDraft((state) => state.baseNormal);
700
+ const [value, setValue] = useState(() => extrusionHeight === 0 ? '' : String(metersToLinearUnit(extrusionHeight, unit)));
701
+ const isEditing = useRef(false);
702
+ useEffect(() => {
703
+ if (isEditing.current)
704
+ return;
705
+ setValue(extrusionHeight === 0
706
+ ? ''
707
+ : String(Number(metersToLinearUnit(extrusionHeight, unit).toFixed(3))));
708
+ }, [extrusionHeight, unit]);
709
+ const updateHeight = (next) => {
710
+ setValue(next);
711
+ useMeasurementDraft
712
+ .getState()
713
+ .setExtrusionHeight('3d', parseMeasurementExtrusionHeight(next, unit) ?? 0);
714
+ };
715
+ const commit = () => {
716
+ const height = parseMeasurementExtrusionHeight(value, unit);
717
+ if (height === null) {
718
+ useMeasurementDraft.getState().setExtrusionHeight('3d', 0);
719
+ return;
720
+ }
721
+ const draft = useMeasurementDraft.getState();
722
+ draft.setExtrusionHeight('3d', height);
723
+ if (draft.finishExtrusion('3d'))
724
+ commitMeasurementDraft('3d');
725
+ };
726
+ const extrusion = baseNormal
727
+ ? [
728
+ baseNormal[0] * extrusionHeight,
729
+ baseNormal[1] * extrusionHeight,
730
+ baseNormal[2] * extrusionHeight,
731
+ ]
732
+ : [0, 0, 0];
733
+ const volumeLabel = formatVolumeLabel(measurementPrismVolume(points, extrusion), unit);
734
+ return (_jsx(Html, { center: true, position: position, style: { pointerEvents: 'auto' }, zIndexRange: [100, 0], children: _jsxs("div", { className: "flex w-[300px] translate-y-9 items-center gap-1.5 rounded-md border border-border/70 bg-background/95 p-1.5 text-foreground shadow-lg", "data-measurement-extrusion-control": true, onClick: (event) => {
735
+ event.stopPropagation();
736
+ event.nativeEvent.stopImmediatePropagation();
737
+ }, onPointerDown: (event) => {
738
+ event.stopPropagation();
739
+ event.nativeEvent.stopImmediatePropagation();
740
+ }, children: [_jsx("label", { className: "sr-only", htmlFor: "measurement-3d-extrusion-height", children: "Extrusion height" }), _jsxs("div", { className: "relative min-w-0 flex-1", children: [_jsx("span", { className: "pointer-events-none absolute inset-y-0 left-2 flex items-center font-medium text-muted-foreground text-xs", children: "H" }), _jsx("input", { "aria-label": "Extrusion height", className: "h-8 w-full rounded-md border border-border bg-background pr-7 pl-6 text-sm outline-none focus:border-indigo-400", id: "measurement-3d-extrusion-height", inputMode: "decimal", onBlur: () => {
741
+ isEditing.current = false;
742
+ const height = useMeasurementDraft.getState().extrusionHeight;
743
+ setValue(height === 0 ? '' : String(Number(metersToLinearUnit(height, unit).toFixed(3))));
744
+ }, onChange: (event) => updateHeight(event.target.value), onFocus: () => {
745
+ isEditing.current = true;
746
+ }, onKeyDown: (event) => {
747
+ event.stopPropagation();
748
+ if (event.key === 'Enter') {
749
+ event.preventDefault();
750
+ commit();
751
+ }
752
+ }, placeholder: "0", step: "0.1", type: "number", value: value }), _jsx("span", { className: "pointer-events-none absolute inset-y-0 right-2 flex items-center text-muted-foreground text-xs", children: getLinearUnitLabel(unit) })] }), _jsxs("span", { className: "shrink-0 font-mono font-semibold text-[11px] tabular-nums text-foreground", children: ["V ", volumeLabel] }), _jsx("button", { className: "h-8 shrink-0 rounded-full bg-indigo-500 px-3 font-medium text-white text-xs disabled:cursor-not-allowed disabled:opacity-40", disabled: Math.abs(extrusionHeight) < 0.001, onClick: commit, type: "button", children: "Create" })] }) }));
753
+ }
754
+ const MeasurementDraftPreview = ({ buildingId, levelId, surfaceQuery }) => {
755
+ const capturedLevelId = useMeasurementDraft((state) => state.levelId);
756
+ const points = useMeasurementDraft((state) => state.points);
757
+ const hover = useMeasurementDraft((state) => state.hover);
758
+ const hoverOwner = useMeasurementDraft((state) => state.hoverOwner);
759
+ const kind = useMeasurementDraft((state) => state.kind);
760
+ const stage = useMeasurementDraft((state) => state.stage);
761
+ const axisGuide = useMeasurementDraft((state) => state.axisGuide);
762
+ const vertexDrag = useMeasurementDraft((state) => state.vertexDrag);
763
+ const baseNormal = useMeasurementDraft((state) => state.baseNormal);
764
+ const extrusionHeight = useMeasurementDraft((state) => state.extrusionHeight);
765
+ const error = useMeasurementDraft((state) => state.error);
766
+ const unit = useViewer((state) => state.unit);
767
+ const axisIntersectionCache = useRef(null);
768
+ const draftPointMaterial = useMemo(() => new MeshBasicNodeMaterial({
769
+ color: DRAFT_COLOR,
770
+ depthTest: false,
771
+ depthWrite: false,
772
+ }), []);
773
+ const draftActivePointMaterial = useMemo(() => new MeshBasicNodeMaterial({
774
+ color: '#f8fafc',
775
+ depthTest: false,
776
+ depthWrite: false,
777
+ }), []);
778
+ const draftMidpointMaterial = useMemo(() => new MeshBasicNodeMaterial({
779
+ color: '#a3e635',
780
+ depthTest: false,
781
+ depthWrite: false,
782
+ opacity: 0.9,
783
+ transparent: true,
784
+ }), []);
785
+ useEffect(() => () => {
786
+ draftPointMaterial.dispose();
787
+ draftActivePointMaterial.dispose();
788
+ draftMidpointMaterial.dispose();
789
+ }, [draftActivePointMaterial, draftMidpointMaterial, draftPointMaterial]);
790
+ const preview = useMemo(() => {
791
+ if (capturedLevelId && capturedLevelId !== levelId)
792
+ return null;
793
+ const previewLevelId = capturedLevelId ?? levelId;
794
+ const levelObject = previewLevelId ? sceneRegistry.nodes.get(previewLevelId) : null;
795
+ if (!levelObject)
796
+ return null;
797
+ const buildingObject = buildingId ? (sceneRegistry.nodes.get(buildingId) ?? null) : null;
798
+ levelObject.updateWorldMatrix(true, false);
799
+ buildingObject?.updateWorldMatrix(true, false);
800
+ const livePoints = stage === 'collecting' && hover && !vertexDrag ? [...points, hover.point] : points;
801
+ const worldPoints = livePoints.map((point) => localToPreviewFrame(levelObject, buildingObject, point));
802
+ const angleArc = kind === 'angle' && livePoints.length >= 3
803
+ ? buildMeasurementAngleArcPoints(livePoints[0], livePoints[1], livePoints[2]).map((point) => localToPreviewFrame(levelObject, buildingObject, point))
804
+ : [];
805
+ const worldBase = points.map((point) => localToPreviewFrame(levelObject, buildingObject, point));
806
+ const polygon = kind === 'area' || kind === 'perimeter' || kind === 'volume';
807
+ const midpointHandles = polygon && stage === 'collecting' && !vertexDrag
808
+ ? measurementPolygonMidpoints(points).map(({ edgeIndex, point }) => ({
809
+ edgeIndex,
810
+ position: localToPreviewFrame(levelObject, buildingObject, point),
811
+ }))
812
+ : [];
813
+ const activeEdges = vertexDrag
814
+ ? measurementVertexSnapAnchors(points, vertexDrag.index, polygon).map((neighbor) => [
815
+ localToPreviewFrame(levelObject, buildingObject, neighbor),
816
+ worldBase[vertexDrag.index],
817
+ ])
818
+ : [];
819
+ const closedBase = worldBase.length >= 3 ? [...worldBase, worldBase[0]] : worldBase;
820
+ const normal = baseNormal ? new Vector3(...baseNormal) : null;
821
+ const topPoints = normal && stage !== 'collecting'
822
+ ? points.map((point) => localToPreviewFrame(levelObject, buildingObject, [
823
+ point[0] + normal.x * extrusionHeight,
824
+ point[1] + normal.y * extrusionHeight,
825
+ point[2] + normal.z * extrusionHeight,
826
+ ]))
827
+ : [];
828
+ const closedTop = topPoints.length >= 3 ? [...topPoints, topPoints[0]] : topPoints;
829
+ const verticals = worldBase.map((point, index) => [point, topPoints[index]]);
830
+ const guide = axisGuide
831
+ ? {
832
+ ...axisGuide,
833
+ fromWorld: localToPreviewFrame(levelObject, buildingObject, axisGuide.from),
834
+ toWorld: localToPreviewFrame(levelObject, buildingObject, axisGuide.to),
835
+ }
836
+ : null;
837
+ const guideAnchor = vertexDrag && axisGuide
838
+ ? axisGuide.from
839
+ : (points.at(-1) ?? (hoverOwner === '3d' ? hover?.point : undefined));
840
+ let axisSurfaceIntersections = [];
841
+ if (guideAnchor) {
842
+ const cacheKey = `${previewLevelId}:${guideAnchor.join(':')}:${levelObject.matrixWorld.elements
843
+ .map((value) => value.toFixed(5))
844
+ .join(':')}`;
845
+ const now = performance.now();
846
+ if (!axisIntersectionCache.current ||
847
+ axisIntersectionCache.current.key !== cacheKey ||
848
+ now - axisIntersectionCache.current.timestamp > 250) {
849
+ axisIntersectionCache.current = {
850
+ intersections: surfaceQuery.collectAxisIntersections({
851
+ levelObject,
852
+ anchor: guideAnchor,
853
+ maxDistance: AXIS_GUIDE_HALF_LENGTH,
854
+ }),
855
+ key: cacheKey,
856
+ timestamp: now,
857
+ };
858
+ }
859
+ axisSurfaceIntersections = axisIntersectionCache.current.intersections.map(({ axis, normal: intersectionNormal, point }) => ({
860
+ axis,
861
+ normal: localNormalToPreviewFrame(levelObject, buildingObject, intersectionNormal),
862
+ position: localToPreviewFrame(levelObject, buildingObject, point),
863
+ }));
864
+ }
865
+ const axisTriad = guideAnchor
866
+ ? ['x', 'y', 'z'].map((axis) => {
867
+ const axisIndex = axis === 'x' ? 0 : axis === 'y' ? 1 : 2;
868
+ const from = [...guideAnchor];
869
+ const to = [...guideAnchor];
870
+ from[axisIndex] -= AXIS_GUIDE_HALF_LENGTH;
871
+ to[axisIndex] += AXIS_GUIDE_HALF_LENGTH;
872
+ return {
873
+ axis,
874
+ fromWorld: localToPreviewFrame(levelObject, buildingObject, from),
875
+ toWorld: localToPreviewFrame(levelObject, buildingObject, to),
876
+ };
877
+ })
878
+ : [];
879
+ const reticle = hover && hoverOwner === '3d'
880
+ ? {
881
+ axisDirections: {
882
+ x: localNormalToPreviewFrame(levelObject, buildingObject, [1, 0, 0]),
883
+ y: localNormalToPreviewFrame(levelObject, buildingObject, [0, 1, 0]),
884
+ z: localNormalToPreviewFrame(levelObject, buildingObject, [0, 0, 1]),
885
+ },
886
+ normal: localNormalToPreviewFrame(levelObject, buildingObject, hover.normal),
887
+ position: localToPreviewFrame(levelObject, buildingObject, hover.point),
888
+ snappedAxis: axisGuide?.snapped ? axisGuide.axis : null,
889
+ }
890
+ : null;
891
+ let label = null;
892
+ let extrusionControlPosition = null;
893
+ if (kind === 'distance' && livePoints.length >= 2) {
894
+ const start = livePoints[0];
895
+ const end = livePoints[livePoints.length - 1];
896
+ label = {
897
+ position: localToPreviewFrame(levelObject, buildingObject, midpoint(start, end)),
898
+ text: formatLinearMeasurement(measurementDistance(start, end), unit),
899
+ };
900
+ }
901
+ else if (kind === 'angle' && livePoints.length >= 3) {
902
+ const anglePoints = livePoints.slice(0, 3);
903
+ label = {
904
+ position: angleArc[Math.floor(angleArc.length / 2)] ??
905
+ localToPreviewFrame(levelObject, buildingObject, anglePoints[1]),
906
+ text: formatAngleRadians(measurementAngle(...anglePoints)),
907
+ };
908
+ }
909
+ else if ((kind === 'area' || kind === 'perimeter') && livePoints.length >= 3) {
910
+ const center = measurementPolygonLabelAnchor(livePoints);
911
+ if (center) {
912
+ label = {
913
+ position: localToPreviewFrame(levelObject, buildingObject, center),
914
+ text: kind === 'area'
915
+ ? `A ${formatAreaLabel(measurementArea(livePoints), unit)}`
916
+ : `P ${formatLinearMeasurement(measurementPerimeter(livePoints), unit)}`,
917
+ };
918
+ }
919
+ }
920
+ else if (kind === 'volume' && points.length >= 3 && baseNormal) {
921
+ const center = measurementPolygonLabelAnchor(points);
922
+ const extrusion = [
923
+ baseNormal[0] * extrusionHeight,
924
+ baseNormal[1] * extrusionHeight,
925
+ baseNormal[2] * extrusionHeight,
926
+ ];
927
+ if (center) {
928
+ if (stage === 'extruding') {
929
+ extrusionControlPosition = localToPreviewFrame(levelObject, buildingObject, center);
930
+ }
931
+ if (stage !== 'extruding') {
932
+ label = {
933
+ position: localToPreviewFrame(levelObject, buildingObject, [
934
+ center[0] + extrusion[0] / 2,
935
+ center[1] + extrusion[1] / 2,
936
+ center[2] + extrusion[2] / 2,
937
+ ]),
938
+ text: `V ${formatVolumeLabel(measurementPrismVolume(points, extrusion), unit)}`,
939
+ };
940
+ }
941
+ }
942
+ }
943
+ const errorPosition = worldPoints[worldPoints.length - 1] ?? worldBase[worldBase.length - 1];
944
+ return {
945
+ angleArc,
946
+ closedBase,
947
+ closedTop,
948
+ errorPosition,
949
+ extrusionControlPosition,
950
+ guide,
951
+ axisSurfaceIntersections,
952
+ axisTriad,
953
+ label,
954
+ livePoints,
955
+ activeEdges,
956
+ midpointHandles,
957
+ reticle,
958
+ verticals,
959
+ worldBase,
960
+ worldPoints,
961
+ };
962
+ }, [
963
+ axisGuide,
964
+ baseNormal,
965
+ buildingId,
966
+ capturedLevelId,
967
+ extrusionHeight,
968
+ hover,
969
+ hoverOwner,
970
+ kind,
971
+ levelId,
972
+ points,
973
+ stage,
974
+ surfaceQuery,
975
+ unit,
976
+ vertexDrag,
977
+ ]);
978
+ if (!preview)
979
+ return null;
980
+ const isPolygon = kind === 'area' || kind === 'perimeter' || kind === 'volume';
981
+ const liveClosed = isPolygon && preview.worldPoints.length >= 3
982
+ ? [...preview.worldPoints, preview.worldPoints[0]]
983
+ : preview.worldPoints;
984
+ const distanceStrokeColor = kind === 'distance' && axisGuide?.snapped ? GUIDE_COLORS[axisGuide.axis] : DRAFT_COLOR;
985
+ return (_jsxs("group", { children: [preview.axisTriad.map((guide) => {
986
+ const active = axisGuide?.axis === guide.axis;
987
+ const locked = active && Boolean(axisGuide?.snapped);
988
+ return (_jsx(DraftLine, { color: GUIDE_COLORS[guide.axis], dashSize: locked ? 0 : 0.16, gapSize: locked ? 0 : 0.07, lineWidth: active ? (locked ? 4 : 2.75) : 1.5, opacity: active ? (locked ? 1 : 0.92) : 0.48, points: [guide.fromWorld, guide.toWorld] }, `measurement-axis-${guide.axis}`));
989
+ }), preview.axisSurfaceIntersections.map(({ axis, normal, position }) => (_jsx(AxisSurfaceIntersectionMarker, { active: axisGuide?.axis === axis, axis: axis, locked: axisGuide?.axis === axis && Boolean(axisGuide.snapped), normal: normal, position: position }, `measurement-axis-surface-${axis}-${position.toArray().join(':')}`))), liveClosed.length >= 2 && stage === 'collecting' ? (_jsx(DraftLine, { color: distanceStrokeColor, lineWidth: 2, opacity: 0.95, points: liveClosed })) : null, preview.angleArc.length >= 2 ? (_jsx(DraftLine, { color: DRAFT_COLOR, lineWidth: 3, points: preview.angleArc })) : null, stage !== 'collecting' && preview.closedBase.length >= 2 ? (_jsx(DraftLine, { color: DRAFT_COLOR, lineWidth: 2, points: preview.closedBase })) : null, preview.activeEdges.map(([from, to], index) => (_jsx(DraftLine, { color: "#f8fafc", lineWidth: 3, opacity: 0.95, points: [from, to] }, `measurement-active-edge-${index}`))), preview.closedTop.length >= 2 && Math.abs(extrusionHeight) > 0 ? (_jsx(DraftLine, { color: DRAFT_COLOR, lineWidth: 2, points: preview.closedTop })) : null, Math.abs(extrusionHeight) > 0
990
+ ? preview.verticals.map(([from, to], index) => (_jsx(DraftLine, { color: DRAFT_COLOR, lineWidth: 1.5, opacity: 0.75, points: [from, to] }, `measurement-extrusion-${index}`)))
991
+ : null, preview.guide ? (_jsxs(_Fragment, { children: [_jsx(DraftLine, { color: "#f8fafc", lineWidth: 4.5, opacity: preview.guide.snapped ? 0.78 : 0.38, points: [preview.guide.fromWorld, preview.guide.toWorld] }), _jsx(DraftLine, { color: GUIDE_COLORS[preview.guide.axis], dashSize: preview.guide.snapped ? 0 : 0.08, gapSize: preview.guide.snapped ? 0 : 0.05, lineWidth: preview.guide.snapped ? 3 : 2, opacity: preview.guide.snapped ? 1 : 0.84, points: [preview.guide.fromWorld, preview.guide.toWorld] })] })) : null, preview.worldBase.map((point, index) => (_jsx("mesh", { layers: EDITOR_LAYER, material: vertexDrag?.index === index ? draftActivePointMaterial : draftPointMaterial, position: point, children: _jsx("sphereGeometry", { args: [vertexDrag?.index === index ? 0.045 : 0.035, 12, 12] }) }, `measurement-point-${index}`))), preview.midpointHandles.map(({ edgeIndex, position }) => (_jsx("mesh", { layers: EDITOR_LAYER, material: draftMidpointMaterial, position: position, children: _jsx("sphereGeometry", { args: [0.022, 12, 12] }) }, `measurement-midpoint-${edgeIndex}`))), preview.reticle ? (_jsx(SurfaceReticle, { activeAxis: axisGuide?.axis ?? null, axisDirections: preview.reticle.axisDirections, normal: preview.reticle.normal, position: preview.reticle.position, snappedAxis: preview.reticle.snappedAxis })) : null, preview.label ? (_jsx(DraftLabel, { appearance: "outlined", offset: kind === 'distance', position: preview.label.position, children: preview.label.text })) : null, preview.extrusionControlPosition ? (_jsx(DraftExtrusionControl, { position: preview.extrusionControlPosition })) : null, error && preview.errorPosition ? (_jsx(DraftLabel, { position: preview.errorPosition, tone: "error", children: error })) : null] }));
992
+ };
993
+ export const MeasurementTool = () => {
994
+ const { camera, gl, scene } = useThree();
995
+ const currentBuildingId = useViewer((state) => state.selection.buildingId);
996
+ const currentLevelId = useViewer((state) => state.selection.levelId);
997
+ const storedKind = useEditor((state) => state.toolDefaults.measurement?.kind);
998
+ const kind = isMeasurementKind(storedKind) ? storedKind : 'distance';
999
+ const raycaster = useRef(new Raycaster());
1000
+ const pointer = useRef(new Vector2());
1001
+ const vertexGesture = useRef(null);
1002
+ const suppressNextClick = useRef(false);
1003
+ const cancelVertexGesture = useRef(() => { });
1004
+ const surfaceQuery = useMemo(() => createMeasurementSurfaceQuerySession(scene), [scene]);
1005
+ useEffect(() => {
1006
+ raycaster.current.layers.set(SCENE_LAYER);
1007
+ }, []);
1008
+ useEffect(() => () => surfaceQuery.dispose(), [surfaceQuery]);
1009
+ useEffect(() => {
1010
+ cancelVertexGesture.current();
1011
+ useMeasurementDraft.getState().setKind(kind);
1012
+ }, [kind]);
1013
+ useEffect(() => {
1014
+ const draft = useMeasurementDraft.getState();
1015
+ if (draft.levelId && draft.levelId !== currentLevelId) {
1016
+ cancelVertexGesture.current();
1017
+ draft.reset();
1018
+ }
1019
+ }, [currentLevelId]);
1020
+ useEffect(() => {
1021
+ useViewer.getState().setSelection({ selectedIds: [] });
1022
+ const scope = useInteractionScope.getState();
1023
+ scope.begin({ kind: 'drafting', tool: 'measurement' });
1024
+ return () => {
1025
+ useMeasurementDraft.getState().reset();
1026
+ useInteractionScope
1027
+ .getState()
1028
+ .endIf((active) => active.kind === 'drafting' && active.tool === 'measurement');
1029
+ };
1030
+ }, []);
1031
+ useEffect(() => {
1032
+ const onCancel = () => {
1033
+ const draft = useMeasurementDraft.getState();
1034
+ const owner = draft.owner;
1035
+ if (!owner)
1036
+ return;
1037
+ markToolCancelConsumed();
1038
+ cancelVertexGesture.current();
1039
+ handleMeasurementDraftEscape(owner, owner === '2d' ? [0, 1, 0] : undefined);
1040
+ };
1041
+ emitter.on('tool:cancel', onCancel);
1042
+ return () => emitter.off('tool:cancel', onCancel);
1043
+ }, []);
1044
+ useEffect(() => {
1045
+ const canvas = gl.domElement;
1046
+ let planarProximityAnchors = [];
1047
+ let planarProximityAnchorsTimestamp = Number.NEGATIVE_INFINITY;
1048
+ const getPlanarProximityAnchors = () => {
1049
+ const now = performance.now();
1050
+ if (now - planarProximityAnchorsTimestamp > 120) {
1051
+ planarProximityAnchors = collectAlignmentAnchors(useScene.getState().nodes, '', currentLevelId);
1052
+ planarProximityAnchorsTimestamp = now;
1053
+ }
1054
+ return planarProximityAnchors;
1055
+ };
1056
+ const getLevelObject = () => currentLevelId ? (sceneRegistry.nodes.get(currentLevelId) ?? null) : null;
1057
+ const consume = (event) => {
1058
+ event.preventDefault();
1059
+ event.stopPropagation();
1060
+ event.stopImmediatePropagation();
1061
+ };
1062
+ const closestVertexIndex = (event, levelObject, points, threshold = VERTEX_HANDLE_DISTANCE_PX) => selectClosestMeasurementVertexIndex(points.map((point) => worldPointScreenDistance(levelObject.localToWorld(new Vector3(...point)), event, camera, canvas)), threshold);
1063
+ const clearVertexGesture = (finish) => {
1064
+ const gesture = vertexGesture.current;
1065
+ if (!gesture)
1066
+ return;
1067
+ if (gesture.engaged) {
1068
+ const draft = useMeasurementDraft.getState();
1069
+ if (finish)
1070
+ draft.finishVertexDrag('3d');
1071
+ else
1072
+ draft.cancelVertexDrag('3d');
1073
+ useViewer.getState().setInputDragging(gesture.previousInputDragging);
1074
+ }
1075
+ document.body.style.cursor = gesture.previousCursor;
1076
+ if (canvas.hasPointerCapture?.(gesture.pointerId)) {
1077
+ canvas.releasePointerCapture(gesture.pointerId);
1078
+ }
1079
+ vertexGesture.current = null;
1080
+ };
1081
+ cancelVertexGesture.current = () => clearVertexGesture(false);
1082
+ const onPointerDown = (event) => {
1083
+ if (event.button !== 0 || useViewer.getState().cameraDragging)
1084
+ return;
1085
+ const draft = useMeasurementDraft.getState();
1086
+ if (draft.owner !== '3d' || draft.stage !== 'collecting' || draft.vertexDrag)
1087
+ return;
1088
+ if (draft.kind === 'distance')
1089
+ return;
1090
+ const levelObject = getLevelObject();
1091
+ if (!levelObject)
1092
+ return;
1093
+ const threshold = event.pointerType === 'touch' ? 22 : VERTEX_HANDLE_DISTANCE_PX;
1094
+ const vertexIndex = closestVertexIndex(event, levelObject, draft.points, threshold);
1095
+ const midpointIndex = vertexIndex === null
1096
+ ? closestVertexIndex(event, levelObject, measurementPolygonMidpoints(draft.points).map((midpoint) => midpoint.point), event.pointerType === 'touch' ? 18 : MIDPOINT_HANDLE_DISTANCE_PX)
1097
+ : null;
1098
+ if (vertexIndex === null && midpointIndex === null)
1099
+ return;
1100
+ consume(event);
1101
+ canvas.setPointerCapture?.(event.pointerId);
1102
+ vertexGesture.current = {
1103
+ pointerId: event.pointerId,
1104
+ source: vertexIndex !== null ? 'vertex' : 'midpoint',
1105
+ index: vertexIndex ?? midpointIndex,
1106
+ startX: event.clientX,
1107
+ startY: event.clientY,
1108
+ engaged: false,
1109
+ previousInputDragging: useViewer.getState().inputDragging,
1110
+ previousCursor: document.body.style.cursor,
1111
+ };
1112
+ };
1113
+ const onPointerMove = (event) => {
1114
+ const draft = useMeasurementDraft.getState();
1115
+ if (draft.owner && draft.owner !== '3d')
1116
+ return;
1117
+ const levelObject = getLevelObject();
1118
+ if (!levelObject)
1119
+ return;
1120
+ const gesture = vertexGesture.current;
1121
+ if (gesture?.pointerId === event.pointerId) {
1122
+ consume(event);
1123
+ if (!gesture.engaged) {
1124
+ if (Math.hypot(event.clientX - gesture.startX, event.clientY - gesture.startY) <
1125
+ VERTEX_DRAG_ACTIVATION_PX) {
1126
+ return;
1127
+ }
1128
+ const began = gesture.source === 'vertex'
1129
+ ? draft.beginVertexDrag('3d', gesture.index)
1130
+ : draft.beginMidpointVertexDrag('3d', gesture.index);
1131
+ if (!began) {
1132
+ clearVertexGesture(false);
1133
+ return;
1134
+ }
1135
+ if (gesture.source === 'midpoint')
1136
+ gesture.index += 1;
1137
+ gesture.engaged = true;
1138
+ useViewer.getState().setInputDragging(true);
1139
+ document.body.style.cursor = 'grabbing';
1140
+ }
1141
+ const activeDraft = useMeasurementDraft.getState();
1142
+ const anchors = measurementVertexSnapAnchors(activeDraft.points, gesture.index, activeDraft.kind === 'area' ||
1143
+ activeDraft.kind === 'perimeter' ||
1144
+ activeDraft.kind === 'volume');
1145
+ const applyMagneticSnap = !event.altKey;
1146
+ const resolved = surfaceQuery.resolvePointer({
1147
+ event,
1148
+ camera,
1149
+ canvas,
1150
+ levelObject,
1151
+ anchorOrAnchors: anchors,
1152
+ lockedGuide: applyMagneticSnap && activeDraft.axisGuide?.snapped ? activeDraft.axisGuide : null,
1153
+ planarProximityAnchors: getPlanarProximityAnchors(),
1154
+ surfacePreference: applyMagneticSnap
1155
+ ? polygonSurfacePreference(activeDraft.kind, activeDraft.collectionPlane)
1156
+ : null,
1157
+ applyMagneticSnap,
1158
+ showAlignmentGuides: isAlignmentGuideActive(),
1159
+ });
1160
+ if (resolved) {
1161
+ const hit = associateSurfaceHit(resolved.hit, applyMagneticSnap ? SEMANTIC_FEATURE_SNAP_DISTANCE : SURFACE_VERIFY_TOLERANCE);
1162
+ activeDraft.updateDraggedVertex('3d', {
1163
+ point: hit.point,
1164
+ normal: hit.normal,
1165
+ targetNodeId: hit.targetNodeId,
1166
+ anchor: hit.anchor,
1167
+ semantic: hit.semantic,
1168
+ }, resolved.guide);
1169
+ }
1170
+ return;
1171
+ }
1172
+ if (draft.owner === '3d' && draft.stage === 'extruding' && draft.baseNormal) {
1173
+ const height = extrusionHeightFromPointer(event, camera, canvas, raycaster.current, pointer.current, levelObject, draft.points, draft.baseNormal);
1174
+ if (height !== null)
1175
+ draft.setExtrusionHeight('3d', height);
1176
+ return;
1177
+ }
1178
+ if (draft.stage !== 'collecting')
1179
+ return;
1180
+ const applyMagneticSnap = !event.altKey;
1181
+ const resolved = surfaceQuery.resolvePointer({
1182
+ event,
1183
+ camera,
1184
+ canvas,
1185
+ levelObject,
1186
+ anchorOrAnchors: draft.points[draft.points.length - 1] ?? null,
1187
+ lockedGuide: applyMagneticSnap && draft.axisGuide?.snapped ? draft.axisGuide : null,
1188
+ planarProximityAnchors: getPlanarProximityAnchors(),
1189
+ surfacePreference: applyMagneticSnap
1190
+ ? polygonSurfacePreference(draft.kind, draft.collectionPlane)
1191
+ : null,
1192
+ applyMagneticSnap,
1193
+ showAlignmentGuides: isAlignmentGuideActive(),
1194
+ });
1195
+ draft.setHover('3d', resolved
1196
+ ? associateSurfaceHit(resolved.hit, applyMagneticSnap ? SEMANTIC_FEATURE_SNAP_DISTANCE : SURFACE_VERIFY_TOLERANCE)
1197
+ : null, resolved?.guide ?? null);
1198
+ };
1199
+ const onPointerLeave = () => {
1200
+ if (vertexGesture.current)
1201
+ return;
1202
+ const draft = useMeasurementDraft.getState();
1203
+ if (draft.stage !== 'collecting')
1204
+ return;
1205
+ if (!draft.owner || draft.owner === '3d')
1206
+ draft.setHover('3d', null);
1207
+ };
1208
+ const onPointerUp = (event) => {
1209
+ const gesture = vertexGesture.current;
1210
+ if (!gesture || gesture.pointerId !== event.pointerId)
1211
+ return;
1212
+ consume(event);
1213
+ const wasEngaged = gesture.engaged;
1214
+ const source = gesture.source;
1215
+ const vertexIndex = gesture.index;
1216
+ clearVertexGesture(true);
1217
+ if (!wasEngaged && source === 'vertex') {
1218
+ const draft = useMeasurementDraft.getState();
1219
+ if (vertexIndex === 0 && draft.points.length >= 3)
1220
+ finishMeasurementDraft('3d');
1221
+ }
1222
+ suppressNextClick.current = true;
1223
+ setTimeout(() => {
1224
+ suppressNextClick.current = false;
1225
+ }, 300);
1226
+ };
1227
+ const onPointerCancel = (event) => {
1228
+ const gesture = vertexGesture.current;
1229
+ if (!gesture || gesture.pointerId !== event.pointerId)
1230
+ return;
1231
+ consume(event);
1232
+ clearVertexGesture(false);
1233
+ };
1234
+ const onClick = (event) => {
1235
+ if (event.button !== 0 || useViewer.getState().cameraDragging)
1236
+ return;
1237
+ const draft = useMeasurementDraft.getState();
1238
+ if (draft.owner && draft.owner !== '3d')
1239
+ return;
1240
+ consume(event);
1241
+ if (suppressNextClick.current) {
1242
+ suppressNextClick.current = false;
1243
+ return;
1244
+ }
1245
+ if (event.detail > 1)
1246
+ return;
1247
+ if (draft.owner === '3d' && draft.stage === 'extruding') {
1248
+ finishMeasurementDraft('3d');
1249
+ return;
1250
+ }
1251
+ if (draft.stage !== 'collecting')
1252
+ return;
1253
+ const levelObject = getLevelObject();
1254
+ if (!levelObject)
1255
+ return;
1256
+ const vertexIndex = draft.kind === 'distance' ? null : closestVertexIndex(event, levelObject, draft.points);
1257
+ if (vertexIndex !== null) {
1258
+ if (vertexIndex === 0 && draft.points.length >= 3 && draft.kind !== 'angle') {
1259
+ finishMeasurementDraft('3d');
1260
+ }
1261
+ return;
1262
+ }
1263
+ const applyMagneticSnap = !event.altKey;
1264
+ const resolved = surfaceQuery.resolvePointer({
1265
+ event,
1266
+ camera,
1267
+ canvas,
1268
+ levelObject,
1269
+ anchorOrAnchors: draft.points[draft.points.length - 1] ?? null,
1270
+ lockedGuide: applyMagneticSnap && draft.axisGuide?.snapped ? draft.axisGuide : null,
1271
+ planarProximityAnchors: getPlanarProximityAnchors(),
1272
+ surfacePreference: applyMagneticSnap
1273
+ ? polygonSurfacePreference(draft.kind, draft.collectionPlane)
1274
+ : null,
1275
+ applyMagneticSnap,
1276
+ showAlignmentGuides: isAlignmentGuideActive(),
1277
+ });
1278
+ if (!resolved)
1279
+ return;
1280
+ const hit = associateSurfaceHit(resolved.hit, applyMagneticSnap ? SEMANTIC_FEATURE_SNAP_DISTANCE : SURFACE_VERIFY_TOLERANCE);
1281
+ if (!draft.addPoint('3d', hit.point, hit.anchor, hit.normal))
1282
+ return;
1283
+ if (useMeasurementDraft.getState().stage === 'ready')
1284
+ commitMeasurementDraft('3d');
1285
+ };
1286
+ const onDoubleClick = (event) => {
1287
+ const draft = useMeasurementDraft.getState();
1288
+ if (draft.owner !== '3d' || draft.stage !== 'collecting')
1289
+ return;
1290
+ if (draft.kind === 'distance' || draft.kind === 'angle')
1291
+ return;
1292
+ consume(event);
1293
+ if (suppressNextClick.current) {
1294
+ suppressNextClick.current = false;
1295
+ return;
1296
+ }
1297
+ finishMeasurementDraft('3d');
1298
+ };
1299
+ const onKeyDown = (event) => {
1300
+ if (shouldIgnoreKeyboardTarget(event.target))
1301
+ return;
1302
+ const draft = useMeasurementDraft.getState();
1303
+ if (!draft.owner)
1304
+ return;
1305
+ if (event.key === 'Backspace') {
1306
+ event.preventDefault();
1307
+ event.stopImmediatePropagation();
1308
+ draft.removeLast(draft.owner);
1309
+ }
1310
+ else if (event.key === 'Enter') {
1311
+ event.preventDefault();
1312
+ event.stopImmediatePropagation();
1313
+ finishMeasurementDraft(draft.owner, draft.owner === '2d' ? [0, 1, 0] : undefined);
1314
+ }
1315
+ };
1316
+ const onBlur = () => clearVertexGesture(false);
1317
+ canvas.addEventListener('pointerdown', onPointerDown, true);
1318
+ canvas.addEventListener('pointermove', onPointerMove, true);
1319
+ canvas.addEventListener('pointerup', onPointerUp, true);
1320
+ canvas.addEventListener('pointercancel', onPointerCancel, true);
1321
+ canvas.addEventListener('pointerleave', onPointerLeave, true);
1322
+ canvas.addEventListener('click', onClick, true);
1323
+ canvas.addEventListener('dblclick', onDoubleClick, true);
1324
+ document.addEventListener('keydown', onKeyDown, true);
1325
+ window.addEventListener('blur', onBlur);
1326
+ return () => {
1327
+ cancelVertexGesture.current = () => { };
1328
+ clearVertexGesture(false);
1329
+ canvas.removeEventListener('pointerdown', onPointerDown, true);
1330
+ canvas.removeEventListener('pointermove', onPointerMove, true);
1331
+ canvas.removeEventListener('pointerup', onPointerUp, true);
1332
+ canvas.removeEventListener('pointercancel', onPointerCancel, true);
1333
+ canvas.removeEventListener('pointerleave', onPointerLeave, true);
1334
+ canvas.removeEventListener('click', onClick, true);
1335
+ canvas.removeEventListener('dblclick', onDoubleClick, true);
1336
+ document.removeEventListener('keydown', onKeyDown, true);
1337
+ window.removeEventListener('blur', onBlur);
1338
+ };
1339
+ }, [camera, currentLevelId, gl, surfaceQuery]);
1340
+ return (_jsx(MeasurementDraftPreview, { buildingId: currentBuildingId, levelId: currentLevelId, surfaceQuery: surfaceQuery }));
1341
+ };
1342
+ export default MeasurementTool;