@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,803 @@
1
+ import * as z from "zod";
2
+ import { PluginApiReturn } from "../../../types";
3
+ import { ComponentHandle } from "../../../handles";
4
+ import { PluginSpaceUpdateResult } from "../../entity/space";
5
+ import { PluginDesignChangeResult } from "../lock";
6
+ import { PluginBuildableEnvelopePolygonVertex, PluginBuildableEnvelopeSetbackTier, PluginBuildableEnvelopeVerticalCap, PluginBuildableEnvelopeUpdateResult } from "../../entity/buildableEnvelope";
7
+ /**
8
+ * Sparse property updates for a space. Only provided fields change.
9
+ *
10
+ * | Property | Type | Description |
11
+ * |---|---|---|
12
+ * | `room_type` | `string`? | Room label |
13
+ * | `massType` | `PluginMassType`? | Mass type |
14
+ * | `spaceType` | `PluginSpaceType`? | Space type |
15
+ * | `areaClass` | `PluginAreaClass`? | Area class (NET/GROSS/EXCLUDED) |
16
+ * | `departmentId` | `PluginDepartmentId`? | Department |
17
+ */
18
+ export declare const PluginSpacePropertyUpdates: z.ZodObject<{
19
+ room_type: z.ZodOptional<z.ZodString>;
20
+ massType: z.ZodOptional<z.ZodEnum<{
21
+ Room: "Room";
22
+ Plinth: "Plinth";
23
+ Void: "Void";
24
+ Pergola: "Pergola";
25
+ Furniture: "Furniture";
26
+ "Facade element": "Facade element";
27
+ "Generic mass": "Generic mass";
28
+ Department: "Department";
29
+ Building: "Building";
30
+ "Revit Import": "Revit Import";
31
+ Mass: "Mass";
32
+ Site: "Site";
33
+ }>>;
34
+ spaceType: z.ZodOptional<z.ZodEnum<{
35
+ Room: "Room";
36
+ "Program Block": "Program Block";
37
+ Balcony: "Balcony";
38
+ Road: "Road";
39
+ Garden: "Garden";
40
+ Deck: "Deck";
41
+ Pool: "Pool";
42
+ Walkway: "Walkway";
43
+ Envelope: "Envelope";
44
+ Parking: "Parking";
45
+ }>>;
46
+ areaClass: z.ZodOptional<z.ZodEnum<{
47
+ NET: "NET";
48
+ GROSS: "GROSS";
49
+ EXCLUDED: "EXCLUDED";
50
+ }>>;
51
+ departmentId: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
52
+ DEFAULT: "DEFAULT";
53
+ SITE: "SITE";
54
+ ENVELOPE: "ENVELOPE";
55
+ CORE: "CORE";
56
+ }>, z.ZodUUID]>>;
57
+ }, z.core.$strip>;
58
+ export type PluginSpacePropertyUpdates = z.infer<typeof PluginSpacePropertyUpdates>;
59
+ /** Geometry replacement for a space — re-extrude a profile. */
60
+ export declare const PluginSpaceGeometryUpdate: z.ZodObject<{
61
+ profile: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"profile">, string>>;
62
+ extrudeHeight: z.ZodNumber;
63
+ }, z.core.$strip>;
64
+ export type PluginSpaceGeometryUpdate = z.infer<typeof PluginSpaceGeometryUpdate>;
65
+ /** One space to update via {@linkcode PluginDesignUpdateApi.spaces}. */
66
+ export declare const PluginUpdateSpaceItem: z.ZodObject<{
67
+ space: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
68
+ properties: z.ZodOptional<z.ZodObject<{
69
+ room_type: z.ZodOptional<z.ZodString>;
70
+ massType: z.ZodOptional<z.ZodEnum<{
71
+ Room: "Room";
72
+ Plinth: "Plinth";
73
+ Void: "Void";
74
+ Pergola: "Pergola";
75
+ Furniture: "Furniture";
76
+ "Facade element": "Facade element";
77
+ "Generic mass": "Generic mass";
78
+ Department: "Department";
79
+ Building: "Building";
80
+ "Revit Import": "Revit Import";
81
+ Mass: "Mass";
82
+ Site: "Site";
83
+ }>>;
84
+ spaceType: z.ZodOptional<z.ZodEnum<{
85
+ Room: "Room";
86
+ "Program Block": "Program Block";
87
+ Balcony: "Balcony";
88
+ Road: "Road";
89
+ Garden: "Garden";
90
+ Deck: "Deck";
91
+ Pool: "Pool";
92
+ Walkway: "Walkway";
93
+ Envelope: "Envelope";
94
+ Parking: "Parking";
95
+ }>>;
96
+ areaClass: z.ZodOptional<z.ZodEnum<{
97
+ NET: "NET";
98
+ GROSS: "GROSS";
99
+ EXCLUDED: "EXCLUDED";
100
+ }>>;
101
+ departmentId: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
102
+ DEFAULT: "DEFAULT";
103
+ SITE: "SITE";
104
+ ENVELOPE: "ENVELOPE";
105
+ CORE: "CORE";
106
+ }>, z.ZodUUID]>>;
107
+ }, z.core.$strip>>;
108
+ geometry: z.ZodOptional<z.ZodObject<{
109
+ profile: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"profile">, string>>;
110
+ extrudeHeight: z.ZodNumber;
111
+ }, z.core.$strip>>;
112
+ }, z.core.$strip>;
113
+ export type PluginUpdateSpaceItem = z.infer<typeof PluginUpdateSpaceItem>;
114
+ /**
115
+ * Wire schema for {@linkcode PluginDesignUpdateApi.setLabel}.
116
+ *
117
+ * | Property | Type | Description |
118
+ * |---|---|---|
119
+ * | `component` | `ComponentHandle` | The component to relabel |
120
+ * | `label` | `string` | New label (non-empty after trimming) |
121
+ */
122
+ export declare const PluginDesignSetLabelArgs: z.ZodObject<{
123
+ component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
124
+ label: z.ZodString;
125
+ }, z.core.$strip>;
126
+ export type PluginDesignSetLabelArgs = z.infer<typeof PluginDesignSetLabelArgs>;
127
+ /**
128
+ * Sparse parametric updates for a staircase (all fields optional; at least one
129
+ * required). Only the fields you provide change. Consumed by
130
+ * {@linkcode PluginDesignUpdateApi.staircase}; the paired read is
131
+ * `design.query.getStaircaseParams`.
132
+ *
133
+ * All dimensions are in **engine units** (the same convention as
134
+ * `design.doors.setWidth`); `steps` is a unitless integer count. Height, riser,
135
+ * and step count are **coupled** (`staircaseHeight = steps × riser`); the two
136
+ * lock booleans govern which value recomputes — see the method JSDoc.
137
+ *
138
+ * | Property | Type | Description |
139
+ * |---|---|---|
140
+ * | `isStoreyHeightUnlocked` | `boolean`? | Unlock the staircase height from the storey height |
141
+ * | `isStaircaseHeightUnlocked` | `boolean`? | Unlock the height from `steps × riser` |
142
+ * | `storeyHeight` | `number`? | Storey height the stair sits within (engine units) |
143
+ * | `staircaseHeight` | `number`? | Total rise (engine units) |
144
+ * | `steps` | `number`? | Step count (unitless integer) |
145
+ * | `riser` | `number`? | Riser height (engine units) |
146
+ * | `tread` | `number`? | Tread depth (engine units) |
147
+ * | `width` | `number`? | Flight width (engine units) |
148
+ * | `depth` | `number`? | Slab/waist thickness (engine units) |
149
+ * | `wellSize` | `number`? | Stairwell gap (dogLegged / openWell / square) |
150
+ * | `flightStartDistAfterTurn` | `number`? | Flight offset after a turn (dogLegged / lShaped / square) |
151
+ * | `landingWidth` | `number`? | Landing depth (straight / dogLegged) |
152
+ * | `baseOffset` | `number`? | Vertical offset from the storey base (engine units) |
153
+ */
154
+ export declare const PluginStaircaseParamUpdates: z.ZodObject<{
155
+ isStoreyHeightUnlocked: z.ZodOptional<z.ZodBoolean>;
156
+ isStaircaseHeightUnlocked: z.ZodOptional<z.ZodBoolean>;
157
+ storeyHeight: z.ZodOptional<z.ZodNumber>;
158
+ staircaseHeight: z.ZodOptional<z.ZodNumber>;
159
+ steps: z.ZodOptional<z.ZodNumber>;
160
+ riser: z.ZodOptional<z.ZodNumber>;
161
+ tread: z.ZodOptional<z.ZodNumber>;
162
+ width: z.ZodOptional<z.ZodNumber>;
163
+ depth: z.ZodOptional<z.ZodNumber>;
164
+ wellSize: z.ZodOptional<z.ZodNumber>;
165
+ flightStartDistAfterTurn: z.ZodOptional<z.ZodNumber>;
166
+ landingWidth: z.ZodOptional<z.ZodNumber>;
167
+ baseOffset: z.ZodOptional<z.ZodNumber>;
168
+ }, z.core.$strip>;
169
+ export type PluginStaircaseParamUpdates = z.infer<typeof PluginStaircaseParamUpdates>;
170
+ /**
171
+ * Arguments for {@linkcode PluginDesignUpdateApi.staircase}.
172
+ *
173
+ * | Property | Type | Description |
174
+ * |---|---|---|
175
+ * | `staircases` | {@linkcode ComponentHandle}`[]` | The staircases to update |
176
+ * | `params` | {@linkcode PluginStaircaseParamUpdates} | Sparse parametric changes (≥ 1 field) |
177
+ */
178
+ export declare const PluginDesignUpdateStaircaseArgs: z.ZodObject<{
179
+ staircases: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
180
+ params: z.ZodObject<{
181
+ isStoreyHeightUnlocked: z.ZodOptional<z.ZodBoolean>;
182
+ isStaircaseHeightUnlocked: z.ZodOptional<z.ZodBoolean>;
183
+ storeyHeight: z.ZodOptional<z.ZodNumber>;
184
+ staircaseHeight: z.ZodOptional<z.ZodNumber>;
185
+ steps: z.ZodOptional<z.ZodNumber>;
186
+ riser: z.ZodOptional<z.ZodNumber>;
187
+ tread: z.ZodOptional<z.ZodNumber>;
188
+ width: z.ZodOptional<z.ZodNumber>;
189
+ depth: z.ZodOptional<z.ZodNumber>;
190
+ wellSize: z.ZodOptional<z.ZodNumber>;
191
+ flightStartDistAfterTurn: z.ZodOptional<z.ZodNumber>;
192
+ landingWidth: z.ZodOptional<z.ZodNumber>;
193
+ baseOffset: z.ZodOptional<z.ZodNumber>;
194
+ }, z.core.$strip>;
195
+ }, z.core.$strip>;
196
+ export type PluginDesignUpdateStaircaseArgs = z.infer<typeof PluginDesignUpdateStaircaseArgs>;
197
+ /**
198
+ * Sparse edits for a wall (all optional; at least one required). Only the
199
+ * fields you provide change. Dimensions are in **engine units** (the same
200
+ * convention as `design.doors.setWidth`). Consumed by
201
+ * {@linkcode PluginDesignUpdateApi.wall}.
202
+ *
203
+ * | Property | Type | Description |
204
+ * |---|---|---|
205
+ * | `thickness` | `number`? | Wall thickness, engine units (> 0) |
206
+ * | `height` | `number`? | Wall height, engine units (> 0) |
207
+ * | `type` | `string`? | Convert the wall to another wall type — a name (or `wall:`-prefixed id) from `design.types.list("wall")` |
208
+ */
209
+ export declare const PluginWallUpdates: z.ZodObject<{
210
+ thickness: z.ZodOptional<z.ZodNumber>;
211
+ height: z.ZodOptional<z.ZodNumber>;
212
+ type: z.ZodOptional<z.ZodString>;
213
+ }, z.core.$strip>;
214
+ export type PluginWallUpdates = z.infer<typeof PluginWallUpdates>;
215
+ /**
216
+ * Sparse dimension edits for a slab-family element (slab / floor / roof /
217
+ * ceiling). All values are engine units, the same convention as
218
+ * `design.doors.setWidth`. Consumed by {@linkcode PluginDesignUpdateApi.slab},
219
+ * `floor`, `roof`, and `ceiling`.
220
+ *
221
+ * `overhang` is only available on **slabs and roofs** (the panel's Overhang
222
+ * slider) — floors and ceilings reject it with `PRECONDITION_FAILED`.
223
+ *
224
+ * | Property | Type | Description |
225
+ * |---|---|---|
226
+ * | `thickness` | `number`? | Element thickness, engine units (> 0) |
227
+ * | `overhang` | `number`? | Absolute overhang offset, engine units (slab / roof only) |
228
+ */
229
+ export declare const PluginSlabUpdates: z.ZodObject<{
230
+ thickness: z.ZodOptional<z.ZodNumber>;
231
+ overhang: z.ZodOptional<z.ZodNumber>;
232
+ }, z.core.$strip>;
233
+ export type PluginSlabUpdates = z.infer<typeof PluginSlabUpdates>;
234
+ /** Arguments for {@linkcode PluginDesignUpdateApi.wall}. */
235
+ export declare const PluginDesignUpdateWallArgs: z.ZodObject<{
236
+ component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
237
+ updates: z.ZodObject<{
238
+ thickness: z.ZodOptional<z.ZodNumber>;
239
+ height: z.ZodOptional<z.ZodNumber>;
240
+ type: z.ZodOptional<z.ZodString>;
241
+ }, z.core.$strip>;
242
+ }, z.core.$strip>;
243
+ export type PluginDesignUpdateWallArgs = z.infer<typeof PluginDesignUpdateWallArgs>;
244
+ /**
245
+ * Arguments for the slab-family updaters —
246
+ * {@linkcode PluginDesignUpdateApi.slab}, `floor`, `roof`, `ceiling`.
247
+ */
248
+ export declare const PluginDesignUpdateSlabArgs: z.ZodObject<{
249
+ component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
250
+ updates: z.ZodObject<{
251
+ thickness: z.ZodOptional<z.ZodNumber>;
252
+ overhang: z.ZodOptional<z.ZodNumber>;
253
+ }, z.core.$strip>;
254
+ }, z.core.$strip>;
255
+ export type PluginDesignUpdateSlabArgs = z.infer<typeof PluginDesignUpdateSlabArgs>;
256
+ /** Arguments for {@linkcode PluginDesignUpdateApi.setElevation}. */
257
+ export declare const PluginDesignSetElevationArgs: z.ZodObject<{
258
+ component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
259
+ elevation: z.ZodNumber;
260
+ }, z.core.$strip>;
261
+ export type PluginDesignSetElevationArgs = z.infer<typeof PluginDesignSetElevationArgs>;
262
+ /** Arguments for {@linkcode PluginDesignUpdateApi.setBaseOffset}. */
263
+ export declare const PluginDesignSetBaseOffsetArgs: z.ZodObject<{
264
+ component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
265
+ offset: z.ZodNumber;
266
+ }, z.core.$strip>;
267
+ export type PluginDesignSetBaseOffsetArgs = z.infer<typeof PluginDesignSetBaseOffsetArgs>;
268
+ /**
269
+ * Arguments for {@linkcode PluginDesignUpdateApi.setStorey}.
270
+ *
271
+ * | Property | Type | Description |
272
+ * |---|---|---|
273
+ * | `components` | {@linkcode ComponentHandle}`[]` | The components to reassign |
274
+ * | `storey` | `number` | Target integer storey number (`entity.story` convention; must exist) |
275
+ */
276
+ export declare const PluginDesignSetStoreyArgs: z.ZodObject<{
277
+ components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
278
+ storey: z.ZodNumber;
279
+ }, z.core.$strip>;
280
+ export type PluginDesignSetStoreyArgs = z.infer<typeof PluginDesignSetStoreyArgs>;
281
+ /**
282
+ * The sparse GROUP-LEVEL patch accepted by {@linkcode PluginDesignUpdateApi.grid}.
283
+ * Only provided fields change. Wing- and line-level updates live on the grids
284
+ * entity family: `design.grids.updateWings` / `design.grids.updateLines`.
285
+ */
286
+ export declare const PluginGridPatch: z.ZodObject<{
287
+ angle: z.ZodOptional<z.ZodNumber>;
288
+ props: z.ZodOptional<z.ZodObject<{
289
+ style: z.ZodOptional<z.ZodEnum<{
290
+ SOLID: "SOLID";
291
+ DASHED: "DASHED";
292
+ DOT_DASH: "DOT_DASH";
293
+ }>>;
294
+ weight: z.ZodOptional<z.ZodNumber>;
295
+ color: z.ZodOptional<z.ZodString>;
296
+ showStart: z.ZodOptional<z.ZodBoolean>;
297
+ showEnd: z.ZodOptional<z.ZodBoolean>;
298
+ }, z.core.$strip>>;
299
+ storeyVisibility: z.ZodOptional<z.ZodArray<z.ZodObject<{
300
+ storey: z.ZodNumber;
301
+ visible: z.ZodBoolean;
302
+ }, z.core.$strip>>>;
303
+ }, z.core.$strip>;
304
+ export type PluginGridPatch = z.infer<typeof PluginGridPatch>;
305
+ /** Arguments for {@linkcode PluginDesignUpdateApi.grid}. */
306
+ export declare const PluginDesignUpdateGridArgs: z.ZodObject<{
307
+ grid: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
308
+ patch: z.ZodObject<{
309
+ angle: z.ZodOptional<z.ZodNumber>;
310
+ props: z.ZodOptional<z.ZodObject<{
311
+ style: z.ZodOptional<z.ZodEnum<{
312
+ SOLID: "SOLID";
313
+ DASHED: "DASHED";
314
+ DOT_DASH: "DOT_DASH";
315
+ }>>;
316
+ weight: z.ZodOptional<z.ZodNumber>;
317
+ color: z.ZodOptional<z.ZodString>;
318
+ showStart: z.ZodOptional<z.ZodBoolean>;
319
+ showEnd: z.ZodOptional<z.ZodBoolean>;
320
+ }, z.core.$strip>>;
321
+ storeyVisibility: z.ZodOptional<z.ZodArray<z.ZodObject<{
322
+ storey: z.ZodNumber;
323
+ visible: z.ZodBoolean;
324
+ }, z.core.$strip>>>;
325
+ }, z.core.$strip>;
326
+ }, z.core.$strip>;
327
+ export type PluginDesignUpdateGridArgs = z.infer<typeof PluginDesignUpdateGridArgs>;
328
+ /**
329
+ * `snaptrude.design.update` — edit existing scene entities (properties + geometry).
330
+ *
331
+ * Migrated from the removed `entity.space.{update, updateGeometryFromProfile, bulkUpdate}`.
332
+ * Only provided fields change; each call is undoable. Failures throw (RPC rejects).
333
+ */
334
+ export declare abstract class PluginDesignUpdateApi {
335
+ constructor();
336
+ /**
337
+ * Set a component's **Label** — the same editable Label field the properties
338
+ * panel shows (doors, windows, furniture, spaces, and every other labelled
339
+ * component). The paired read is `design.query.getLabel`. Undoable; the
340
+ * canvas label text updates immediately.
341
+ *
342
+ * Strictly **per component**: labelling one door of a placed family never
343
+ * touches its sibling doors (the panel's Label edit, by contrast, applies to
344
+ * the whole family). On **legacy masses** without a space type, panel parity
345
+ * applies — a label matching a room-type preset with a height can also
346
+ * adjust the mass's height and material, exactly like typing it in the panel.
347
+ *
348
+ * Throws when the component is locked, the handle is gone/forged, the label
349
+ * is empty, or the component has no mesh to label. Re-applying the current
350
+ * label is a no-op that returns `true` without touching the undo stack.
351
+ *
352
+ * @param component - The component to relabel
353
+ * @param label - New label text (non-empty; leading/trailing whitespace trimmed)
354
+ * @returns `true` once the label is applied
355
+ *
356
+ * @examplePrompt Rename this door to D-101
357
+ * @examplePrompt Number all doors on storey 2 with a D-2-XX tag
358
+ * @examplePrompt Set the selected window's label to W-04
359
+ * @examplePrompt Tag every door with its fire rating
360
+ *
361
+ * # Example
362
+ * ```ts
363
+ * // Door tag numbering: label every door as D-<storey>-<n>, numbered per storey
364
+ * await snaptrude.design.selection.setByFilter({ types: ["door"] })
365
+ * const doors = await snaptrude.design.selection.get()
366
+ * const counts = {}
367
+ * for (const door of doors) {
368
+ * const { storey = 0 } = await snaptrude.design.query.getProperties(door)
369
+ * counts[storey] = (counts[storey] ?? 0) + 1
370
+ * await snaptrude.design.update.setLabel(door, `D-${storey}-${String(counts[storey]).padStart(2, "0")}`)
371
+ * }
372
+ * ```
373
+ */
374
+ abstract setLabel(component: ComponentHandle, label: string): PluginApiReturn<boolean>;
375
+ /**
376
+ * Update a structural grid's **group-level** fields with a sparse patch —
377
+ * default line styling, absolute angle, and per-storey 2D visibility. Only
378
+ * provided fields change. Wing- and line-level updates live on the grids
379
+ * entity family: {@linkcode PluginDesignGridsApi.updateWings} /
380
+ * {@linkcode PluginDesignGridsApi.updateLines}.
381
+ *
382
+ * Every change routes through the exact setters the native panel uses —
383
+ * each changed field commits its own undoable command, identical to editing
384
+ * that field in the panel. `angle` is an absolute target in degrees (CCW
385
+ * about +Y).
386
+ *
387
+ * @param grid - The grid group to update
388
+ * @param patch - The sparse {@linkcode PluginGridPatch}
389
+ * @returns `true` once applied
390
+ *
391
+ * @examplePrompt Rotate the grid to 45 degrees
392
+ * @examplePrompt Make this grid's lines dashed and grey
393
+ * @examplePrompt Hide this grid on storey 3's plan
394
+ *
395
+ * # Example
396
+ * ```ts
397
+ * const [grid] = await snaptrude.design.query.listGrids()
398
+ * await snaptrude.design.update.grid(grid, { angle: 45, props: { style: "DASHED" } })
399
+ * ```
400
+ */
401
+ abstract grid(grid: ComponentHandle, patch: PluginGridPatch): PluginApiReturn<boolean>;
402
+ /**
403
+ * Update a single space (room) — change its properties (room label, space
404
+ * type, mass type, area class, department) and/or replace its geometry by
405
+ * re-extruding a profile to a new height. Sparse and undoable: only the
406
+ * fields you provide change.
407
+ *
408
+ * @param space - The space to update
409
+ * @param options - `properties` (sparse) and/or `geometry` ({ profile, extrudeHeight })
410
+ * @returns the updated space's echoed {@linkcode PluginSpaceUpdateResult}
411
+ *
412
+ * @examplePrompt Rename this room to Office
413
+ * @examplePrompt Change this space's room type to Meeting Room
414
+ * @examplePrompt Set the height of this room to 3 metres
415
+ * @examplePrompt Move this space into the Circulation department
416
+ * @examplePrompt Exclude this room from the area calculations
417
+ *
418
+ * @performance For MORE THAN ONE space, call `design.update.spaces(items[])` — the whole
419
+ * batch is one host round-trip. Looping this single-space updater is N round-trips.
420
+ *
421
+ * # Example
422
+ * ```ts
423
+ * await snaptrude.design.update.space("space-id", { properties: { room_type: "Office" } })
424
+ * ```
425
+ */
426
+ abstract space(space: ComponentHandle, options: {
427
+ properties?: PluginSpacePropertyUpdates;
428
+ geometry?: PluginSpaceGeometryUpdate;
429
+ }): PluginApiReturn<PluginSpaceUpdateResult>;
430
+ /**
431
+ * Update many spaces (rooms) in one undoable operation — the bulk form of
432
+ * {@linkcode space}. Each item pairs a space with the sparse property
433
+ * changes and/or geometry re-extrude to apply; every item is validated up
434
+ * front, then all changes are applied as a single command.
435
+ *
436
+ * Migrated from `entity.space.bulkUpdate`.
437
+ *
438
+ * @param items - One {@linkcode PluginUpdateSpaceItem} per space
439
+ * @returns one {@linkcode PluginSpaceUpdateResult} per item, in input order
440
+ *
441
+ * @examplePrompt Label all the selected rooms as Bedrooms
442
+ * @examplePrompt Change the room type of these five spaces at once
443
+ * @examplePrompt Set every room on this floor to a 3m height in one go
444
+ * @examplePrompt Bulk-assign these spaces to the Service department
445
+ * @examplePrompt Mark all of these rooms as excluded from area in one update
446
+ *
447
+ * @performance Bulk update — the whole batch is ONE host round-trip. Prefer over looping
448
+ * `design.update.space`: build the `items[]` array first, then make one call.
449
+ *
450
+ * # Example
451
+ * ```ts
452
+ * // Re-label every selected room and mark it NET area — one undoable bulk update
453
+ * const rooms = await snaptrude.design.query.listSpaces({ isSelected: true })
454
+ * const results = await snaptrude.design.update.spaces(
455
+ * rooms.map((space) => ({
456
+ * space,
457
+ * properties: { room_type: "Bedroom", areaClass: "NET" },
458
+ * })),
459
+ * )
460
+ * // One result per item, in input order
461
+ * console.log(results.map((r) => r.spaceId))
462
+ * ```
463
+ */
464
+ abstract spaces(items: PluginUpdateSpaceItem[]): PluginApiReturn<PluginSpaceUpdateResult[]>;
465
+ /**
466
+ * Update the parameters of one or more staircases — riser, tread, width,
467
+ * depth, step count, total height, well size, landing depth, base offset,
468
+ * and the two height locks — in one undoable operation. Sparse: only the
469
+ * fields you provide change. The paired read is
470
+ * `design.query.getStaircaseParams`.
471
+ *
472
+ * All dimensions are in **engine units** (the same convention as
473
+ * `design.doors.setWidth`); `steps` is a unitless integer count. The height,
474
+ * riser, and step count are **coupled** — `staircaseHeight = steps × riser` —
475
+ * and the two lock booleans govern which value recomputes when another
476
+ * changes. With `isStoreyHeightUnlocked` false the staircase height follows
477
+ * the storey height; unlocking it also unlocks the staircase height. Setting
478
+ * `steps` recomputes `riser` (or the height, once the height is unlocked),
479
+ * and setting `riser` recomputes `steps`/height in turn.
480
+ *
481
+ * Presets-only: this edits the parametric fields of a preset staircase; it
482
+ * does not change the staircase's type/preset (there is no in-place re-type).
483
+ * Every edit rebuilds the staircase geometry, so the call is async.
484
+ *
485
+ * Throws when a handle is not a staircase, when a staircase is locked, or
486
+ * when a value falls outside the engine's accepted range (RPC rejects).
487
+ *
488
+ * @param staircases - the staircases to update
489
+ * @param params - sparse {@linkcode PluginStaircaseParamUpdates} (at least one field)
490
+ * @returns the affected staircases
491
+ *
492
+ * @examplePrompt Set the riser of this staircase to 165mm
493
+ * @examplePrompt Change all the stairs to 14 steps
494
+ * @examplePrompt Make the selected staircase 1200 wide with a 280 tread
495
+ * @examplePrompt Widen every staircase on level 1 to 1 metre
496
+ * @examplePrompt Unlock the height and set this stair to 3200 tall
497
+ *
498
+ * # Example
499
+ * ```ts
500
+ * // Give every ground-floor staircase a common riser + tread (engine units)
501
+ * const stairs = await snaptrude.design.query.listStaircases({ storeys: [1] })
502
+ * const { affected } = await snaptrude.design.update.staircase(stairs, {
503
+ * riser: 165,
504
+ * tread: 280,
505
+ * })
506
+ * console.log("updated", affected.length, "staircases")
507
+ * ```
508
+ */
509
+ abstract staircase(staircases: ComponentHandle[], params: PluginStaircaseParamUpdates): PluginApiReturn<PluginDesignChangeResult>;
510
+ /**
511
+ * Edit a **wall** — its thickness and/or height (the same command the
512
+ * properties panel's Thickness/Height fields drive) and/or its **wall type**
513
+ * (the panel's Wall Types dropdown: converts the wall to another type,
514
+ * rebuilding its layer stack and materials). Sparse: only the fields you
515
+ * provide change. Undoable; the geometry rebuilds and any dimension lines
516
+ * refresh. Stacked-wall companions and hosted fenestration are handled
517
+ * exactly as the panel does.
518
+ *
519
+ * Thickness/height are in **engine units** (the same convention as
520
+ * `design.doors.setWidth`) and must be `> 0`. Shrinking a wall past its
521
+ * openings is rejected by the engine (the wall is skipped with no change).
522
+ * `type` accepts a type name from `design.types.list("wall")` (or its
523
+ * `wall:`-prefixed id); when combined with dimensions, the type conversion
524
+ * is applied first so an explicit thickness/height wins over the type's
525
+ * defaults. Re-applying the wall's current type is a no-op.
526
+ *
527
+ * Throws when the handle is not a wall, when the wall is locked, when the
528
+ * handle is gone/forged, when `type` names an unknown wall type, when the
529
+ * engine rejects the conversion (e.g. a curved wall thinner than the new
530
+ * type's minimum thickness), or when no field is provided.
531
+ *
532
+ * A type conversion (and a thickness edit on a parametric wall) REBUILDS the
533
+ * wall, replacing it with a new component: the input handle is then dead
534
+ * (further calls throw HANDLE_INVALID) and `affected[0]` carries the
535
+ * replacement's handle — use it for any follow-up calls.
536
+ *
537
+ * @param component - The wall to edit
538
+ * @param updates - Sparse {@linkcode PluginWallUpdates} (at least one field)
539
+ * @returns the affected wall — after a rebuild, the REPLACEMENT wall's handle
540
+ *
541
+ * @examplePrompt Make this wall 230mm thick
542
+ * @examplePrompt Set the selected wall's height to 3 metres
543
+ * @examplePrompt Thicken every exterior wall to 300
544
+ * @examplePrompt Change this wall to a Glass Wall
545
+ * @examplePrompt Convert all the partitions on this floor to Brick Wall
546
+ *
547
+ * # Example
548
+ * ```ts
549
+ * // Convert every wall on storey 1 to the first listed wall type
550
+ * const [wallType] = await snaptrude.design.types.list("wall")
551
+ * const walls = await snaptrude.design.query.listWalls({ storeys: [1] })
552
+ * for (const wall of walls) {
553
+ * await snaptrude.design.update.wall(wall, { type: wallType.id })
554
+ * }
555
+ * ```
556
+ */
557
+ abstract wall(component: ComponentHandle, updates: PluginWallUpdates): PluginApiReturn<PluginDesignChangeResult>;
558
+ /**
559
+ * Edit a **slab's** thickness and/or overhang — the same commands the
560
+ * properties panel's Thickness field and Overhang slider drive. Sparse: only
561
+ * the fields you provide change. Undoable; the slab rebuilds and dimension
562
+ * lines refresh. Both values are in **engine units** (the same convention as
563
+ * `design.doors.setWidth`); thickness must be `> 0`, overhang is an absolute
564
+ * offset (negative insets the slab) and re-applying the current overhang is
565
+ * a no-op.
566
+ *
567
+ * Throws when the handle is not a slab, when it is locked, when the handle is
568
+ * gone/forged, when `overhang` is set on a slab that has no overhang (plinth /
569
+ * basement slabs, or overhang disabled), or when no field is provided.
570
+ *
571
+ * @param component - The slab to edit
572
+ * @param updates - Sparse {@linkcode PluginSlabUpdates} (at least one field)
573
+ * @returns the affected slab
574
+ *
575
+ * @examplePrompt Set this slab's thickness to 250mm
576
+ * @examplePrompt Make the floor slab 300 thick
577
+ * @examplePrompt Give this slab a 200 overhang
578
+ * @examplePrompt Remove the overhang on every slab on level 2
579
+ *
580
+ * # Example
581
+ * ```ts
582
+ * const [slab] = await snaptrude.design.query.listSlabs()
583
+ * await snaptrude.design.update.slab(slab, { thickness: 250, overhang: 200 })
584
+ * ```
585
+ */
586
+ abstract slab(component: ComponentHandle, updates: PluginSlabUpdates): PluginApiReturn<PluginDesignChangeResult>;
587
+ /**
588
+ * Edit a **floor's** thickness — the slab-family updater for floors (shares
589
+ * the slab thickness command). Undoable. Thickness is in **engine units**
590
+ * (the `design.doors.setWidth` convention) and must be `> 0`. Floors have no
591
+ * Overhang control, so `overhang` is rejected with `PRECONDITION_FAILED`.
592
+ *
593
+ * Throws when the handle is not a floor, when it is locked, when the handle
594
+ * is gone/forged, when `overhang` is provided, or when no field is provided.
595
+ *
596
+ * @param component - The floor to edit
597
+ * @param updates - {@linkcode PluginSlabUpdates} (a `thickness`)
598
+ * @returns the affected floor
599
+ *
600
+ * @examplePrompt Make this floor 200mm thick
601
+ * @examplePrompt Set every floor to a 250 thickness
602
+ * @examplePrompt Thicken the ground floor slab to 300
603
+ *
604
+ * # Example
605
+ * ```ts
606
+ * const [floor] = await snaptrude.design.query.listFloors()
607
+ * await snaptrude.design.update.floor(floor, { thickness: 200 })
608
+ * ```
609
+ */
610
+ abstract floor(component: ComponentHandle, updates: PluginSlabUpdates): PluginApiReturn<PluginDesignChangeResult>;
611
+ /**
612
+ * Edit a **roof's** thickness and/or overhang — the same commands the roof
613
+ * panel's Thickness field and Overhang slider drive (shares the slab-family
614
+ * machinery). Sparse: only the fields you provide change. Undoable. Both
615
+ * values are in **engine units** (the `design.doors.setWidth` convention);
616
+ * thickness must be `> 0`, overhang is an absolute offset (negative insets
617
+ * the roof) and re-applying the current overhang is a no-op.
618
+ *
619
+ * Throws when the handle is not a roof, when it is locked, when the handle is
620
+ * gone/forged, when `overhang` is set on a roof whose overhang is disabled,
621
+ * or when no field is provided.
622
+ *
623
+ * @param component - The roof to edit
624
+ * @param updates - Sparse {@linkcode PluginSlabUpdates} (at least one field)
625
+ * @returns the affected roof
626
+ *
627
+ * @examplePrompt Make this roof 300mm thick
628
+ * @examplePrompt Set the roof slab thickness to 250
629
+ * @examplePrompt Give the roof a 600 overhang
630
+ * @examplePrompt Pull the roof overhang back to 0
631
+ *
632
+ * # Example
633
+ * ```ts
634
+ * const [roof] = await snaptrude.design.query.listRoofs()
635
+ * await snaptrude.design.update.roof(roof, { overhang: 600 })
636
+ * ```
637
+ */
638
+ abstract roof(component: ComponentHandle, updates: PluginSlabUpdates): PluginApiReturn<PluginDesignChangeResult>;
639
+ /**
640
+ * Edit a **ceiling's** thickness — the slab-family updater for ceilings
641
+ * (shares the slab thickness command). Undoable. Thickness is in **engine
642
+ * units** (the `design.doors.setWidth` convention) and must be `> 0`.
643
+ * Ceilings have no Overhang control, so `overhang` is rejected with
644
+ * `PRECONDITION_FAILED`.
645
+ *
646
+ * Throws when the handle is not a ceiling, when it is locked, when the handle
647
+ * is gone/forged, when `overhang` is provided, or when no field is provided.
648
+ *
649
+ * @param component - The ceiling to edit
650
+ * @param updates - {@linkcode PluginSlabUpdates} (a `thickness`)
651
+ * @returns the affected ceiling
652
+ *
653
+ * @examplePrompt Make this ceiling 150mm thick
654
+ * @examplePrompt Set every ceiling to a 100 thickness
655
+ * @examplePrompt Thicken the ceiling to 200
656
+ *
657
+ * # Example
658
+ * ```ts
659
+ * const [ceiling] = await snaptrude.design.query.listCeilings()
660
+ * await snaptrude.design.update.ceiling(ceiling, { thickness: 150 })
661
+ * ```
662
+ */
663
+ abstract ceiling(component: ComponentHandle, updates: PluginSlabUpdates): PluginApiReturn<PluginDesignChangeResult>;
664
+ /**
665
+ * Set a component's **absolute world elevation** — moves it vertically so its
666
+ * base (the bounding-box bottom, world Y) lands at `elevation`. Composed over
667
+ * the canonical command-backed move machinery, so it is undoable and persisted
668
+ * exactly like dragging the element up or down; per-type invariants (e.g. a
669
+ * staircase's base offset) stay in sync. `elevation` is in **engine units**
670
+ * (the `design.doors.setWidth` convention). Re-applying the current elevation
671
+ * is a no-op.
672
+ *
673
+ * Throws when the component is locked or the handle is gone/forged.
674
+ *
675
+ * @param component - The component to move vertically
676
+ * @param elevation - Target world elevation of the component's base (engine units)
677
+ * @returns the affected component
678
+ *
679
+ * @examplePrompt Set this element's elevation to 3000
680
+ * @examplePrompt Raise this mass so its base sits at 3 metres
681
+ * @examplePrompt Drop the selected slab to elevation 0
682
+ * @examplePrompt Put this staircase's base at 3200
683
+ *
684
+ * # Example
685
+ * ```ts
686
+ * // Sit the roof slab exactly at the top of a 3m storey
687
+ * const [roof] = await snaptrude.design.query.listRoofs()
688
+ * await snaptrude.design.update.setElevation(roof, 3000)
689
+ * ```
690
+ */
691
+ abstract setElevation(component: ComponentHandle, elevation: number): PluginApiReturn<PluginDesignChangeResult>;
692
+ /**
693
+ * Set a component's **base offset** — its vertical distance above its own
694
+ * storey's base level. Moves the component so its base lands at
695
+ * `storeyBase + offset`, composed over the same command-backed move machinery
696
+ * as {@linkcode setElevation} (undoable, persisted, per-type invariants kept
697
+ * in sync). Use this instead of {@linkcode setElevation} when you want an
698
+ * offset relative to the storey rather than an absolute world height.
699
+ * `offset` is in **engine units** (the `design.doors.setWidth` convention);
700
+ * `0` sits the base flush with the storey base. Re-applying the current
701
+ * offset is a no-op.
702
+ *
703
+ * Throws when the component is locked, when it has no storey to offset from,
704
+ * or when the handle is gone/forged.
705
+ *
706
+ * @param component - The component to offset
707
+ * @param offset - Distance of the component's base above its storey base (engine units)
708
+ * @returns the affected component
709
+ *
710
+ * @examplePrompt Lift this element 300 above its floor
711
+ * @examplePrompt Set this staircase's base offset to 0
712
+ * @examplePrompt Raise the selected mass 500 off the storey base
713
+ * @examplePrompt Offset this slab 150 above the floor level
714
+ *
715
+ * # Example
716
+ * ```ts
717
+ * const [stair] = await snaptrude.design.query.listStaircases()
718
+ * await snaptrude.design.update.setBaseOffset(stair, 0)
719
+ * ```
720
+ */
721
+ abstract setBaseOffset(component: ComponentHandle, offset: number): PluginApiReturn<PluginDesignChangeResult>;
722
+ /**
723
+ * Reassign one or more components to another **storey** — the same operation
724
+ * as the properties panel's Story dropdown, and it works across element kinds
725
+ * exactly like the panel (walls, slabs, masses, furniture, staircases, ...).
726
+ * Each component is moved vertically to the target storey's level (per-kind
727
+ * placement rules — e.g. a slab sits at the storey base, a wall on it) and
728
+ * its storey assignment, children, and dimension lines update together as
729
+ * **one undoable operation**.
730
+ *
731
+ * `storey` is an integer storey number in the `entity.story` convention
732
+ * (`1` is the ground storey, `-1` the first basement; `0` does not exist)
733
+ * and **must already exist** in each component's building — this call never
734
+ * creates storeys (use `core.storeys.create` first). Components already on
735
+ * the target storey are skipped (no-op) and are not echoed in `affected`.
736
+ *
737
+ * Throws when the target storey does not exist, when any component is
738
+ * locked, or when a handle is gone/forged — all before anything moves
739
+ * (all-or-nothing).
740
+ *
741
+ * @param components - The components to reassign
742
+ * @param storey - Target storey number (integer, `entity.story` convention)
743
+ * @returns the components actually reassigned
744
+ *
745
+ * @examplePrompt Move this sofa to storey 2
746
+ * @examplePrompt Put the selected walls on the first basement level
747
+ * @examplePrompt Send everything on this storey up one level
748
+ * @examplePrompt Reassign these slabs to storey 3
749
+ *
750
+ * # Example
751
+ * ```ts
752
+ * // Move the current selection up to storey 2
753
+ * const selection = await snaptrude.design.selection.get()
754
+ * const { affected } = await snaptrude.design.update.setStorey(selection, 2)
755
+ * console.log("moved", affected.length, "components")
756
+ * ```
757
+ */
758
+ abstract setStorey(components: ComponentHandle[], storey: number): PluginApiReturn<PluginDesignChangeResult>;
759
+ /**
760
+ * Update an existing parametric buildable envelope — regenerate the zoning
761
+ * volume from a revised site polygon, setbacks, vertical cap, or FAR and
762
+ * lot-coverage limits, keeping the same envelope id. Canonical home of the
763
+ * update formerly at `entity.buildableEnvelope.update` (now deprecated).
764
+ *
765
+ * @param buildableEnvelopeId - Existing envelope ID to update; non-empty and
766
+ * must match an existing envelope on the canvas.
767
+ * @param sitePolygon - Site polygon vertices in `lengthUnit`; minimum 3 vertices.
768
+ * @param lengthUnit - Unit used by all length fields (`"ft" | "m"`).
769
+ * @param setbacks - Setback profile, ground tier first; minimum 1 tier.
770
+ * @param verticalCap - Maximum height or floor count.
771
+ * @param floorToFloor - Required floor-to-floor height in `lengthUnit`.
772
+ * @param farRatio - Optional FAR value, positive when provided.
773
+ * @param lotCoverageMaxPct - Optional lot coverage cap, `0..100`.
774
+ * @returns A {@linkcode PluginBuildableEnvelopeUpdateResult} with the
775
+ * `buildableEnvelopeId` of the updated envelope.
776
+ * @throws If validation fails, the envelope does not exist, or generation
777
+ * produces no renderable geometry.
778
+ *
779
+ * @examplePrompt Change the envelope's height limit to 175 feet
780
+ * @examplePrompt Update the setbacks on the buildable envelope
781
+ * @examplePrompt Regenerate the zoning envelope with a new site boundary
782
+ * @examplePrompt Increase the FAR on the buildable volume
783
+ *
784
+ * # Example
785
+ * ```ts
786
+ * const { buildableEnvelopeId } = await snaptrude.design.update.buildableEnvelope(
787
+ * existingId,
788
+ * [
789
+ * { x: 0, z: 0 },
790
+ * { x: 100, z: 0 },
791
+ * { x: 100, z: 80 },
792
+ * { x: 0, z: 80 },
793
+ * ],
794
+ * "ft",
795
+ * [{ aboveHeight: 0, front: 10, side: 5, rear: 10 }],
796
+ * { kind: "max_height", maxHeight: 175 },
797
+ * 12,
798
+ * )
799
+ * ```
800
+ */
801
+ abstract buildableEnvelope(buildableEnvelopeId: string, sitePolygon: PluginBuildableEnvelopePolygonVertex[], lengthUnit: "ft" | "m", setbacks: PluginBuildableEnvelopeSetbackTier[], verticalCap: PluginBuildableEnvelopeVerticalCap, floorToFloor: number, farRatio?: number, lotCoverageMaxPct?: number): PluginApiReturn<PluginBuildableEnvelopeUpdateResult>;
802
+ }
803
+ //# sourceMappingURL=index.d.ts.map