@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,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"