@snaptrude/plugin-core 0.3.0 → 0.6.0

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 (302) hide show
  1. package/AGENTS.md +130 -48
  2. package/CHANGELOG.md +163 -0
  3. package/api-manifest.full.json +5600 -0
  4. package/api-manifest.json +5502 -0
  5. package/dist/api/analysis/heatmaps.d.ts +234 -0
  6. package/dist/api/analysis/heatmaps.d.ts.map +1 -0
  7. package/dist/api/analysis/illuminance.d.ts +145 -0
  8. package/dist/api/analysis/illuminance.d.ts.map +1 -0
  9. package/dist/api/analysis/index.d.ts +44 -0
  10. package/dist/api/analysis/index.d.ts.map +1 -0
  11. package/dist/api/analysis/shadows.d.ts +165 -0
  12. package/dist/api/analysis/shadows.d.ts.map +1 -0
  13. package/dist/api/analysis/sunlightHours.d.ts +208 -0
  14. package/dist/api/analysis/sunlightHours.d.ts.map +1 -0
  15. package/dist/api/analysis/sunpath.d.ts +80 -0
  16. package/dist/api/analysis/sunpath.d.ts.map +1 -0
  17. package/dist/api/core/buildings.d.ts +427 -0
  18. package/dist/api/core/buildings.d.ts.map +1 -0
  19. package/dist/api/core/comment/index.d.ts +230 -0
  20. package/dist/api/core/comment/index.d.ts.map +1 -0
  21. package/dist/api/core/geom/create/index.d.ts +247 -0
  22. package/dist/api/core/geom/create/index.d.ts.map +1 -0
  23. package/dist/api/core/geom/delete/index.d.ts +72 -0
  24. package/dist/api/core/geom/delete/index.d.ts.map +1 -0
  25. package/dist/api/core/geom/index.d.ts +24 -23
  26. package/dist/api/core/geom/index.d.ts.map +1 -1
  27. package/dist/api/core/geom/query/arc.d.ts +169 -0
  28. package/dist/api/core/geom/query/arc.d.ts.map +1 -0
  29. package/dist/api/core/geom/query/brep.d.ts +402 -0
  30. package/dist/api/core/geom/query/brep.d.ts.map +1 -0
  31. package/dist/api/core/geom/query/circle.d.ts +378 -0
  32. package/dist/api/core/geom/query/circle.d.ts.map +1 -0
  33. package/dist/api/core/geom/query/contour.d.ts +450 -0
  34. package/dist/api/core/geom/query/contour.d.ts.map +1 -0
  35. package/dist/api/core/geom/query/curve.d.ts +918 -0
  36. package/dist/api/core/geom/query/curve.d.ts.map +1 -0
  37. package/dist/api/core/geom/query/edge.d.ts +128 -0
  38. package/dist/api/core/geom/query/edge.d.ts.map +1 -0
  39. package/dist/api/core/geom/query/face.d.ts +363 -0
  40. package/dist/api/core/geom/query/face.d.ts.map +1 -0
  41. package/dist/api/core/geom/query/halfedge.d.ts +206 -0
  42. package/dist/api/core/geom/query/halfedge.d.ts.map +1 -0
  43. package/dist/api/core/geom/query/index.d.ts +61 -0
  44. package/dist/api/core/geom/query/index.d.ts.map +1 -0
  45. package/dist/api/core/geom/query/profile.d.ts +410 -0
  46. package/dist/api/core/geom/query/profile.d.ts.map +1 -0
  47. package/dist/api/core/geom/query/vertex.d.ts +187 -0
  48. package/dist/api/core/geom/query/vertex.d.ts.map +1 -0
  49. package/dist/api/core/geom/update/contour.d.ts +272 -0
  50. package/dist/api/core/geom/update/contour.d.ts.map +1 -0
  51. package/dist/api/core/geom/update/curve.d.ts +180 -0
  52. package/dist/api/core/geom/update/curve.d.ts.map +1 -0
  53. package/dist/api/core/geom/update/index.d.ts +27 -0
  54. package/dist/api/core/geom/update/index.d.ts.map +1 -0
  55. package/dist/api/core/geom/update/profile.d.ts +329 -0
  56. package/dist/api/core/geom/update/profile.d.ts.map +1 -0
  57. package/dist/api/core/groups.d.ts +485 -0
  58. package/dist/api/core/groups.d.ts.map +1 -0
  59. package/dist/api/core/history/index.d.ts +78 -0
  60. package/dist/api/core/history/index.d.ts.map +1 -0
  61. package/dist/api/core/index.d.ts +51 -1
  62. package/dist/api/core/index.d.ts.map +1 -1
  63. package/dist/api/core/io/import/index.d.ts +392 -0
  64. package/dist/api/core/io/import/index.d.ts.map +1 -0
  65. package/dist/api/core/io/index.d.ts +35 -0
  66. package/dist/api/core/io/index.d.ts.map +1 -0
  67. package/dist/api/core/io/job/index.d.ts +139 -0
  68. package/dist/api/core/io/job/index.d.ts.map +1 -0
  69. package/dist/api/core/io/query/index.d.ts +74 -0
  70. package/dist/api/core/io/query/index.d.ts.map +1 -0
  71. package/dist/api/core/io/terrain/index.d.ts +206 -0
  72. package/dist/api/core/io/terrain/index.d.ts.map +1 -0
  73. package/dist/api/core/io/underlay/index.d.ts +286 -0
  74. package/dist/api/core/io/underlay/index.d.ts.map +1 -0
  75. package/dist/api/core/layers.d.ts +402 -0
  76. package/dist/api/core/layers.d.ts.map +1 -0
  77. package/dist/api/core/math/quat.d.ts +111 -128
  78. package/dist/api/core/math/quat.d.ts.map +1 -1
  79. package/dist/api/core/math/vec3.d.ts +120 -102
  80. package/dist/api/core/math/vec3.d.ts.map +1 -1
  81. package/dist/api/core/project/index.d.ts +399 -0
  82. package/dist/api/core/project/index.d.ts.map +1 -0
  83. package/dist/api/core/tags.d.ts +755 -0
  84. package/dist/api/core/tags.d.ts.map +1 -0
  85. package/dist/api/core/units/index.d.ts +175 -0
  86. package/dist/api/core/units/index.d.ts.map +1 -0
  87. package/dist/api/core/zoom/index.d.ts +45 -0
  88. package/dist/api/core/zoom/index.d.ts.map +1 -0
  89. package/dist/api/design/boolean/index.d.ts +168 -0
  90. package/dist/api/design/boolean/index.d.ts.map +1 -0
  91. package/dist/api/design/create/index.d.ts +837 -0
  92. package/dist/api/design/create/index.d.ts.map +1 -0
  93. package/dist/api/design/delete/index.d.ts +63 -0
  94. package/dist/api/design/delete/index.d.ts.map +1 -0
  95. package/dist/api/design/doors/index.d.ts +268 -0
  96. package/dist/api/design/doors/index.d.ts.map +1 -0
  97. package/dist/api/design/edit/index.d.ts +49 -0
  98. package/dist/api/design/edit/index.d.ts.map +1 -0
  99. package/dist/api/design/erase/index.d.ts +160 -0
  100. package/dist/api/design/erase/index.d.ts.map +1 -0
  101. package/dist/api/design/furniture/index.d.ts +123 -0
  102. package/dist/api/design/furniture/index.d.ts.map +1 -0
  103. package/dist/api/design/index.d.ts +153 -0
  104. package/dist/api/design/index.d.ts.map +1 -0
  105. package/dist/api/design/lock.d.ts +41 -0
  106. package/dist/api/design/lock.d.ts.map +1 -0
  107. package/dist/api/design/materials/index.d.ts +297 -0
  108. package/dist/api/design/materials/index.d.ts.map +1 -0
  109. package/dist/api/design/query/geometry/index.d.ts +140 -0
  110. package/dist/api/design/query/geometry/index.d.ts.map +1 -0
  111. package/dist/api/design/query/index.d.ts +1011 -0
  112. package/dist/api/design/query/index.d.ts.map +1 -0
  113. package/dist/api/design/query/spaces.d.ts +221 -0
  114. package/dist/api/design/query/spaces.d.ts.map +1 -0
  115. package/dist/api/design/selection/index.d.ts +282 -0
  116. package/dist/api/design/selection/index.d.ts.map +1 -0
  117. package/dist/api/design/shared.d.ts +38 -0
  118. package/dist/api/design/shared.d.ts.map +1 -0
  119. package/dist/api/design/transform/index.d.ts +87 -0
  120. package/dist/api/design/transform/index.d.ts.map +1 -0
  121. package/dist/api/design/update/index.d.ts +178 -0
  122. package/dist/api/design/update/index.d.ts.map +1 -0
  123. package/dist/api/design/windows/index.d.ts +189 -0
  124. package/dist/api/design/windows/index.d.ts.map +1 -0
  125. package/dist/api/entity/buildableEnvelope.d.ts +261 -0
  126. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -0
  127. package/dist/api/entity/department.d.ts +0 -98
  128. package/dist/api/entity/department.d.ts.map +1 -1
  129. package/dist/api/entity/index.d.ts +9 -9
  130. package/dist/api/entity/index.d.ts.map +1 -1
  131. package/dist/api/entity/referenceLine.d.ts +49 -106
  132. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  133. package/dist/api/entity/space.d.ts +484 -251
  134. package/dist/api/entity/space.d.ts.map +1 -1
  135. package/dist/api/entity/story.d.ts +49 -39
  136. package/dist/api/entity/story.d.ts.map +1 -1
  137. package/dist/api/index.d.ts +22 -12
  138. package/dist/api/index.d.ts.map +1 -1
  139. package/dist/api/presentation/aiInspiration.d.ts +440 -0
  140. package/dist/api/presentation/aiInspiration.d.ts.map +1 -0
  141. package/dist/api/presentation/diagrams.d.ts +81 -0
  142. package/dist/api/presentation/diagrams.d.ts.map +1 -0
  143. package/dist/api/presentation/import.d.ts +113 -0
  144. package/dist/api/presentation/import.d.ts.map +1 -0
  145. package/dist/api/presentation/index.d.ts +46 -0
  146. package/dist/api/presentation/index.d.ts.map +1 -0
  147. package/dist/api/presentation/sheets.d.ts +176 -0
  148. package/dist/api/presentation/sheets.d.ts.map +1 -0
  149. package/dist/api/presentation/views.d.ts +296 -0
  150. package/dist/api/presentation/views.d.ts.map +1 -0
  151. package/dist/api/program/adjacency.d.ts +155 -0
  152. package/dist/api/program/adjacency.d.ts.map +1 -0
  153. package/dist/api/program/areas.d.ts +360 -0
  154. package/dist/api/program/areas.d.ts.map +1 -0
  155. package/dist/api/program/classification.d.ts +135 -0
  156. package/dist/api/program/classification.d.ts.map +1 -0
  157. package/dist/api/program/cores.d.ts +174 -0
  158. package/dist/api/program/cores.d.ts.map +1 -0
  159. package/dist/api/program/departments.d.ts +431 -0
  160. package/dist/api/program/departments.d.ts.map +1 -0
  161. package/dist/api/program/index.d.ts +69 -0
  162. package/dist/api/program/index.d.ts.map +1 -0
  163. package/dist/api/program/layout.d.ts +63 -0
  164. package/dist/api/program/layout.d.ts.map +1 -0
  165. package/dist/api/program/metrics.d.ts +108 -0
  166. package/dist/api/program/metrics.d.ts.map +1 -0
  167. package/dist/api/program/site.d.ts +451 -0
  168. package/dist/api/program/site.d.ts.map +1 -0
  169. package/dist/api/program/spreadsheet.d.ts +2041 -0
  170. package/dist/api/program/spreadsheet.d.ts.map +1 -0
  171. package/dist/handles.d.ts +171 -0
  172. package/dist/handles.d.ts.map +1 -0
  173. package/dist/host-utils.d.ts +7 -5
  174. package/dist/host-utils.d.ts.map +1 -1
  175. package/dist/index.cjs +4344 -899
  176. package/dist/index.cjs.map +1 -1
  177. package/dist/index.d.ts +1 -0
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +3682 -865
  180. package/dist/index.js.map +1 -1
  181. package/package.json +6 -2
  182. package/scripts/generate-manifest.mjs +193 -0
  183. package/scripts/generate-manifest.test.mjs +215 -0
  184. package/src/api/analysis/heatmaps.ts +256 -0
  185. package/src/api/analysis/illuminance.ts +155 -0
  186. package/src/api/analysis/index.ts +46 -0
  187. package/src/api/analysis/shadows.ts +183 -0
  188. package/src/api/analysis/sunlightHours.ts +211 -0
  189. package/src/api/analysis/sunpath.ts +83 -0
  190. package/src/api/core/buildings.ts +485 -0
  191. package/src/api/core/comment/index.ts +258 -0
  192. package/src/api/core/geom/create/index.ts +293 -0
  193. package/src/api/core/geom/delete/index.ts +78 -0
  194. package/src/api/core/geom/index.ts +24 -23
  195. package/src/api/core/geom/query/arc.ts +169 -0
  196. package/src/api/core/geom/query/brep.ts +444 -0
  197. package/src/api/core/geom/query/circle.ts +404 -0
  198. package/src/api/core/geom/query/contour.ts +540 -0
  199. package/src/api/core/geom/query/curve.ts +1078 -0
  200. package/src/api/core/geom/query/edge.ts +130 -0
  201. package/src/api/core/geom/query/face.ts +403 -0
  202. package/src/api/core/geom/query/halfedge.ts +210 -0
  203. package/src/api/core/geom/query/index.ts +63 -0
  204. package/src/api/core/geom/query/profile.ts +473 -0
  205. package/src/api/core/geom/query/vertex.ts +205 -0
  206. package/src/api/core/geom/update/contour.ts +315 -0
  207. package/src/api/core/geom/update/curve.ts +209 -0
  208. package/src/api/core/geom/update/index.ts +29 -0
  209. package/src/api/core/geom/update/profile.ts +377 -0
  210. package/src/api/core/groups.ts +521 -0
  211. package/src/api/core/history/index.ts +84 -0
  212. package/src/api/core/index.ts +51 -1
  213. package/src/api/core/io/import/index.ts +432 -0
  214. package/src/api/core/io/index.ts +37 -0
  215. package/src/api/core/io/job/index.ts +140 -0
  216. package/src/api/core/io/query/index.ts +71 -0
  217. package/src/api/core/io/terrain/index.ts +214 -0
  218. package/src/api/core/io/underlay/index.ts +295 -0
  219. package/src/api/core/layers.ts +333 -0
  220. package/src/api/core/math/quat.ts +112 -235
  221. package/src/api/core/math/vec3.ts +124 -159
  222. package/src/api/core/project/index.ts +418 -0
  223. package/src/api/core/tags.ts +808 -0
  224. package/src/api/core/units/index.ts +164 -0
  225. package/src/api/core/zoom/index.ts +47 -0
  226. package/src/api/design/boolean/index.ts +179 -0
  227. package/src/api/design/create/index.ts +895 -0
  228. package/src/api/design/delete/index.ts +67 -0
  229. package/src/api/design/doors/index.ts +285 -0
  230. package/src/api/design/edit/index.ts +54 -0
  231. package/src/api/design/erase/index.ts +151 -0
  232. package/src/api/design/furniture/index.ts +130 -0
  233. package/src/api/design/index.ts +162 -0
  234. package/src/api/design/lock.ts +42 -0
  235. package/src/api/design/materials/index.ts +301 -0
  236. package/src/api/design/query/geometry/index.ts +166 -0
  237. package/src/api/design/query/index.ts +937 -0
  238. package/src/api/design/query/spaces.ts +132 -0
  239. package/src/api/design/selection/index.ts +273 -0
  240. package/src/api/design/shared.ts +40 -0
  241. package/src/api/design/transform/index.ts +93 -0
  242. package/src/api/design/update/index.ts +117 -0
  243. package/src/api/design/windows/index.ts +207 -0
  244. package/src/api/entity/buildableEnvelope.ts +318 -0
  245. package/src/api/entity/department.ts +0 -113
  246. package/src/api/entity/index.ts +9 -9
  247. package/src/api/entity/referenceLine.ts +50 -38
  248. package/src/api/entity/space.ts +285 -226
  249. package/src/api/entity/story.ts +53 -42
  250. package/src/api/index.ts +22 -12
  251. package/src/api/presentation/aiInspiration.ts +362 -0
  252. package/src/api/presentation/diagrams.ts +84 -0
  253. package/src/api/presentation/import.ts +112 -0
  254. package/src/api/presentation/index.ts +48 -0
  255. package/src/api/presentation/sheets.ts +198 -0
  256. package/src/api/presentation/views.ts +303 -0
  257. package/src/api/program/adjacency.ts +164 -0
  258. package/src/api/program/areas.ts +335 -0
  259. package/src/api/program/classification.ts +138 -0
  260. package/src/api/program/cores.ts +171 -0
  261. package/src/api/program/departments.ts +465 -0
  262. package/src/api/program/index.ts +71 -0
  263. package/src/api/program/layout.ts +68 -0
  264. package/src/api/program/metrics.ts +120 -0
  265. package/src/api/program/site.ts +419 -0
  266. package/src/api/program/spreadsheet.ts +2075 -0
  267. package/src/handles.ts +194 -0
  268. package/src/host-utils.ts +10 -6
  269. package/src/index.ts +1 -0
  270. package/dist/api/core/geom/arc.d.ts +0 -81
  271. package/dist/api/core/geom/arc.d.ts.map +0 -1
  272. package/dist/api/core/geom/curve.d.ts +0 -70
  273. package/dist/api/core/geom/curve.d.ts.map +0 -1
  274. package/dist/api/core/geom/line.d.ts +0 -56
  275. package/dist/api/core/geom/line.d.ts.map +0 -1
  276. package/dist/api/core/geom/profile.d.ts +0 -121
  277. package/dist/api/core/geom/profile.d.ts.map +0 -1
  278. package/dist/api/tools/copy.d.ts +0 -59
  279. package/dist/api/tools/copy.d.ts.map +0 -1
  280. package/dist/api/tools/index.d.ts +0 -33
  281. package/dist/api/tools/index.d.ts.map +0 -1
  282. package/dist/api/tools/material.d.ts +0 -51
  283. package/dist/api/tools/material.d.ts.map +0 -1
  284. package/dist/api/tools/offset.d.ts +0 -43
  285. package/dist/api/tools/offset.d.ts.map +0 -1
  286. package/dist/api/tools/selection.d.ts +0 -48
  287. package/dist/api/tools/selection.d.ts.map +0 -1
  288. package/dist/api/tools/transform.d.ts +0 -114
  289. package/dist/api/tools/transform.d.ts.map +0 -1
  290. package/dist/api/units/index.d.ts +0 -163
  291. package/dist/api/units/index.d.ts.map +0 -1
  292. package/src/api/core/geom/arc.ts +0 -70
  293. package/src/api/core/geom/curve.ts +0 -41
  294. package/src/api/core/geom/line.ts +0 -53
  295. package/src/api/core/geom/profile.ts +0 -94
  296. package/src/api/tools/copy.ts +0 -55
  297. package/src/api/tools/index.ts +0 -39
  298. package/src/api/tools/material.ts +0 -49
  299. package/src/api/tools/offset.ts +0 -43
  300. package/src/api/tools/selection.ts +0 -51
  301. package/src/api/tools/transform.ts +0 -117
  302. package/src/api/units/index.ts +0 -163
@@ -0,0 +1,1011 @@
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
+ /**
7
+ * The kind of a BIM entity — the discovery/filter vocabulary for the whole
8
+ * `design.query.*` surface. Values are clean `lowerCamel` tokens; the host maps
9
+ * each to the engine's internal type (whose raw strings are case-inconsistent —
10
+ * `"roof"`/`"slab"` lowercase, `"Wall"`/`"Door"` PascalCase — never surfaced here).
11
+ *
12
+ * | Value | Entity |
13
+ * |---|---|
14
+ * | `"wall"` | Wall |
15
+ * | `"space"` | Space (a room mass) |
16
+ * | `"mass"` | Generic mass (non-room) |
17
+ * | `"door"` | Door |
18
+ * | `"window"` | Window |
19
+ * | `"floor"` | Floor |
20
+ * | `"slab"` | Slab |
21
+ * | `"roof"` | Roof |
22
+ * | `"column"` | Column |
23
+ * | `"beam"` | Beam |
24
+ * | `"ceiling"` | Ceiling |
25
+ * | `"staircase"` | Staircase |
26
+ * | `"furniture"` | Furniture |
27
+ * | `"referenceLine"` | Reference line |
28
+ * | `"curtainWall"` | Parametric curtain wall |
29
+ * | `"mullion"` | Curtain-wall mullion |
30
+ * | `"panel"` | Curtain-wall panel |
31
+ */
32
+ export declare const PluginEntityType: z.ZodEnum<{
33
+ mass: "mass";
34
+ floor: "floor";
35
+ wall: "wall";
36
+ ceiling: "ceiling";
37
+ space: "space";
38
+ door: "door";
39
+ window: "window";
40
+ slab: "slab";
41
+ roof: "roof";
42
+ column: "column";
43
+ beam: "beam";
44
+ staircase: "staircase";
45
+ furniture: "furniture";
46
+ referenceLine: "referenceLine";
47
+ curtainWall: "curtainWall";
48
+ mullion: "mullion";
49
+ panel: "panel";
50
+ }>;
51
+ export type PluginEntityType = z.infer<typeof PluginEntityType>;
52
+ /**
53
+ * `EntityFilterOptions` — the **single filter** shared by every `design.query.list*`
54
+ * method, so filtering is identical across all BIM object types. Every field is
55
+ * optional and **AND-combined**: a component must satisfy all provided fields.
56
+ * Plural fields are arrays (match any of); singular fields are scalars. A field
57
+ * that names a type-specific dimension (`massTypes`/`spaceTypes`/`departmentId`)
58
+ * excludes components that lack that dimension.
59
+ *
60
+ * | Field | Type | Keeps components where |
61
+ * |---|---|---|
62
+ * | `types` | {@linkcode PluginEntityType}`[]` | entity kind ∈ `types` (ignored by per-type `list*` — the method fixes the kind) |
63
+ * | `storeys` | `number[]` | storey/floor level ∈ `storeys` (negative = basement) |
64
+ * | `buildingIds` | `string[]` | building ∈ `buildingIds` |
65
+ * | `structureIds` | `string[]` | structure ∈ `structureIds` |
66
+ * | `label` | `string` | label (`room_type` ?? mesh label) === `label` |
67
+ * | `massTypes` | {@linkcode PluginMassType}`[]` | mass-type ∈ (masses only) |
68
+ * | `spaceTypes` | {@linkcode PluginSpaceType}`[]` | space-type ∈ (spaces only) |
69
+ * | `departmentId` | {@linkcode PluginDepartmentId} | department === |
70
+ * | `isSelected` | `boolean` | current selection state === |
71
+ * | `isLocked` | `boolean` | lock flag === |
72
+ * | `isHidden` | `boolean` | user-hidden flag === |
73
+ * | `within` | {@linkcode BBoxComponents} | the entity's bounding box intersects the region |
74
+ * | `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. |
75
+ * | `ids` | {@linkcode ComponentHandle}`[]` | id ∈ `ids` (restrict to a known set) |
76
+ */
77
+ export declare const PluginEntityFilter: z.ZodObject<{
78
+ types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
79
+ mass: "mass";
80
+ floor: "floor";
81
+ wall: "wall";
82
+ ceiling: "ceiling";
83
+ space: "space";
84
+ door: "door";
85
+ window: "window";
86
+ slab: "slab";
87
+ roof: "roof";
88
+ column: "column";
89
+ beam: "beam";
90
+ staircase: "staircase";
91
+ furniture: "furniture";
92
+ referenceLine: "referenceLine";
93
+ curtainWall: "curtainWall";
94
+ mullion: "mullion";
95
+ panel: "panel";
96
+ }>>>;
97
+ storeys: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
98
+ buildingIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
99
+ structureIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
100
+ label: z.ZodOptional<z.ZodString>;
101
+ massTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
102
+ Room: "Room";
103
+ Plinth: "Plinth";
104
+ Void: "Void";
105
+ Pergola: "Pergola";
106
+ Furniture: "Furniture";
107
+ "Facade element": "Facade element";
108
+ "Generic mass": "Generic mass";
109
+ Department: "Department";
110
+ Building: "Building";
111
+ "Revit Import": "Revit Import";
112
+ Mass: "Mass";
113
+ Site: "Site";
114
+ }>>>;
115
+ spaceTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
116
+ Room: "Room";
117
+ "Program Block": "Program Block";
118
+ Balcony: "Balcony";
119
+ Road: "Road";
120
+ Garden: "Garden";
121
+ Deck: "Deck";
122
+ Pool: "Pool";
123
+ Walkway: "Walkway";
124
+ Envelope: "Envelope";
125
+ Parking: "Parking";
126
+ }>>>;
127
+ departmentId: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
128
+ DEFAULT: "DEFAULT";
129
+ SITE: "SITE";
130
+ ENVELOPE: "ENVELOPE";
131
+ CORE: "CORE";
132
+ }>, z.ZodUUID]>>;
133
+ isSelected: z.ZodOptional<z.ZodBoolean>;
134
+ isLocked: z.ZodOptional<z.ZodBoolean>;
135
+ isHidden: z.ZodOptional<z.ZodBoolean>;
136
+ within: z.ZodOptional<z.ZodObject<{
137
+ min: z.ZodObject<{
138
+ x: z.ZodNumber;
139
+ y: z.ZodNumber;
140
+ z: z.ZodNumber;
141
+ }, z.core.$strip>;
142
+ max: z.ZodObject<{
143
+ x: z.ZodNumber;
144
+ y: z.ZodNumber;
145
+ z: z.ZodNumber;
146
+ }, z.core.$strip>;
147
+ }, z.core.$strip>>;
148
+ overlaps: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
149
+ ids: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>>;
150
+ }, z.core.$strip>;
151
+ export type PluginEntityFilter = z.infer<typeof PluginEntityFilter>;
152
+ /**
153
+ * Arguments for {@linkcode PluginDesignQueryApi.listByType} — a required entity
154
+ * `type` plus every {@linkcode PluginEntityFilter} field.
155
+ */
156
+ export declare const PluginDesignQueryListByTypeArgs: z.ZodObject<{
157
+ types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
158
+ mass: "mass";
159
+ floor: "floor";
160
+ wall: "wall";
161
+ ceiling: "ceiling";
162
+ space: "space";
163
+ door: "door";
164
+ window: "window";
165
+ slab: "slab";
166
+ roof: "roof";
167
+ column: "column";
168
+ beam: "beam";
169
+ staircase: "staircase";
170
+ furniture: "furniture";
171
+ referenceLine: "referenceLine";
172
+ curtainWall: "curtainWall";
173
+ mullion: "mullion";
174
+ panel: "panel";
175
+ }>>>;
176
+ storeys: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
177
+ buildingIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
178
+ structureIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
179
+ label: z.ZodOptional<z.ZodString>;
180
+ massTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
181
+ Room: "Room";
182
+ Plinth: "Plinth";
183
+ Void: "Void";
184
+ Pergola: "Pergola";
185
+ Furniture: "Furniture";
186
+ "Facade element": "Facade element";
187
+ "Generic mass": "Generic mass";
188
+ Department: "Department";
189
+ Building: "Building";
190
+ "Revit Import": "Revit Import";
191
+ Mass: "Mass";
192
+ Site: "Site";
193
+ }>>>;
194
+ spaceTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
195
+ Room: "Room";
196
+ "Program Block": "Program Block";
197
+ Balcony: "Balcony";
198
+ Road: "Road";
199
+ Garden: "Garden";
200
+ Deck: "Deck";
201
+ Pool: "Pool";
202
+ Walkway: "Walkway";
203
+ Envelope: "Envelope";
204
+ Parking: "Parking";
205
+ }>>>;
206
+ departmentId: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
207
+ DEFAULT: "DEFAULT";
208
+ SITE: "SITE";
209
+ ENVELOPE: "ENVELOPE";
210
+ CORE: "CORE";
211
+ }>, z.ZodUUID]>>;
212
+ isSelected: z.ZodOptional<z.ZodBoolean>;
213
+ isLocked: z.ZodOptional<z.ZodBoolean>;
214
+ isHidden: z.ZodOptional<z.ZodBoolean>;
215
+ within: z.ZodOptional<z.ZodObject<{
216
+ min: z.ZodObject<{
217
+ x: z.ZodNumber;
218
+ y: z.ZodNumber;
219
+ z: z.ZodNumber;
220
+ }, z.core.$strip>;
221
+ max: z.ZodObject<{
222
+ x: z.ZodNumber;
223
+ y: z.ZodNumber;
224
+ z: z.ZodNumber;
225
+ }, z.core.$strip>;
226
+ }, z.core.$strip>>;
227
+ overlaps: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
228
+ ids: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>>;
229
+ type: z.ZodEnum<{
230
+ mass: "mass";
231
+ floor: "floor";
232
+ wall: "wall";
233
+ ceiling: "ceiling";
234
+ space: "space";
235
+ door: "door";
236
+ window: "window";
237
+ slab: "slab";
238
+ roof: "roof";
239
+ column: "column";
240
+ beam: "beam";
241
+ staircase: "staircase";
242
+ furniture: "furniture";
243
+ referenceLine: "referenceLine";
244
+ curtainWall: "curtainWall";
245
+ mullion: "mullion";
246
+ panel: "panel";
247
+ }>;
248
+ }, z.core.$strip>;
249
+ export type PluginDesignQueryListByTypeArgs = z.infer<typeof PluginDesignQueryListByTypeArgs>;
250
+ /** Arguments for methods that read one entity by its {@linkcode ComponentHandle}. */
251
+ export declare const PluginDesignQueryComponentArgs: z.ZodObject<{
252
+ component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
253
+ }, z.core.$strip>;
254
+ export type PluginDesignQueryComponentArgs = z.infer<typeof PluginDesignQueryComponentArgs>;
255
+ /** Arguments for methods that look an entity up by id. */
256
+ export declare const PluginDesignQueryIdArgs: z.ZodObject<{
257
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
258
+ }, z.core.$strip>;
259
+ export type PluginDesignQueryIdArgs = z.infer<typeof PluginDesignQueryIdArgs>;
260
+ /** Arguments for methods over a set of entities (e.g. the union bounding box). */
261
+ export declare const PluginDesignQueryComponentsArgs: z.ZodObject<{
262
+ components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
263
+ }, z.core.$strip>;
264
+ export type PluginDesignQueryComponentsArgs = z.infer<typeof PluginDesignQueryComponentsArgs>;
265
+ /**
266
+ * The common property record returned by {@linkcode PluginDesignQueryApi.getProperties} —
267
+ * a **partial** object (a field is present only when it applies to the entity).
268
+ * Type-specific and geometry reads live on {@linkcode PluginDesignQueryApi.measure}
269
+ * and `design.query.geometry.*`, keeping this record generic across every type.
270
+ *
271
+ * | Property | Type | Description |
272
+ * |---|---|---|
273
+ * | `id` | `string` | The entity id |
274
+ * | `type` | {@linkcode PluginEntityType} | Entity kind |
275
+ * | `label` | `string` | `room_type` ?? mesh label ?? `""` |
276
+ * | `storey` | `number` | Storey/floor level |
277
+ * | `buildingId` | `string` | Owning building |
278
+ * | `structureId` | `string` | Owning structure |
279
+ * | `massType` | `string` | Mass-type (masses only) |
280
+ * | `spaceType` | {@linkcode PluginSpaceType} | Space-type (spaces only) |
281
+ * | `areaClass` | {@linkcode PluginAreaClass} | Area classification (spaces only) |
282
+ * | `departmentId` | `string` | Department (masses only) |
283
+ * | `isLocked` | `boolean` | Lock flag |
284
+ * | `isHidden` | `boolean` | User-hidden flag |
285
+ * | `isSelected` | `boolean` | Current selection state |
286
+ * | `boundingBox` | {@linkcode BBoxComponents} | World-space AABB |
287
+ * | `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`. |
288
+ */
289
+ export declare const PluginEntityProperties: z.ZodObject<{
290
+ id: z.ZodOptional<z.ZodString>;
291
+ type: z.ZodOptional<z.ZodEnum<{
292
+ mass: "mass";
293
+ floor: "floor";
294
+ wall: "wall";
295
+ ceiling: "ceiling";
296
+ space: "space";
297
+ door: "door";
298
+ window: "window";
299
+ slab: "slab";
300
+ roof: "roof";
301
+ column: "column";
302
+ beam: "beam";
303
+ staircase: "staircase";
304
+ furniture: "furniture";
305
+ referenceLine: "referenceLine";
306
+ curtainWall: "curtainWall";
307
+ mullion: "mullion";
308
+ panel: "panel";
309
+ }>>;
310
+ label: z.ZodOptional<z.ZodString>;
311
+ storey: z.ZodOptional<z.ZodNumber>;
312
+ buildingId: z.ZodOptional<z.ZodString>;
313
+ structureId: z.ZodOptional<z.ZodString>;
314
+ massType: z.ZodOptional<z.ZodString>;
315
+ spaceType: z.ZodOptional<z.ZodEnum<{
316
+ Room: "Room";
317
+ "Program Block": "Program Block";
318
+ Balcony: "Balcony";
319
+ Road: "Road";
320
+ Garden: "Garden";
321
+ Deck: "Deck";
322
+ Pool: "Pool";
323
+ Walkway: "Walkway";
324
+ Envelope: "Envelope";
325
+ Parking: "Parking";
326
+ }>>;
327
+ areaClass: z.ZodOptional<z.ZodEnum<{
328
+ NET: "NET";
329
+ GROSS: "GROSS";
330
+ EXCLUDED: "EXCLUDED";
331
+ }>>;
332
+ departmentId: z.ZodOptional<z.ZodString>;
333
+ isLocked: z.ZodOptional<z.ZodBoolean>;
334
+ isHidden: z.ZodOptional<z.ZodBoolean>;
335
+ isSelected: z.ZodOptional<z.ZodBoolean>;
336
+ boundingBox: z.ZodOptional<z.ZodObject<{
337
+ min: z.ZodObject<{
338
+ x: z.ZodNumber;
339
+ y: z.ZodNumber;
340
+ z: z.ZodNumber;
341
+ }, z.core.$strip>;
342
+ max: z.ZodObject<{
343
+ x: z.ZodNumber;
344
+ y: z.ZodNumber;
345
+ z: z.ZodNumber;
346
+ }, z.core.$strip>;
347
+ }, z.core.$strip>>;
348
+ adjacency: z.ZodOptional<z.ZodArray<z.ZodObject<{
349
+ spaceId: z.ZodString;
350
+ value: z.ZodNumber;
351
+ }, z.core.$strip>>>;
352
+ }, z.core.$strip>;
353
+ export type PluginEntityProperties = z.infer<typeof PluginEntityProperties>;
354
+ /**
355
+ * The multi-metric bundle returned by {@linkcode PluginDesignQueryApi.measure}.
356
+ * `boundingBox` is always present; the numeric metrics appear only when the
357
+ * entity's type computes them (area: floors/masses/slabs/roofs/beams/columns;
358
+ * volume: all; length: walls/beams).
359
+ *
360
+ * | Property | Type | Description |
361
+ * |---|---|---|
362
+ * | `area` | `number`? | Bottom-face area |
363
+ * | `volume` | `number`? | Solid volume |
364
+ * | `length` | `number`? | Running length (linear elements) |
365
+ * | `boundingBox` | {@linkcode BBoxComponents} | World-space AABB (always present) |
366
+ */
367
+ export declare const PluginEntityMeasurements: z.ZodObject<{
368
+ area: z.ZodOptional<z.ZodNumber>;
369
+ volume: z.ZodOptional<z.ZodNumber>;
370
+ length: z.ZodOptional<z.ZodNumber>;
371
+ boundingBox: z.ZodObject<{
372
+ min: z.ZodObject<{
373
+ x: z.ZodNumber;
374
+ y: z.ZodNumber;
375
+ z: z.ZodNumber;
376
+ }, z.core.$strip>;
377
+ max: z.ZodObject<{
378
+ x: z.ZodNumber;
379
+ y: z.ZodNumber;
380
+ z: z.ZodNumber;
381
+ }, z.core.$strip>;
382
+ }, z.core.$strip>;
383
+ }, z.core.$strip>;
384
+ export type PluginEntityMeasurements = z.infer<typeof PluginEntityMeasurements>;
385
+ /**
386
+ * `design.query.*` — read-only enumeration + inspection of scene-committed BIM
387
+ * entities (all-handle model, §11). No query mutates the scene.
388
+ *
389
+ * Every `list*` returns a snapshot {@linkcode ComponentHandle}`[]` (`[]`, never
390
+ * `null`) filtered by the shared {@linkcode PluginEntityFilter}; per-entity reads
391
+ * take a {@linkcode ComponentHandle} and return primitive records / child handles
392
+ * or `null` when the entity is gone. Resolve details of a returned handle with
393
+ * {@linkcode PluginDesignQueryApi.getProperties} / {@linkcode PluginDesignQueryApi.measure}
394
+ * / `design.query.geometry.*`.
395
+ *
396
+ * Accessed via `snaptrude.design.query`.
397
+ */
398
+ export declare abstract class PluginDesignQueryApi {
399
+ /** Entity-geometry reads (brep, bottom contour). See {@linkcode PluginDesignQueryGeometryApi}. */
400
+ abstract geometry: PluginDesignQueryGeometryApi;
401
+ /** Space-specific reads (footprint, …). See {@linkcode PluginDesignQuerySpacesApi}. */
402
+ abstract spaces: PluginDesignQuerySpacesApi;
403
+ constructor();
404
+ /**
405
+ * List **all** BIM entities in the project matching the filter.
406
+ *
407
+ * @param filter - an optional {@linkcode PluginEntityFilter}
408
+ * @returns matching entities as {@linkcode ComponentHandle}`[]` (`[]` if none)
409
+ *
410
+ * @examplePrompt Show me everything in the model
411
+ * @examplePrompt How many objects are on the ground floor?
412
+ * @examplePrompt List all the doors and windows on level 2
413
+ * @examplePrompt What elements are currently selected?
414
+ * @examplePrompt Find every hidden object in the project
415
+ *
416
+ * # Example
417
+ * ```ts
418
+ * // Doors and windows on the ground storey (fields AND-combine)
419
+ * const doorsAndWindows = await snaptrude.design.query.listEntities({
420
+ * types: ["door", "window"],
421
+ * storeys: [1],
422
+ * })
423
+ *
424
+ * // Everything the user currently has selected
425
+ * const selected = await snaptrude.design.query.listEntities({ isSelected: true })
426
+ *
427
+ * // Everything inside a world-space region (axis-aligned box, Snaptrude units)
428
+ * const inRegion = await snaptrude.design.query.listEntities({
429
+ * within: { min: { x: 0, y: 0, z: 0 }, max: { x: 10, y: 4, z: 8 } },
430
+ * })
431
+ * ```
432
+ */
433
+ abstract listEntities(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
434
+ /**
435
+ * List all entities of one BIM object type — wall, door, slab, panel, and so
436
+ * on — optionally narrowed by the shared filter.
437
+ *
438
+ * @param type - the {@linkcode PluginEntityType} to list
439
+ * @param filter - an optional {@linkcode PluginEntityFilter}
440
+ * @returns matching entities as {@linkcode ComponentHandle}`[]`
441
+ *
442
+ * @examplePrompt List all the curtain walls in the project
443
+ * @examplePrompt Show every curtain wall panel on this storey
444
+ * @examplePrompt Get all the elements of a single type, like columns
445
+ * @examplePrompt Find all the locked slabs in the model
446
+ *
447
+ * # Example
448
+ * ```ts
449
+ * const lockedSlabs = await snaptrude.design.query.listByType("slab", { isLocked: true })
450
+ *
451
+ * // Curtain-wall panels on storeys 2-3 of one building
452
+ * const panels = await snaptrude.design.query.listByType("panel", {
453
+ * storeys: [2, 3],
454
+ * buildingIds: ["bld_1"],
455
+ * })
456
+ * ```
457
+ */
458
+ abstract listByType(type: PluginEntityType, filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
459
+ /**
460
+ * List all the walls in the project, optionally filtered by storey, building,
461
+ * label, selection state, or region.
462
+ *
463
+ * The `types` field of the filter is ignored (this method fixes the kind).
464
+ *
465
+ * @param filter - an optional {@linkcode PluginEntityFilter}
466
+ * @returns wall {@linkcode ComponentHandle}`[]`
467
+ *
468
+ * @examplePrompt How many walls are in the project?
469
+ * @examplePrompt List all the walls on the ground floor
470
+ * @examplePrompt Which walls are currently selected?
471
+ * @examplePrompt Find the walls on level 2 of building A
472
+ * @examplePrompt Show me every hidden wall
473
+ *
474
+ * # Example
475
+ * ```ts
476
+ * const groundFloorWalls = await snaptrude.design.query.listWalls({ storeys: [1] })
477
+ * ```
478
+ */
479
+ abstract listWalls(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
480
+ /**
481
+ * List all the spaces (rooms) in the project, optionally filtered by storey,
482
+ * department, space type, label, selection state, or region.
483
+ *
484
+ * @param filter - an optional {@linkcode PluginEntityFilter}
485
+ * @returns space {@linkcode ComponentHandle}`[]`
486
+ *
487
+ * @examplePrompt How many rooms are in this project?
488
+ * @examplePrompt List all the spaces on the second storey
489
+ * @examplePrompt Which rooms are in the Bedrooms department?
490
+ * @examplePrompt Find every room labelled Kitchen
491
+ * @examplePrompt Show the spaces that are currently selected
492
+ *
493
+ * # Example
494
+ * ```ts
495
+ * // Balconies and decks on storey 2 (`label` is an exact match on room_type)
496
+ * const outdoor = await snaptrude.design.query.listSpaces({
497
+ * storeys: [2],
498
+ * spaceTypes: ["Balcony", "Deck"],
499
+ * })
500
+ *
501
+ * // Rooms in a department: resolve its id first, then filter and total the area
502
+ * const { departments } = await snaptrude.program.departments.list()
503
+ * const bedrooms = departments.find((d) => d.name === "Bedrooms")
504
+ * if (bedrooms) {
505
+ * const rooms = await snaptrude.design.query.listSpaces({ departmentId: bedrooms.id })
506
+ * let total = 0
507
+ * for (const room of rooms) {
508
+ * const m = await snaptrude.design.query.measure(room)
509
+ * total += m?.area ?? 0
510
+ * }
511
+ * }
512
+ * ```
513
+ */
514
+ abstract listSpaces(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
515
+ /**
516
+ * List all the generic masses (non-room massing volumes) in the project,
517
+ * optionally filtered by storey, building, label, mass type, or region.
518
+ *
519
+ * @param filter - an optional {@linkcode PluginEntityFilter}
520
+ * @returns mass {@linkcode ComponentHandle}`[]`
521
+ *
522
+ * @examplePrompt List all the masses in the model
523
+ * @examplePrompt How many massing blocks are on the site?
524
+ * @examplePrompt Show the generic masses on level 1
525
+ * @examplePrompt Find every mass that isn't a room
526
+ *
527
+ * # Example
528
+ * ```ts
529
+ * // Only certain mass kinds — massTypes matches any of the given values
530
+ * const massing = await snaptrude.design.query.listMasses({
531
+ * massTypes: ["Generic mass", "Plinth"],
532
+ * })
533
+ * ```
534
+ */
535
+ abstract listMasses(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
536
+ /**
537
+ * List all the doors in the project, optionally filtered by storey, building,
538
+ * selection state, or region.
539
+ *
540
+ * @param filter - an optional {@linkcode PluginEntityFilter}
541
+ * @returns door {@linkcode ComponentHandle}`[]`
542
+ *
543
+ * @examplePrompt How many doors are in the project?
544
+ * @examplePrompt List all the doors on the ground floor
545
+ * @examplePrompt Which doors are currently selected?
546
+ * @examplePrompt Find every door in building B
547
+ *
548
+ * # Example
549
+ * ```ts
550
+ * // Ground-floor doors, then read each one's width via design.doors.*
551
+ * const doors = await snaptrude.design.query.listDoors({ storeys: [1] })
552
+ * for (const door of doors) {
553
+ * const width = await snaptrude.design.doors.getWidth(door)
554
+ * }
555
+ * ```
556
+ */
557
+ abstract listDoors(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
558
+ /**
559
+ * List all the windows in the project, optionally filtered by storey,
560
+ * building, selection state, or region.
561
+ *
562
+ * @param filter - an optional {@linkcode PluginEntityFilter}
563
+ * @returns window {@linkcode ComponentHandle}`[]`
564
+ *
565
+ * @examplePrompt How many windows does this building have?
566
+ * @examplePrompt List every window on level 3
567
+ * @examplePrompt Which windows are on the ground floor?
568
+ * @examplePrompt Show all the windows that are currently selected
569
+ *
570
+ * # Example
571
+ * ```ts
572
+ * const level3Windows = await snaptrude.design.query.listWindows({ storeys: [3] })
573
+ * ```
574
+ */
575
+ abstract listWindows(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
576
+ /**
577
+ * List all the floor elements (floor plates / finishes) in the project,
578
+ * optionally filtered by storey, building, lock state, or region.
579
+ *
580
+ * @param filter - an optional {@linkcode PluginEntityFilter}
581
+ * @returns floor {@linkcode ComponentHandle}`[]`
582
+ *
583
+ * @examplePrompt List all the floor elements in the model
584
+ * @examplePrompt How many floor plates are on the second storey?
585
+ * @examplePrompt Which floors are locked?
586
+ * @examplePrompt Show the floor finishes on level 0
587
+ *
588
+ * # Example
589
+ * ```ts
590
+ * const lockedFloors = await snaptrude.design.query.listFloors({ isLocked: true })
591
+ * ```
592
+ */
593
+ abstract listFloors(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
594
+ /**
595
+ * List all the slabs in the project, optionally filtered by storey, building,
596
+ * lock state, or region.
597
+ *
598
+ * @param filter - an optional {@linkcode PluginEntityFilter}
599
+ * @returns slab {@linkcode ComponentHandle}`[]`
600
+ *
601
+ * @examplePrompt List all the slabs in the project
602
+ * @examplePrompt How many slabs are on level 2?
603
+ * @examplePrompt Which slabs are locked?
604
+ * @examplePrompt Show the slabs in the selected building
605
+ *
606
+ * # Example
607
+ * ```ts
608
+ * const storey2Slabs = await snaptrude.design.query.listSlabs({ storeys: [2] })
609
+ * ```
610
+ */
611
+ abstract listSlabs(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
612
+ /**
613
+ * List all the roofs in the project, optionally filtered by storey, building,
614
+ * visibility, or region.
615
+ *
616
+ * @param filter - an optional {@linkcode PluginEntityFilter}
617
+ * @returns roof {@linkcode ComponentHandle}`[]`
618
+ *
619
+ * @examplePrompt How many roofs does the model have?
620
+ * @examplePrompt List all the roof elements
621
+ * @examplePrompt Show the roofs on the top storey
622
+ * @examplePrompt Find every hidden roof
623
+ *
624
+ * # Example
625
+ * ```ts
626
+ * const hiddenRoofs = await snaptrude.design.query.listRoofs({ isHidden: true })
627
+ * ```
628
+ */
629
+ abstract listRoofs(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
630
+ /**
631
+ * List all the columns in the project, optionally filtered by storey,
632
+ * building, selection state, or region.
633
+ *
634
+ * @param filter - an optional {@linkcode PluginEntityFilter}
635
+ * @returns column {@linkcode ComponentHandle}`[]`
636
+ *
637
+ * @examplePrompt How many columns are on the ground floor?
638
+ * @examplePrompt List all the columns in building A
639
+ * @examplePrompt Show every column on level 3
640
+ * @examplePrompt Which columns are currently selected?
641
+ *
642
+ * # Example
643
+ * ```ts
644
+ * const groundFloorColumns = await snaptrude.design.query.listColumns({ storeys: [1] })
645
+ * ```
646
+ */
647
+ abstract listColumns(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
648
+ /**
649
+ * List all the beams in the project, optionally filtered by storey, building,
650
+ * lock state, or region.
651
+ *
652
+ * @param filter - an optional {@linkcode PluginEntityFilter}
653
+ * @returns beam {@linkcode ComponentHandle}`[]`
654
+ *
655
+ * @examplePrompt List all the beams in the project
656
+ * @examplePrompt How many beams are on the second storey?
657
+ * @examplePrompt Show the beams in this structure
658
+ * @examplePrompt Find every locked beam
659
+ *
660
+ * # Example
661
+ * ```ts
662
+ * const storey2Beams = await snaptrude.design.query.listBeams({ storeys: [2] })
663
+ * ```
664
+ */
665
+ abstract listBeams(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
666
+ /**
667
+ * List all the ceilings in the project, optionally filtered by storey,
668
+ * building, visibility, or region.
669
+ *
670
+ * @param filter - an optional {@linkcode PluginEntityFilter}
671
+ * @returns ceiling {@linkcode ComponentHandle}`[]`
672
+ *
673
+ * @examplePrompt List all the ceilings in the model
674
+ * @examplePrompt How many ceilings are on level 1?
675
+ * @examplePrompt Which ceilings are hidden?
676
+ * @examplePrompt Show the ceilings in building B
677
+ *
678
+ * # Example
679
+ * ```ts
680
+ * const hiddenCeilings = await snaptrude.design.query.listCeilings({ isHidden: true })
681
+ * ```
682
+ */
683
+ abstract listCeilings(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
684
+ /**
685
+ * List all the staircases in the project, optionally filtered by storey,
686
+ * building, selection state, or region.
687
+ *
688
+ * @param filter - an optional {@linkcode PluginEntityFilter}
689
+ * @returns staircase {@linkcode ComponentHandle}`[]`
690
+ *
691
+ * @examplePrompt How many staircases are in the building?
692
+ * @examplePrompt List all the stairs in the project
693
+ * @examplePrompt Show the staircases on the ground floor
694
+ * @examplePrompt Which stairs are currently selected?
695
+ *
696
+ * # Example
697
+ * ```ts
698
+ * const groundFloorStairs = await snaptrude.design.query.listStaircases({ storeys: [1] })
699
+ * ```
700
+ */
701
+ abstract listStaircases(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
702
+ /**
703
+ * List all the furniture in the project, optionally filtered by storey,
704
+ * building, label, selection state, or region.
705
+ *
706
+ * @param filter - an optional {@linkcode PluginEntityFilter}
707
+ * @returns furniture {@linkcode ComponentHandle}`[]`
708
+ *
709
+ * @examplePrompt List all the furniture in the project
710
+ * @examplePrompt How many furniture items are on this floor?
711
+ * @examplePrompt Show the furniture inside the selected room
712
+ * @examplePrompt Which furniture is on storey 2?
713
+ *
714
+ * # Example
715
+ * ```ts
716
+ * // Furniture whose plan footprint overlaps a room (`overlaps` is plan-only —
717
+ * // scope the storey too, or furniture stacked on other floors matches)
718
+ * const [kitchen] = await snaptrude.design.query.listSpaces({ label: "Kitchen" })
719
+ * if (kitchen) {
720
+ * const inKitchen = await snaptrude.design.query.listFurniture({
721
+ * overlaps: kitchen,
722
+ * storeys: [1],
723
+ * })
724
+ * }
725
+ * ```
726
+ */
727
+ abstract listFurniture(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
728
+ /**
729
+ * List all the reference lines in the project, optionally filtered by storey,
730
+ * building, or region.
731
+ *
732
+ * @param filter - an optional {@linkcode PluginEntityFilter}
733
+ * @returns reference-line {@linkcode ComponentHandle}`[]`
734
+ *
735
+ * @examplePrompt List all the reference lines in the model
736
+ * @examplePrompt Show the guide lines on the ground floor
737
+ * @examplePrompt How many reference lines are on this storey?
738
+ * @examplePrompt Find the setting-out lines in building A
739
+ *
740
+ * # Example
741
+ * ```ts
742
+ * const groundFloorRefLines = await snaptrude.design.query.listReferenceLines({ storeys: [1] })
743
+ * ```
744
+ */
745
+ abstract listReferenceLines(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
746
+ /**
747
+ * List all the curtain-wall mullions in the project, optionally filtered by
748
+ * storey, building, selection state, or region.
749
+ *
750
+ * @param filter - an optional {@linkcode PluginEntityFilter}
751
+ * @returns mullion {@linkcode ComponentHandle}`[]`
752
+ *
753
+ * @examplePrompt List all the mullions in the curtain wall
754
+ * @examplePrompt How many mullions are on the facade?
755
+ * @examplePrompt Show every curtain wall mullion on level 5
756
+ * @examplePrompt Which mullions are currently selected?
757
+ *
758
+ * # Example
759
+ * ```ts
760
+ * const level5Mullions = await snaptrude.design.query.listMullions({ storeys: [5] })
761
+ * ```
762
+ */
763
+ abstract listMullions(filter?: PluginEntityFilter): PluginApiReturn<ComponentHandle[]>;
764
+ /**
765
+ * Look an entity up by id — returns the same handle if it still resolves live,
766
+ * else `null`. A cheap validity probe (distinct from {@linkcode PluginDesignQueryApi.exists}).
767
+ *
768
+ * @param id - the entity id ({@linkcode ComponentHandle}) to look up
769
+ * @returns the {@linkcode ComponentHandle}, or `null` if it no longer resolves
770
+ *
771
+ * @examplePrompt Look up an object by its id
772
+ * @examplePrompt Does id cmp_42 still point to something in the model?
773
+ * @examplePrompt Fetch the element with this id
774
+ * @examplePrompt Check if this saved element id is still valid
775
+ *
776
+ * # Example
777
+ * ```ts
778
+ * // Persistence round-trip: save a ref now, revalidate it in a later run
779
+ * const [wall] = await snaptrude.design.query.listWalls()
780
+ * const savedRef = await snaptrude.design.query.getEntityRef(wall)
781
+ *
782
+ * // ...later (savedRef restored from plugin storage)...
783
+ * const stillThere = await snaptrude.design.query.getById(savedRef)
784
+ * if (stillThere) {
785
+ * const props = await snaptrude.design.query.getProperties(stillThere)
786
+ * }
787
+ * ```
788
+ */
789
+ abstract getById(id: ComponentHandle): PluginApiReturn<ComponentHandle | null>;
790
+ /**
791
+ * Test whether an entity id resolves to a live scene entity.
792
+ * @param id - the entity id ({@linkcode ComponentHandle}) to look up
793
+ * @returns `true` if it exists, otherwise `false`
794
+ *
795
+ * @examplePrompt Does this element still exist in the scene?
796
+ * @examplePrompt Check whether the wall I stored earlier is still there
797
+ * @examplePrompt Is id cmp_42 still valid?
798
+ * @examplePrompt Verify the object wasn't deleted
799
+ *
800
+ * # Example
801
+ * ```ts
802
+ * // Guard before acting on a handle that may have been deleted or undone
803
+ * if (await snaptrude.design.query.exists(wall)) {
804
+ * const dx = await snaptrude.core.math.vec3.new(5, 0, 0)
805
+ * await snaptrude.design.transform.move([wall], dx)
806
+ * }
807
+ * ```
808
+ */
809
+ abstract exists(id: ComponentHandle): PluginApiReturn<boolean>;
810
+ /**
811
+ * Get the kind of BIM entity a handle refers to — wall, door, space, slab,
812
+ * and so on (its {@linkcode PluginEntityType}).
813
+ * @param component - the entity's {@linkcode ComponentHandle}
814
+ * @returns the kind, or `null` if the entity is gone / its type is unknown
815
+ *
816
+ * @examplePrompt What kind of element is this?
817
+ * @examplePrompt Is the selected object a wall or a mass?
818
+ * @examplePrompt Tell me the type of this component
819
+ * @examplePrompt What am I looking at — a door, a window, or a panel?
820
+ *
821
+ * # Example
822
+ * ```ts
823
+ * // Dispatch on what the user selected
824
+ * const selection = await snaptrude.design.selection.get()
825
+ * for (const component of selection) {
826
+ * const kind = await snaptrude.design.query.getEntityType(component)
827
+ * if (kind === "wall") {
828
+ * // wall-specific handling
829
+ * } else if (kind === "space") {
830
+ * // room-specific handling
831
+ * }
832
+ * }
833
+ * ```
834
+ */
835
+ abstract getEntityType(component: ComponentHandle): PluginApiReturn<PluginEntityType | null>;
836
+ /**
837
+ * Get an entity's human label (`room_type` for spaces/masses, else the mesh
838
+ * label; `""` when unlabelled). The write side is `design.update` (`setLabel`).
839
+ * @param component - the entity's {@linkcode ComponentHandle}
840
+ * @returns the label string
841
+ *
842
+ * @examplePrompt What is this room called?
843
+ * @examplePrompt Get the name of the selected object
844
+ * @examplePrompt Show the label on this wall
845
+ * @examplePrompt What's the room type of this space?
846
+ *
847
+ * # Example
848
+ * ```ts
849
+ * // Fuzzy label search (the `label` filter field is exact-match; for
850
+ * // case-insensitive or partial matches, read labels and compare yourself)
851
+ * const spaces = await snaptrude.design.query.listSpaces()
852
+ * const kitchens: typeof spaces = []
853
+ * for (const space of spaces) {
854
+ * const label = await snaptrude.design.query.getLabel(space)
855
+ * if (label.toLowerCase().includes("kitchen")) kitchens.push(space)
856
+ * }
857
+ * ```
858
+ */
859
+ abstract getLabel(component: ComponentHandle): PluginApiReturn<string>;
860
+ /**
861
+ * Get a serializable, persistable reference to an entity. Under the all-handle
862
+ * model a {@linkcode ComponentHandle} already IS the ref (raw `Component.id`),
863
+ * so this is the identity passthrough — provided for API completeness.
864
+ * @param component - the entity's {@linkcode ComponentHandle}
865
+ * @returns the entity's {@linkcode ComponentHandle}
866
+ *
867
+ * @examplePrompt Give me a reference I can save for this element
868
+ * @examplePrompt Get a persistent id for the selected wall
869
+ * @examplePrompt Store a handle to this room so I can find it later
870
+ *
871
+ * # Example
872
+ * ```ts
873
+ * const [wall] = await snaptrude.design.query.listWalls()
874
+ * const savedRef = await snaptrude.design.query.getEntityRef(wall)
875
+ * // savedRef is a plain string — persist it, then revalidate in a later run
876
+ * // with snaptrude.design.query.getById(savedRef)
877
+ * ```
878
+ */
879
+ abstract getEntityRef(component: ComponentHandle): PluginApiReturn<ComponentHandle>;
880
+ /**
881
+ * List an entity's direct child entities — for example the doors and windows
882
+ * hosted in a wall.
883
+ * @param component - the entity's {@linkcode ComponentHandle}
884
+ * @returns child {@linkcode ComponentHandle}`[]` (`[]` if none)
885
+ *
886
+ * @examplePrompt What's inside this wall — list its doors and windows
887
+ * @examplePrompt Show the child elements of the selected object
888
+ * @examplePrompt Which openings belong to this wall?
889
+ * @examplePrompt List everything nested under this mass
890
+ *
891
+ * # Example
892
+ * ```ts
893
+ * // Count the openings hosted in a wall, split by kind
894
+ * const children = await snaptrude.design.query.listChildren(wall)
895
+ * let doors = 0
896
+ * let windows = 0
897
+ * for (const child of children) {
898
+ * const kind = await snaptrude.design.query.getEntityType(child)
899
+ * if (kind === "door") doors++
900
+ * if (kind === "window") windows++
901
+ * }
902
+ * ```
903
+ */
904
+ abstract listChildren(component: ComponentHandle): PluginApiReturn<ComponentHandle[]>;
905
+ /**
906
+ * Get an entity's host/parent entity (e.g. the wall a door is cut into).
907
+ * @param component - the entity's {@linkcode ComponentHandle}
908
+ * @returns the host {@linkcode ComponentHandle}, or `null` if top-level
909
+ *
910
+ * @examplePrompt Which wall is this door in?
911
+ * @examplePrompt Find the parent of the selected window
912
+ * @examplePrompt What is this element attached to?
913
+ * @examplePrompt Which wall hosts this window?
914
+ *
915
+ * # Example
916
+ * ```ts
917
+ * // From a door up to its host wall, then measure the wall
918
+ * const [door] = await snaptrude.design.query.listDoors({ isSelected: true })
919
+ * const hostWall = door ? await snaptrude.design.query.getHost(door) : null
920
+ * if (hostWall) {
921
+ * const m = await snaptrude.design.query.measure(hostWall)
922
+ * console.log("wall length:", m?.length)
923
+ * }
924
+ * ```
925
+ */
926
+ abstract getHost(component: ComponentHandle): PluginApiReturn<ComponentHandle | null>;
927
+ /**
928
+ * Read an entity's common properties as a {@linkcode PluginEntityProperties}
929
+ * record (only applicable fields are present). For spaces/masses this includes
930
+ * `adjacency` — the per-entity adjacency read (bulk form:
931
+ * `program.adjacency.getMatrix`).
932
+ *
933
+ * @param component - the entity's {@linkcode ComponentHandle}
934
+ * @returns the property record
935
+ *
936
+ * @examplePrompt Show me all the details of the selected object
937
+ * @examplePrompt What storey is this wall on?
938
+ * @examplePrompt Which department does this room belong to?
939
+ * @examplePrompt Is this element locked or hidden?
940
+ * @examplePrompt Get the adjacencies of this space
941
+ *
942
+ * # Example
943
+ * ```ts
944
+ * const [wall] = await snaptrude.design.query.listWalls()
945
+ * const props = await snaptrude.design.query.getProperties(wall)
946
+ * console.log(props.type, props.storey, props.boundingBox)
947
+ *
948
+ * // The record is partial — type-specific fields exist only where they apply
949
+ * const [room] = await snaptrude.design.query.listSpaces()
950
+ * const p = await snaptrude.design.query.getProperties(room)
951
+ * if (p.spaceType === "Room" && p.areaClass === "NET") {
952
+ * for (const adj of p.adjacency ?? []) {
953
+ * // adj.value: 2 = direct, 1 = indirect/contact, -1 = restricted
954
+ * console.log(adj.spaceId, adj.value)
955
+ * }
956
+ * }
957
+ * ```
958
+ */
959
+ abstract getProperties(component: ComponentHandle): PluginApiReturn<PluginEntityProperties>;
960
+ /**
961
+ * Measure an entity — read its area, volume, and/or running length (whichever
962
+ * its type supports) together with its world-space bounding box in one call.
963
+ *
964
+ * @param component - the entity's {@linkcode ComponentHandle}
965
+ * @returns a {@linkcode PluginEntityMeasurements}, or `null` if the entity is gone
966
+ *
967
+ * @examplePrompt What's the area of this room?
968
+ * @examplePrompt How long is the selected wall?
969
+ * @examplePrompt Get the volume of this mass
970
+ * @examplePrompt Give me the dimensions of the selected element
971
+ * @examplePrompt What's the floor area of the kitchen?
972
+ *
973
+ * # Example
974
+ * ```ts
975
+ * const [space] = await snaptrude.design.query.listSpaces()
976
+ * const m = await snaptrude.design.query.measure(space)
977
+ * console.log(m?.area, m?.volume)
978
+ * ```
979
+ */
980
+ abstract measure(component: ComponentHandle): PluginApiReturn<PluginEntityMeasurements | null>;
981
+ /**
982
+ * Get the **union** axis-aligned bounding box enclosing a set of entities.
983
+ *
984
+ * @param components - the set of entity {@linkcode ComponentHandle}s
985
+ * @returns the union {@linkcode BBoxComponents}, or `null` if the set is empty /
986
+ * none resolve
987
+ *
988
+ * @examplePrompt Get the bounding box around the selected objects
989
+ * @examplePrompt What is the overall extent of these walls?
990
+ * @examplePrompt How big is the region these elements cover together?
991
+ * @examplePrompt Find the combined extents of everything on level 2
992
+ *
993
+ * # Example
994
+ * ```ts
995
+ * const walls = await snaptrude.design.query.listWalls()
996
+ * const box = await snaptrude.design.query.getBoundingBox(walls)
997
+ *
998
+ * // Compose with the `within` filter: everything in the selection's extents
999
+ * const selection = await snaptrude.design.selection.get()
1000
+ * const extents = await snaptrude.design.query.getBoundingBox(selection)
1001
+ * if (extents) {
1002
+ * const nearby = await snaptrude.design.query.listEntities({ within: extents })
1003
+ * const width = extents.max.x - extents.min.x
1004
+ * }
1005
+ * ```
1006
+ */
1007
+ abstract getBoundingBox(components: ComponentHandle[]): PluginApiReturn<BBoxComponents | null>;
1008
+ }
1009
+ export * from "./geometry";
1010
+ export * from "./spaces";
1011
+ //# sourceMappingURL=index.d.ts.map