@snaptrude/plugin-core 0.9.17 → 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 (219) hide show
  1. package/AGENTS.md +231 -231
  2. package/CHANGELOG.md +408 -408
  3. package/CLAUDE.md +11 -11
  4. package/api-manifest.json +1428 -712
  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 +32 -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/shapes.d.ts +2 -2
  65. package/dist/api/presentation/sheets.d.ts +175 -19
  66. package/dist/api/presentation/sheets.d.ts.map +1 -1
  67. package/dist/api/presentation/viewPresets.d.ts +222 -0
  68. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  69. package/dist/api/presentation/views.d.ts +141 -8
  70. package/dist/api/presentation/views.d.ts.map +1 -1
  71. package/dist/api/presentation/walkthroughs.d.ts +6 -6
  72. package/dist/errors/codes.d.ts +3 -1
  73. package/dist/errors/codes.d.ts.map +1 -1
  74. package/dist/index.cjs +3831 -2444
  75. package/dist/index.cjs.map +1 -1
  76. package/dist/index.js +3705 -2444
  77. package/dist/index.js.map +1 -1
  78. package/package.json +1 -1
  79. package/scripts/check-dist-fresh.mjs +22 -22
  80. package/scripts/generate-manifest.mjs +243 -238
  81. package/scripts/generate-manifest.test.mjs +303 -303
  82. package/src/api/analysis/daylight.ts +470 -470
  83. package/src/api/analysis/heatmaps.ts +683 -683
  84. package/src/api/analysis/illuminance.ts +155 -155
  85. package/src/api/analysis/index.ts +61 -61
  86. package/src/api/analysis/shadows.ts +183 -183
  87. package/src/api/analysis/solar.ts +237 -237
  88. package/src/api/analysis/sunlightHours.ts +211 -211
  89. package/src/api/analysis/sunpath.ts +83 -83
  90. package/src/api/analysis/weather.ts +179 -179
  91. package/src/api/core/buildings.ts +485 -485
  92. package/src/api/core/camera/index.ts +696 -667
  93. package/src/api/core/comment/index.ts +376 -376
  94. package/src/api/core/geom/create/index.ts +2139 -2133
  95. package/src/api/core/geom/delete/index.ts +84 -84
  96. package/src/api/core/geom/index.ts +35 -35
  97. package/src/api/core/geom/query/arc.ts +169 -169
  98. package/src/api/core/geom/query/brep.ts +621 -621
  99. package/src/api/core/geom/query/circle.ts +404 -404
  100. package/src/api/core/geom/query/contour.ts +540 -540
  101. package/src/api/core/geom/query/curve.ts +1102 -1102
  102. package/src/api/core/geom/query/edge.ts +130 -130
  103. package/src/api/core/geom/query/face.ts +508 -508
  104. package/src/api/core/geom/query/halfedge.ts +210 -210
  105. package/src/api/core/geom/query/index.ts +63 -63
  106. package/src/api/core/geom/query/profile.ts +473 -473
  107. package/src/api/core/geom/query/vertex.ts +205 -205
  108. package/src/api/core/geom/update/contour.ts +323 -317
  109. package/src/api/core/geom/update/curve.ts +209 -209
  110. package/src/api/core/geom/update/index.ts +29 -29
  111. package/src/api/core/geom/update/profile.ts +379 -379
  112. package/src/api/core/groups.ts +521 -521
  113. package/src/api/core/handles/index.ts +234 -234
  114. package/src/api/core/history/index.ts +84 -84
  115. package/src/api/core/index.ts +99 -99
  116. package/src/api/core/io/export/index.ts +126 -126
  117. package/src/api/core/io/import/index.ts +504 -504
  118. package/src/api/core/io/index.ts +42 -42
  119. package/src/api/core/io/job/index.ts +140 -140
  120. package/src/api/core/io/query/index.ts +71 -71
  121. package/src/api/core/io/terrain/index.ts +360 -360
  122. package/src/api/core/io/underlay/index.ts +705 -705
  123. package/src/api/core/layers.ts +540 -540
  124. package/src/api/core/math/index.ts +20 -20
  125. package/src/api/core/math/quat.ts +172 -172
  126. package/src/api/core/math/vec3.ts +179 -179
  127. package/src/api/core/mode/index.ts +108 -108
  128. package/src/api/core/project/index.ts +479 -479
  129. package/src/api/core/proposals/index.ts +570 -570
  130. package/src/api/core/storeys/index.ts +311 -308
  131. package/src/api/core/storeys/layers.ts +339 -339
  132. package/src/api/core/tags.ts +911 -911
  133. package/src/api/core/units/index.ts +164 -164
  134. package/src/api/core/user.ts +46 -46
  135. package/src/api/core/zoom/index.ts +64 -51
  136. package/src/api/design/bim.ts +210 -0
  137. package/src/api/design/boolean/index.ts +181 -179
  138. package/src/api/design/catalog.ts +203 -0
  139. package/src/api/design/create/bulk-items.ts +294 -254
  140. package/src/api/design/create/grids.ts +137 -137
  141. package/src/api/design/create/index.ts +2178 -1980
  142. package/src/api/design/create/opening-fields.ts +40 -37
  143. package/src/api/design/delete/index.ts +75 -74
  144. package/src/api/design/dimensions.ts +453 -453
  145. package/src/api/design/doors/index.ts +516 -500
  146. package/src/api/design/edit/index.ts +54 -54
  147. package/src/api/design/erase/index.ts +151 -151
  148. package/src/api/design/family.ts +1342 -704
  149. package/src/api/design/furniture/index.ts +319 -319
  150. package/src/api/design/grids.ts +237 -237
  151. package/src/api/design/index.ts +304 -274
  152. package/src/api/design/lock.ts +69 -69
  153. package/src/api/design/materials/index.ts +608 -608
  154. package/src/api/design/networks.ts +607 -0
  155. package/src/api/design/query/geometry/index.ts +319 -319
  156. package/src/api/design/query/grids.ts +197 -197
  157. package/src/api/design/query/index.ts +1236 -1226
  158. package/src/api/design/query/referenceLines.ts +52 -52
  159. package/src/api/design/query/spaces.ts +275 -275
  160. package/src/api/design/selection/index.ts +273 -273
  161. package/src/api/design/shared.ts +40 -40
  162. package/src/api/design/transform/index.ts +254 -254
  163. package/src/api/design/types/index.ts +163 -156
  164. package/src/api/design/update/index.ts +1096 -983
  165. package/src/api/design/visibility.ts +143 -143
  166. package/src/api/design/windows/index.ts +351 -333
  167. package/src/api/entity/buildableEnvelope.ts +397 -322
  168. package/src/api/entity/index.ts +30 -30
  169. package/src/api/entity/referenceLine.ts +235 -235
  170. package/src/api/entity/space.ts +612 -612
  171. package/src/api/entity/story.ts +517 -517
  172. package/src/api/index.ts +47 -47
  173. package/src/api/presentation/aiInspiration.ts +1116 -1116
  174. package/src/api/presentation/annotate.ts +417 -385
  175. package/src/api/presentation/camera.ts +289 -289
  176. package/src/api/presentation/diagrams.ts +194 -194
  177. package/src/api/presentation/drawingContract.ts +70 -0
  178. package/src/api/presentation/drawings.ts +1179 -0
  179. package/src/api/presentation/export.ts +134 -108
  180. package/src/api/presentation/import.ts +159 -159
  181. package/src/api/presentation/index.ts +160 -135
  182. package/src/api/presentation/placedViews.ts +1211 -1120
  183. package/src/api/presentation/sections.ts +420 -420
  184. package/src/api/presentation/shapes.ts +274 -274
  185. package/src/api/presentation/sheets.ts +746 -585
  186. package/src/api/presentation/slideshow.ts +134 -134
  187. package/src/api/presentation/tables.ts +84 -84
  188. package/src/api/presentation/viewPresets.ts +241 -0
  189. package/src/api/presentation/views.ts +742 -673
  190. package/src/api/presentation/walkthroughs.ts +1201 -1201
  191. package/src/api/program/adjacency.ts +164 -164
  192. package/src/api/program/areas.ts +408 -408
  193. package/src/api/program/classification.ts +138 -138
  194. package/src/api/program/cores.ts +83 -83
  195. package/src/api/program/departments.ts +517 -517
  196. package/src/api/program/index.ts +73 -73
  197. package/src/api/program/labels.ts +332 -332
  198. package/src/api/program/layout.ts +422 -422
  199. package/src/api/program/metadata.ts +364 -364
  200. package/src/api/program/metrics.ts +120 -120
  201. package/src/api/program/site.ts +748 -748
  202. package/src/api/program/spreadsheet.ts +2698 -2698
  203. package/src/api/workspace/index.ts +612 -612
  204. package/src/errors/codes.ts +143 -136
  205. package/src/errors/envelope.ts +75 -75
  206. package/src/errors/index.ts +21 -21
  207. package/src/errors/plugin-error.ts +134 -134
  208. package/src/handles.ts +297 -297
  209. package/src/host-utils.ts +67 -67
  210. package/src/index.ts +7 -7
  211. package/src/massParameters.ops.ts +246 -246
  212. package/src/massParameters.ts +427 -427
  213. package/src/types.ts +16 -16
  214. package/test/drawingContract.test.mjs +288 -0
  215. package/test/errors.test.mjs +185 -184
  216. package/test/massParameters.test.mjs +952 -952
  217. package/test/presentationViewSettings.test.mjs +85 -0
  218. package/tsconfig.json +22 -22
  219. package/tsup.config.ts +12 -12
@@ -1,274 +1,304 @@
1
- import { PluginApiReturn } from "../../types"
2
- import { ComponentHandle } from "../../handles"
3
- import { PluginDesignCreateApi } from "./create"
4
- import { PluginDesignQueryApi } from "./query"
5
- import { PluginDesignSelectionApi } from "./selection"
6
- import { PluginDesignDoorsApi } from "./doors"
7
- import { PluginDesignWindowsApi } from "./windows"
8
- import { PluginDesignFurnitureApi } from "./furniture"
9
- import { PluginDesignMaterialsApi } from "./materials"
10
- import { PluginDesignEraseApi } from "./erase"
11
- import { PluginDesignDeleteApi } from "./delete"
12
- import { PluginDesignBooleanApi } from "./boolean"
13
- import { PluginDesignTransformApi } from "./transform"
14
- import { PluginDesignEditApi } from "./edit"
15
- import { PluginDesignUpdateApi } from "./update"
16
- import { PluginDesignVisibilityApi } from "./visibility"
17
- import { PluginDesignDimensionsApi } from "./dimensions"
18
- import { PluginDesignTypesApi } from "./types"
19
- import { PluginDesignFamilyApi } from "./family"
20
- import { PluginDesignGridsApi } from "./grids"
21
- import { PluginDesignChangeResult } from "./lock"
22
-
23
- /**
24
- * `snaptrude.design.*` — author, query & edit BIM geometry.
25
- *
26
- * - {@linkcode PluginDesignApi.create} — new BIM entities
27
- * - {@linkcode PluginDesignApi.query} — read entities + their geometry
28
- * - {@linkcode PluginDesignApi.selection} — read/mutate the scene selection
29
- * - {@linkcode PluginDesignApi.doors} / {@linkcode PluginDesignApi.windows} — fenestration reads + edits
30
- * - {@linkcode PluginDesignApi.furniture} — furniture catalog reads
31
- * - {@linkcode PluginDesignApi.materials} — material library + assignment
32
- * - {@linkcode PluginDesignApi.boolean} — CSG boolean ops (union / subtract / intersect)
33
- * - {@linkcode PluginDesignApi.erase} — plan-level adjacency-edge erase (NOT hard delete)
34
- * - {@linkcode PluginDesignApi.delete} — hard entity removal
35
- * - {@linkcode PluginDesignApi.visibility} — hide / isolate / reveal entities
36
- * - {@linkcode PluginDesignApi.dimensions} — dimension lines (Measuring Tape): create / list / delete / hide
37
- * - {@linkcode PluginDesignApi.types} — read-only building type / assembly reference
38
- * - {@linkcode PluginDesignApi.family} — author parametric families from a JSON spec
39
- * - {@linkcode PluginDesignApi.lock} / {@linkcode PluginDesignApi.unlock} / {@linkcode PluginDesignApi.isLocked} / {@linkcode PluginDesignApi.listLocked} — lock state (top-level design verbs, §2A.1)
40
- * - {@linkcode PluginDesignApi.lockArea} / {@linkcode PluginDesignApi.unlockArea} / {@linkcode PluginDesignApi.isAreaLocked} / {@linkcode PluginDesignApi.listAreaLocked} — footprint-area lock for Room/Department spaces
41
- *
42
- * Transform and edit operation namespaces land here in later waves.
43
- */
44
- export abstract class PluginDesignApi {
45
- /** Author new scene-committed BIM entities. See {@linkcode PluginDesignCreateApi}. */
46
- public abstract create: PluginDesignCreateApi
47
- /** Read scene entities and their geometry. See {@linkcode PluginDesignQueryApi}. */
48
- public abstract query: PluginDesignQueryApi
49
- /** Read/mutate the current selection. See {@linkcode PluginDesignSelectionApi}. */
50
- public abstract selection: PluginDesignSelectionApi
51
- /** Door-specific reads + edits. See {@linkcode PluginDesignDoorsApi}. */
52
- public abstract doors: PluginDesignDoorsApi
53
- /** Window-specific reads. See {@linkcode PluginDesignWindowsApi}. */
54
- public abstract windows: PluginDesignWindowsApi
55
- /** Furniture catalog reads. See {@linkcode PluginDesignFurnitureApi}. */
56
- public abstract furniture: PluginDesignFurnitureApi
57
- /** Material library + assignment. See {@linkcode PluginDesignMaterialsApi}. */
58
- public abstract materials: PluginDesignMaterialsApi
59
- /** Plan-level adjacency-edge erase (NOT hard delete). See {@linkcode PluginDesignEraseApi}. */
60
- public abstract erase: PluginDesignEraseApi
61
- /** Hard entity removal. See {@linkcode PluginDesignDeleteApi}. */
62
- public abstract delete: PluginDesignDeleteApi
63
- /** CSG boolean ops (union / subtract / intersect). See {@linkcode PluginDesignBooleanApi}. */
64
- public abstract boolean: PluginDesignBooleanApi
65
- /** Rigid transforms — move / rotate. See {@linkcode PluginDesignTransformApi}. */
66
- public abstract transform: PluginDesignTransformApi
67
- /** Non-create geometry edits — offset-split. See {@linkcode PluginDesignEditApi}. */
68
- public abstract edit: PluginDesignEditApi
69
- /** Update existing entities — properties + geometry. See {@linkcode PluginDesignUpdateApi}. */
70
- public abstract update: PluginDesignUpdateApi
71
- /** Hide / isolate / reveal entities. See {@linkcode PluginDesignVisibilityApi}. */
72
- public abstract visibility: PluginDesignVisibilityApi
73
- /** Dimension lines (Measuring Tape). See {@linkcode PluginDesignDimensionsApi}. */
74
- public abstract dimensions: PluginDesignDimensionsApi
75
- /** Read-only building type / assembly reference. See {@linkcode PluginDesignTypesApi}. */
76
- public abstract types: PluginDesignTypesApi
77
- /** Author parametric families from a JSON spec. See {@linkcode PluginDesignFamilyApi}. */
78
- public abstract family: PluginDesignFamilyApi
79
-
80
- /** Structural edits on a grid's line structure. See {@linkcode PluginDesignGridsApi}. */
81
- public abstract grids: PluginDesignGridsApi
82
-
83
- /**
84
- * Lock entities so they cannot be edited. Undoable. Cascades to void/door/window
85
- * children, stacked-wall companions, and terrain neighborhood; skips
86
- * active-group members.
87
- * @param components Entities to lock
88
- * @returns The affected entities (post-cascade)
89
- *
90
- * @examplePrompt Lock the selected walls so they can't be edited
91
- * @examplePrompt Freeze these masses so nobody moves them by accident
92
- * @examplePrompt Lock everything on the ground floor
93
- * @examplePrompt Protect this room from further changes
94
- *
95
- * # Example
96
- * ```ts
97
- * // Lock every wall on the ground storey
98
- * const walls = await snaptrude.design.query.listWalls({ storeys: [1] })
99
- * const { affected } = await snaptrude.design.lock(walls)
100
- * // affected is post-cascade: hosted doors/windows are included
101
- * ```
102
- */
103
- public abstract lock(components: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
104
-
105
- /**
106
- * Unlock previously locked entities so they can be edited again. Undoable.
107
- * Paired with {@linkcode PluginDesignApi.lock}.
108
- * @param components Entities to unlock
109
- * @returns The affected entities
110
- *
111
- * @examplePrompt Unlock the selected objects
112
- * @examplePrompt Make this locked wall editable again
113
- * @examplePrompt Unfreeze the masses I locked earlier
114
- * @examplePrompt Remove the lock from these doors
115
- *
116
- * # Example
117
- * ```ts
118
- * // Unlock everything that is explicitly locked
119
- * const locked = await snaptrude.design.listLocked()
120
- * const { affected } = await snaptrude.design.unlock(locked)
121
- * ```
122
- */
123
- public abstract unlock(components: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
124
-
125
- /**
126
- * Test whether an entity is locked (folds group + bucket lock unless `includeInherited: false`).
127
- * @param component The entity to test
128
- * @param includeInherited Fold group + bucket lock (default `true`); `false` reads the own flag only
129
- * @returns `true` if locked, otherwise `false`
130
- *
131
- * @examplePrompt Is this wall locked?
132
- * @examplePrompt Check whether the selected mass is locked or editable
133
- * @examplePrompt Why can't I move this object? Check if it is locked
134
- * @examplePrompt Tell me if this room is locked, counting locks inherited from its group
135
- *
136
- * # Example
137
- * ```ts
138
- * const [wall] = await snaptrude.design.query.listWalls()
139
- * const locked = await snaptrude.design.isLocked(wall)
140
- * // Own flag only — ignore locks inherited from the group / bucket
141
- * const ownLock = await snaptrude.design.isLocked(wall, false)
142
- * ```
143
- */
144
- public abstract isLocked(
145
- component: ComponentHandle,
146
- includeInherited?: boolean,
147
- ): PluginApiReturn<boolean>
148
-
149
- /**
150
- * List the explicitly-locked entities (excludes purely group/bucket-inherited locks).
151
- * @returns The locked entities as {@linkcode ComponentHandle}`[]`
152
- *
153
- * @examplePrompt Which objects in the model are locked?
154
- * @examplePrompt List all the locked entities in this project
155
- * @examplePrompt Show everything that has been locked
156
- * @examplePrompt Are there any locked walls or masses in the scene?
157
- *
158
- * # Example
159
- * ```ts
160
- * const locked = await snaptrude.design.listLocked()
161
- * console.log(locked.length, "explicitly locked entities")
162
- * ```
163
- */
164
- public abstract listLocked(): PluginApiReturn<ComponentHandle[]>
165
-
166
- /**
167
- * Lock the **footprint area** of one or more Room / Department mass spaces —
168
- * geometry edits that would change the bottom-face area are then refused or
169
- * auto-resized to preserve it. Distinct from {@linkcode PluginDesignApi.lock}
170
- * (which freezes the whole object): this locks only the area. Cascades to the
171
- * space's instances and its source mass. Undoable.
172
- *
173
- * Only Room / Department masses are area-lockable; any other handle throws.
174
- * Requires the `area_lock` feature to be enabled — when it is off this throws.
175
- *
176
- * @param spaces Room / Department mass spaces to area-lock
177
- * @returns The affected spaces (post-cascade, echoing the input handles)
178
- *
179
- * @examplePrompt Lock the floor area of the selected rooms
180
- * @examplePrompt Freeze the footprint area of this department so its size can't drift
181
- * @examplePrompt Area-lock every room on this storey
182
- * @examplePrompt Pin the area of this space while I edit its walls
183
- *
184
- * # Example
185
- * ```ts
186
- * const rooms = await snaptrude.design.selection.get()
187
- * const { affected } = await snaptrude.design.lockArea(rooms)
188
- * console.log("area-locked", affected.length, "spaces")
189
- * ```
190
- */
191
- public abstract lockArea(spaces: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
192
-
193
- /**
194
- * Unlock the footprint area of previously area-locked spaces so their area can
195
- * change again. Paired with {@linkcode PluginDesignApi.lockArea}; cascades to
196
- * instances + source; undoable. Requires the `area_lock` feature (throws if off).
197
- *
198
- * @param spaces Room / Department mass spaces to area-unlock
199
- * @returns The affected spaces (post-cascade)
200
- *
201
- * @examplePrompt Unlock the area of the selected rooms
202
- * @examplePrompt Remove the footprint-area lock from this department
203
- * @examplePrompt Let me resize this space again by unlocking its area
204
- * @examplePrompt Area-unlock everything I locked earlier
205
- *
206
- * # Example
207
- * ```ts
208
- * const locked = await snaptrude.design.listAreaLocked()
209
- * const { affected } = await snaptrude.design.unlockArea(locked)
210
- * ```
211
- */
212
- public abstract unlockArea(spaces: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
213
-
214
- /**
215
- * Test whether a space's footprint area is locked. A read — never throws;
216
- * returns `false` for non-space handles and when the `area_lock` feature is off.
217
- *
218
- * @param space The space to test
219
- * @returns `true` if the space's area is locked, otherwise `false`
220
- *
221
- * @examplePrompt Is the area of this room locked?
222
- * @examplePrompt Check whether this department's footprint is pinned
223
- * @examplePrompt Tell me if the selected space has its area locked
224
- *
225
- * # Example
226
- * ```ts
227
- * const [room] = await snaptrude.design.selection.get()
228
- * const locked = await snaptrude.design.isAreaLocked(room)
229
- * console.log(locked ? "area is locked" : "area is free")
230
- * ```
231
- */
232
- public abstract isAreaLocked(space: ComponentHandle): PluginApiReturn<boolean>
233
-
234
- /**
235
- * List the spaces whose footprint area is locked. A read — never throws; returns
236
- * `[]` when the `area_lock` feature is off.
237
- *
238
- * @returns The area-locked spaces as {@linkcode ComponentHandle}`[]`
239
- *
240
- * @examplePrompt Which spaces have their area locked?
241
- * @examplePrompt List every room with a locked footprint
242
- * @examplePrompt Show me all the area-locked departments
243
- *
244
- * # Example
245
- * ```ts
246
- * const locked = await snaptrude.design.listAreaLocked()
247
- * console.log(locked.length, "area-locked spaces")
248
- * ```
249
- */
250
- public abstract listAreaLocked(): PluginApiReturn<ComponentHandle[]>
251
-
252
- constructor() {}
253
- }
254
-
255
- export * from "./create"
256
- export * from "./query"
257
- export * from "./selection"
258
- export * from "./doors"
259
- export * from "./windows"
260
- export * from "./furniture"
261
- export * from "./materials"
262
- export * from "./lock"
263
- export * from "./erase"
264
- export * from "./delete"
265
- export * from "./shared"
266
- export * from "./boolean"
267
- export * from "./transform"
268
- export * from "./edit"
269
- export * from "./update"
270
- export * from "./visibility"
271
- export * from "./dimensions"
272
- export * from "./types"
273
- export * from "./family"
274
- export * from "./grids"
1
+ import { PluginApiReturn } from "../../types"
2
+ import { ComponentHandle } from "../../handles"
3
+ import { PluginDesignCreateApi } from "./create"
4
+ import { PluginDesignQueryApi } from "./query"
5
+ import { PluginDesignSelectionApi } from "./selection"
6
+ import { PluginDesignDoorsApi } from "./doors"
7
+ import { PluginDesignWindowsApi } from "./windows"
8
+ import { PluginDesignFurnitureApi } from "./furniture"
9
+ import { PluginDesignMaterialsApi } from "./materials"
10
+ import { PluginDesignEraseApi } from "./erase"
11
+ import { PluginDesignDeleteApi } from "./delete"
12
+ import { PluginDesignBooleanApi } from "./boolean"
13
+ import { PluginDesignTransformApi } from "./transform"
14
+ import { PluginDesignEditApi } from "./edit"
15
+ import { PluginDesignUpdateApi } from "./update"
16
+ import { PluginDesignVisibilityApi } from "./visibility"
17
+ import { PluginDesignDimensionsApi } from "./dimensions"
18
+ import { PluginDesignTypesApi } from "./types"
19
+ import { PluginDesignFamilyApi } from "./family"
20
+ import { PluginDesignGridsApi } from "./grids"
21
+ import { PluginDesignCatalogApi } from "./catalog"
22
+ import { PluginDesignBimApi } from "./bim"
23
+ import { PluginDesignChangeResult } from "./lock"
24
+ import {
25
+ PluginElectricalApi,
26
+ PluginPlumbingApi,
27
+ PluginMechanicalApi,
28
+ } from "./networks"
29
+
30
+ /**
31
+ * `snaptrude.design.*` — author, query & edit BIM geometry.
32
+ *
33
+ * - {@linkcode PluginDesignApi.create} — new BIM entities
34
+ * - {@linkcode PluginDesignApi.query} — read entities + their geometry
35
+ * - {@linkcode PluginDesignApi.selection} — read/mutate the scene selection
36
+ * - {@linkcode PluginDesignApi.doors} / {@linkcode PluginDesignApi.windows} — fenestration reads + edits
37
+ * - {@linkcode PluginDesignApi.furniture} — furniture catalog reads
38
+ * - {@linkcode PluginDesignApi.materials} — material library + assignment
39
+ * - {@linkcode PluginDesignApi.boolean} — CSG boolean ops (union / subtract / intersect)
40
+ * - {@linkcode PluginDesignApi.erase} — plan-level adjacency-edge erase (NOT hard delete)
41
+ * - {@linkcode PluginDesignApi.delete} — hard entity removal
42
+ * - {@linkcode PluginDesignApi.visibility} — hide / isolate / reveal entities
43
+ * - {@linkcode PluginDesignApi.dimensions} — dimension lines (Measuring Tape): create / list / delete / hide
44
+ * - {@linkcode PluginDesignApi.types} — read-only building type / assembly reference
45
+ * - {@linkcode PluginDesignApi.family} — author parametric families from a JSON spec
46
+ * - {@linkcode PluginDesignApi.lock} / {@linkcode PluginDesignApi.unlock} / {@linkcode PluginDesignApi.isLocked} / {@linkcode PluginDesignApi.listLocked} — lock state (top-level design verbs, §2A.1)
47
+ * - {@linkcode PluginDesignApi.lockArea} / {@linkcode PluginDesignApi.unlockArea} / {@linkcode PluginDesignApi.isAreaLocked} / {@linkcode PluginDesignApi.listAreaLocked} — footprint-area lock for Room/Department spaces
48
+ *
49
+ * Transform and edit operation namespaces land here in later waves.
50
+ */
51
+ export abstract class PluginDesignApi {
52
+ /** Author new scene-committed BIM entities. See {@linkcode PluginDesignCreateApi}. */
53
+ public abstract create: PluginDesignCreateApi
54
+ /** Read scene entities and their geometry. See {@linkcode PluginDesignQueryApi}. */
55
+ public abstract query: PluginDesignQueryApi
56
+ /** Read/mutate the current selection. See {@linkcode PluginDesignSelectionApi}. */
57
+ public abstract selection: PluginDesignSelectionApi
58
+ /** Door-specific reads + edits. See {@linkcode PluginDesignDoorsApi}. */
59
+ public abstract doors: PluginDesignDoorsApi
60
+ /** Window-specific reads. See {@linkcode PluginDesignWindowsApi}. */
61
+ public abstract windows: PluginDesignWindowsApi
62
+ /** Furniture catalog reads. See {@linkcode PluginDesignFurnitureApi}. */
63
+ public abstract furniture: PluginDesignFurnitureApi
64
+ /** Material library + assignment. See {@linkcode PluginDesignMaterialsApi}. */
65
+ public abstract materials: PluginDesignMaterialsApi
66
+ /** Plan-level adjacency-edge erase (NOT hard delete). See {@linkcode PluginDesignEraseApi}. */
67
+ public abstract erase: PluginDesignEraseApi
68
+ /** Hard entity removal. See {@linkcode PluginDesignDeleteApi}. */
69
+ public abstract delete: PluginDesignDeleteApi
70
+ /** CSG boolean ops (union / subtract / intersect). See {@linkcode PluginDesignBooleanApi}. */
71
+ public abstract boolean: PluginDesignBooleanApi
72
+ /** Rigid transforms — move / rotate. See {@linkcode PluginDesignTransformApi}. */
73
+ public abstract transform: PluginDesignTransformApi
74
+ /** Non-create geometry edits — offset-split. See {@linkcode PluginDesignEditApi}. */
75
+ public abstract edit: PluginDesignEditApi
76
+ /** Update existing entities — properties + geometry. See {@linkcode PluginDesignUpdateApi}. */
77
+ public abstract update: PluginDesignUpdateApi
78
+ /** Hide / isolate / reveal entities. See {@linkcode PluginDesignVisibilityApi}. */
79
+ public abstract visibility: PluginDesignVisibilityApi
80
+ /** Dimension lines (Measuring Tape). See {@linkcode PluginDesignDimensionsApi}. */
81
+ public abstract dimensions: PluginDesignDimensionsApi
82
+ /** Read-only building type / assembly reference. See {@linkcode PluginDesignTypesApi}. */
83
+ public abstract types: PluginDesignTypesApi
84
+ /** Author parametric families from a JSON spec. See {@linkcode PluginDesignFamilyApi}. */
85
+ public abstract family: PluginDesignFamilyApi
86
+ /** Shared family and asset inventory, including supported placement and update paths. */
87
+ public abstract catalog: PluginDesignCatalogApi
88
+
89
+ /** Agent-driven Sketch-to-BIM with explicit per-edge constructions. */
90
+ public abstract bim: PluginDesignBimApi
91
+
92
+ /** Structural edits on a grid's line structure. See {@linkcode PluginDesignGridsApi}. */
93
+ public abstract grids: PluginDesignGridsApi
94
+
95
+ /** Persistent electrical equipment, routes and circuit graphs. */
96
+ public abstract electrical: PluginElectricalApi
97
+ /** Persistent plumbing equipment and directed pipe graphs. */
98
+ public abstract plumbing: PluginPlumbingApi
99
+ /** Persistent family-backed HVAC ducts, fittings and equipment. */
100
+ public abstract mechanical: PluginMechanicalApi
101
+
102
+ /**
103
+ * Lock entities so they cannot be edited. Undoable. Cascades to void/door/window
104
+ * children, stacked-wall companions, and terrain neighborhood; skips
105
+ * active-group members.
106
+ * @param components Entities to lock
107
+ * @returns The affected entities (post-cascade)
108
+ *
109
+ * @examplePrompt Lock the selected walls so they can't be edited
110
+ * @examplePrompt Freeze these masses so nobody moves them by accident
111
+ * @examplePrompt Lock everything on the ground floor
112
+ * @examplePrompt Protect this room from further changes
113
+ *
114
+ * # Example
115
+ * ```ts
116
+ * // Lock every wall on the ground storey
117
+ * const walls = await snaptrude.design.query.listWalls({ storeys: [1] })
118
+ * const { affected } = await snaptrude.design.lock(walls)
119
+ * // affected is post-cascade: hosted doors/windows are included
120
+ * ```
121
+ */
122
+ public abstract lock(
123
+ components: ComponentHandle[],
124
+ ): PluginApiReturn<PluginDesignChangeResult>
125
+
126
+ /**
127
+ * Unlock previously locked entities so they can be edited again. Undoable.
128
+ * Paired with {@linkcode PluginDesignApi.lock}.
129
+ * @param components Entities to unlock
130
+ * @returns The affected entities
131
+ *
132
+ * @examplePrompt Unlock the selected objects
133
+ * @examplePrompt Make this locked wall editable again
134
+ * @examplePrompt Unfreeze the masses I locked earlier
135
+ * @examplePrompt Remove the lock from these doors
136
+ *
137
+ * # Example
138
+ * ```ts
139
+ * // Unlock everything that is explicitly locked
140
+ * const locked = await snaptrude.design.listLocked()
141
+ * const { affected } = await snaptrude.design.unlock(locked)
142
+ * ```
143
+ */
144
+ public abstract unlock(
145
+ components: ComponentHandle[],
146
+ ): PluginApiReturn<PluginDesignChangeResult>
147
+
148
+ /**
149
+ * Test whether an entity is locked (folds group + bucket lock unless `includeInherited: false`).
150
+ * @param component The entity to test
151
+ * @param includeInherited Fold group + bucket lock (default `true`); `false` reads the own flag only
152
+ * @returns `true` if locked, otherwise `false`
153
+ *
154
+ * @examplePrompt Is this wall locked?
155
+ * @examplePrompt Check whether the selected mass is locked or editable
156
+ * @examplePrompt Why can't I move this object? Check if it is locked
157
+ * @examplePrompt Tell me if this room is locked, counting locks inherited from its group
158
+ *
159
+ * # Example
160
+ * ```ts
161
+ * const [wall] = await snaptrude.design.query.listWalls()
162
+ * const locked = await snaptrude.design.isLocked(wall)
163
+ * // Own flag only — ignore locks inherited from the group / bucket
164
+ * const ownLock = await snaptrude.design.isLocked(wall, false)
165
+ * ```
166
+ */
167
+ public abstract isLocked(
168
+ component: ComponentHandle,
169
+ includeInherited?: boolean,
170
+ ): PluginApiReturn<boolean>
171
+
172
+ /**
173
+ * List the explicitly-locked entities (excludes purely group/bucket-inherited locks).
174
+ * @returns The locked entities as {@linkcode ComponentHandle}`[]`
175
+ *
176
+ * @examplePrompt Which objects in the model are locked?
177
+ * @examplePrompt List all the locked entities in this project
178
+ * @examplePrompt Show everything that has been locked
179
+ * @examplePrompt Are there any locked walls or masses in the scene?
180
+ *
181
+ * # Example
182
+ * ```ts
183
+ * const locked = await snaptrude.design.listLocked()
184
+ * console.log(locked.length, "explicitly locked entities")
185
+ * ```
186
+ */
187
+ public abstract listLocked(): PluginApiReturn<ComponentHandle[]>
188
+
189
+ /**
190
+ * Lock the **footprint area** of one or more Room / Department mass spaces —
191
+ * geometry edits that would change the bottom-face area are then refused or
192
+ * auto-resized to preserve it. Distinct from {@linkcode PluginDesignApi.lock}
193
+ * (which freezes the whole object): this locks only the area. Cascades to the
194
+ * space's instances and its source mass. Undoable.
195
+ *
196
+ * Only Room / Department masses are area-lockable; any other handle throws.
197
+ * Requires the `area_lock` feature to be enabled — when it is off this throws.
198
+ *
199
+ * @param spaces Room / Department mass spaces to area-lock
200
+ * @returns The affected spaces (post-cascade, echoing the input handles)
201
+ *
202
+ * @examplePrompt Lock the floor area of the selected rooms
203
+ * @examplePrompt Freeze the footprint area of this department so its size can't drift
204
+ * @examplePrompt Area-lock every room on this storey
205
+ * @examplePrompt Pin the area of this space while I edit its walls
206
+ *
207
+ * # Example
208
+ * ```ts
209
+ * const rooms = await snaptrude.design.selection.get()
210
+ * const { affected } = await snaptrude.design.lockArea(rooms)
211
+ * console.log("area-locked", affected.length, "spaces")
212
+ * ```
213
+ */
214
+ public abstract lockArea(
215
+ spaces: ComponentHandle[],
216
+ ): PluginApiReturn<PluginDesignChangeResult>
217
+
218
+ /**
219
+ * Unlock the footprint area of previously area-locked spaces so their area can
220
+ * change again. Paired with {@linkcode PluginDesignApi.lockArea}; cascades to
221
+ * instances + source; undoable. Requires the `area_lock` feature (throws if off).
222
+ *
223
+ * @param spaces Room / Department mass spaces to area-unlock
224
+ * @returns The affected spaces (post-cascade)
225
+ *
226
+ * @examplePrompt Unlock the area of the selected rooms
227
+ * @examplePrompt Remove the footprint-area lock from this department
228
+ * @examplePrompt Let me resize this space again by unlocking its area
229
+ * @examplePrompt Area-unlock everything I locked earlier
230
+ *
231
+ * # Example
232
+ * ```ts
233
+ * const locked = await snaptrude.design.listAreaLocked()
234
+ * const { affected } = await snaptrude.design.unlockArea(locked)
235
+ * ```
236
+ */
237
+ public abstract unlockArea(
238
+ spaces: ComponentHandle[],
239
+ ): PluginApiReturn<PluginDesignChangeResult>
240
+
241
+ /**
242
+ * Test whether a space's footprint area is locked. A read — never throws;
243
+ * returns `false` for non-space handles and when the `area_lock` feature is off.
244
+ *
245
+ * @param space The space to test
246
+ * @returns `true` if the space's area is locked, otherwise `false`
247
+ *
248
+ * @examplePrompt Is the area of this room locked?
249
+ * @examplePrompt Check whether this department's footprint is pinned
250
+ * @examplePrompt Tell me if the selected space has its area locked
251
+ *
252
+ * # Example
253
+ * ```ts
254
+ * const [room] = await snaptrude.design.selection.get()
255
+ * const locked = await snaptrude.design.isAreaLocked(room)
256
+ * console.log(locked ? "area is locked" : "area is free")
257
+ * ```
258
+ */
259
+ public abstract isAreaLocked(space: ComponentHandle): PluginApiReturn<boolean>
260
+
261
+ /**
262
+ * List the spaces whose footprint area is locked. A read — never throws; returns
263
+ * `[]` when the `area_lock` feature is off.
264
+ *
265
+ * @returns The area-locked spaces as {@linkcode ComponentHandle}`[]`
266
+ *
267
+ * @examplePrompt Which spaces have their area locked?
268
+ * @examplePrompt List every room with a locked footprint
269
+ * @examplePrompt Show me all the area-locked departments
270
+ *
271
+ * # Example
272
+ * ```ts
273
+ * const locked = await snaptrude.design.listAreaLocked()
274
+ * console.log(locked.length, "area-locked spaces")
275
+ * ```
276
+ */
277
+ public abstract listAreaLocked(): PluginApiReturn<ComponentHandle[]>
278
+
279
+ constructor() {}
280
+ }
281
+
282
+ export * from "./create"
283
+ export * from "./query"
284
+ export * from "./selection"
285
+ export * from "./doors"
286
+ export * from "./windows"
287
+ export * from "./furniture"
288
+ export * from "./materials"
289
+ export * from "./lock"
290
+ export * from "./erase"
291
+ export * from "./delete"
292
+ export * from "./shared"
293
+ export * from "./boolean"
294
+ export * from "./transform"
295
+ export * from "./edit"
296
+ export * from "./update"
297
+ export * from "./visibility"
298
+ export * from "./dimensions"
299
+ export * from "./types"
300
+ export * from "./family"
301
+ export * from "./grids"
302
+ export * from "./networks"
303
+ export * from "./catalog"
304
+ export * from "./bim"