@snaptrude/plugin-core 0.0.0-bimsvg-20260928124803

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 (383) hide show
  1. package/AGENTS.md +231 -0
  2. package/CHANGELOG.md +341 -0
  3. package/CLAUDE.md +11 -0
  4. package/api-manifest.json +9120 -0
  5. package/dist/api/analysis/daylight.d.ts +603 -0
  6. package/dist/api/analysis/daylight.d.ts.map +1 -0
  7. package/dist/api/analysis/heatmaps.d.ts +658 -0
  8. package/dist/api/analysis/heatmaps.d.ts.map +1 -0
  9. package/dist/api/analysis/illuminance.d.ts +145 -0
  10. package/dist/api/analysis/illuminance.d.ts.map +1 -0
  11. package/dist/api/analysis/index.d.ts +59 -0
  12. package/dist/api/analysis/index.d.ts.map +1 -0
  13. package/dist/api/analysis/shadows.d.ts +165 -0
  14. package/dist/api/analysis/shadows.d.ts.map +1 -0
  15. package/dist/api/analysis/solar.d.ts +249 -0
  16. package/dist/api/analysis/solar.d.ts.map +1 -0
  17. package/dist/api/analysis/sunlightHours.d.ts +208 -0
  18. package/dist/api/analysis/sunlightHours.d.ts.map +1 -0
  19. package/dist/api/analysis/sunpath.d.ts +80 -0
  20. package/dist/api/analysis/sunpath.d.ts.map +1 -0
  21. package/dist/api/analysis/weather.d.ts +193 -0
  22. package/dist/api/analysis/weather.d.ts.map +1 -0
  23. package/dist/api/core/buildings.d.ts +427 -0
  24. package/dist/api/core/buildings.d.ts.map +1 -0
  25. package/dist/api/core/camera/index.d.ts +261 -0
  26. package/dist/api/core/camera/index.d.ts.map +1 -0
  27. package/dist/api/core/comment/index.d.ts +333 -0
  28. package/dist/api/core/comment/index.d.ts.map +1 -0
  29. package/dist/api/core/geom/create/index.d.ts +1073 -0
  30. package/dist/api/core/geom/create/index.d.ts.map +1 -0
  31. package/dist/api/core/geom/delete/index.d.ts +78 -0
  32. package/dist/api/core/geom/delete/index.d.ts.map +1 -0
  33. package/dist/api/core/geom/index.d.ts +33 -0
  34. package/dist/api/core/geom/index.d.ts.map +1 -0
  35. package/dist/api/core/geom/query/arc.d.ts +169 -0
  36. package/dist/api/core/geom/query/arc.d.ts.map +1 -0
  37. package/dist/api/core/geom/query/brep.d.ts +514 -0
  38. package/dist/api/core/geom/query/brep.d.ts.map +1 -0
  39. package/dist/api/core/geom/query/circle.d.ts +378 -0
  40. package/dist/api/core/geom/query/circle.d.ts.map +1 -0
  41. package/dist/api/core/geom/query/contour.d.ts +450 -0
  42. package/dist/api/core/geom/query/contour.d.ts.map +1 -0
  43. package/dist/api/core/geom/query/curve.d.ts +918 -0
  44. package/dist/api/core/geom/query/curve.d.ts.map +1 -0
  45. package/dist/api/core/geom/query/edge.d.ts +128 -0
  46. package/dist/api/core/geom/query/edge.d.ts.map +1 -0
  47. package/dist/api/core/geom/query/face.d.ts +363 -0
  48. package/dist/api/core/geom/query/face.d.ts.map +1 -0
  49. package/dist/api/core/geom/query/halfedge.d.ts +206 -0
  50. package/dist/api/core/geom/query/halfedge.d.ts.map +1 -0
  51. package/dist/api/core/geom/query/index.d.ts +61 -0
  52. package/dist/api/core/geom/query/index.d.ts.map +1 -0
  53. package/dist/api/core/geom/query/profile.d.ts +410 -0
  54. package/dist/api/core/geom/query/profile.d.ts.map +1 -0
  55. package/dist/api/core/geom/query/vertex.d.ts +187 -0
  56. package/dist/api/core/geom/query/vertex.d.ts.map +1 -0
  57. package/dist/api/core/geom/update/contour.d.ts +272 -0
  58. package/dist/api/core/geom/update/contour.d.ts.map +1 -0
  59. package/dist/api/core/geom/update/curve.d.ts +180 -0
  60. package/dist/api/core/geom/update/curve.d.ts.map +1 -0
  61. package/dist/api/core/geom/update/index.d.ts +27 -0
  62. package/dist/api/core/geom/update/index.d.ts.map +1 -0
  63. package/dist/api/core/geom/update/profile.d.ts +329 -0
  64. package/dist/api/core/geom/update/profile.d.ts.map +1 -0
  65. package/dist/api/core/groups.d.ts +485 -0
  66. package/dist/api/core/groups.d.ts.map +1 -0
  67. package/dist/api/core/handles/index.d.ts +210 -0
  68. package/dist/api/core/handles/index.d.ts.map +1 -0
  69. package/dist/api/core/history/index.d.ts +78 -0
  70. package/dist/api/core/history/index.d.ts.map +1 -0
  71. package/dist/api/core/index.d.ts +97 -0
  72. package/dist/api/core/index.d.ts.map +1 -0
  73. package/dist/api/core/io/export/index.d.ts +134 -0
  74. package/dist/api/core/io/export/index.d.ts.map +1 -0
  75. package/dist/api/core/io/import/index.d.ts +455 -0
  76. package/dist/api/core/io/import/index.d.ts.map +1 -0
  77. package/dist/api/core/io/index.d.ts +40 -0
  78. package/dist/api/core/io/index.d.ts.map +1 -0
  79. package/dist/api/core/io/job/index.d.ts +139 -0
  80. package/dist/api/core/io/job/index.d.ts.map +1 -0
  81. package/dist/api/core/io/query/index.d.ts +74 -0
  82. package/dist/api/core/io/query/index.d.ts.map +1 -0
  83. package/dist/api/core/io/terrain/index.d.ts +341 -0
  84. package/dist/api/core/io/terrain/index.d.ts.map +1 -0
  85. package/dist/api/core/io/underlay/index.d.ts +805 -0
  86. package/dist/api/core/io/underlay/index.d.ts.map +1 -0
  87. package/dist/api/core/layers.d.ts +402 -0
  88. package/dist/api/core/layers.d.ts.map +1 -0
  89. package/dist/api/core/math/index.d.ts +18 -0
  90. package/dist/api/core/math/index.d.ts.map +1 -0
  91. package/dist/api/core/math/quat.d.ts +170 -0
  92. package/dist/api/core/math/quat.d.ts.map +1 -0
  93. package/dist/api/core/math/vec3.d.ts +174 -0
  94. package/dist/api/core/math/vec3.d.ts.map +1 -0
  95. package/dist/api/core/mode/index.d.ts +111 -0
  96. package/dist/api/core/mode/index.d.ts.map +1 -0
  97. package/dist/api/core/project/index.d.ts +466 -0
  98. package/dist/api/core/project/index.d.ts.map +1 -0
  99. package/dist/api/core/proposals/index.d.ts +531 -0
  100. package/dist/api/core/proposals/index.d.ts.map +1 -0
  101. package/dist/api/core/storeys/index.d.ts +265 -0
  102. package/dist/api/core/storeys/index.d.ts.map +1 -0
  103. package/dist/api/core/tags.d.ts +860 -0
  104. package/dist/api/core/tags.d.ts.map +1 -0
  105. package/dist/api/core/units/index.d.ts +175 -0
  106. package/dist/api/core/units/index.d.ts.map +1 -0
  107. package/dist/api/core/user.d.ts +44 -0
  108. package/dist/api/core/user.d.ts.map +1 -0
  109. package/dist/api/core/zoom/index.d.ts +49 -0
  110. package/dist/api/core/zoom/index.d.ts.map +1 -0
  111. package/dist/api/design/boolean/index.d.ts +168 -0
  112. package/dist/api/design/boolean/index.d.ts.map +1 -0
  113. package/dist/api/design/create/bulk-items.d.ts +185 -0
  114. package/dist/api/design/create/bulk-items.d.ts.map +1 -0
  115. package/dist/api/design/create/grids.d.ts +132 -0
  116. package/dist/api/design/create/grids.d.ts.map +1 -0
  117. package/dist/api/design/create/index.d.ts +1747 -0
  118. package/dist/api/design/create/index.d.ts.map +1 -0
  119. package/dist/api/design/create/opening-fields.d.ts +37 -0
  120. package/dist/api/design/create/opening-fields.d.ts.map +1 -0
  121. package/dist/api/design/delete/index.d.ts +70 -0
  122. package/dist/api/design/delete/index.d.ts.map +1 -0
  123. package/dist/api/design/dimensions.d.ts +427 -0
  124. package/dist/api/design/dimensions.d.ts.map +1 -0
  125. package/dist/api/design/doors/index.d.ts +470 -0
  126. package/dist/api/design/doors/index.d.ts.map +1 -0
  127. package/dist/api/design/edit/index.d.ts +49 -0
  128. package/dist/api/design/edit/index.d.ts.map +1 -0
  129. package/dist/api/design/erase/index.d.ts +160 -0
  130. package/dist/api/design/erase/index.d.ts.map +1 -0
  131. package/dist/api/design/family.d.ts +611 -0
  132. package/dist/api/design/family.d.ts.map +1 -0
  133. package/dist/api/design/furniture/index.d.ts +296 -0
  134. package/dist/api/design/furniture/index.d.ts.map +1 -0
  135. package/dist/api/design/grids.d.ts +237 -0
  136. package/dist/api/design/grids.d.ts.map +1 -0
  137. package/dist/api/design/index.d.ts +260 -0
  138. package/dist/api/design/index.d.ts.map +1 -0
  139. package/dist/api/design/lock.d.ts +67 -0
  140. package/dist/api/design/lock.d.ts.map +1 -0
  141. package/dist/api/design/materials/index.d.ts +551 -0
  142. package/dist/api/design/materials/index.d.ts.map +1 -0
  143. package/dist/api/design/query/geometry/index.d.ts +252 -0
  144. package/dist/api/design/query/geometry/index.d.ts.map +1 -0
  145. package/dist/api/design/query/grids.d.ts +287 -0
  146. package/dist/api/design/query/grids.d.ts.map +1 -0
  147. package/dist/api/design/query/index.d.ts +1318 -0
  148. package/dist/api/design/query/index.d.ts.map +1 -0
  149. package/dist/api/design/query/referenceLines.d.ts +45 -0
  150. package/dist/api/design/query/referenceLines.d.ts.map +1 -0
  151. package/dist/api/design/query/spaces.d.ts +394 -0
  152. package/dist/api/design/query/spaces.d.ts.map +1 -0
  153. package/dist/api/design/selection/index.d.ts +282 -0
  154. package/dist/api/design/selection/index.d.ts.map +1 -0
  155. package/dist/api/design/shared.d.ts +38 -0
  156. package/dist/api/design/shared.d.ts.map +1 -0
  157. package/dist/api/design/transform/index.d.ts +249 -0
  158. package/dist/api/design/transform/index.d.ts.map +1 -0
  159. package/dist/api/design/types/index.d.ts +181 -0
  160. package/dist/api/design/types/index.d.ts.map +1 -0
  161. package/dist/api/design/update/index.d.ts +803 -0
  162. package/dist/api/design/update/index.d.ts.map +1 -0
  163. package/dist/api/design/visibility.d.ts +126 -0
  164. package/dist/api/design/visibility.d.ts.map +1 -0
  165. package/dist/api/design/windows/index.d.ts +300 -0
  166. package/dist/api/design/windows/index.d.ts.map +1 -0
  167. package/dist/api/entity/buildableEnvelope.d.ts +265 -0
  168. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -0
  169. package/dist/api/entity/department.d.ts +1 -0
  170. package/dist/api/entity/department.d.ts.map +1 -0
  171. package/dist/api/entity/index.d.ts +28 -0
  172. package/dist/api/entity/index.d.ts.map +1 -0
  173. package/dist/api/entity/referenceLine.d.ts +210 -0
  174. package/dist/api/entity/referenceLine.d.ts.map +1 -0
  175. package/dist/api/entity/space.d.ts +846 -0
  176. package/dist/api/entity/space.d.ts.map +1 -0
  177. package/dist/api/entity/story.d.ts +476 -0
  178. package/dist/api/entity/story.d.ts.map +1 -0
  179. package/dist/api/index.d.ts +45 -0
  180. package/dist/api/index.d.ts.map +1 -0
  181. package/dist/api/presentation/aiInspiration.d.ts +2400 -0
  182. package/dist/api/presentation/aiInspiration.d.ts.map +1 -0
  183. package/dist/api/presentation/annotate.d.ts +483 -0
  184. package/dist/api/presentation/annotate.d.ts.map +1 -0
  185. package/dist/api/presentation/diagrams.d.ts +184 -0
  186. package/dist/api/presentation/diagrams.d.ts.map +1 -0
  187. package/dist/api/presentation/drawings.d.ts +2900 -0
  188. package/dist/api/presentation/drawings.d.ts.map +1 -0
  189. package/dist/api/presentation/export.d.ts +126 -0
  190. package/dist/api/presentation/export.d.ts.map +1 -0
  191. package/dist/api/presentation/import.d.ts +164 -0
  192. package/dist/api/presentation/import.d.ts.map +1 -0
  193. package/dist/api/presentation/index.d.ts +114 -0
  194. package/dist/api/presentation/index.d.ts.map +1 -0
  195. package/dist/api/presentation/placedViews.d.ts +1232 -0
  196. package/dist/api/presentation/placedViews.d.ts.map +1 -0
  197. package/dist/api/presentation/shapes.d.ts +481 -0
  198. package/dist/api/presentation/shapes.d.ts.map +1 -0
  199. package/dist/api/presentation/sheets.d.ts +643 -0
  200. package/dist/api/presentation/sheets.d.ts.map +1 -0
  201. package/dist/api/presentation/slideshow.d.ts +125 -0
  202. package/dist/api/presentation/slideshow.d.ts.map +1 -0
  203. package/dist/api/presentation/tables.d.ts +81 -0
  204. package/dist/api/presentation/tables.d.ts.map +1 -0
  205. package/dist/api/presentation/viewPresets.d.ts +70 -0
  206. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  207. package/dist/api/presentation/views.d.ts +741 -0
  208. package/dist/api/presentation/views.d.ts.map +1 -0
  209. package/dist/api/program/adjacency.d.ts +155 -0
  210. package/dist/api/program/adjacency.d.ts.map +1 -0
  211. package/dist/api/program/areas.d.ts +450 -0
  212. package/dist/api/program/areas.d.ts.map +1 -0
  213. package/dist/api/program/classification.d.ts +135 -0
  214. package/dist/api/program/classification.d.ts.map +1 -0
  215. package/dist/api/program/cores.d.ts +78 -0
  216. package/dist/api/program/cores.d.ts.map +1 -0
  217. package/dist/api/program/departments.d.ts +487 -0
  218. package/dist/api/program/departments.d.ts.map +1 -0
  219. package/dist/api/program/index.d.ts +71 -0
  220. package/dist/api/program/index.d.ts.map +1 -0
  221. package/dist/api/program/labels.d.ts +355 -0
  222. package/dist/api/program/labels.d.ts.map +1 -0
  223. package/dist/api/program/layout.d.ts +398 -0
  224. package/dist/api/program/layout.d.ts.map +1 -0
  225. package/dist/api/program/metadata.d.ts +328 -0
  226. package/dist/api/program/metadata.d.ts.map +1 -0
  227. package/dist/api/program/metrics.d.ts +108 -0
  228. package/dist/api/program/metrics.d.ts.map +1 -0
  229. package/dist/api/program/site.d.ts +823 -0
  230. package/dist/api/program/site.d.ts.map +1 -0
  231. package/dist/api/program/spreadsheet.d.ts +2628 -0
  232. package/dist/api/program/spreadsheet.d.ts.map +1 -0
  233. package/dist/api/workspace/index.d.ts +552 -0
  234. package/dist/api/workspace/index.d.ts.map +1 -0
  235. package/dist/errors/codes.d.ts +34 -0
  236. package/dist/errors/codes.d.ts.map +1 -0
  237. package/dist/errors/envelope.d.ts +56 -0
  238. package/dist/errors/envelope.d.ts.map +1 -0
  239. package/dist/errors/index.d.ts +6 -0
  240. package/dist/errors/index.d.ts.map +1 -0
  241. package/dist/errors/plugin-error.d.ts +69 -0
  242. package/dist/errors/plugin-error.d.ts.map +1 -0
  243. package/dist/handles.d.ts +229 -0
  244. package/dist/handles.d.ts.map +1 -0
  245. package/dist/host-utils.d.ts +47 -0
  246. package/dist/host-utils.d.ts.map +1 -0
  247. package/dist/index.cjs +8836 -0
  248. package/dist/index.cjs.map +1 -0
  249. package/dist/index.d.ts +6 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +7568 -0
  252. package/dist/index.js.map +1 -0
  253. package/dist/types.d.ts +16 -0
  254. package/dist/types.d.ts.map +1 -0
  255. package/package.json +41 -0
  256. package/scripts/generate-manifest.mjs +238 -0
  257. package/scripts/generate-manifest.test.mjs +292 -0
  258. package/src/api/analysis/daylight.ts +470 -0
  259. package/src/api/analysis/heatmaps.ts +683 -0
  260. package/src/api/analysis/illuminance.ts +155 -0
  261. package/src/api/analysis/index.ts +61 -0
  262. package/src/api/analysis/shadows.ts +183 -0
  263. package/src/api/analysis/solar.ts +237 -0
  264. package/src/api/analysis/sunlightHours.ts +211 -0
  265. package/src/api/analysis/sunpath.ts +83 -0
  266. package/src/api/analysis/weather.ts +179 -0
  267. package/src/api/core/buildings.ts +485 -0
  268. package/src/api/core/camera/index.ts +268 -0
  269. package/src/api/core/comment/index.ts +376 -0
  270. package/src/api/core/geom/create/index.ts +1204 -0
  271. package/src/api/core/geom/delete/index.ts +84 -0
  272. package/src/api/core/geom/index.ts +35 -0
  273. package/src/api/core/geom/query/arc.ts +169 -0
  274. package/src/api/core/geom/query/brep.ts +563 -0
  275. package/src/api/core/geom/query/circle.ts +404 -0
  276. package/src/api/core/geom/query/contour.ts +540 -0
  277. package/src/api/core/geom/query/curve.ts +1078 -0
  278. package/src/api/core/geom/query/edge.ts +130 -0
  279. package/src/api/core/geom/query/face.ts +403 -0
  280. package/src/api/core/geom/query/halfedge.ts +210 -0
  281. package/src/api/core/geom/query/index.ts +63 -0
  282. package/src/api/core/geom/query/profile.ts +473 -0
  283. package/src/api/core/geom/query/vertex.ts +205 -0
  284. package/src/api/core/geom/update/contour.ts +315 -0
  285. package/src/api/core/geom/update/curve.ts +209 -0
  286. package/src/api/core/geom/update/index.ts +29 -0
  287. package/src/api/core/geom/update/profile.ts +377 -0
  288. package/src/api/core/groups.ts +521 -0
  289. package/src/api/core/handles/index.ts +233 -0
  290. package/src/api/core/history/index.ts +84 -0
  291. package/src/api/core/index.ts +99 -0
  292. package/src/api/core/io/export/index.ts +126 -0
  293. package/src/api/core/io/import/index.ts +504 -0
  294. package/src/api/core/io/index.ts +42 -0
  295. package/src/api/core/io/job/index.ts +140 -0
  296. package/src/api/core/io/query/index.ts +71 -0
  297. package/src/api/core/io/terrain/index.ts +360 -0
  298. package/src/api/core/io/underlay/index.ts +705 -0
  299. package/src/api/core/layers.ts +333 -0
  300. package/src/api/core/math/index.ts +20 -0
  301. package/src/api/core/math/quat.ts +172 -0
  302. package/src/api/core/math/vec3.ts +179 -0
  303. package/src/api/core/mode/index.ts +108 -0
  304. package/src/api/core/project/index.ts +479 -0
  305. package/src/api/core/proposals/index.ts +569 -0
  306. package/src/api/core/storeys/index.ts +294 -0
  307. package/src/api/core/tags.ts +911 -0
  308. package/src/api/core/units/index.ts +164 -0
  309. package/src/api/core/user.ts +46 -0
  310. package/src/api/core/zoom/index.ts +51 -0
  311. package/src/api/design/boolean/index.ts +179 -0
  312. package/src/api/design/create/bulk-items.ts +186 -0
  313. package/src/api/design/create/grids.ts +137 -0
  314. package/src/api/design/create/index.ts +1954 -0
  315. package/src/api/design/create/opening-fields.ts +37 -0
  316. package/src/api/design/delete/index.ts +74 -0
  317. package/src/api/design/dimensions.ts +453 -0
  318. package/src/api/design/doors/index.ts +500 -0
  319. package/src/api/design/edit/index.ts +54 -0
  320. package/src/api/design/erase/index.ts +151 -0
  321. package/src/api/design/family.ts +646 -0
  322. package/src/api/design/furniture/index.ts +319 -0
  323. package/src/api/design/grids.ts +237 -0
  324. package/src/api/design/index.ts +274 -0
  325. package/src/api/design/lock.ts +69 -0
  326. package/src/api/design/materials/index.ts +608 -0
  327. package/src/api/design/query/geometry/index.ts +288 -0
  328. package/src/api/design/query/grids.ts +197 -0
  329. package/src/api/design/query/index.ts +1176 -0
  330. package/src/api/design/query/referenceLines.ts +52 -0
  331. package/src/api/design/query/spaces.ts +275 -0
  332. package/src/api/design/selection/index.ts +273 -0
  333. package/src/api/design/shared.ts +40 -0
  334. package/src/api/design/transform/index.ts +254 -0
  335. package/src/api/design/types/index.ts +156 -0
  336. package/src/api/design/update/index.ts +798 -0
  337. package/src/api/design/visibility.ts +143 -0
  338. package/src/api/design/windows/index.ts +333 -0
  339. package/src/api/entity/buildableEnvelope.ts +322 -0
  340. package/src/api/entity/department.ts +0 -0
  341. package/src/api/entity/index.ts +30 -0
  342. package/src/api/entity/referenceLine.ts +235 -0
  343. package/src/api/entity/space.ts +612 -0
  344. package/src/api/entity/story.ts +517 -0
  345. package/src/api/index.ts +47 -0
  346. package/src/api/presentation/aiInspiration.ts +1116 -0
  347. package/src/api/presentation/annotate.ts +417 -0
  348. package/src/api/presentation/diagrams.ts +194 -0
  349. package/src/api/presentation/drawings.ts +529 -0
  350. package/src/api/presentation/export.ts +133 -0
  351. package/src/api/presentation/import.ts +159 -0
  352. package/src/api/presentation/index.ts +129 -0
  353. package/src/api/presentation/placedViews.ts +1203 -0
  354. package/src/api/presentation/shapes.ts +274 -0
  355. package/src/api/presentation/sheets.ts +616 -0
  356. package/src/api/presentation/slideshow.ts +134 -0
  357. package/src/api/presentation/tables.ts +84 -0
  358. package/src/api/presentation/viewPresets.ts +83 -0
  359. package/src/api/presentation/views.ts +698 -0
  360. package/src/api/program/adjacency.ts +164 -0
  361. package/src/api/program/areas.ts +408 -0
  362. package/src/api/program/classification.ts +138 -0
  363. package/src/api/program/cores.ts +83 -0
  364. package/src/api/program/departments.ts +517 -0
  365. package/src/api/program/index.ts +73 -0
  366. package/src/api/program/labels.ts +332 -0
  367. package/src/api/program/layout.ts +422 -0
  368. package/src/api/program/metadata.ts +364 -0
  369. package/src/api/program/metrics.ts +120 -0
  370. package/src/api/program/site.ts +748 -0
  371. package/src/api/program/spreadsheet.ts +2698 -0
  372. package/src/api/workspace/index.ts +612 -0
  373. package/src/errors/codes.ts +136 -0
  374. package/src/errors/envelope.ts +75 -0
  375. package/src/errors/index.ts +21 -0
  376. package/src/errors/plugin-error.ts +134 -0
  377. package/src/handles.ts +282 -0
  378. package/src/host-utils.ts +68 -0
  379. package/src/index.ts +5 -0
  380. package/src/types.ts +16 -0
  381. package/test/errors.test.mjs +184 -0
  382. package/tsconfig.json +22 -0
  383. package/tsup.config.ts +12 -0
@@ -0,0 +1,1318 @@
1
+ import * as z from "zod";
2
+ import { PluginApiReturn } from "../../../types";
3
+ import { ComponentHandle, BBoxComponents } from "../../../handles";
4
+ import { PluginDesignQueryGeometryApi } from "./geometry";
5
+ import { PluginDesignQuerySpacesApi } from "./spaces";
6
+ import { PluginDesignQueryReferenceLinesApi } from "./referenceLines";
7
+ import { PluginDesignQueryGridsApi } from "./grids";
8
+ /**
9
+ * The kind of a BIM entity — the discovery/filter vocabulary for the whole
10
+ * `design.query.*` surface. Values are clean `lowerCamel` tokens; the host maps
11
+ * each to the engine's internal type (whose raw strings are case-inconsistent —
12
+ * `"roof"`/`"slab"` lowercase, `"Wall"`/`"Door"` PascalCase — never surfaced here).
13
+ *
14
+ * | Value | Entity |
15
+ * |---|---|
16
+ * | `"wall"` | Wall |
17
+ * | `"space"` | Space (a room mass) |
18
+ * | `"mass"` | Generic mass (non-room) |
19
+ * | `"door"` | Door |
20
+ * | `"window"` | Window |
21
+ * | `"floor"` | Floor |
22
+ * | `"slab"` | Slab |
23
+ * | `"roof"` | Roof |
24
+ * | `"column"` | Column |
25
+ * | `"beam"` | Beam |
26
+ * | `"ceiling"` | Ceiling |
27
+ * | `"staircase"` | Staircase |
28
+ * | `"furniture"` | Furniture |
29
+ * | `"referenceLine"` | Reference line |
30
+ * | `"curtainWall"` | Parametric curtain wall |
31
+ * | `"mullion"` | Curtain-wall mullion |
32
+ * | `"panel"` | Curtain-wall panel |
33
+ * | `"parametricComponent"` | A placed parametric family instance (native or Revit-imported). Its geometry is rebuilt from `design.family` parameters, so read and drive it through `design.family.getParameters` / `setParameters` rather than editing its meshes. |
34
+ * | `"grid"` | Structural grid group |
35
+ */
36
+ export declare const PluginEntityType: z.ZodEnum<{
37
+ mass: "mass";
38
+ floor: "floor";
39
+ wall: "wall";
40
+ ceiling: "ceiling";
41
+ door: "door";
42
+ window: "window";
43
+ furniture: "furniture";
44
+ space: "space";
45
+ slab: "slab";
46
+ roof: "roof";
47
+ column: "column";
48
+ beam: "beam";
49
+ staircase: "staircase";
50
+ referenceLine: "referenceLine";
51
+ curtainWall: "curtainWall";
52
+ mullion: "mullion";
53
+ panel: "panel";
54
+ parametricComponent: "parametricComponent";
55
+ grid: "grid";
56
+ }>;
57
+ export type PluginEntityType = z.infer<typeof PluginEntityType>;
58
+ /**
59
+ * `EntityFilterOptions` — the **single filter** shared by every `design.query.list*`
60
+ * method, so filtering is identical across all BIM object types. Every field is
61
+ * optional and **AND-combined**: a component must satisfy all provided fields.
62
+ * Plural fields are arrays (match any of); singular fields are scalars. A field
63
+ * that names a type-specific dimension (`massTypes`/`spaceTypes`/`departmentId`)
64
+ * excludes components that lack that dimension.
65
+ *
66
+ * | Field | Type | Keeps components where |
67
+ * |---|---|---|
68
+ * | `types` | {@linkcode PluginEntityType}`[]` | entity kind ∈ `types` (ignored by per-type `list*` — the method fixes the kind) |
69
+ * | `storeys` | `number[]` | storey/floor level ∈ `storeys` (negative = basement) |
70
+ * | `buildingIds` | `string[]` | building ∈ `buildingIds` |
71
+ * | `structureIds` | `string[]` | structure ∈ `structureIds` |
72
+ * | `label` | `string` | label (`room_type` ?? mesh label) === `label` |
73
+ * | `massTypes` | {@linkcode PluginMassType}`[]` | mass-type ∈ (masses only) |
74
+ * | `spaceTypes` | {@linkcode PluginSpaceType}`[]` | space-type ∈ (spaces only) |
75
+ * | `departmentId` | {@linkcode PluginDepartmentId} | department === |
76
+ * | `isSelected` | `boolean` | current selection state === |
77
+ * | `isLocked` | `boolean` | lock flag === |
78
+ * | `isHidden` | `boolean` | user-hidden flag === |
79
+ * | `within` | {@linkcode BBoxComponents} | the entity's bounding box intersects the region |
80
+ * | `overlaps` | {@linkcode ComponentHandle} | the entity's plan footprint overlaps the given space's bottom-face footprint — non-zero intersection area, so fully-inside, boundary-nested, and partially-overhanging entities all match; edge-touching with zero interior overlap does not. Exact polygon intersection (holes respected). Tested in plan — storey height is ignored; compose with `storeys` to scope a floor. Hidden entities are excluded by default — pass `isHidden` explicitly to override. The reference space itself is never returned. Throws on an unknown id. Entities without a brep footprint use their bounding-box plan rectangle. |
81
+ * | `ids` | {@linkcode ComponentHandle}`[]` | id ∈ `ids` (restrict to a known set) |
82
+ */
83
+ export declare const PluginEntityFilter: z.ZodObject<{
84
+ types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
85
+ mass: "mass";
86
+ floor: "floor";
87
+ wall: "wall";
88
+ ceiling: "ceiling";
89
+ door: "door";
90
+ window: "window";
91
+ furniture: "furniture";
92
+ space: "space";
93
+ slab: "slab";
94
+ roof: "roof";
95
+ column: "column";
96
+ beam: "beam";
97
+ staircase: "staircase";
98
+ referenceLine: "referenceLine";
99
+ curtainWall: "curtainWall";
100
+ mullion: "mullion";
101
+ panel: "panel";
102
+ parametricComponent: "parametricComponent";
103
+ grid: "grid";
104
+ }>>>;
105
+ storeys: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
106
+ buildingIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
107
+ structureIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
108
+ label: z.ZodOptional<z.ZodString>;
109
+ massTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
110
+ Room: "Room";
111
+ Plinth: "Plinth";
112
+ Void: "Void";
113
+ Pergola: "Pergola";
114
+ Furniture: "Furniture";
115
+ "Facade element": "Facade element";
116
+ "Generic mass": "Generic mass";
117
+ Department: "Department";
118
+ Building: "Building";
119
+ "Revit Import": "Revit Import";
120
+ Mass: "Mass";
121
+ Site: "Site";
122
+ }>>>;
123
+ spaceTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
124
+ Room: "Room";
125
+ "Program Block": "Program Block";
126
+ Balcony: "Balcony";
127
+ Road: "Road";
128
+ Garden: "Garden";
129
+ Deck: "Deck";
130
+ Pool: "Pool";
131
+ Walkway: "Walkway";
132
+ Envelope: "Envelope";
133
+ Parking: "Parking";
134
+ }>>>;
135
+ departmentId: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
136
+ DEFAULT: "DEFAULT";
137
+ SITE: "SITE";
138
+ ENVELOPE: "ENVELOPE";
139
+ CORE: "CORE";
140
+ }>, z.ZodUUID]>>;
141
+ isSelected: z.ZodOptional<z.ZodBoolean>;
142
+ isLocked: z.ZodOptional<z.ZodBoolean>;
143
+ isHidden: z.ZodOptional<z.ZodBoolean>;
144
+ within: z.ZodOptional<z.ZodObject<{
145
+ min: z.ZodObject<{
146
+ x: z.ZodNumber;
147
+ y: z.ZodNumber;
148
+ z: z.ZodNumber;
149
+ }, z.core.$strip>;
150
+ max: z.ZodObject<{
151
+ x: z.ZodNumber;
152
+ y: z.ZodNumber;
153
+ z: z.ZodNumber;
154
+ }, z.core.$strip>;
155
+ }, z.core.$strip>>;
156
+ overlaps: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
157
+ ids: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>>;
158
+ }, z.core.$strip>;
159
+ export type PluginEntityFilter = z.infer<typeof PluginEntityFilter>;
160
+ /**
161
+ * Arguments for {@linkcode PluginDesignQueryApi.listByType} — a required entity
162
+ * `type` plus every {@linkcode PluginEntityFilter} field.
163
+ */
164
+ export declare const PluginDesignQueryListByTypeArgs: z.ZodObject<{
165
+ types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
166
+ mass: "mass";
167
+ floor: "floor";
168
+ wall: "wall";
169
+ ceiling: "ceiling";
170
+ door: "door";
171
+ window: "window";
172
+ furniture: "furniture";
173
+ space: "space";
174
+ slab: "slab";
175
+ roof: "roof";
176
+ column: "column";
177
+ beam: "beam";
178
+ staircase: "staircase";
179
+ referenceLine: "referenceLine";
180
+ curtainWall: "curtainWall";
181
+ mullion: "mullion";
182
+ panel: "panel";
183
+ parametricComponent: "parametricComponent";
184
+ grid: "grid";
185
+ }>>>;
186
+ storeys: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
187
+ buildingIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
188
+ structureIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
189
+ label: z.ZodOptional<z.ZodString>;
190
+ massTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
191
+ Room: "Room";
192
+ Plinth: "Plinth";
193
+ Void: "Void";
194
+ Pergola: "Pergola";
195
+ Furniture: "Furniture";
196
+ "Facade element": "Facade element";
197
+ "Generic mass": "Generic mass";
198
+ Department: "Department";
199
+ Building: "Building";
200
+ "Revit Import": "Revit Import";
201
+ Mass: "Mass";
202
+ Site: "Site";
203
+ }>>>;
204
+ spaceTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
205
+ Room: "Room";
206
+ "Program Block": "Program Block";
207
+ Balcony: "Balcony";
208
+ Road: "Road";
209
+ Garden: "Garden";
210
+ Deck: "Deck";
211
+ Pool: "Pool";
212
+ Walkway: "Walkway";
213
+ Envelope: "Envelope";
214
+ Parking: "Parking";
215
+ }>>>;
216
+ departmentId: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
217
+ DEFAULT: "DEFAULT";
218
+ SITE: "SITE";
219
+ ENVELOPE: "ENVELOPE";
220
+ CORE: "CORE";
221
+ }>, z.ZodUUID]>>;
222
+ isSelected: z.ZodOptional<z.ZodBoolean>;
223
+ isLocked: z.ZodOptional<z.ZodBoolean>;
224
+ isHidden: z.ZodOptional<z.ZodBoolean>;
225
+ within: z.ZodOptional<z.ZodObject<{
226
+ min: z.ZodObject<{
227
+ x: z.ZodNumber;
228
+ y: z.ZodNumber;
229
+ z: z.ZodNumber;
230
+ }, z.core.$strip>;
231
+ max: z.ZodObject<{
232
+ x: z.ZodNumber;
233
+ y: z.ZodNumber;
234
+ z: z.ZodNumber;
235
+ }, z.core.$strip>;
236
+ }, z.core.$strip>>;
237
+ overlaps: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
238
+ ids: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>>;
239
+ type: z.ZodEnum<{
240
+ mass: "mass";
241
+ floor: "floor";
242
+ wall: "wall";
243
+ ceiling: "ceiling";
244
+ door: "door";
245
+ window: "window";
246
+ furniture: "furniture";
247
+ space: "space";
248
+ slab: "slab";
249
+ roof: "roof";
250
+ column: "column";
251
+ beam: "beam";
252
+ staircase: "staircase";
253
+ referenceLine: "referenceLine";
254
+ curtainWall: "curtainWall";
255
+ mullion: "mullion";
256
+ panel: "panel";
257
+ parametricComponent: "parametricComponent";
258
+ grid: "grid";
259
+ }>;
260
+ }, z.core.$strip>;
261
+ export type PluginDesignQueryListByTypeArgs = z.infer<typeof PluginDesignQueryListByTypeArgs>;
262
+ /** Arguments for methods that read one entity by its {@linkcode ComponentHandle}. */
263
+ export declare const PluginDesignQueryComponentArgs: z.ZodObject<{
264
+ component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
265
+ }, z.core.$strip>;
266
+ export type PluginDesignQueryComponentArgs = z.infer<typeof PluginDesignQueryComponentArgs>;
267
+ /** Arguments for methods that look an entity up by id. */
268
+ export declare const PluginDesignQueryIdArgs: z.ZodObject<{
269
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
270
+ }, z.core.$strip>;
271
+ export type PluginDesignQueryIdArgs = z.infer<typeof PluginDesignQueryIdArgs>;
272
+ /** Arguments for methods over a set of entities (e.g. the union bounding box). */
273
+ export declare const PluginDesignQueryComponentsArgs: z.ZodObject<{
274
+ components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
275
+ }, z.core.$strip>;
276
+ export type PluginDesignQueryComponentsArgs = z.infer<typeof PluginDesignQueryComponentsArgs>;
277
+ /**
278
+ * The common property record returned by {@linkcode PluginDesignQueryApi.getProperties} —
279
+ * a **partial** object (a field is present only when it applies to the entity).
280
+ * Type-specific and geometry reads live on {@linkcode PluginDesignQueryApi.measure}
281
+ * and `design.query.geometry.*`, keeping this record generic across every type.
282
+ *
283
+ * | Property | Type | Description |
284
+ * |---|---|---|
285
+ * | `id` | `string` | The entity id |
286
+ * | `type` | {@linkcode PluginEntityType} | Entity kind |
287
+ * | `label` | `string` | `room_type` ?? mesh label ?? `""` |
288
+ * | `storey` | `number` | Storey/floor level |
289
+ * | `buildingId` | `string` | Owning building |
290
+ * | `structureId` | `string` | Owning structure |
291
+ * | `massType` | `string` | Mass-type (masses only) |
292
+ * | `spaceType` | {@linkcode PluginSpaceType} | Space-type (spaces only) |
293
+ * | `areaClass` | {@linkcode PluginAreaClass} | Area classification (spaces only) |
294
+ * | `departmentId` | `string` | Department (masses only) |
295
+ * | `buildingType` | `string` | Assigned building type NAME (walls / slabs / floors / roofs / ceilings only) — the Object Properties panel's Wall/Slab/Floor/Roof/Ceiling Type dropdown value, matching the names from `design.types.list(kind)` |
296
+ * | `isLocked` | `boolean` | Lock flag |
297
+ * | `isHidden` | `boolean` | User-hidden flag |
298
+ * | `isSelected` | `boolean` | Current selection state |
299
+ * | `boundingBox` | {@linkcode BBoxComponents} | World-space AABB |
300
+ * | `adjacency` | `{ spaceId: string; value: number }[]` | Adjacency relationships (spaces/masses only). `value`: `2` = Direct (required), `1` = Indirect or physical contact, `-1` = Restricted; `0` entries are filtered out. `[]` when adjacency has never been computed — see `program.adjacency.compute`. |
301
+ */
302
+ export declare const PluginEntityProperties: z.ZodObject<{
303
+ id: z.ZodOptional<z.ZodString>;
304
+ type: z.ZodOptional<z.ZodEnum<{
305
+ mass: "mass";
306
+ floor: "floor";
307
+ wall: "wall";
308
+ ceiling: "ceiling";
309
+ door: "door";
310
+ window: "window";
311
+ furniture: "furniture";
312
+ space: "space";
313
+ slab: "slab";
314
+ roof: "roof";
315
+ column: "column";
316
+ beam: "beam";
317
+ staircase: "staircase";
318
+ referenceLine: "referenceLine";
319
+ curtainWall: "curtainWall";
320
+ mullion: "mullion";
321
+ panel: "panel";
322
+ parametricComponent: "parametricComponent";
323
+ grid: "grid";
324
+ }>>;
325
+ label: z.ZodOptional<z.ZodString>;
326
+ storey: z.ZodOptional<z.ZodNumber>;
327
+ buildingId: z.ZodOptional<z.ZodString>;
328
+ structureId: z.ZodOptional<z.ZodString>;
329
+ massType: z.ZodOptional<z.ZodString>;
330
+ spaceType: z.ZodOptional<z.ZodEnum<{
331
+ Room: "Room";
332
+ "Program Block": "Program Block";
333
+ Balcony: "Balcony";
334
+ Road: "Road";
335
+ Garden: "Garden";
336
+ Deck: "Deck";
337
+ Pool: "Pool";
338
+ Walkway: "Walkway";
339
+ Envelope: "Envelope";
340
+ Parking: "Parking";
341
+ }>>;
342
+ areaClass: z.ZodOptional<z.ZodEnum<{
343
+ NET: "NET";
344
+ GROSS: "GROSS";
345
+ EXCLUDED: "EXCLUDED";
346
+ }>>;
347
+ departmentId: z.ZodOptional<z.ZodString>;
348
+ buildingType: z.ZodOptional<z.ZodString>;
349
+ isLocked: z.ZodOptional<z.ZodBoolean>;
350
+ isHidden: z.ZodOptional<z.ZodBoolean>;
351
+ isSelected: z.ZodOptional<z.ZodBoolean>;
352
+ boundingBox: z.ZodOptional<z.ZodObject<{
353
+ min: z.ZodObject<{
354
+ x: z.ZodNumber;
355
+ y: z.ZodNumber;
356
+ z: z.ZodNumber;
357
+ }, z.core.$strip>;
358
+ max: z.ZodObject<{
359
+ x: z.ZodNumber;
360
+ y: z.ZodNumber;
361
+ z: z.ZodNumber;
362
+ }, z.core.$strip>;
363
+ }, z.core.$strip>>;
364
+ adjacency: z.ZodOptional<z.ZodArray<z.ZodObject<{
365
+ spaceId: z.ZodString;
366
+ value: z.ZodNumber;
367
+ }, z.core.$strip>>>;
368
+ }, z.core.$strip>;
369
+ export type PluginEntityProperties = z.infer<typeof PluginEntityProperties>;
370
+ /**
371
+ * The multi-metric bundle returned by {@linkcode PluginDesignQueryApi.measure}.
372
+ * `boundingBox` is always present; the numeric metrics appear only when the
373
+ * entity's type computes them (area: floors/masses/slabs/roofs/beams/columns;
374
+ * volume: all; length: walls/beams).
375
+ *
376
+ * `thickness` and `height` are the Object Properties panel's dimension reads
377
+ * (the same engine source `design.update.wall` / `design.update.slab` etc.
378
+ * write through), in engine units. `thickness`: walls (the plan thickness —
379
+ * present only for straight orthogonal walls, exactly when the panel shows it)
380
+ * and slabs/floors/roofs/ceilings (the vertical extent the panel calls
381
+ * Thickness). `height`: walls only.
382
+ *
383
+ * | Property | Type | Description |
384
+ * |---|---|---|
385
+ * | `area` | `number`? | Bottom-face area |
386
+ * | `volume` | `number`? | Solid volume |
387
+ * | `length` | `number`? | Running length (linear elements) |
388
+ * | `thickness` | `number`? | Panel Thickness — walls (straight orthogonal only) and the slab family |
389
+ * | `height` | `number`? | Panel Height — walls only |
390
+ * | `boundingBox` | {@linkcode BBoxComponents} | World-space AABB (always present) |
391
+ */
392
+ export declare const PluginEntityMeasurements: z.ZodObject<{
393
+ area: z.ZodOptional<z.ZodNumber>;
394
+ volume: z.ZodOptional<z.ZodNumber>;
395
+ length: z.ZodOptional<z.ZodNumber>;
396
+ thickness: z.ZodOptional<z.ZodNumber>;
397
+ height: z.ZodOptional<z.ZodNumber>;
398
+ boundingBox: z.ZodObject<{
399
+ min: z.ZodObject<{
400
+ x: z.ZodNumber;
401
+ y: z.ZodNumber;
402
+ z: z.ZodNumber;
403
+ }, z.core.$strip>;
404
+ max: z.ZodObject<{
405
+ x: z.ZodNumber;
406
+ y: z.ZodNumber;
407
+ z: z.ZodNumber;
408
+ }, z.core.$strip>;
409
+ }, z.core.$strip>;
410
+ }, z.core.$strip>;
411
+ export type PluginEntityMeasurements = z.infer<typeof PluginEntityMeasurements>;
412
+ /**
413
+ * The parametric properties of a staircase — the same editable fields the
414
+ * staircase properties panel exposes. Returned by
415
+ * {@linkcode PluginDesignQueryApi.getStaircaseParams}; the write side is
416
+ * `design.update.staircase`. Engine internals (block schema, min well size,
417
+ * square-well padding) are deliberately excluded.
418
+ *
419
+ * All dimensions are in **engine units** (the same convention as
420
+ * `design.doors.getWidth`); `steps` is a unitless count. The invariant
421
+ * `staircaseHeight = steps × riser` is governed by the two lock booleans — see
422
+ * `design.update.staircase`. Type-specific fields (`wellSize`, `landingWidth`,
423
+ * `flightStartDistAfterTurn`) are present only when the preset uses them.
424
+ *
425
+ * | Property | Type | Description |
426
+ * |---|---|---|
427
+ * | `staircaseType` | {@linkcode PluginStaircasePreset} | Base staircase type |
428
+ * | `staircasePreset` | {@linkcode PluginStaircasePreset} | Named parametric preset |
429
+ * | `staircaseHeight` | `number` | Total rise (engine units) |
430
+ * | `steps` | `number` | Step count (unitless) |
431
+ * | `riser` | `number` | Riser height (engine units) |
432
+ * | `tread` | `number` | Tread depth (engine units) |
433
+ * | `width` | `number` | Flight width (engine units) |
434
+ * | `depth` | `number` | Slab/waist thickness (engine units) |
435
+ * | `wellSize` | `number`? | Stairwell gap (dogLegged / openWell / square) |
436
+ * | `landingWidth` | `number`? | Landing depth (straight / dogLegged) |
437
+ * | `flightStartDistAfterTurn` | `number`? | Flight offset after a turn (dogLegged / lShaped / square) |
438
+ * | `baseOffset` | `number` | Vertical offset from the storey base (engine units) |
439
+ * | `isStoreyHeightUnlocked` | `boolean` | When `false`, height is tied to the storey height |
440
+ * | `isStaircaseHeightUnlocked` | `boolean` | When `false`, height recomputes from steps × riser |
441
+ * | `storey` | `number` | Storey/floor level the staircase sits on |
442
+ */
443
+ export declare const PluginStaircaseParams: z.ZodObject<{
444
+ staircaseType: z.ZodEnum<{
445
+ custom: "custom";
446
+ straight: "straight";
447
+ straightWoLanding: "straightWoLanding";
448
+ straightFlightWoMidLanding: "straightFlightWoMidLanding";
449
+ dogLegged: "dogLegged";
450
+ openWell: "openWell";
451
+ lShaped: "lShaped";
452
+ "3StepLShaped": "3StepLShaped";
453
+ square: "square";
454
+ singleStep: "singleStep";
455
+ plinthLevel: "plinthLevel";
456
+ amphitheatre: "amphitheatre";
457
+ connectingStepsToAmphitheatre: "connectingStepsToAmphitheatre";
458
+ mezzanineFloorStraight: "mezzanineFloorStraight";
459
+ mezzanineFloorDogLegged: "mezzanineFloorDogLegged";
460
+ mezzanineFloorLShaped: "mezzanineFloorLShaped";
461
+ }>;
462
+ staircasePreset: z.ZodEnum<{
463
+ custom: "custom";
464
+ straight: "straight";
465
+ straightWoLanding: "straightWoLanding";
466
+ straightFlightWoMidLanding: "straightFlightWoMidLanding";
467
+ dogLegged: "dogLegged";
468
+ openWell: "openWell";
469
+ lShaped: "lShaped";
470
+ "3StepLShaped": "3StepLShaped";
471
+ square: "square";
472
+ singleStep: "singleStep";
473
+ plinthLevel: "plinthLevel";
474
+ amphitheatre: "amphitheatre";
475
+ connectingStepsToAmphitheatre: "connectingStepsToAmphitheatre";
476
+ mezzanineFloorStraight: "mezzanineFloorStraight";
477
+ mezzanineFloorDogLegged: "mezzanineFloorDogLegged";
478
+ mezzanineFloorLShaped: "mezzanineFloorLShaped";
479
+ }>;
480
+ staircaseHeight: z.ZodNumber;
481
+ steps: z.ZodNumber;
482
+ riser: z.ZodNumber;
483
+ tread: z.ZodNumber;
484
+ width: z.ZodNumber;
485
+ depth: z.ZodNumber;
486
+ wellSize: z.ZodOptional<z.ZodNumber>;
487
+ landingWidth: z.ZodOptional<z.ZodNumber>;
488
+ flightStartDistAfterTurn: z.ZodOptional<z.ZodNumber>;
489
+ baseOffset: z.ZodNumber;
490
+ isStoreyHeightUnlocked: z.ZodBoolean;
491
+ isStaircaseHeightUnlocked: z.ZodBoolean;
492
+ storey: z.ZodNumber;
493
+ }, z.core.$strip>;
494
+ export type PluginStaircaseParams = z.infer<typeof PluginStaircaseParams>;
495
+ /**
496
+ * `design.query.*` — read-only enumeration + inspection of scene-committed BIM
497
+ * entities (all-handle model, §11). No query mutates the scene.
498
+ *
499
+ * Every `list*` returns a snapshot {@linkcode ComponentHandle}`[]` (`[]`, never
500
+ * `null`) filtered by the shared {@linkcode PluginEntityFilter}; per-entity reads
501
+ * take a {@linkcode ComponentHandle} and return primitive records / child handles
502
+ * or `null` when the entity is gone. Resolve details of a returned handle with
503
+ * {@linkcode PluginDesignQueryApi.getProperties} / {@linkcode PluginDesignQueryApi.measure}
504
+ * / `design.query.geometry.*`.
505
+ *
506
+ * Accessed via `snaptrude.design.query`.
507
+ */
508
+ export declare abstract class PluginDesignQueryApi {
509
+ /** Entity-geometry reads (brep, bottom contour). See {@linkcode PluginDesignQueryGeometryApi}. */
510
+ abstract geometry: PluginDesignQueryGeometryApi;
511
+ /** Space-specific reads (footprint, …). See {@linkcode PluginDesignQuerySpacesApi}. */
512
+ abstract spaces: PluginDesignQuerySpacesApi;
513
+ /** Reference-line-specific reads. See {@linkcode PluginDesignQueryReferenceLinesApi}. */
514
+ abstract referenceLines: PluginDesignQueryReferenceLinesApi;
515
+ /** Structural-grid-specific reads. See {@linkcode PluginDesignQueryGridsApi}. */
516
+ abstract grids: PluginDesignQueryGridsApi;
517
+ constructor();
518
+ /**
519
+ * List **all** BIM entities in the project matching the filter.
520
+ *
521
+ * @param filter - an optional {@linkcode PluginEntityFilter}
522
+ * @returns matching entities as {@linkcode ComponentHandle}`[]` (`[]` if none)
523
+ *
524
+ * @examplePrompt Show me everything in the model
525
+ * @examplePrompt How many objects are on the ground floor?
526
+ * @examplePrompt List all the doors and windows on level 2
527
+ * @examplePrompt What elements are currently selected?
528
+ * @examplePrompt Find every hidden object in the project
529
+ *
530
+ * # Example
531
+ * ```ts
532
+ * // Doors and windows on the ground storey (fields AND-combine)
533
+ * const doorsAndWindows = await snaptrude.design.query.listEntities({
534
+ * types: ["door", "window"],
535
+ * storeys: [1],
536
+ * })
537
+ *
538
+ * // Everything the user currently has selected
539
+ * const selected = await snaptrude.design.query.listEntities({ isSelected: true })
540
+ *
541
+ * // Everything inside a world-space region (axis-aligned box, Snaptrude units)
542
+ * const inRegion = await snaptrude.design.query.listEntities({
543
+ * within: { min: { x: 0, y: 0, z: 0 }, max: { x: 10, y: 4, z: 8 } },
544
+ * })
545
+ * ```
546
+ */
547
+ abstract listEntities(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
548
+ /**
549
+ * List all entities of one BIM object type — wall, door, slab, panel, and so
550
+ * on — optionally narrowed by the shared filter.
551
+ *
552
+ * @param type - the {@linkcode PluginEntityType} to list
553
+ * @param filter - an optional {@linkcode PluginEntityFilter}
554
+ * @returns matching entities as {@linkcode ComponentHandle}`[]`
555
+ *
556
+ * @examplePrompt List all the curtain walls in the project
557
+ * @examplePrompt Show every curtain wall panel on this storey
558
+ * @examplePrompt Get all the elements of a single type, like columns
559
+ * @examplePrompt Find all the locked slabs in the model
560
+ *
561
+ * # Example
562
+ * ```ts
563
+ * const lockedSlabs = await snaptrude.design.query.listByType("slab", { isLocked: true })
564
+ *
565
+ * // Curtain-wall panels on storeys 2-3 of one building
566
+ * const panels = await snaptrude.design.query.listByType("panel", {
567
+ * storeys: [2, 3],
568
+ * buildingIds: ["bld_1"],
569
+ * })
570
+ * ```
571
+ */
572
+ abstract listByType(type: PluginEntityType, filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
573
+ /**
574
+ * List all the walls in the project, optionally filtered by storey, building,
575
+ * label, selection state, or region.
576
+ *
577
+ * The `types` field of the filter is ignored (this method fixes the kind).
578
+ *
579
+ * @param filter - an optional {@linkcode PluginEntityFilter}
580
+ * @returns wall {@linkcode ComponentHandle}`[]`
581
+ *
582
+ * @examplePrompt How many walls are in the project?
583
+ * @examplePrompt List all the walls on the ground floor
584
+ * @examplePrompt Which walls are currently selected?
585
+ * @examplePrompt Find the walls on level 2 of building A
586
+ * @examplePrompt Show me every hidden wall
587
+ *
588
+ * # Example
589
+ * ```ts
590
+ * const groundFloorWalls = await snaptrude.design.query.listWalls({ storeys: [1] })
591
+ * ```
592
+ */
593
+ abstract listWalls(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
594
+ /**
595
+ * List all the spaces (rooms) in the project, optionally filtered by storey,
596
+ * department, space type, label, selection state, or region.
597
+ *
598
+ * @param filter - an optional {@linkcode PluginEntityFilter}
599
+ * @returns space {@linkcode ComponentHandle}`[]`
600
+ *
601
+ * @examplePrompt How many rooms are in this project?
602
+ * @examplePrompt List all the spaces on the second storey
603
+ * @examplePrompt Which rooms are in the Bedrooms department?
604
+ * @examplePrompt Find every room labelled Kitchen
605
+ * @examplePrompt Show the spaces that are currently selected
606
+ *
607
+ * # Example
608
+ * ```ts
609
+ * // Balconies and decks on storey 2 (`label` is an exact match on room_type)
610
+ * const outdoor = await snaptrude.design.query.listSpaces({
611
+ * storeys: [2],
612
+ * spaceTypes: ["Balcony", "Deck"],
613
+ * })
614
+ *
615
+ * // Rooms in a department: resolve its id first, then filter and total the area
616
+ * const { departments } = await snaptrude.program.departments.list()
617
+ * const bedrooms = departments.find((d) => d.name === "Bedrooms")
618
+ * if (bedrooms) {
619
+ * const rooms = await snaptrude.design.query.listSpaces({ departmentId: bedrooms.id })
620
+ * let total = 0
621
+ * for (const room of rooms) {
622
+ * const m = await snaptrude.design.query.measure(room)
623
+ * total += m?.area ?? 0
624
+ * }
625
+ * }
626
+ * ```
627
+ */
628
+ abstract listSpaces(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
629
+ /**
630
+ * List all the generic masses (non-room massing volumes) in the project,
631
+ * optionally filtered by storey, building, label, mass type, or region.
632
+ *
633
+ * @param filter - an optional {@linkcode PluginEntityFilter}
634
+ * @returns mass {@linkcode ComponentHandle}`[]`
635
+ *
636
+ * @examplePrompt List all the masses in the model
637
+ * @examplePrompt How many massing blocks are on the site?
638
+ * @examplePrompt Show the generic masses on level 1
639
+ * @examplePrompt Find every mass that isn't a room
640
+ *
641
+ * # Example
642
+ * ```ts
643
+ * // Only certain mass kinds — massTypes matches any of the given values
644
+ * const massing = await snaptrude.design.query.listMasses({
645
+ * massTypes: ["Generic mass", "Plinth"],
646
+ * })
647
+ * ```
648
+ */
649
+ abstract listMasses(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
650
+ /**
651
+ * List all the doors in the project, optionally filtered by storey, building,
652
+ * selection state, or region.
653
+ *
654
+ * @param filter - an optional {@linkcode PluginEntityFilter}
655
+ * @returns door {@linkcode ComponentHandle}`[]`
656
+ *
657
+ * @examplePrompt How many doors are in the project?
658
+ * @examplePrompt List all the doors on the ground floor
659
+ * @examplePrompt Which doors are currently selected?
660
+ * @examplePrompt Find every door in building B
661
+ *
662
+ * # Example
663
+ * ```ts
664
+ * // Ground-floor doors, then read each one's width via design.doors.*
665
+ * const doors = await snaptrude.design.query.listDoors({ storeys: [1] })
666
+ * for (const door of doors) {
667
+ * const width = await snaptrude.design.doors.getWidth(door)
668
+ * }
669
+ * ```
670
+ */
671
+ abstract listDoors(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
672
+ /**
673
+ * List all the windows in the project, optionally filtered by storey,
674
+ * building, selection state, or region.
675
+ *
676
+ * @param filter - an optional {@linkcode PluginEntityFilter}
677
+ * @returns window {@linkcode ComponentHandle}`[]`
678
+ *
679
+ * @examplePrompt How many windows does this building have?
680
+ * @examplePrompt List every window on level 3
681
+ * @examplePrompt Which windows are on the ground floor?
682
+ * @examplePrompt Show all the windows that are currently selected
683
+ *
684
+ * # Example
685
+ * ```ts
686
+ * const level3Windows = await snaptrude.design.query.listWindows({ storeys: [3] })
687
+ * ```
688
+ */
689
+ abstract listWindows(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
690
+ /**
691
+ * List all the floor elements (floor plates / finishes) in the project,
692
+ * optionally filtered by storey, building, lock state, or region.
693
+ *
694
+ * @param filter - an optional {@linkcode PluginEntityFilter}
695
+ * @returns floor {@linkcode ComponentHandle}`[]`
696
+ *
697
+ * @examplePrompt List all the floor elements in the model
698
+ * @examplePrompt How many floor plates are on the second storey?
699
+ * @examplePrompt Which floors are locked?
700
+ * @examplePrompt Show the floor finishes on level 0
701
+ *
702
+ * # Example
703
+ * ```ts
704
+ * const lockedFloors = await snaptrude.design.query.listFloors({ isLocked: true })
705
+ * ```
706
+ */
707
+ abstract listFloors(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
708
+ /**
709
+ * List all the slabs in the project, optionally filtered by storey, building,
710
+ * lock state, or region.
711
+ *
712
+ * @param filter - an optional {@linkcode PluginEntityFilter}
713
+ * @returns slab {@linkcode ComponentHandle}`[]`
714
+ *
715
+ * @examplePrompt List all the slabs in the project
716
+ * @examplePrompt How many slabs are on level 2?
717
+ * @examplePrompt Which slabs are locked?
718
+ * @examplePrompt Show the slabs in the selected building
719
+ *
720
+ * # Example
721
+ * ```ts
722
+ * const storey2Slabs = await snaptrude.design.query.listSlabs({ storeys: [2] })
723
+ * ```
724
+ */
725
+ abstract listSlabs(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
726
+ /**
727
+ * List all the roofs in the project, optionally filtered by storey, building,
728
+ * visibility, or region.
729
+ *
730
+ * @param filter - an optional {@linkcode PluginEntityFilter}
731
+ * @returns roof {@linkcode ComponentHandle}`[]`
732
+ *
733
+ * @examplePrompt How many roofs does the model have?
734
+ * @examplePrompt List all the roof elements
735
+ * @examplePrompt Show the roofs on the top storey
736
+ * @examplePrompt Find every hidden roof
737
+ *
738
+ * # Example
739
+ * ```ts
740
+ * const hiddenRoofs = await snaptrude.design.query.listRoofs({ isHidden: true })
741
+ * ```
742
+ */
743
+ abstract listRoofs(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
744
+ /**
745
+ * List all the columns in the project, optionally filtered by storey,
746
+ * building, selection state, or region.
747
+ *
748
+ * @param filter - an optional {@linkcode PluginEntityFilter}
749
+ * @returns column {@linkcode ComponentHandle}`[]`
750
+ *
751
+ * @examplePrompt How many columns are on the ground floor?
752
+ * @examplePrompt List all the columns in building A
753
+ * @examplePrompt Show every column on level 3
754
+ * @examplePrompt Which columns are currently selected?
755
+ *
756
+ * # Example
757
+ * ```ts
758
+ * const groundFloorColumns = await snaptrude.design.query.listColumns({ storeys: [1] })
759
+ * ```
760
+ */
761
+ abstract listColumns(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
762
+ /**
763
+ * List all the beams in the project, optionally filtered by storey, building,
764
+ * lock state, or region.
765
+ *
766
+ * @param filter - an optional {@linkcode PluginEntityFilter}
767
+ * @returns beam {@linkcode ComponentHandle}`[]`
768
+ *
769
+ * @examplePrompt List all the beams in the project
770
+ * @examplePrompt How many beams are on the second storey?
771
+ * @examplePrompt Show the beams in this structure
772
+ * @examplePrompt Find every locked beam
773
+ *
774
+ * # Example
775
+ * ```ts
776
+ * const storey2Beams = await snaptrude.design.query.listBeams({ storeys: [2] })
777
+ * ```
778
+ */
779
+ abstract listBeams(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
780
+ /**
781
+ * List all the ceilings in the project, optionally filtered by storey,
782
+ * building, visibility, or region.
783
+ *
784
+ * @param filter - an optional {@linkcode PluginEntityFilter}
785
+ * @returns ceiling {@linkcode ComponentHandle}`[]`
786
+ *
787
+ * @examplePrompt List all the ceilings in the model
788
+ * @examplePrompt How many ceilings are on level 1?
789
+ * @examplePrompt Which ceilings are hidden?
790
+ * @examplePrompt Show the ceilings in building B
791
+ *
792
+ * # Example
793
+ * ```ts
794
+ * const hiddenCeilings = await snaptrude.design.query.listCeilings({ isHidden: true })
795
+ * ```
796
+ */
797
+ abstract listCeilings(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
798
+ /**
799
+ * List all the staircases in the project, optionally filtered by storey,
800
+ * building, selection state, or region.
801
+ *
802
+ * @param filter - an optional {@linkcode PluginEntityFilter}
803
+ * @returns staircase {@linkcode ComponentHandle}`[]`
804
+ *
805
+ * @examplePrompt How many staircases are in the building?
806
+ * @examplePrompt List all the stairs in the project
807
+ * @examplePrompt Show the staircases on the ground floor
808
+ * @examplePrompt Which stairs are currently selected?
809
+ *
810
+ * # Example
811
+ * ```ts
812
+ * const groundFloorStairs = await snaptrude.design.query.listStaircases({ storeys: [1] })
813
+ * ```
814
+ */
815
+ abstract listStaircases(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
816
+ /**
817
+ * List all the furniture in the project, optionally filtered by storey,
818
+ * building, label, selection state, or region.
819
+ *
820
+ * @param filter - an optional {@linkcode PluginEntityFilter}
821
+ * @returns furniture {@linkcode ComponentHandle}`[]`
822
+ *
823
+ * @examplePrompt List all the furniture in the project
824
+ * @examplePrompt How many furniture items are on this floor?
825
+ * @examplePrompt Show the furniture inside the selected room
826
+ * @examplePrompt Which furniture is on storey 2?
827
+ *
828
+ * # Example
829
+ * ```ts
830
+ * // Furniture whose plan footprint overlaps a room (`overlaps` is plan-only —
831
+ * // scope the storey too, or furniture stacked on other floors matches)
832
+ * const [kitchen] = await snaptrude.design.query.listSpaces({ label: "Kitchen" })
833
+ * if (kitchen) {
834
+ * const inKitchen = await snaptrude.design.query.listFurniture({
835
+ * overlaps: kitchen,
836
+ * storeys: [1],
837
+ * })
838
+ * }
839
+ * ```
840
+ */
841
+ abstract listFurniture(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
842
+ /**
843
+ * List all the reference lines in the project, optionally filtered by storey,
844
+ * building, or region.
845
+ *
846
+ * @param filter - an optional {@linkcode PluginEntityFilter}
847
+ * @returns reference-line {@linkcode ComponentHandle}`[]`
848
+ *
849
+ * @examplePrompt List all the reference lines in the model
850
+ * @examplePrompt Show the guide lines on the ground floor
851
+ * @examplePrompt How many reference lines are on this storey?
852
+ * @examplePrompt Find the setting-out lines in building A
853
+ *
854
+ * # Example
855
+ * ```ts
856
+ * const groundFloorRefLines = await snaptrude.design.query.listReferenceLines({ storeys: [1] })
857
+ * ```
858
+ */
859
+ abstract listReferenceLines(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
860
+ /**
861
+ * List all the curtain-wall mullions in the project, optionally filtered by
862
+ * storey, building, selection state, or region.
863
+ *
864
+ * @param filter - an optional {@linkcode PluginEntityFilter}
865
+ * @returns mullion {@linkcode ComponentHandle}`[]`
866
+ *
867
+ * @examplePrompt List all the mullions in the curtain wall
868
+ * @examplePrompt How many mullions are on the facade?
869
+ * @examplePrompt Show every curtain wall mullion on level 5
870
+ * @examplePrompt Which mullions are currently selected?
871
+ *
872
+ * # Example
873
+ * ```ts
874
+ * const level5Mullions = await snaptrude.design.query.listMullions({ storeys: [5] })
875
+ * ```
876
+ */
877
+ abstract listMullions(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
878
+ /**
879
+ * List all the structural grids (grid groups) in the project, optionally
880
+ * filtered by storey, building, selection state, or region.
881
+ *
882
+ * @param filter - an optional {@linkcode PluginEntityFilter}
883
+ * @returns grid-group {@linkcode ComponentHandle}`[]`
884
+ *
885
+ * @examplePrompt List all the structural grids in the model
886
+ * @examplePrompt How many grids are on the ground floor?
887
+ * @examplePrompt Show the grids on this storey
888
+ * @examplePrompt Which grids are currently selected?
889
+ *
890
+ * # Example
891
+ * ```ts
892
+ * const groundFloorGrids = await snaptrude.design.query.listGrids({ storeys: [1] })
893
+ * ```
894
+ */
895
+ abstract listGrids(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
896
+ /**
897
+ * Look an entity up by id — returns the same handle if it still resolves live,
898
+ * else `null`. A cheap validity probe (distinct from {@linkcode PluginDesignQueryApi.exists}).
899
+ *
900
+ * @param id - the entity id ({@linkcode ComponentHandle}) to look up
901
+ * @returns the {@linkcode ComponentHandle}, or `null` if it no longer resolves
902
+ *
903
+ * @examplePrompt Look up an object by its id
904
+ * @examplePrompt Does id cmp_42 still point to something in the model?
905
+ * @examplePrompt Fetch the element with this id
906
+ * @examplePrompt Check if this saved element id is still valid
907
+ *
908
+ * # Example
909
+ * ```ts
910
+ * // Persistence round-trip: save a ref now, revalidate it in a later run
911
+ * const [wall] = await snaptrude.design.query.listWalls()
912
+ * const savedRef = await snaptrude.design.query.getEntityRef(wall)
913
+ *
914
+ * // ...later (savedRef restored from plugin storage)...
915
+ * const stillThere = await snaptrude.design.query.getById(savedRef)
916
+ * if (stillThere) {
917
+ * const props = await snaptrude.design.query.getProperties(stillThere)
918
+ * }
919
+ * ```
920
+ */
921
+ abstract getById(id: ComponentHandle): PluginApiReturn<ComponentHandle | null>;
922
+ /**
923
+ * Test whether an entity id resolves to a live scene entity.
924
+ * @param id - the entity id ({@linkcode ComponentHandle}) to look up
925
+ * @returns `true` if it exists, otherwise `false`
926
+ *
927
+ * @examplePrompt Does this element still exist in the scene?
928
+ * @examplePrompt Check whether the wall I stored earlier is still there
929
+ * @examplePrompt Is id cmp_42 still valid?
930
+ * @examplePrompt Verify the object wasn't deleted
931
+ *
932
+ * # Example
933
+ * ```ts
934
+ * // Guard before acting on a handle that may have been deleted or undone
935
+ * if (await snaptrude.design.query.exists(wall)) {
936
+ * const dx = await snaptrude.core.math.vec3.new(5, 0, 0)
937
+ * await snaptrude.design.transform.move([wall], dx)
938
+ * }
939
+ * ```
940
+ */
941
+ abstract exists(id: ComponentHandle): PluginApiReturn<boolean>;
942
+ /**
943
+ * Get the kind of BIM entity a handle refers to — wall, door, space, slab,
944
+ * and so on (its {@linkcode PluginEntityType}).
945
+ * @param component - the entity's {@linkcode ComponentHandle}
946
+ * @returns the kind, or `null` if the entity is gone / its type is unknown
947
+ *
948
+ * @examplePrompt What kind of element is this?
949
+ * @examplePrompt Is the selected object a wall or a mass?
950
+ * @examplePrompt Tell me the type of this component
951
+ * @examplePrompt What am I looking at — a door, a window, or a panel?
952
+ *
953
+ * # Example
954
+ * ```ts
955
+ * // Dispatch on what the user selected
956
+ * const selection = await snaptrude.design.selection.get()
957
+ * for (const component of selection) {
958
+ * const kind = await snaptrude.design.query.getEntityType(component)
959
+ * if (kind === "wall") {
960
+ * // wall-specific handling
961
+ * } else if (kind === "space") {
962
+ * // room-specific handling
963
+ * }
964
+ * }
965
+ * ```
966
+ */
967
+ abstract getEntityType(component: ComponentHandle): PluginApiReturn<PluginEntityType | null>;
968
+ /**
969
+ * Get an entity's human label (`room_type` for spaces/masses, else the mesh
970
+ * label; `""` when unlabelled). The write side is `design.update` (`setLabel`).
971
+ * @param component - the entity's {@linkcode ComponentHandle}
972
+ * @returns the label string
973
+ *
974
+ * @examplePrompt What is this room called?
975
+ * @examplePrompt Get the name of the selected object
976
+ * @examplePrompt Show the label on this wall
977
+ * @examplePrompt What's the room type of this space?
978
+ *
979
+ * # Example
980
+ * ```ts
981
+ * // Fuzzy label search (the `label` filter field is exact-match; for
982
+ * // case-insensitive or partial matches, read labels and compare yourself)
983
+ * const spaces = await snaptrude.design.query.listSpaces()
984
+ * const kitchens: typeof spaces = []
985
+ * for (const space of spaces) {
986
+ * const label = await snaptrude.design.query.getLabel(space)
987
+ * if (label.toLowerCase().includes("kitchen")) kitchens.push(space)
988
+ * }
989
+ * ```
990
+ */
991
+ abstract getLabel(component: ComponentHandle): PluginApiReturn<string>;
992
+ /**
993
+ * Get a serializable, persistable reference to an entity. Under the all-handle
994
+ * model a {@linkcode ComponentHandle} already IS the ref (raw `Component.id`),
995
+ * so this is the identity passthrough — provided for API completeness.
996
+ * @param component - the entity's {@linkcode ComponentHandle}
997
+ * @returns the entity's {@linkcode ComponentHandle}
998
+ *
999
+ * @examplePrompt Give me a reference I can save for this element
1000
+ * @examplePrompt Get a persistent id for the selected wall
1001
+ * @examplePrompt Store a handle to this room so I can find it later
1002
+ *
1003
+ * # Example
1004
+ * ```ts
1005
+ * const [wall] = await snaptrude.design.query.listWalls()
1006
+ * const savedRef = await snaptrude.design.query.getEntityRef(wall)
1007
+ * // savedRef is a plain string — persist it, then revalidate in a later run
1008
+ * // with snaptrude.design.query.getById(savedRef)
1009
+ * ```
1010
+ */
1011
+ abstract getEntityRef(component: ComponentHandle): PluginApiReturn<ComponentHandle>;
1012
+ /**
1013
+ * List an entity's direct child entities — for example the doors and windows
1014
+ * hosted in a wall.
1015
+ * @param component - the entity's {@linkcode ComponentHandle}
1016
+ * @returns child {@linkcode ComponentHandle}`[]` (`[]` if none)
1017
+ *
1018
+ * @examplePrompt What's inside this wall — list its doors and windows
1019
+ * @examplePrompt Show the child elements of the selected object
1020
+ * @examplePrompt Which openings belong to this wall?
1021
+ * @examplePrompt List everything nested under this mass
1022
+ *
1023
+ * # Example
1024
+ * ```ts
1025
+ * // Count the openings hosted in a wall, split by kind
1026
+ * const children = await snaptrude.design.query.listChildren(wall)
1027
+ * let doors = 0
1028
+ * let windows = 0
1029
+ * for (const child of children) {
1030
+ * const kind = await snaptrude.design.query.getEntityType(child)
1031
+ * if (kind === "door") doors++
1032
+ * if (kind === "window") windows++
1033
+ * }
1034
+ * ```
1035
+ */
1036
+ abstract listChildren(component: ComponentHandle): PluginApiReturn<ComponentHandle[]>;
1037
+ /**
1038
+ * Get an entity's host/parent entity (e.g. the wall a door is cut into).
1039
+ * @param component - the entity's {@linkcode ComponentHandle}
1040
+ * @returns the host {@linkcode ComponentHandle}, or `null` if top-level
1041
+ *
1042
+ * @examplePrompt Which wall is this door in?
1043
+ * @examplePrompt Find the parent of the selected window
1044
+ * @examplePrompt What is this element attached to?
1045
+ * @examplePrompt Which wall hosts this window?
1046
+ *
1047
+ * # Example
1048
+ * ```ts
1049
+ * // From a door up to its host wall, then measure the wall
1050
+ * const [door] = await snaptrude.design.query.listDoors({ isSelected: true })
1051
+ * const hostWall = door ? await snaptrude.design.query.getHost(door) : null
1052
+ * if (hostWall) {
1053
+ * const m = await snaptrude.design.query.measure(hostWall)
1054
+ * console.log("wall length:", m?.length)
1055
+ * }
1056
+ * ```
1057
+ */
1058
+ abstract getHost(component: ComponentHandle): PluginApiReturn<ComponentHandle | null>;
1059
+ /**
1060
+ * Read an entity's common properties as a {@linkcode PluginEntityProperties}
1061
+ * record (only applicable fields are present). For spaces/masses this includes
1062
+ * `adjacency` — the per-entity adjacency read (bulk form:
1063
+ * `program.adjacency.getMatrix`). For walls and the slab family (slab / floor
1064
+ * / roof / ceiling) this includes `buildingType` — the assigned building type
1065
+ * NAME the panel's type dropdown shows, matching `design.types.list(kind)`.
1066
+ *
1067
+ * @param component - the entity's {@linkcode ComponentHandle}
1068
+ * @returns the property record
1069
+ *
1070
+ * @examplePrompt Show me all the details of the selected object
1071
+ * @examplePrompt What storey is this wall on?
1072
+ * @examplePrompt Which wall type is assigned to this wall?
1073
+ * @examplePrompt Which department does this room belong to?
1074
+ * @examplePrompt Is this element locked or hidden?
1075
+ * @examplePrompt Get the adjacencies of this space
1076
+ *
1077
+ * # Example
1078
+ * ```ts
1079
+ * const [wall] = await snaptrude.design.query.listWalls()
1080
+ * const props = await snaptrude.design.query.getProperties(wall)
1081
+ * console.log(props.type, props.storey, props.boundingBox)
1082
+ *
1083
+ * // The record is partial — type-specific fields exist only where they apply
1084
+ * const [room] = await snaptrude.design.query.listSpaces()
1085
+ * const p = await snaptrude.design.query.getProperties(room)
1086
+ * if (p.spaceType === "Room" && p.areaClass === "NET") {
1087
+ * for (const adj of p.adjacency ?? []) {
1088
+ * // adj.value: 2 = direct, 1 = indirect/contact, -1 = restricted
1089
+ * console.log(adj.spaceId, adj.value)
1090
+ * }
1091
+ * }
1092
+ * ```
1093
+ */
1094
+ abstract getProperties(component: ComponentHandle): PluginApiReturn<PluginEntityProperties>;
1095
+ /**
1096
+ * Measure an entity — read its area, volume, and/or running length (whichever
1097
+ * its type supports) together with its world-space bounding box in one call.
1098
+ *
1099
+ * For walls and the slab family this also carries the Object Properties
1100
+ * panel's dimension reads in engine units: `thickness` (walls — straight
1101
+ * orthogonal only, exactly when the panel shows it; slabs / floors / roofs /
1102
+ * ceilings — the vertical extent the panel calls Thickness) and `height`
1103
+ * (walls). These are the read side of `design.update.wall` /
1104
+ * `design.update.slab` / `.floor` / `.roof` / `.ceiling`.
1105
+ *
1106
+ * @param component - the entity's {@linkcode ComponentHandle}
1107
+ * @returns a {@linkcode PluginEntityMeasurements}, or `null` if the entity is gone
1108
+ *
1109
+ * @examplePrompt What's the area of this room?
1110
+ * @examplePrompt How long is the selected wall?
1111
+ * @examplePrompt How thick is this wall?
1112
+ * @examplePrompt Get the thickness of the slab on level 2
1113
+ * @examplePrompt Get the volume of this mass
1114
+ * @examplePrompt Give me the dimensions of the selected element
1115
+ * @examplePrompt What's the floor area of the kitchen?
1116
+ *
1117
+ * # Example
1118
+ * ```ts
1119
+ * const [space] = await snaptrude.design.query.listSpaces()
1120
+ * const m = await snaptrude.design.query.measure(space)
1121
+ * console.log(m?.area, m?.volume)
1122
+ *
1123
+ * // wall dimensions — the panel's Thickness / Height, in engine units
1124
+ * const [wall] = await snaptrude.design.query.listWalls()
1125
+ * const wm = await snaptrude.design.query.measure(wall)
1126
+ * console.log(wm?.thickness, wm?.height)
1127
+ * ```
1128
+ */
1129
+ abstract measure(component: ComponentHandle): PluginApiReturn<PluginEntityMeasurements | null>;
1130
+ /**
1131
+ * Read a staircase's parametric properties — its preset, dimensions, step
1132
+ * count, base offset, and height-lock state — as a
1133
+ * {@linkcode PluginStaircaseParams} record. The paired write is
1134
+ * `design.update.staircase`.
1135
+ *
1136
+ * All dimensions are in **engine units** (the same convention as
1137
+ * `design.doors.getWidth`); `steps` is a unitless count. A read — never
1138
+ * throws: returns `null` for a handle that is not a staircase or no longer
1139
+ * resolves.
1140
+ *
1141
+ * @param staircase - the staircase's {@linkcode ComponentHandle}
1142
+ * @returns the {@linkcode PluginStaircaseParams} record, or `null`
1143
+ *
1144
+ * @examplePrompt What's the riser height of this staircase?
1145
+ * @examplePrompt How many steps does the selected stair have?
1146
+ * @examplePrompt Show me the tread and width of this staircase
1147
+ * @examplePrompt Read all the parameters of the stairs on level 1
1148
+ *
1149
+ * # Example
1150
+ * ```ts
1151
+ * const [stair] = await snaptrude.design.query.listStaircases({ isSelected: true })
1152
+ * const params = stair ? await snaptrude.design.query.getStaircaseParams(stair) : null
1153
+ * if (params) console.log(params.steps, params.riser, params.tread)
1154
+ * ```
1155
+ */
1156
+ abstract getStaircaseParams(staircase: ComponentHandle): PluginApiReturn<PluginStaircaseParams | null>;
1157
+ /**
1158
+ * Get the **union** axis-aligned bounding box enclosing a set of entities.
1159
+ *
1160
+ * @param components - the set of entity {@linkcode ComponentHandle}s
1161
+ * @returns the union {@linkcode BBoxComponents}, or `null` if the set is empty /
1162
+ * none resolve
1163
+ *
1164
+ * @examplePrompt Get the bounding box around the selected objects
1165
+ * @examplePrompt What is the overall extent of these walls?
1166
+ * @examplePrompt How big is the region these elements cover together?
1167
+ * @examplePrompt Find the combined extents of everything on level 2
1168
+ *
1169
+ * # Example
1170
+ * ```ts
1171
+ * const walls = await snaptrude.design.query.listWalls()
1172
+ * const box = await snaptrude.design.query.getBoundingBox(walls)
1173
+ *
1174
+ * // Compose with the `within` filter: everything in the selection's extents
1175
+ * const selection = await snaptrude.design.selection.get()
1176
+ * const extents = await snaptrude.design.query.getBoundingBox(selection)
1177
+ * if (extents) {
1178
+ * const nearby = await snaptrude.design.query.listEntities({ within: extents })
1179
+ * const width = extents.max.x - extents.min.x
1180
+ * }
1181
+ * ```
1182
+ */
1183
+ abstract getBoundingBox(components: ComponentHandle[]): PluginApiReturn<BBoxComponents | null>;
1184
+ /**
1185
+ * Compute the plan **outline of what is built on a storey** — the union of
1186
+ * the storey's wall (by default) footprints as polygons-with-holes. This is
1187
+ * the footprint-from-the-built-model query: by the time slabs are needed the
1188
+ * walls exist, and the engine's own solids (snapped, joined and mitred at
1189
+ * creation) are the cleanest wall network available — no CAD re-tracing.
1190
+ *
1191
+ * Semantics: the union of wall solids is the wall *material* — a ring-shaped
1192
+ * polygon. The **outer ring is the OUTSIDE wall face** (the slab boundary);
1193
+ * every enclosed region — rooms AND courtyards — appears as a hole. When the
1194
+ * largest hole is ~zero the walls don't enclose anything: the footprint
1195
+ * reports `enclosed: false` (an open wall network), never a garbage outline.
1196
+ * Detached buildings come back as separate footprints.
1197
+ *
1198
+ * A read — nothing is created. Feed a footprint's `outline` to
1199
+ * `core.geom.create.profileFromLinePoints` → `design.create.slab` to build
1200
+ * the floor/roof plate. Coordinates are world-space plan (x, z) in Snaptrude
1201
+ * internal units; `areaSq` values are in squared internal units.
1202
+ *
1203
+ * @param options - storey / included kinds / debris filter; see
1204
+ * {@linkcode PluginStoreyOutlineOptions}.
1205
+ * @returns the storey's footprints (possibly several for detached buildings)
1206
+ * plus pieces discarded by `minArea` (`footprints: []` when nothing matches).
1207
+ *
1208
+ * @examplePrompt What is the building footprint on the ground floor?
1209
+ * @examplePrompt Create a floor slab covering the whole storey
1210
+ * @examplePrompt Get the outline of the walls on storey 1
1211
+ * @examplePrompt How much area do the ground-floor walls enclose?
1212
+ *
1213
+ * # Example
1214
+ * ```ts
1215
+ * const r = await snaptrude.design.query.storeyOutline({ storey: 1 })
1216
+ * const main = r.footprints.find((f) => f.enclosed)
1217
+ * if (main) {
1218
+ * const profile = await snaptrude.core.geom.create.profileFromLinePoints(
1219
+ * main.outline.map((p) => ({ x: p.x, y: 0, z: p.z })),
1220
+ * )
1221
+ * // → design.create.slab with the profile's contour
1222
+ * }
1223
+ * ```
1224
+ */
1225
+ abstract storeyOutline(options?: PluginStoreyOutlineOptions): PluginApiReturn<PluginStoreyOutlineResult>;
1226
+ }
1227
+ /** A point in the world-space plan (x, z) projection, Snaptrude internal units. */
1228
+ export declare const PluginOutlinePlanPoint: z.ZodObject<{
1229
+ x: z.ZodNumber;
1230
+ z: z.ZodNumber;
1231
+ }, z.core.$strip>;
1232
+ export type PluginOutlinePlanPoint = z.infer<typeof PluginOutlinePlanPoint>;
1233
+ /**
1234
+ * Options for {@link PluginDesignQueryApi.storeyOutline}.
1235
+ *
1236
+ * | Property | Type | Description |
1237
+ * |---|---|---|
1238
+ * | `storey` | `number`? | Only components on this storey (default: all storeys) |
1239
+ * | `include` | {@link PluginEntityType}`[]`? | Component kinds to union (default `["wall"]`) |
1240
+ * | `minArea` | `number`? | Drop union pieces below this plan area, squared internal units (default `1`) |
1241
+ */
1242
+ export declare const PluginStoreyOutlineOptions: z.ZodObject<{
1243
+ storey: z.ZodOptional<z.ZodNumber>;
1244
+ include: z.ZodDefault<z.ZodArray<z.ZodEnum<{
1245
+ mass: "mass";
1246
+ floor: "floor";
1247
+ wall: "wall";
1248
+ ceiling: "ceiling";
1249
+ door: "door";
1250
+ window: "window";
1251
+ furniture: "furniture";
1252
+ space: "space";
1253
+ slab: "slab";
1254
+ roof: "roof";
1255
+ column: "column";
1256
+ beam: "beam";
1257
+ staircase: "staircase";
1258
+ referenceLine: "referenceLine";
1259
+ curtainWall: "curtainWall";
1260
+ mullion: "mullion";
1261
+ panel: "panel";
1262
+ parametricComponent: "parametricComponent";
1263
+ grid: "grid";
1264
+ }>>>;
1265
+ minArea: z.ZodDefault<z.ZodNumber>;
1266
+ }, z.core.$strip>;
1267
+ export type PluginStoreyOutlineOptions = z.input<typeof PluginStoreyOutlineOptions>;
1268
+ /**
1269
+ * One connected footprint from {@link PluginDesignQueryApi.storeyOutline}.
1270
+ * `outline` traces the OUTSIDE wall face; `holes` are the enclosed regions
1271
+ * (rooms and courtyards). `enclosed` is `false` when the wall network does not
1272
+ * close around any region (open C-shape) — don't slab an unenclosed outline
1273
+ * without checking it.
1274
+ */
1275
+ export declare const PluginStoreyFootprint: z.ZodObject<{
1276
+ outline: z.ZodArray<z.ZodObject<{
1277
+ x: z.ZodNumber;
1278
+ z: z.ZodNumber;
1279
+ }, z.core.$strip>>;
1280
+ holes: z.ZodArray<z.ZodObject<{
1281
+ ring: z.ZodArray<z.ZodObject<{
1282
+ x: z.ZodNumber;
1283
+ z: z.ZodNumber;
1284
+ }, z.core.$strip>>;
1285
+ areaSq: z.ZodNumber;
1286
+ }, z.core.$strip>>;
1287
+ areaSq: z.ZodNumber;
1288
+ enclosed: z.ZodBoolean;
1289
+ }, z.core.$strip>;
1290
+ export type PluginStoreyFootprint = z.infer<typeof PluginStoreyFootprint>;
1291
+ /** Result of {@link PluginDesignQueryApi.storeyOutline}. */
1292
+ export declare const PluginStoreyOutlineResult: z.ZodObject<{
1293
+ footprints: z.ZodArray<z.ZodObject<{
1294
+ outline: z.ZodArray<z.ZodObject<{
1295
+ x: z.ZodNumber;
1296
+ z: z.ZodNumber;
1297
+ }, z.core.$strip>>;
1298
+ holes: z.ZodArray<z.ZodObject<{
1299
+ ring: z.ZodArray<z.ZodObject<{
1300
+ x: z.ZodNumber;
1301
+ z: z.ZodNumber;
1302
+ }, z.core.$strip>>;
1303
+ areaSq: z.ZodNumber;
1304
+ }, z.core.$strip>>;
1305
+ areaSq: z.ZodNumber;
1306
+ enclosed: z.ZodBoolean;
1307
+ }, z.core.$strip>>;
1308
+ discarded: z.ZodArray<z.ZodObject<{
1309
+ areaSq: z.ZodNumber;
1310
+ reason: z.ZodString;
1311
+ }, z.core.$strip>>;
1312
+ }, z.core.$strip>;
1313
+ export type PluginStoreyOutlineResult = z.infer<typeof PluginStoreyOutlineResult>;
1314
+ export * from "./geometry";
1315
+ export * from "./spaces";
1316
+ export * from "./referenceLines";
1317
+ export * from "./grids";
1318
+ //# sourceMappingURL=index.d.ts.map