@snaptrude/plugin-core 0.9.16 → 0.9.18-networks-20261016.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 (215) hide show
  1. package/AGENTS.md +231 -231
  2. package/CHANGELOG.md +408 -402
  3. package/CLAUDE.md +11 -11
  4. package/dist/api/analysis/daylight.d.ts +5 -5
  5. package/dist/api/analysis/solar.d.ts +2 -2
  6. package/dist/api/core/camera/index.d.ts +29 -0
  7. package/dist/api/core/camera/index.d.ts.map +1 -1
  8. package/dist/api/core/geom/create/index.d.ts +7 -1
  9. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  10. package/dist/api/core/geom/update/contour.d.ts +8 -2
  11. package/dist/api/core/geom/update/contour.d.ts.map +1 -1
  12. package/dist/api/core/zoom/index.d.ts +13 -0
  13. package/dist/api/core/zoom/index.d.ts.map +1 -1
  14. package/dist/api/design/bim.d.ts +209 -0
  15. package/dist/api/design/bim.d.ts.map +1 -0
  16. package/dist/api/design/boolean/index.d.ts +2 -0
  17. package/dist/api/design/boolean/index.d.ts.map +1 -1
  18. package/dist/api/design/catalog.d.ts +320 -0
  19. package/dist/api/design/catalog.d.ts.map +1 -0
  20. package/dist/api/design/create/bulk-items.d.ts +65 -25
  21. package/dist/api/design/create/bulk-items.d.ts.map +1 -1
  22. package/dist/api/design/create/index.d.ts +272 -99
  23. package/dist/api/design/create/index.d.ts.map +1 -1
  24. package/dist/api/design/create/opening-fields.d.ts +13 -12
  25. package/dist/api/design/create/opening-fields.d.ts.map +1 -1
  26. package/dist/api/design/delete/index.d.ts +1 -0
  27. package/dist/api/design/delete/index.d.ts.map +1 -1
  28. package/dist/api/design/doors/index.d.ts +18 -24
  29. package/dist/api/design/doors/index.d.ts.map +1 -1
  30. package/dist/api/design/family.d.ts +797 -27
  31. package/dist/api/design/family.d.ts.map +1 -1
  32. package/dist/api/design/index.d.ts +16 -0
  33. package/dist/api/design/index.d.ts.map +1 -1
  34. package/dist/api/design/networks.d.ts +1763 -0
  35. package/dist/api/design/networks.d.ts.map +1 -0
  36. package/dist/api/design/query/index.d.ts +42 -32
  37. package/dist/api/design/query/index.d.ts.map +1 -1
  38. package/dist/api/design/selection/index.d.ts +10 -10
  39. package/dist/api/design/types/index.d.ts +40 -24
  40. package/dist/api/design/types/index.d.ts.map +1 -1
  41. package/dist/api/design/update/index.d.ts +43 -3
  42. package/dist/api/design/update/index.d.ts.map +1 -1
  43. package/dist/api/design/windows/index.d.ts +8 -8
  44. package/dist/api/design/windows/index.d.ts.map +1 -1
  45. package/dist/api/presentation/aiInspiration.d.ts +10 -10
  46. package/dist/api/presentation/annotate.d.ts +38 -22
  47. package/dist/api/presentation/annotate.d.ts.map +1 -1
  48. package/dist/api/presentation/drawingContract.d.ts +32 -0
  49. package/dist/api/presentation/drawingContract.d.ts.map +1 -0
  50. package/dist/api/presentation/drawings.d.ts +3523 -0
  51. package/dist/api/presentation/drawings.d.ts.map +1 -0
  52. package/dist/api/presentation/export.d.ts +23 -5
  53. package/dist/api/presentation/export.d.ts.map +1 -1
  54. package/dist/api/presentation/index.d.ts +41 -12
  55. package/dist/api/presentation/index.d.ts.map +1 -1
  56. package/dist/api/presentation/placedViews.d.ts +106 -6
  57. package/dist/api/presentation/placedViews.d.ts.map +1 -1
  58. package/dist/api/presentation/sections.d.ts +461 -0
  59. package/dist/api/presentation/sections.d.ts.map +1 -0
  60. package/dist/api/presentation/shapes.d.ts +2 -2
  61. package/dist/api/presentation/sheets.d.ts +175 -19
  62. package/dist/api/presentation/sheets.d.ts.map +1 -1
  63. package/dist/api/presentation/viewPresets.d.ts +222 -0
  64. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  65. package/dist/api/presentation/views.d.ts +103 -5
  66. package/dist/api/presentation/views.d.ts.map +1 -1
  67. package/dist/api/presentation/walkthroughs.d.ts +6 -6
  68. package/dist/errors/codes.d.ts +3 -1
  69. package/dist/errors/codes.d.ts.map +1 -1
  70. package/dist/index.cjs +3788 -2328
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.js +3650 -2328
  73. package/dist/index.js.map +1 -1
  74. package/package.json +42 -42
  75. package/scripts/check-dist-fresh.mjs +22 -22
  76. package/scripts/generate-manifest.mjs +243 -238
  77. package/scripts/generate-manifest.test.mjs +303 -303
  78. package/src/api/analysis/daylight.ts +470 -470
  79. package/src/api/analysis/heatmaps.ts +683 -683
  80. package/src/api/analysis/illuminance.ts +155 -155
  81. package/src/api/analysis/index.ts +61 -61
  82. package/src/api/analysis/shadows.ts +183 -183
  83. package/src/api/analysis/solar.ts +237 -237
  84. package/src/api/analysis/sunlightHours.ts +211 -211
  85. package/src/api/analysis/sunpath.ts +83 -83
  86. package/src/api/analysis/weather.ts +179 -179
  87. package/src/api/core/buildings.ts +485 -485
  88. package/src/api/core/camera/index.ts +696 -667
  89. package/src/api/core/comment/index.ts +376 -376
  90. package/src/api/core/geom/create/index.ts +2139 -2133
  91. package/src/api/core/geom/delete/index.ts +84 -84
  92. package/src/api/core/geom/index.ts +35 -35
  93. package/src/api/core/geom/query/arc.ts +169 -169
  94. package/src/api/core/geom/query/brep.ts +621 -621
  95. package/src/api/core/geom/query/circle.ts +404 -404
  96. package/src/api/core/geom/query/contour.ts +540 -540
  97. package/src/api/core/geom/query/curve.ts +1102 -1102
  98. package/src/api/core/geom/query/edge.ts +130 -130
  99. package/src/api/core/geom/query/face.ts +508 -508
  100. package/src/api/core/geom/query/halfedge.ts +210 -210
  101. package/src/api/core/geom/query/index.ts +63 -63
  102. package/src/api/core/geom/query/profile.ts +473 -473
  103. package/src/api/core/geom/query/vertex.ts +205 -205
  104. package/src/api/core/geom/update/contour.ts +323 -317
  105. package/src/api/core/geom/update/curve.ts +209 -209
  106. package/src/api/core/geom/update/index.ts +29 -29
  107. package/src/api/core/geom/update/profile.ts +379 -379
  108. package/src/api/core/groups.ts +521 -521
  109. package/src/api/core/handles/index.ts +234 -234
  110. package/src/api/core/history/index.ts +84 -84
  111. package/src/api/core/index.ts +99 -99
  112. package/src/api/core/io/export/index.ts +126 -126
  113. package/src/api/core/io/import/index.ts +504 -504
  114. package/src/api/core/io/index.ts +42 -42
  115. package/src/api/core/io/job/index.ts +140 -140
  116. package/src/api/core/io/query/index.ts +71 -71
  117. package/src/api/core/io/terrain/index.ts +360 -360
  118. package/src/api/core/io/underlay/index.ts +705 -705
  119. package/src/api/core/layers.ts +540 -540
  120. package/src/api/core/math/index.ts +20 -20
  121. package/src/api/core/math/quat.ts +172 -172
  122. package/src/api/core/math/vec3.ts +179 -179
  123. package/src/api/core/mode/index.ts +108 -108
  124. package/src/api/core/project/index.ts +479 -479
  125. package/src/api/core/proposals/index.ts +570 -570
  126. package/src/api/core/storeys/index.ts +308 -308
  127. package/src/api/core/storeys/layers.ts +339 -339
  128. package/src/api/core/tags.ts +911 -911
  129. package/src/api/core/units/index.ts +164 -164
  130. package/src/api/core/user.ts +46 -46
  131. package/src/api/core/zoom/index.ts +64 -51
  132. package/src/api/design/bim.ts +121 -0
  133. package/src/api/design/boolean/index.ts +181 -179
  134. package/src/api/design/catalog.ts +203 -0
  135. package/src/api/design/create/bulk-items.ts +294 -254
  136. package/src/api/design/create/grids.ts +137 -137
  137. package/src/api/design/create/index.ts +2148 -1980
  138. package/src/api/design/create/opening-fields.ts +40 -37
  139. package/src/api/design/delete/index.ts +75 -74
  140. package/src/api/design/dimensions.ts +453 -453
  141. package/src/api/design/doors/index.ts +516 -500
  142. package/src/api/design/edit/index.ts +54 -54
  143. package/src/api/design/erase/index.ts +151 -151
  144. package/src/api/design/family.ts +1334 -704
  145. package/src/api/design/furniture/index.ts +319 -319
  146. package/src/api/design/grids.ts +237 -237
  147. package/src/api/design/index.ts +304 -274
  148. package/src/api/design/lock.ts +69 -69
  149. package/src/api/design/materials/index.ts +608 -608
  150. package/src/api/design/networks.ts +667 -0
  151. package/src/api/design/query/geometry/index.ts +319 -319
  152. package/src/api/design/query/grids.ts +197 -197
  153. package/src/api/design/query/index.ts +1236 -1226
  154. package/src/api/design/query/referenceLines.ts +52 -52
  155. package/src/api/design/query/spaces.ts +275 -275
  156. package/src/api/design/selection/index.ts +273 -273
  157. package/src/api/design/shared.ts +40 -40
  158. package/src/api/design/transform/index.ts +254 -254
  159. package/src/api/design/types/index.ts +163 -156
  160. package/src/api/design/update/index.ts +1024 -983
  161. package/src/api/design/visibility.ts +143 -143
  162. package/src/api/design/windows/index.ts +351 -333
  163. package/src/api/entity/buildableEnvelope.ts +322 -322
  164. package/src/api/entity/index.ts +30 -30
  165. package/src/api/entity/referenceLine.ts +235 -235
  166. package/src/api/entity/space.ts +612 -612
  167. package/src/api/entity/story.ts +517 -517
  168. package/src/api/index.ts +47 -47
  169. package/src/api/presentation/aiInspiration.ts +1116 -1116
  170. package/src/api/presentation/annotate.ts +417 -385
  171. package/src/api/presentation/camera.ts +289 -289
  172. package/src/api/presentation/diagrams.ts +194 -194
  173. package/src/api/presentation/drawingContract.ts +70 -0
  174. package/src/api/presentation/drawings.ts +1179 -0
  175. package/src/api/presentation/export.ts +134 -108
  176. package/src/api/presentation/import.ts +159 -159
  177. package/src/api/presentation/index.ts +160 -126
  178. package/src/api/presentation/placedViews.ts +1211 -1120
  179. package/src/api/presentation/sections.ts +420 -0
  180. package/src/api/presentation/shapes.ts +274 -274
  181. package/src/api/presentation/sheets.ts +746 -585
  182. package/src/api/presentation/slideshow.ts +134 -134
  183. package/src/api/presentation/tables.ts +84 -84
  184. package/src/api/presentation/viewPresets.ts +241 -0
  185. package/src/api/presentation/views.ts +713 -673
  186. package/src/api/presentation/walkthroughs.ts +1201 -1201
  187. package/src/api/program/adjacency.ts +164 -164
  188. package/src/api/program/areas.ts +408 -408
  189. package/src/api/program/classification.ts +138 -138
  190. package/src/api/program/cores.ts +83 -83
  191. package/src/api/program/departments.ts +517 -517
  192. package/src/api/program/index.ts +73 -73
  193. package/src/api/program/labels.ts +332 -332
  194. package/src/api/program/layout.ts +422 -422
  195. package/src/api/program/metadata.ts +364 -364
  196. package/src/api/program/metrics.ts +120 -120
  197. package/src/api/program/site.ts +748 -748
  198. package/src/api/program/spreadsheet.ts +2698 -2698
  199. package/src/api/workspace/index.ts +612 -612
  200. package/src/errors/codes.ts +143 -136
  201. package/src/errors/envelope.ts +75 -75
  202. package/src/errors/index.ts +21 -21
  203. package/src/errors/plugin-error.ts +134 -134
  204. package/src/handles.ts +297 -297
  205. package/src/host-utils.ts +67 -67
  206. package/src/index.ts +7 -7
  207. package/src/massParameters.ops.ts +246 -246
  208. package/src/massParameters.ts +427 -427
  209. package/src/types.ts +16 -16
  210. package/test/drawingContract.test.mjs +288 -0
  211. package/test/errors.test.mjs +185 -184
  212. package/test/massParameters.test.mjs +952 -952
  213. package/tsconfig.json +22 -22
  214. package/tsup.config.ts +12 -12
  215. package/api-manifest.json +0 -9618
@@ -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"