@snaptrude/plugin-core 0.9.16 → 0.9.18-edgesetbacks-20261021.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/AGENTS.md +231 -231
  2. package/CHANGELOG.md +408 -402
  3. package/CLAUDE.md +11 -11
  4. package/api-manifest.json +1510 -701
  5. package/dist/api/analysis/daylight.d.ts +5 -5
  6. package/dist/api/analysis/solar.d.ts +2 -2
  7. package/dist/api/core/camera/index.d.ts +29 -0
  8. package/dist/api/core/camera/index.d.ts.map +1 -1
  9. package/dist/api/core/geom/create/index.d.ts +7 -1
  10. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  11. package/dist/api/core/geom/update/contour.d.ts +8 -2
  12. package/dist/api/core/geom/update/contour.d.ts.map +1 -1
  13. package/dist/api/core/storeys/index.d.ts +5 -2
  14. package/dist/api/core/storeys/index.d.ts.map +1 -1
  15. package/dist/api/core/zoom/index.d.ts +13 -0
  16. package/dist/api/core/zoom/index.d.ts.map +1 -1
  17. package/dist/api/design/bim.d.ts +299 -0
  18. package/dist/api/design/bim.d.ts.map +1 -0
  19. package/dist/api/design/boolean/index.d.ts +2 -0
  20. package/dist/api/design/boolean/index.d.ts.map +1 -1
  21. package/dist/api/design/catalog.d.ts +320 -0
  22. package/dist/api/design/catalog.d.ts.map +1 -0
  23. package/dist/api/design/create/bulk-items.d.ts +65 -25
  24. package/dist/api/design/create/bulk-items.d.ts.map +1 -1
  25. package/dist/api/design/create/index.d.ts +299 -100
  26. package/dist/api/design/create/index.d.ts.map +1 -1
  27. package/dist/api/design/create/opening-fields.d.ts +13 -12
  28. package/dist/api/design/create/opening-fields.d.ts.map +1 -1
  29. package/dist/api/design/delete/index.d.ts +1 -0
  30. package/dist/api/design/delete/index.d.ts.map +1 -1
  31. package/dist/api/design/doors/index.d.ts +18 -24
  32. package/dist/api/design/doors/index.d.ts.map +1 -1
  33. package/dist/api/design/family.d.ts +813 -35
  34. package/dist/api/design/family.d.ts.map +1 -1
  35. package/dist/api/design/index.d.ts +16 -0
  36. package/dist/api/design/index.d.ts.map +1 -1
  37. package/dist/api/design/networks.d.ts +1703 -0
  38. package/dist/api/design/networks.d.ts.map +1 -0
  39. package/dist/api/design/query/grids.d.ts +2 -2
  40. package/dist/api/design/query/index.d.ts +42 -32
  41. package/dist/api/design/query/index.d.ts.map +1 -1
  42. package/dist/api/design/selection/index.d.ts +10 -10
  43. package/dist/api/design/types/index.d.ts +40 -24
  44. package/dist/api/design/types/index.d.ts.map +1 -1
  45. package/dist/api/design/update/index.d.ts +111 -6
  46. package/dist/api/design/update/index.d.ts.map +1 -1
  47. package/dist/api/design/windows/index.d.ts +8 -8
  48. package/dist/api/design/windows/index.d.ts.map +1 -1
  49. package/dist/api/entity/buildableEnvelope.d.ts +84 -2
  50. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  51. package/dist/api/presentation/aiInspiration.d.ts +10 -10
  52. package/dist/api/presentation/annotate.d.ts +38 -22
  53. package/dist/api/presentation/annotate.d.ts.map +1 -1
  54. package/dist/api/presentation/drawingContract.d.ts +32 -0
  55. package/dist/api/presentation/drawingContract.d.ts.map +1 -0
  56. package/dist/api/presentation/drawings.d.ts +3523 -0
  57. package/dist/api/presentation/drawings.d.ts.map +1 -0
  58. package/dist/api/presentation/export.d.ts +23 -5
  59. package/dist/api/presentation/export.d.ts.map +1 -1
  60. package/dist/api/presentation/index.d.ts +41 -12
  61. package/dist/api/presentation/index.d.ts.map +1 -1
  62. package/dist/api/presentation/placedViews.d.ts +106 -6
  63. package/dist/api/presentation/placedViews.d.ts.map +1 -1
  64. package/dist/api/presentation/sections.d.ts +461 -0
  65. package/dist/api/presentation/sections.d.ts.map +1 -0
  66. package/dist/api/presentation/shapes.d.ts +2 -2
  67. package/dist/api/presentation/sheets.d.ts +175 -19
  68. package/dist/api/presentation/sheets.d.ts.map +1 -1
  69. package/dist/api/presentation/viewPresets.d.ts +222 -0
  70. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  71. package/dist/api/presentation/views.d.ts +141 -8
  72. package/dist/api/presentation/views.d.ts.map +1 -1
  73. package/dist/api/presentation/walkthroughs.d.ts +6 -6
  74. package/dist/errors/codes.d.ts +3 -1
  75. package/dist/errors/codes.d.ts.map +1 -1
  76. package/dist/index.cjs +3883 -2385
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.js +3744 -2385
  79. package/dist/index.js.map +1 -1
  80. package/package.json +1 -1
  81. package/scripts/check-dist-fresh.mjs +22 -22
  82. package/scripts/generate-manifest.mjs +243 -238
  83. package/scripts/generate-manifest.test.mjs +303 -303
  84. package/src/api/analysis/daylight.ts +470 -470
  85. package/src/api/analysis/heatmaps.ts +683 -683
  86. package/src/api/analysis/illuminance.ts +155 -155
  87. package/src/api/analysis/index.ts +61 -61
  88. package/src/api/analysis/shadows.ts +183 -183
  89. package/src/api/analysis/solar.ts +237 -237
  90. package/src/api/analysis/sunlightHours.ts +211 -211
  91. package/src/api/analysis/sunpath.ts +83 -83
  92. package/src/api/analysis/weather.ts +179 -179
  93. package/src/api/core/buildings.ts +485 -485
  94. package/src/api/core/camera/index.ts +696 -667
  95. package/src/api/core/comment/index.ts +376 -376
  96. package/src/api/core/geom/create/index.ts +2139 -2133
  97. package/src/api/core/geom/delete/index.ts +84 -84
  98. package/src/api/core/geom/index.ts +35 -35
  99. package/src/api/core/geom/query/arc.ts +169 -169
  100. package/src/api/core/geom/query/brep.ts +621 -621
  101. package/src/api/core/geom/query/circle.ts +404 -404
  102. package/src/api/core/geom/query/contour.ts +540 -540
  103. package/src/api/core/geom/query/curve.ts +1102 -1102
  104. package/src/api/core/geom/query/edge.ts +130 -130
  105. package/src/api/core/geom/query/face.ts +508 -508
  106. package/src/api/core/geom/query/halfedge.ts +210 -210
  107. package/src/api/core/geom/query/index.ts +63 -63
  108. package/src/api/core/geom/query/profile.ts +473 -473
  109. package/src/api/core/geom/query/vertex.ts +205 -205
  110. package/src/api/core/geom/update/contour.ts +323 -317
  111. package/src/api/core/geom/update/curve.ts +209 -209
  112. package/src/api/core/geom/update/index.ts +29 -29
  113. package/src/api/core/geom/update/profile.ts +379 -379
  114. package/src/api/core/groups.ts +521 -521
  115. package/src/api/core/handles/index.ts +234 -234
  116. package/src/api/core/history/index.ts +84 -84
  117. package/src/api/core/index.ts +99 -99
  118. package/src/api/core/io/export/index.ts +126 -126
  119. package/src/api/core/io/import/index.ts +504 -504
  120. package/src/api/core/io/index.ts +42 -42
  121. package/src/api/core/io/job/index.ts +140 -140
  122. package/src/api/core/io/query/index.ts +71 -71
  123. package/src/api/core/io/terrain/index.ts +360 -360
  124. package/src/api/core/io/underlay/index.ts +705 -705
  125. package/src/api/core/layers.ts +540 -540
  126. package/src/api/core/math/index.ts +20 -20
  127. package/src/api/core/math/quat.ts +172 -172
  128. package/src/api/core/math/vec3.ts +179 -179
  129. package/src/api/core/mode/index.ts +108 -108
  130. package/src/api/core/project/index.ts +479 -479
  131. package/src/api/core/proposals/index.ts +570 -570
  132. package/src/api/core/storeys/index.ts +311 -308
  133. package/src/api/core/storeys/layers.ts +339 -339
  134. package/src/api/core/tags.ts +911 -911
  135. package/src/api/core/units/index.ts +164 -164
  136. package/src/api/core/user.ts +46 -46
  137. package/src/api/core/zoom/index.ts +64 -51
  138. package/src/api/design/bim.ts +210 -0
  139. package/src/api/design/boolean/index.ts +181 -179
  140. package/src/api/design/catalog.ts +203 -0
  141. package/src/api/design/create/bulk-items.ts +294 -254
  142. package/src/api/design/create/grids.ts +137 -137
  143. package/src/api/design/create/index.ts +2178 -1980
  144. package/src/api/design/create/opening-fields.ts +40 -37
  145. package/src/api/design/delete/index.ts +75 -74
  146. package/src/api/design/dimensions.ts +453 -453
  147. package/src/api/design/doors/index.ts +516 -500
  148. package/src/api/design/edit/index.ts +54 -54
  149. package/src/api/design/erase/index.ts +151 -151
  150. package/src/api/design/family.ts +1342 -704
  151. package/src/api/design/furniture/index.ts +319 -319
  152. package/src/api/design/grids.ts +237 -237
  153. package/src/api/design/index.ts +304 -274
  154. package/src/api/design/lock.ts +69 -69
  155. package/src/api/design/materials/index.ts +608 -608
  156. package/src/api/design/networks.ts +607 -0
  157. package/src/api/design/query/geometry/index.ts +319 -319
  158. package/src/api/design/query/grids.ts +197 -197
  159. package/src/api/design/query/index.ts +1236 -1226
  160. package/src/api/design/query/referenceLines.ts +52 -52
  161. package/src/api/design/query/spaces.ts +275 -275
  162. package/src/api/design/selection/index.ts +273 -273
  163. package/src/api/design/shared.ts +40 -40
  164. package/src/api/design/transform/index.ts +254 -254
  165. package/src/api/design/types/index.ts +163 -156
  166. package/src/api/design/update/index.ts +1096 -983
  167. package/src/api/design/visibility.ts +143 -143
  168. package/src/api/design/windows/index.ts +351 -333
  169. package/src/api/entity/buildableEnvelope.ts +397 -322
  170. package/src/api/entity/index.ts +30 -30
  171. package/src/api/entity/referenceLine.ts +235 -235
  172. package/src/api/entity/space.ts +612 -612
  173. package/src/api/entity/story.ts +517 -517
  174. package/src/api/index.ts +47 -47
  175. package/src/api/presentation/aiInspiration.ts +1116 -1116
  176. package/src/api/presentation/annotate.ts +417 -385
  177. package/src/api/presentation/camera.ts +289 -289
  178. package/src/api/presentation/diagrams.ts +194 -194
  179. package/src/api/presentation/drawingContract.ts +70 -0
  180. package/src/api/presentation/drawings.ts +1179 -0
  181. package/src/api/presentation/export.ts +134 -108
  182. package/src/api/presentation/import.ts +159 -159
  183. package/src/api/presentation/index.ts +160 -126
  184. package/src/api/presentation/placedViews.ts +1211 -1120
  185. package/src/api/presentation/sections.ts +420 -0
  186. package/src/api/presentation/shapes.ts +274 -274
  187. package/src/api/presentation/sheets.ts +746 -585
  188. package/src/api/presentation/slideshow.ts +134 -134
  189. package/src/api/presentation/tables.ts +84 -84
  190. package/src/api/presentation/viewPresets.ts +241 -0
  191. package/src/api/presentation/views.ts +742 -673
  192. package/src/api/presentation/walkthroughs.ts +1201 -1201
  193. package/src/api/program/adjacency.ts +164 -164
  194. package/src/api/program/areas.ts +408 -408
  195. package/src/api/program/classification.ts +138 -138
  196. package/src/api/program/cores.ts +83 -83
  197. package/src/api/program/departments.ts +517 -517
  198. package/src/api/program/index.ts +73 -73
  199. package/src/api/program/labels.ts +332 -332
  200. package/src/api/program/layout.ts +422 -422
  201. package/src/api/program/metadata.ts +364 -364
  202. package/src/api/program/metrics.ts +120 -120
  203. package/src/api/program/site.ts +748 -748
  204. package/src/api/program/spreadsheet.ts +2698 -2698
  205. package/src/api/workspace/index.ts +612 -612
  206. package/src/errors/codes.ts +143 -136
  207. package/src/errors/envelope.ts +75 -75
  208. package/src/errors/index.ts +21 -21
  209. package/src/errors/plugin-error.ts +134 -134
  210. package/src/handles.ts +297 -297
  211. package/src/host-utils.ts +67 -67
  212. package/src/index.ts +7 -7
  213. package/src/massParameters.ops.ts +246 -246
  214. package/src/massParameters.ts +427 -427
  215. package/src/types.ts +16 -16
  216. package/test/drawingContract.test.mjs +288 -0
  217. package/test/errors.test.mjs +185 -184
  218. package/test/massParameters.test.mjs +952 -952
  219. package/test/presentationViewSettings.test.mjs +85 -0
  220. package/tsconfig.json +22 -22
  221. package/tsup.config.ts +12 -12
@@ -1,485 +1,485 @@
1
- import * as z from "zod"
2
- import { PluginApiReturn } from "../../types"
3
-
4
- /**
5
- * Buildings — read and edit the buildings of the active project.
6
- *
7
- * A **building** is the top of the project's spatial hierarchy: a named container
8
- * of storeys, positioned by its base elevation. This namespace reads a building's
9
- * identity and base elevation and lists the storeys it holds; storey detail is
10
- * read through the entity story surface (`snaptrude.entity.story`).
11
- *
12
- * Reads return plain records and never throw for a missing building (`get` and
13
- * `getActive` return `null`, `list` returns `[]`). Ids are stable public strings.
14
- *
15
- * Sub-namespace members typed as optional (`?`) are **authored ahead of the
16
- * host** — declared so plugins and codegen can see the shape, but kept out of the
17
- * discovery manifest until the host lands them (at which point they are promoted
18
- * to required `abstract` members).
19
- *
20
- * Accessed via `snaptrude.core.buildings`.
21
- */
22
- export abstract class PluginCoreBuildingsApi {
23
- constructor() {}
24
-
25
- /**
26
- * List the buildings in the active project.
27
- *
28
- * @returns A {@linkcode PluginCoreBuildingsListResult} with a `buildings` array
29
- * (empty when the project has none).
30
- *
31
- * @examplePrompt List all the buildings in my project
32
- * @examplePrompt How many buildings are in this model?
33
- * @examplePrompt Show every building with its base elevation
34
- *
35
- * # Example
36
- * ```ts
37
- * const { buildings } = await snaptrude.core.buildings.list()
38
- * for (const b of buildings) console.log(b.name, b.baseElevation)
39
- * ```
40
- */
41
- public abstract list(): PluginApiReturn<PluginCoreBuildingsListResult>
42
-
43
- /**
44
- * Get a single building by id.
45
- *
46
- * @param buildingId - The id of the building to read.
47
- * @returns The matching {@linkcode PluginCoreBuildingRef}, or `null` if no
48
- * building has that id.
49
- *
50
- * @examplePrompt Get the building with id blg_1
51
- * @examplePrompt Look up a single building by its id
52
- * @examplePrompt What is the base elevation of building blg_2?
53
- *
54
- * # Example
55
- * ```ts
56
- * const building = await snaptrude.core.buildings.get("blg_1")
57
- * if (building) console.log(building.name, building.baseElevation)
58
- * ```
59
- */
60
- public abstract get(
61
- buildingId: string,
62
- ): PluginApiReturn<PluginCoreBuildingsGetResult>
63
-
64
- /**
65
- * List the storeys of a building.
66
- *
67
- * Returns the building's storeys as stable storey ids, in the project's storey
68
- * order. Read each storey's detail through `snaptrude.entity.story`.
69
- *
70
- * @param buildingId - The id of the building whose storeys to list.
71
- * @returns A {@linkcode PluginCoreBuildingsListStoreysResult} with a `storeyIds`
72
- * array (empty when the building is missing or has no storeys).
73
- *
74
- * @examplePrompt List the storeys in building blg_1
75
- * @examplePrompt How many floors does this building have?
76
- * @examplePrompt Get the storey ids of the active building
77
- *
78
- * # Example
79
- * ```ts
80
- * const { storeyIds } = await snaptrude.core.buildings.listStoreys("blg_1")
81
- * console.log(`${storeyIds.length} storeys`)
82
- * ```
83
- */
84
- public abstract listStoreys(
85
- buildingId: string,
86
- ): PluginApiReturn<PluginCoreBuildingsListStoreysResult>
87
-
88
- /**
89
- * Get the active building.
90
- *
91
- * The active building is the one new storeys and edits target. Paired with
92
- * {@linkcode PluginCoreBuildingsApi.setActive}.
93
- *
94
- * @returns A {@linkcode PluginCoreBuildingsGetActiveResult} with the active
95
- * `buildingId`, or `null` if there is no active building.
96
- *
97
- * @examplePrompt Which building is active?
98
- * @examplePrompt Get the current building
99
- * @examplePrompt What building am I working in?
100
- *
101
- * # Example
102
- * ```ts
103
- * const active = await snaptrude.core.buildings.getActive()
104
- * if (active) console.log(active.buildingId)
105
- * ```
106
- */
107
- public abstract getActive(): PluginApiReturn<PluginCoreBuildingsGetActiveResult>
108
-
109
- /**
110
- * Make a building the active building.
111
- *
112
- * Paired with {@linkcode PluginCoreBuildingsApi.getActive}.
113
- *
114
- * @param buildingId - The id of the building to activate.
115
- * @returns The id of the now-active building.
116
- * @throws If no building has the given id.
117
- *
118
- * @examplePrompt Switch to building blg_2
119
- * @examplePrompt Make this building the active one
120
- * @examplePrompt Set the active building to blg_1
121
- *
122
- * # Example
123
- * ```ts
124
- * await snaptrude.core.buildings.setActive("blg_2")
125
- * ```
126
- */
127
- public abstract setActive(
128
- buildingId: string,
129
- ): PluginApiReturn<PluginCoreBuildingsSetActiveResult>
130
-
131
- /**
132
- * Create a new building.
133
- *
134
- * Adds a named building at the given base elevation (defaults to `0`). The new
135
- * building starts empty — add storeys through the storeys namespace.
136
- *
137
- * @param name - Display name of the new building.
138
- * @param baseElevation - Base elevation in meters (defaults to `0`).
139
- * @returns The new building's id (read the full record back with
140
- * {@linkcode PluginCoreBuildingsApi.get}).
141
- * @throws If the building could not be created.
142
- *
143
- * @examplePrompt Create a building called Tower B
144
- * @examplePrompt Add a new building at elevation 12 meters
145
- * @examplePrompt Make a second building named Annex
146
- *
147
- * # Example
148
- * ```ts
149
- * const { buildingId } = await snaptrude.core.buildings.create("Tower B", 0)
150
- * ```
151
- */
152
- public abstract create(
153
- name: string,
154
- baseElevation?: number,
155
- ): PluginApiReturn<PluginCoreBuildingsCreateResult>
156
-
157
- /**
158
- * Update a building's name and/or base elevation.
159
- *
160
- * A **sparse** update: omitted fields are left unchanged.
161
- *
162
- * @param buildingId - The id of the building to update.
163
- * @param options - Any of `name`, `baseElevation`; omitted fields are left
164
- * unchanged.
165
- * @returns The updated {@linkcode PluginCoreBuildingRef}.
166
- * @throws If no building has the given id.
167
- *
168
- * @examplePrompt Rename building blg_1 to Tower A
169
- * @examplePrompt Move the building up to elevation 6 meters
170
- * @examplePrompt Change the base elevation of blg_2
171
- *
172
- * # Example
173
- * ```ts
174
- * const building = await snaptrude.core.buildings.update("blg_1", { name: "Tower A" })
175
- * ```
176
- */
177
- public abstract update(
178
- buildingId: string,
179
- options?: { name?: string; baseElevation?: number },
180
- ): PluginApiReturn<PluginCoreBuildingsUpdateResult>
181
-
182
- /**
183
- * Copy a building.
184
- *
185
- * Copies the building — its storeys, components, and drawing layers — into a new
186
- * building. `asInstances` controls the copy's geometry: `true` shares the source
187
- * geometry as instances (low memory), `false` makes independent editable copies
188
- * (the host defaults to `true`). Optionally override the copy's `name` and
189
- * `baseElevation`.
190
- *
191
- * @param buildingId - The id of the building to copy.
192
- * @param options - Optional `name`, `baseElevation`, `asInstances` overrides
193
- * for the copy.
194
- * @returns The new building's id.
195
- * @throws If no building has the given id.
196
- *
197
- * @examplePrompt Copy building blg_1
198
- * @examplePrompt Make an independent editable copy of this building
199
- * @examplePrompt Copy Tower A as instances to save memory
200
- *
201
- * # Example
202
- * ```ts
203
- * const { buildingId } = await snaptrude.core.buildings.copy("blg_1", {
204
- * name: "Tower A Copy",
205
- * asInstances: false,
206
- * })
207
- * ```
208
- */
209
- public abstract copy(
210
- buildingId: string,
211
- options?: { name?: string; baseElevation?: number; asInstances?: boolean },
212
- ): PluginApiReturn<PluginCoreBuildingsCopyResult>
213
-
214
- /**
215
- * Delete a building.
216
- *
217
- * **Gated and destructive.** Deleting a building cascades through its meshes,
218
- * storeys, and the building itself, and removes its saved views — **saved views
219
- * are not restored on undo.** The project's only remaining building cannot be
220
- * deleted.
221
- *
222
- * @param buildingId - The id of the building to delete.
223
- * @returns Confirmation that the building was deleted.
224
- * @throws If no building has the given id, or it is the only building.
225
- *
226
- * @examplePrompt Delete building blg_2
227
- * @examplePrompt Remove the Annex building and everything in it
228
- * @examplePrompt Delete this building
229
- *
230
- * # Example
231
- * ```ts
232
- * await snaptrude.core.buildings.delete("blg_2")
233
- * ```
234
- */
235
- public abstract delete(
236
- buildingId: string,
237
- ): PluginApiReturn<PluginCoreBuildingsDeleteResult>
238
- }
239
-
240
- /**
241
- * A building in the active project.
242
- *
243
- * | Property | Type | Description |
244
- * |---|---|---|
245
- * | `id` | `string` | Stable public building id (e.g. `"blg_1"`) |
246
- * | `name` | `string` | Display name |
247
- * | `baseElevation` | `number` | Base elevation in meters, positive up (default `0`) |
248
- */
249
- export const PluginCoreBuildingRef = z.object({
250
- id: z.string(),
251
- name: z.string(),
252
- baseElevation: z.number(),
253
- })
254
- export type PluginCoreBuildingRef = z.infer<typeof PluginCoreBuildingRef>
255
-
256
- /**
257
- * Result of {@linkcode PluginCoreBuildingsApi.list}.
258
- *
259
- * | Property | Type | Description |
260
- * |---|---|---|
261
- * | `buildings` | {@linkcode PluginCoreBuildingRef}`[]` | Every building in the active project |
262
- */
263
- export const PluginCoreBuildingsListResult = z.object({
264
- buildings: z.array(PluginCoreBuildingRef),
265
- })
266
- export type PluginCoreBuildingsListResult = z.infer<
267
- typeof PluginCoreBuildingsListResult
268
- >
269
-
270
- /**
271
- * Arguments for {@linkcode PluginCoreBuildingsApi.get}.
272
- *
273
- * | Property | Type | Description |
274
- * |---|---|---|
275
- * | `buildingId` | `string` | The id of the building to read |
276
- */
277
- export const PluginCoreBuildingsGetArgs = z.object({
278
- buildingId: z.string(),
279
- })
280
- export type PluginCoreBuildingsGetArgs = z.infer<
281
- typeof PluginCoreBuildingsGetArgs
282
- >
283
-
284
- /**
285
- * Result of {@linkcode PluginCoreBuildingsApi.get} — the building, or `null` when
286
- * no building has the given id.
287
- */
288
- export const PluginCoreBuildingsGetResult = PluginCoreBuildingRef.nullable()
289
- export type PluginCoreBuildingsGetResult = z.infer<
290
- typeof PluginCoreBuildingsGetResult
291
- >
292
-
293
- /**
294
- * Arguments for {@linkcode PluginCoreBuildingsApi.listStoreys}.
295
- *
296
- * | Property | Type | Description |
297
- * |---|---|---|
298
- * | `buildingId` | `string` | The id of the building whose storeys to list |
299
- */
300
- export const PluginCoreBuildingsListStoreysArgs = z.object({
301
- buildingId: z.string(),
302
- })
303
- export type PluginCoreBuildingsListStoreysArgs = z.infer<
304
- typeof PluginCoreBuildingsListStoreysArgs
305
- >
306
-
307
- /**
308
- * Result of {@linkcode PluginCoreBuildingsApi.listStoreys}.
309
- *
310
- * | Property | Type | Description |
311
- * |---|---|---|
312
- * | `storeyIds` | `string[]` | The building's storey ids in storey order (empty when missing or none) |
313
- */
314
- export const PluginCoreBuildingsListStoreysResult = z.object({
315
- storeyIds: z.array(z.string()),
316
- })
317
- export type PluginCoreBuildingsListStoreysResult = z.infer<
318
- typeof PluginCoreBuildingsListStoreysResult
319
- >
320
-
321
- /**
322
- * Result of {@linkcode PluginCoreBuildingsApi.getActive} — the active building's
323
- * id, or `null` when there is no active building.
324
- *
325
- * | Property | Type | Description |
326
- * |---|---|---|
327
- * | `buildingId` | `string` | The id of the active building |
328
- */
329
- export const PluginCoreBuildingsGetActiveResult = z
330
- .object({
331
- buildingId: z.string(),
332
- })
333
- .nullable()
334
- export type PluginCoreBuildingsGetActiveResult = z.infer<
335
- typeof PluginCoreBuildingsGetActiveResult
336
- >
337
-
338
- /**
339
- * Arguments for {@linkcode PluginCoreBuildingsApi.setActive}.
340
- *
341
- * | Property | Type | Description |
342
- * |---|---|---|
343
- * | `buildingId` | `string` | The id of the building to activate |
344
- */
345
- export const PluginCoreBuildingsSetActiveArgs = z.object({
346
- buildingId: z.string(),
347
- })
348
- export type PluginCoreBuildingsSetActiveArgs = z.infer<
349
- typeof PluginCoreBuildingsSetActiveArgs
350
- >
351
-
352
- /**
353
- * Result of {@linkcode PluginCoreBuildingsApi.setActive} — the now-active
354
- * building's id.
355
- *
356
- * | Property | Type | Description |
357
- * |---|---|---|
358
- * | `buildingId` | `string` | The id of the now-active building |
359
- */
360
- export const PluginCoreBuildingsSetActiveResult = z.object({
361
- buildingId: z.string(),
362
- })
363
- export type PluginCoreBuildingsSetActiveResult = z.infer<
364
- typeof PluginCoreBuildingsSetActiveResult
365
- >
366
-
367
- /**
368
- * Arguments for {@linkcode PluginCoreBuildingsApi.create}.
369
- *
370
- * | Property | Type | Description |
371
- * |---|---|---|
372
- * | `name` | `string` | Display name of the new building |
373
- * | `baseElevation` | `number \| undefined` | Base elevation in meters (defaults to `0`) |
374
- */
375
- export const PluginCoreBuildingsCreateArgs = z.object({
376
- name: z.string(),
377
- baseElevation: z.number().optional(),
378
- })
379
- export type PluginCoreBuildingsCreateArgs = z.infer<
380
- typeof PluginCoreBuildingsCreateArgs
381
- >
382
-
383
- /**
384
- * Result of {@linkcode PluginCoreBuildingsApi.create} — the id of the new
385
- * building.
386
- *
387
- * | Property | Type | Description |
388
- * |---|---|---|
389
- * | `buildingId` | `string` | The id of the newly created building |
390
- */
391
- export const PluginCoreBuildingsCreateResult = z.object({
392
- buildingId: z.string(),
393
- })
394
- export type PluginCoreBuildingsCreateResult = z.infer<
395
- typeof PluginCoreBuildingsCreateResult
396
- >
397
-
398
- /**
399
- * Arguments for {@linkcode PluginCoreBuildingsApi.update}. Sparse — only the
400
- * provided fields are changed.
401
- *
402
- * | Property | Type | Description |
403
- * |---|---|---|
404
- * | `buildingId` | `string` | The id of the building to update |
405
- * | `name` | `string \| undefined` | New display name (unchanged if omitted) |
406
- * | `baseElevation` | `number \| undefined` | New base elevation in meters (unchanged if omitted) |
407
- */
408
- export const PluginCoreBuildingsUpdateArgs = z.object({
409
- buildingId: z.string(),
410
- name: z.string().optional(),
411
- baseElevation: z.number().optional(),
412
- })
413
- export type PluginCoreBuildingsUpdateArgs = z.infer<
414
- typeof PluginCoreBuildingsUpdateArgs
415
- >
416
-
417
- /** Result of {@linkcode PluginCoreBuildingsApi.update} — the updated record. */
418
- export const PluginCoreBuildingsUpdateResult = PluginCoreBuildingRef
419
- export type PluginCoreBuildingsUpdateResult = z.infer<
420
- typeof PluginCoreBuildingsUpdateResult
421
- >
422
-
423
- /**
424
- * Arguments for {@linkcode PluginCoreBuildingsApi.copy}.
425
- *
426
- * | Property | Type | Description |
427
- * |---|---|---|
428
- * | `buildingId` | `string` | The id of the building to copy |
429
- * | `name` | `string \| undefined` | Name for the copy (auto-generated if omitted) |
430
- * | `baseElevation` | `number \| undefined` | Base elevation for the copy in meters (source's if omitted) |
431
- * | `asInstances` | `boolean \| undefined` | `true` shares source geometry as instances; `false` makes independent copies (host default `true`) |
432
- */
433
- export const PluginCoreBuildingsCopyArgs = z.object({
434
- buildingId: z.string(),
435
- name: z.string().optional(),
436
- baseElevation: z.number().optional(),
437
- asInstances: z.boolean().optional(),
438
- })
439
- export type PluginCoreBuildingsCopyArgs = z.infer<
440
- typeof PluginCoreBuildingsCopyArgs
441
- >
442
-
443
- /**
444
- * Result of {@linkcode PluginCoreBuildingsApi.copy} — the id of the new
445
- * building.
446
- *
447
- * | Property | Type | Description |
448
- * |---|---|---|
449
- * | `buildingId` | `string` | The id of the copied building |
450
- */
451
- export const PluginCoreBuildingsCopyResult = z.object({
452
- buildingId: z.string(),
453
- })
454
- export type PluginCoreBuildingsCopyResult = z.infer<
455
- typeof PluginCoreBuildingsCopyResult
456
- >
457
-
458
- /**
459
- * Arguments for {@linkcode PluginCoreBuildingsApi.delete}.
460
- *
461
- * | Property | Type | Description |
462
- * |---|---|---|
463
- * | `buildingId` | `string` | The id of the building to delete |
464
- */
465
- export const PluginCoreBuildingsDeleteArgs = z.object({
466
- buildingId: z.string(),
467
- })
468
- export type PluginCoreBuildingsDeleteArgs = z.infer<
469
- typeof PluginCoreBuildingsDeleteArgs
470
- >
471
-
472
- /**
473
- * Result of {@linkcode PluginCoreBuildingsApi.delete} — confirmation that the
474
- * building was deleted.
475
- *
476
- * | Property | Type | Description |
477
- * |---|---|---|
478
- * | `deleted` | `true` | Always `true` on success |
479
- */
480
- export const PluginCoreBuildingsDeleteResult = z.object({
481
- deleted: z.literal(true),
482
- })
483
- export type PluginCoreBuildingsDeleteResult = z.infer<
484
- typeof PluginCoreBuildingsDeleteResult
485
- >
1
+ import * as z from "zod"
2
+ import { PluginApiReturn } from "../../types"
3
+
4
+ /**
5
+ * Buildings — read and edit the buildings of the active project.
6
+ *
7
+ * A **building** is the top of the project's spatial hierarchy: a named container
8
+ * of storeys, positioned by its base elevation. This namespace reads a building's
9
+ * identity and base elevation and lists the storeys it holds; storey detail is
10
+ * read through the entity story surface (`snaptrude.entity.story`).
11
+ *
12
+ * Reads return plain records and never throw for a missing building (`get` and
13
+ * `getActive` return `null`, `list` returns `[]`). Ids are stable public strings.
14
+ *
15
+ * Sub-namespace members typed as optional (`?`) are **authored ahead of the
16
+ * host** — declared so plugins and codegen can see the shape, but kept out of the
17
+ * discovery manifest until the host lands them (at which point they are promoted
18
+ * to required `abstract` members).
19
+ *
20
+ * Accessed via `snaptrude.core.buildings`.
21
+ */
22
+ export abstract class PluginCoreBuildingsApi {
23
+ constructor() {}
24
+
25
+ /**
26
+ * List the buildings in the active project.
27
+ *
28
+ * @returns A {@linkcode PluginCoreBuildingsListResult} with a `buildings` array
29
+ * (empty when the project has none).
30
+ *
31
+ * @examplePrompt List all the buildings in my project
32
+ * @examplePrompt How many buildings are in this model?
33
+ * @examplePrompt Show every building with its base elevation
34
+ *
35
+ * # Example
36
+ * ```ts
37
+ * const { buildings } = await snaptrude.core.buildings.list()
38
+ * for (const b of buildings) console.log(b.name, b.baseElevation)
39
+ * ```
40
+ */
41
+ public abstract list(): PluginApiReturn<PluginCoreBuildingsListResult>
42
+
43
+ /**
44
+ * Get a single building by id.
45
+ *
46
+ * @param buildingId - The id of the building to read.
47
+ * @returns The matching {@linkcode PluginCoreBuildingRef}, or `null` if no
48
+ * building has that id.
49
+ *
50
+ * @examplePrompt Get the building with id blg_1
51
+ * @examplePrompt Look up a single building by its id
52
+ * @examplePrompt What is the base elevation of building blg_2?
53
+ *
54
+ * # Example
55
+ * ```ts
56
+ * const building = await snaptrude.core.buildings.get("blg_1")
57
+ * if (building) console.log(building.name, building.baseElevation)
58
+ * ```
59
+ */
60
+ public abstract get(
61
+ buildingId: string,
62
+ ): PluginApiReturn<PluginCoreBuildingsGetResult>
63
+
64
+ /**
65
+ * List the storeys of a building.
66
+ *
67
+ * Returns the building's storeys as stable storey ids, in the project's storey
68
+ * order. Read each storey's detail through `snaptrude.entity.story`.
69
+ *
70
+ * @param buildingId - The id of the building whose storeys to list.
71
+ * @returns A {@linkcode PluginCoreBuildingsListStoreysResult} with a `storeyIds`
72
+ * array (empty when the building is missing or has no storeys).
73
+ *
74
+ * @examplePrompt List the storeys in building blg_1
75
+ * @examplePrompt How many floors does this building have?
76
+ * @examplePrompt Get the storey ids of the active building
77
+ *
78
+ * # Example
79
+ * ```ts
80
+ * const { storeyIds } = await snaptrude.core.buildings.listStoreys("blg_1")
81
+ * console.log(`${storeyIds.length} storeys`)
82
+ * ```
83
+ */
84
+ public abstract listStoreys(
85
+ buildingId: string,
86
+ ): PluginApiReturn<PluginCoreBuildingsListStoreysResult>
87
+
88
+ /**
89
+ * Get the active building.
90
+ *
91
+ * The active building is the one new storeys and edits target. Paired with
92
+ * {@linkcode PluginCoreBuildingsApi.setActive}.
93
+ *
94
+ * @returns A {@linkcode PluginCoreBuildingsGetActiveResult} with the active
95
+ * `buildingId`, or `null` if there is no active building.
96
+ *
97
+ * @examplePrompt Which building is active?
98
+ * @examplePrompt Get the current building
99
+ * @examplePrompt What building am I working in?
100
+ *
101
+ * # Example
102
+ * ```ts
103
+ * const active = await snaptrude.core.buildings.getActive()
104
+ * if (active) console.log(active.buildingId)
105
+ * ```
106
+ */
107
+ public abstract getActive(): PluginApiReturn<PluginCoreBuildingsGetActiveResult>
108
+
109
+ /**
110
+ * Make a building the active building.
111
+ *
112
+ * Paired with {@linkcode PluginCoreBuildingsApi.getActive}.
113
+ *
114
+ * @param buildingId - The id of the building to activate.
115
+ * @returns The id of the now-active building.
116
+ * @throws If no building has the given id.
117
+ *
118
+ * @examplePrompt Switch to building blg_2
119
+ * @examplePrompt Make this building the active one
120
+ * @examplePrompt Set the active building to blg_1
121
+ *
122
+ * # Example
123
+ * ```ts
124
+ * await snaptrude.core.buildings.setActive("blg_2")
125
+ * ```
126
+ */
127
+ public abstract setActive(
128
+ buildingId: string,
129
+ ): PluginApiReturn<PluginCoreBuildingsSetActiveResult>
130
+
131
+ /**
132
+ * Create a new building.
133
+ *
134
+ * Adds a named building at the given base elevation (defaults to `0`). The new
135
+ * building starts empty — add storeys through the storeys namespace.
136
+ *
137
+ * @param name - Display name of the new building.
138
+ * @param baseElevation - Base elevation in meters (defaults to `0`).
139
+ * @returns The new building's id (read the full record back with
140
+ * {@linkcode PluginCoreBuildingsApi.get}).
141
+ * @throws If the building could not be created.
142
+ *
143
+ * @examplePrompt Create a building called Tower B
144
+ * @examplePrompt Add a new building at elevation 12 meters
145
+ * @examplePrompt Make a second building named Annex
146
+ *
147
+ * # Example
148
+ * ```ts
149
+ * const { buildingId } = await snaptrude.core.buildings.create("Tower B", 0)
150
+ * ```
151
+ */
152
+ public abstract create(
153
+ name: string,
154
+ baseElevation?: number,
155
+ ): PluginApiReturn<PluginCoreBuildingsCreateResult>
156
+
157
+ /**
158
+ * Update a building's name and/or base elevation.
159
+ *
160
+ * A **sparse** update: omitted fields are left unchanged.
161
+ *
162
+ * @param buildingId - The id of the building to update.
163
+ * @param options - Any of `name`, `baseElevation`; omitted fields are left
164
+ * unchanged.
165
+ * @returns The updated {@linkcode PluginCoreBuildingRef}.
166
+ * @throws If no building has the given id.
167
+ *
168
+ * @examplePrompt Rename building blg_1 to Tower A
169
+ * @examplePrompt Move the building up to elevation 6 meters
170
+ * @examplePrompt Change the base elevation of blg_2
171
+ *
172
+ * # Example
173
+ * ```ts
174
+ * const building = await snaptrude.core.buildings.update("blg_1", { name: "Tower A" })
175
+ * ```
176
+ */
177
+ public abstract update(
178
+ buildingId: string,
179
+ options?: { name?: string; baseElevation?: number },
180
+ ): PluginApiReturn<PluginCoreBuildingsUpdateResult>
181
+
182
+ /**
183
+ * Copy a building.
184
+ *
185
+ * Copies the building — its storeys, components, and drawing layers — into a new
186
+ * building. `asInstances` controls the copy's geometry: `true` shares the source
187
+ * geometry as instances (low memory), `false` makes independent editable copies
188
+ * (the host defaults to `true`). Optionally override the copy's `name` and
189
+ * `baseElevation`.
190
+ *
191
+ * @param buildingId - The id of the building to copy.
192
+ * @param options - Optional `name`, `baseElevation`, `asInstances` overrides
193
+ * for the copy.
194
+ * @returns The new building's id.
195
+ * @throws If no building has the given id.
196
+ *
197
+ * @examplePrompt Copy building blg_1
198
+ * @examplePrompt Make an independent editable copy of this building
199
+ * @examplePrompt Copy Tower A as instances to save memory
200
+ *
201
+ * # Example
202
+ * ```ts
203
+ * const { buildingId } = await snaptrude.core.buildings.copy("blg_1", {
204
+ * name: "Tower A Copy",
205
+ * asInstances: false,
206
+ * })
207
+ * ```
208
+ */
209
+ public abstract copy(
210
+ buildingId: string,
211
+ options?: { name?: string; baseElevation?: number; asInstances?: boolean },
212
+ ): PluginApiReturn<PluginCoreBuildingsCopyResult>
213
+
214
+ /**
215
+ * Delete a building.
216
+ *
217
+ * **Gated and destructive.** Deleting a building cascades through its meshes,
218
+ * storeys, and the building itself, and removes its saved views — **saved views
219
+ * are not restored on undo.** The project's only remaining building cannot be
220
+ * deleted.
221
+ *
222
+ * @param buildingId - The id of the building to delete.
223
+ * @returns Confirmation that the building was deleted.
224
+ * @throws If no building has the given id, or it is the only building.
225
+ *
226
+ * @examplePrompt Delete building blg_2
227
+ * @examplePrompt Remove the Annex building and everything in it
228
+ * @examplePrompt Delete this building
229
+ *
230
+ * # Example
231
+ * ```ts
232
+ * await snaptrude.core.buildings.delete("blg_2")
233
+ * ```
234
+ */
235
+ public abstract delete(
236
+ buildingId: string,
237
+ ): PluginApiReturn<PluginCoreBuildingsDeleteResult>
238
+ }
239
+
240
+ /**
241
+ * A building in the active project.
242
+ *
243
+ * | Property | Type | Description |
244
+ * |---|---|---|
245
+ * | `id` | `string` | Stable public building id (e.g. `"blg_1"`) |
246
+ * | `name` | `string` | Display name |
247
+ * | `baseElevation` | `number` | Base elevation in meters, positive up (default `0`) |
248
+ */
249
+ export const PluginCoreBuildingRef = z.object({
250
+ id: z.string(),
251
+ name: z.string(),
252
+ baseElevation: z.number(),
253
+ })
254
+ export type PluginCoreBuildingRef = z.infer<typeof PluginCoreBuildingRef>
255
+
256
+ /**
257
+ * Result of {@linkcode PluginCoreBuildingsApi.list}.
258
+ *
259
+ * | Property | Type | Description |
260
+ * |---|---|---|
261
+ * | `buildings` | {@linkcode PluginCoreBuildingRef}`[]` | Every building in the active project |
262
+ */
263
+ export const PluginCoreBuildingsListResult = z.object({
264
+ buildings: z.array(PluginCoreBuildingRef),
265
+ })
266
+ export type PluginCoreBuildingsListResult = z.infer<
267
+ typeof PluginCoreBuildingsListResult
268
+ >
269
+
270
+ /**
271
+ * Arguments for {@linkcode PluginCoreBuildingsApi.get}.
272
+ *
273
+ * | Property | Type | Description |
274
+ * |---|---|---|
275
+ * | `buildingId` | `string` | The id of the building to read |
276
+ */
277
+ export const PluginCoreBuildingsGetArgs = z.object({
278
+ buildingId: z.string(),
279
+ })
280
+ export type PluginCoreBuildingsGetArgs = z.infer<
281
+ typeof PluginCoreBuildingsGetArgs
282
+ >
283
+
284
+ /**
285
+ * Result of {@linkcode PluginCoreBuildingsApi.get} — the building, or `null` when
286
+ * no building has the given id.
287
+ */
288
+ export const PluginCoreBuildingsGetResult = PluginCoreBuildingRef.nullable()
289
+ export type PluginCoreBuildingsGetResult = z.infer<
290
+ typeof PluginCoreBuildingsGetResult
291
+ >
292
+
293
+ /**
294
+ * Arguments for {@linkcode PluginCoreBuildingsApi.listStoreys}.
295
+ *
296
+ * | Property | Type | Description |
297
+ * |---|---|---|
298
+ * | `buildingId` | `string` | The id of the building whose storeys to list |
299
+ */
300
+ export const PluginCoreBuildingsListStoreysArgs = z.object({
301
+ buildingId: z.string(),
302
+ })
303
+ export type PluginCoreBuildingsListStoreysArgs = z.infer<
304
+ typeof PluginCoreBuildingsListStoreysArgs
305
+ >
306
+
307
+ /**
308
+ * Result of {@linkcode PluginCoreBuildingsApi.listStoreys}.
309
+ *
310
+ * | Property | Type | Description |
311
+ * |---|---|---|
312
+ * | `storeyIds` | `string[]` | The building's storey ids in storey order (empty when missing or none) |
313
+ */
314
+ export const PluginCoreBuildingsListStoreysResult = z.object({
315
+ storeyIds: z.array(z.string()),
316
+ })
317
+ export type PluginCoreBuildingsListStoreysResult = z.infer<
318
+ typeof PluginCoreBuildingsListStoreysResult
319
+ >
320
+
321
+ /**
322
+ * Result of {@linkcode PluginCoreBuildingsApi.getActive} — the active building's
323
+ * id, or `null` when there is no active building.
324
+ *
325
+ * | Property | Type | Description |
326
+ * |---|---|---|
327
+ * | `buildingId` | `string` | The id of the active building |
328
+ */
329
+ export const PluginCoreBuildingsGetActiveResult = z
330
+ .object({
331
+ buildingId: z.string(),
332
+ })
333
+ .nullable()
334
+ export type PluginCoreBuildingsGetActiveResult = z.infer<
335
+ typeof PluginCoreBuildingsGetActiveResult
336
+ >
337
+
338
+ /**
339
+ * Arguments for {@linkcode PluginCoreBuildingsApi.setActive}.
340
+ *
341
+ * | Property | Type | Description |
342
+ * |---|---|---|
343
+ * | `buildingId` | `string` | The id of the building to activate |
344
+ */
345
+ export const PluginCoreBuildingsSetActiveArgs = z.object({
346
+ buildingId: z.string(),
347
+ })
348
+ export type PluginCoreBuildingsSetActiveArgs = z.infer<
349
+ typeof PluginCoreBuildingsSetActiveArgs
350
+ >
351
+
352
+ /**
353
+ * Result of {@linkcode PluginCoreBuildingsApi.setActive} — the now-active
354
+ * building's id.
355
+ *
356
+ * | Property | Type | Description |
357
+ * |---|---|---|
358
+ * | `buildingId` | `string` | The id of the now-active building |
359
+ */
360
+ export const PluginCoreBuildingsSetActiveResult = z.object({
361
+ buildingId: z.string(),
362
+ })
363
+ export type PluginCoreBuildingsSetActiveResult = z.infer<
364
+ typeof PluginCoreBuildingsSetActiveResult
365
+ >
366
+
367
+ /**
368
+ * Arguments for {@linkcode PluginCoreBuildingsApi.create}.
369
+ *
370
+ * | Property | Type | Description |
371
+ * |---|---|---|
372
+ * | `name` | `string` | Display name of the new building |
373
+ * | `baseElevation` | `number \| undefined` | Base elevation in meters (defaults to `0`) |
374
+ */
375
+ export const PluginCoreBuildingsCreateArgs = z.object({
376
+ name: z.string(),
377
+ baseElevation: z.number().optional(),
378
+ })
379
+ export type PluginCoreBuildingsCreateArgs = z.infer<
380
+ typeof PluginCoreBuildingsCreateArgs
381
+ >
382
+
383
+ /**
384
+ * Result of {@linkcode PluginCoreBuildingsApi.create} — the id of the new
385
+ * building.
386
+ *
387
+ * | Property | Type | Description |
388
+ * |---|---|---|
389
+ * | `buildingId` | `string` | The id of the newly created building |
390
+ */
391
+ export const PluginCoreBuildingsCreateResult = z.object({
392
+ buildingId: z.string(),
393
+ })
394
+ export type PluginCoreBuildingsCreateResult = z.infer<
395
+ typeof PluginCoreBuildingsCreateResult
396
+ >
397
+
398
+ /**
399
+ * Arguments for {@linkcode PluginCoreBuildingsApi.update}. Sparse — only the
400
+ * provided fields are changed.
401
+ *
402
+ * | Property | Type | Description |
403
+ * |---|---|---|
404
+ * | `buildingId` | `string` | The id of the building to update |
405
+ * | `name` | `string \| undefined` | New display name (unchanged if omitted) |
406
+ * | `baseElevation` | `number \| undefined` | New base elevation in meters (unchanged if omitted) |
407
+ */
408
+ export const PluginCoreBuildingsUpdateArgs = z.object({
409
+ buildingId: z.string(),
410
+ name: z.string().optional(),
411
+ baseElevation: z.number().optional(),
412
+ })
413
+ export type PluginCoreBuildingsUpdateArgs = z.infer<
414
+ typeof PluginCoreBuildingsUpdateArgs
415
+ >
416
+
417
+ /** Result of {@linkcode PluginCoreBuildingsApi.update} — the updated record. */
418
+ export const PluginCoreBuildingsUpdateResult = PluginCoreBuildingRef
419
+ export type PluginCoreBuildingsUpdateResult = z.infer<
420
+ typeof PluginCoreBuildingsUpdateResult
421
+ >
422
+
423
+ /**
424
+ * Arguments for {@linkcode PluginCoreBuildingsApi.copy}.
425
+ *
426
+ * | Property | Type | Description |
427
+ * |---|---|---|
428
+ * | `buildingId` | `string` | The id of the building to copy |
429
+ * | `name` | `string \| undefined` | Name for the copy (auto-generated if omitted) |
430
+ * | `baseElevation` | `number \| undefined` | Base elevation for the copy in meters (source's if omitted) |
431
+ * | `asInstances` | `boolean \| undefined` | `true` shares source geometry as instances; `false` makes independent copies (host default `true`) |
432
+ */
433
+ export const PluginCoreBuildingsCopyArgs = z.object({
434
+ buildingId: z.string(),
435
+ name: z.string().optional(),
436
+ baseElevation: z.number().optional(),
437
+ asInstances: z.boolean().optional(),
438
+ })
439
+ export type PluginCoreBuildingsCopyArgs = z.infer<
440
+ typeof PluginCoreBuildingsCopyArgs
441
+ >
442
+
443
+ /**
444
+ * Result of {@linkcode PluginCoreBuildingsApi.copy} — the id of the new
445
+ * building.
446
+ *
447
+ * | Property | Type | Description |
448
+ * |---|---|---|
449
+ * | `buildingId` | `string` | The id of the copied building |
450
+ */
451
+ export const PluginCoreBuildingsCopyResult = z.object({
452
+ buildingId: z.string(),
453
+ })
454
+ export type PluginCoreBuildingsCopyResult = z.infer<
455
+ typeof PluginCoreBuildingsCopyResult
456
+ >
457
+
458
+ /**
459
+ * Arguments for {@linkcode PluginCoreBuildingsApi.delete}.
460
+ *
461
+ * | Property | Type | Description |
462
+ * |---|---|---|
463
+ * | `buildingId` | `string` | The id of the building to delete |
464
+ */
465
+ export const PluginCoreBuildingsDeleteArgs = z.object({
466
+ buildingId: z.string(),
467
+ })
468
+ export type PluginCoreBuildingsDeleteArgs = z.infer<
469
+ typeof PluginCoreBuildingsDeleteArgs
470
+ >
471
+
472
+ /**
473
+ * Result of {@linkcode PluginCoreBuildingsApi.delete} — confirmation that the
474
+ * building was deleted.
475
+ *
476
+ * | Property | Type | Description |
477
+ * |---|---|---|
478
+ * | `deleted` | `true` | Always `true` on success |
479
+ */
480
+ export const PluginCoreBuildingsDeleteResult = z.object({
481
+ deleted: z.literal(true),
482
+ })
483
+ export type PluginCoreBuildingsDeleteResult = z.infer<
484
+ typeof PluginCoreBuildingsDeleteResult
485
+ >