@snaptrude/plugin-core 0.11.0-rc.1 → 1.0.0

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 (226) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +176 -14
  3. package/api-manifest.json +872 -49
  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 +447 -0
  7. package/dist/api/core/camera/index.d.ts.map +1 -1
  8. package/dist/api/core/geom/create/index.d.ts +942 -101
  9. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  10. package/dist/api/core/geom/query/brep.d.ts +59 -2
  11. package/dist/api/core/geom/query/brep.d.ts.map +1 -1
  12. package/dist/api/core/geom/query/curve.d.ts +59 -35
  13. package/dist/api/core/geom/query/curve.d.ts.map +1 -1
  14. package/dist/api/core/geom/query/edge.d.ts +2 -2
  15. package/dist/api/core/geom/query/face.d.ts +105 -0
  16. package/dist/api/core/geom/query/face.d.ts.map +1 -1
  17. package/dist/api/core/geom/update/contour.d.ts +10 -2
  18. package/dist/api/core/geom/update/contour.d.ts.map +1 -1
  19. package/dist/api/core/geom/update/curve.d.ts +5 -5
  20. package/dist/api/core/geom/update/profile.d.ts +3 -1
  21. package/dist/api/core/geom/update/profile.d.ts.map +1 -1
  22. package/dist/api/core/handles/index.d.ts +4 -2
  23. package/dist/api/core/handles/index.d.ts.map +1 -1
  24. package/dist/api/core/index.d.ts +4 -4
  25. package/dist/api/core/index.d.ts.map +1 -1
  26. package/dist/api/core/io/import/index.d.ts +3 -1
  27. package/dist/api/core/io/import/index.d.ts.map +1 -1
  28. package/dist/api/core/layers.d.ts +377 -255
  29. package/dist/api/core/layers.d.ts.map +1 -1
  30. package/dist/api/core/mode/index.d.ts +19 -7
  31. package/dist/api/core/mode/index.d.ts.map +1 -1
  32. package/dist/api/core/proposals/index.d.ts +4 -3
  33. package/dist/api/core/proposals/index.d.ts.map +1 -1
  34. package/dist/api/core/storeys/index.d.ts +17 -2
  35. package/dist/api/core/storeys/index.d.ts.map +1 -1
  36. package/dist/api/core/storeys/layers.d.ts +408 -0
  37. package/dist/api/core/storeys/layers.d.ts.map +1 -0
  38. package/dist/api/core/tags.d.ts +84 -3
  39. package/dist/api/core/tags.d.ts.map +1 -1
  40. package/dist/api/core/zoom/index.d.ts +13 -0
  41. package/dist/api/core/zoom/index.d.ts.map +1 -1
  42. package/dist/api/design/bim.d.ts +299 -0
  43. package/dist/api/design/bim.d.ts.map +1 -0
  44. package/dist/api/design/boolean/index.d.ts +2 -0
  45. package/dist/api/design/boolean/index.d.ts.map +1 -1
  46. package/dist/api/design/catalog.d.ts +320 -0
  47. package/dist/api/design/catalog.d.ts.map +1 -0
  48. package/dist/api/design/create/bulk-items.d.ts +269 -0
  49. package/dist/api/design/create/bulk-items.d.ts.map +1 -0
  50. package/dist/api/design/create/grids.d.ts +132 -0
  51. package/dist/api/design/create/grids.d.ts.map +1 -0
  52. package/dist/api/design/create/index.d.ts +753 -102
  53. package/dist/api/design/create/index.d.ts.map +1 -1
  54. package/dist/api/design/create/opening-fields.d.ts +38 -0
  55. package/dist/api/design/create/opening-fields.d.ts.map +1 -0
  56. package/dist/api/design/delete/index.d.ts +7 -20
  57. package/dist/api/design/delete/index.d.ts.map +1 -1
  58. package/dist/api/design/dimensions.d.ts +427 -0
  59. package/dist/api/design/dimensions.d.ts.map +1 -0
  60. package/dist/api/design/doors/index.d.ts +24 -23
  61. package/dist/api/design/doors/index.d.ts.map +1 -1
  62. package/dist/api/design/family.d.ts +1446 -0
  63. package/dist/api/design/family.d.ts.map +1 -0
  64. package/dist/api/design/grids.d.ts +237 -0
  65. package/dist/api/design/grids.d.ts.map +1 -0
  66. package/dist/api/design/index.d.ts +30 -0
  67. package/dist/api/design/index.d.ts.map +1 -1
  68. package/dist/api/design/networks.d.ts +1703 -0
  69. package/dist/api/design/networks.d.ts.map +1 -0
  70. package/dist/api/design/query/geometry/index.d.ts +33 -5
  71. package/dist/api/design/query/geometry/index.d.ts.map +1 -1
  72. package/dist/api/design/query/grids.d.ts +287 -0
  73. package/dist/api/design/query/grids.d.ts.map +1 -0
  74. package/dist/api/design/query/index.d.ts +143 -36
  75. package/dist/api/design/query/index.d.ts.map +1 -1
  76. package/dist/api/design/query/spaces.d.ts +5 -66
  77. package/dist/api/design/query/spaces.d.ts.map +1 -1
  78. package/dist/api/design/selection/index.d.ts +12 -12
  79. package/dist/api/design/types/index.d.ts +40 -24
  80. package/dist/api/design/types/index.d.ts.map +1 -1
  81. package/dist/api/design/update/index.d.ts +412 -8
  82. package/dist/api/design/update/index.d.ts.map +1 -1
  83. package/dist/api/design/windows/index.d.ts +8 -8
  84. package/dist/api/design/windows/index.d.ts.map +1 -1
  85. package/dist/api/entity/buildableEnvelope.d.ts +84 -2
  86. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  87. package/dist/api/entity/referenceLine.d.ts +13 -1
  88. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  89. package/dist/api/entity/space.d.ts +12 -15
  90. package/dist/api/entity/space.d.ts.map +1 -1
  91. package/dist/api/entity/story.d.ts +4 -4
  92. package/dist/api/presentation/aiInspiration.d.ts +24 -24
  93. package/dist/api/presentation/annotate.d.ts +38 -22
  94. package/dist/api/presentation/annotate.d.ts.map +1 -1
  95. package/dist/api/presentation/camera.d.ts +265 -0
  96. package/dist/api/presentation/camera.d.ts.map +1 -0
  97. package/dist/api/presentation/drawingContract.d.ts +32 -0
  98. package/dist/api/presentation/drawingContract.d.ts.map +1 -0
  99. package/dist/api/presentation/drawings.d.ts +3523 -0
  100. package/dist/api/presentation/drawings.d.ts.map +1 -0
  101. package/dist/api/presentation/export.d.ts +23 -5
  102. package/dist/api/presentation/export.d.ts.map +1 -1
  103. package/dist/api/presentation/graphics.d.ts +419 -0
  104. package/dist/api/presentation/graphics.d.ts.map +1 -0
  105. package/dist/api/presentation/index.d.ts +66 -12
  106. package/dist/api/presentation/index.d.ts.map +1 -1
  107. package/dist/api/presentation/placedViews.d.ts +117 -51
  108. package/dist/api/presentation/placedViews.d.ts.map +1 -1
  109. package/dist/api/presentation/sections.d.ts +461 -0
  110. package/dist/api/presentation/sections.d.ts.map +1 -0
  111. package/dist/api/presentation/shapes.d.ts +2 -2
  112. package/dist/api/presentation/sheets.d.ts +175 -37
  113. package/dist/api/presentation/sheets.d.ts.map +1 -1
  114. package/dist/api/presentation/standards.d.ts +590 -0
  115. package/dist/api/presentation/standards.d.ts.map +1 -0
  116. package/dist/api/presentation/viewPresets.d.ts +222 -0
  117. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  118. package/dist/api/presentation/views.d.ts +144 -9
  119. package/dist/api/presentation/views.d.ts.map +1 -1
  120. package/dist/api/presentation/walkthroughs.d.ts +1350 -0
  121. package/dist/api/presentation/walkthroughs.d.ts.map +1 -0
  122. package/dist/api/program/departments.d.ts +58 -2
  123. package/dist/api/program/departments.d.ts.map +1 -1
  124. package/dist/api/program/index.d.ts +16 -6
  125. package/dist/api/program/index.d.ts.map +1 -1
  126. package/dist/api/program/labels.d.ts +355 -0
  127. package/dist/api/program/labels.d.ts.map +1 -0
  128. package/dist/api/program/metadata.d.ts +328 -0
  129. package/dist/api/program/metadata.d.ts.map +1 -0
  130. package/dist/api/program/site.d.ts +4 -4
  131. package/dist/api/program/spreadsheet.d.ts +267 -4
  132. package/dist/api/program/spreadsheet.d.ts.map +1 -1
  133. package/dist/api/workspace/index.d.ts +49 -2
  134. package/dist/api/workspace/index.d.ts.map +1 -1
  135. package/dist/errors/codes.d.ts +5 -8
  136. package/dist/errors/codes.d.ts.map +1 -1
  137. package/dist/handles.d.ts +32 -3
  138. package/dist/handles.d.ts.map +1 -1
  139. package/dist/index.cjs +6534 -2865
  140. package/dist/index.cjs.map +1 -1
  141. package/dist/index.d.ts +2 -0
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +6118 -2857
  144. package/dist/index.js.map +1 -1
  145. package/dist/massParameters.d.ts +287 -0
  146. package/dist/massParameters.d.ts.map +1 -0
  147. package/dist/massParameters.ops.d.ts +138 -0
  148. package/dist/massParameters.ops.d.ts.map +1 -0
  149. package/package.json +2 -1
  150. package/scripts/check-dist-fresh.mjs +22 -0
  151. package/scripts/generate-manifest.mjs +5 -0
  152. package/scripts/generate-manifest.test.mjs +14 -3
  153. package/src/api/core/camera/index.ts +429 -1
  154. package/src/api/core/geom/create/index.ts +1037 -102
  155. package/src/api/core/geom/query/brep.ts +60 -2
  156. package/src/api/core/geom/query/curve.ts +26 -2
  157. package/src/api/core/geom/query/edge.ts +2 -2
  158. package/src/api/core/geom/query/face.ts +109 -4
  159. package/src/api/core/geom/update/contour.ts +10 -2
  160. package/src/api/core/geom/update/profile.ts +2 -0
  161. package/src/api/core/handles/index.ts +3 -2
  162. package/src/api/core/index.ts +4 -4
  163. package/src/api/core/io/import/index.ts +11 -3
  164. package/src/api/core/layers.ts +380 -173
  165. package/src/api/core/mode/index.ts +19 -7
  166. package/src/api/core/proposals/index.ts +4 -3
  167. package/src/api/core/storeys/index.ts +19 -2
  168. package/src/api/core/storeys/layers.ts +339 -0
  169. package/src/api/core/tags.ts +76 -0
  170. package/src/api/core/zoom/index.ts +13 -0
  171. package/src/api/design/bim.ts +210 -0
  172. package/src/api/design/boolean/index.ts +2 -0
  173. package/src/api/design/catalog.ts +203 -0
  174. package/src/api/design/create/bulk-items.ts +294 -0
  175. package/src/api/design/create/grids.ts +137 -0
  176. package/src/api/design/create/index.ts +824 -141
  177. package/src/api/design/create/opening-fields.ts +40 -0
  178. package/src/api/design/delete/index.ts +6 -20
  179. package/src/api/design/dimensions.ts +453 -0
  180. package/src/api/design/doors/index.ts +64 -41
  181. package/src/api/design/family.ts +1342 -0
  182. package/src/api/design/grids.ts +237 -0
  183. package/src/api/design/index.ts +49 -4
  184. package/src/api/design/networks.ts +607 -0
  185. package/src/api/design/query/geometry/index.ts +35 -4
  186. package/src/api/design/query/grids.ts +197 -0
  187. package/src/api/design/query/index.ts +105 -5
  188. package/src/api/design/query/spaces.ts +0 -68
  189. package/src/api/design/types/index.ts +31 -24
  190. package/src/api/design/update/index.ts +398 -4
  191. package/src/api/design/windows/index.ts +40 -22
  192. package/src/api/entity/buildableEnvelope.ts +77 -2
  193. package/src/api/entity/referenceLine.ts +25 -12
  194. package/src/api/entity/space.ts +0 -2
  195. package/src/api/presentation/annotate.ts +90 -58
  196. package/src/api/presentation/camera.ts +289 -0
  197. package/src/api/presentation/drawingContract.ts +70 -0
  198. package/src/api/presentation/drawings.ts +1179 -0
  199. package/src/api/presentation/export.ts +32 -6
  200. package/src/api/presentation/graphics.ts +324 -0
  201. package/src/api/presentation/index.ts +73 -14
  202. package/src/api/presentation/placedViews.ts +120 -57
  203. package/src/api/presentation/sections.ts +420 -0
  204. package/src/api/presentation/sheets.ts +182 -37
  205. package/src/api/presentation/standards.ts +445 -0
  206. package/src/api/presentation/viewPresets.ts +241 -0
  207. package/src/api/presentation/views.ts +81 -10
  208. package/src/api/presentation/walkthroughs.ts +1201 -0
  209. package/src/api/program/departments.ts +54 -2
  210. package/src/api/program/index.ts +16 -6
  211. package/src/api/program/labels.ts +332 -0
  212. package/src/api/program/metadata.ts +364 -0
  213. package/src/api/program/spreadsheet.ts +282 -0
  214. package/src/api/workspace/index.ts +51 -2
  215. package/src/errors/codes.ts +9 -30
  216. package/src/handles.ts +42 -3
  217. package/src/index.ts +2 -0
  218. package/src/massParameters.ops.ts +246 -0
  219. package/src/massParameters.ts +427 -0
  220. package/test/drawingContract.test.mjs +288 -0
  221. package/test/errors.test.mjs +1 -4
  222. package/test/massParameters.test.mjs +952 -0
  223. package/test/paperPensContract.test.mjs +75 -0
  224. package/test/presentationViewSettings.test.mjs +85 -0
  225. package/api-manifest.full.json +0 -6928
  226. package/snaptrude-plugin-core-0.11.0.tgz +0 -0
@@ -9,12 +9,54 @@ import {
9
9
  PluginSpaceUpdateResult,
10
10
  } from "../../entity/space"
11
11
  import { PluginDesignChangeResult } from "../lock"
12
+ import {
13
+ MassParametersPatch,
14
+ type MassParametersRecord,
15
+ } from "../../../massParameters"
12
16
  import {
13
17
  PluginBuildableEnvelopePolygonVertex,
14
18
  PluginBuildableEnvelopeSetbackTier,
15
19
  PluginBuildableEnvelopeVerticalCap,
16
20
  PluginBuildableEnvelopeUpdateResult,
21
+ PluginSiteEdgePatch,
22
+ PluginDesignUpdateSiteEdgeResult,
17
23
  } from "../../entity/buildableEnvelope"
24
+ import { PluginGridStyleOptions } from "../create/grids"
25
+ import { PluginGraphicsLineStyleId } from "../../presentation/graphics"
26
+ import { PluginEntityType } from "../query"
27
+ import { PluginWallType } from "../types"
28
+ import {
29
+ PluginConstructionType,
30
+ PluginFamilyValues,
31
+ type PluginFamilyUpdates,
32
+ } from "../catalog"
33
+
34
+ /** A project style; its pen/pattern and native legacy mirror change together. */
35
+ export const PluginReferenceLineStylePatch = z
36
+ .object({
37
+ styleId: PluginGraphicsLineStyleId,
38
+ })
39
+ .strict()
40
+ export type PluginReferenceLineStylePatch = z.infer<
41
+ typeof PluginReferenceLineStylePatch
42
+ >
43
+
44
+ /** Arguments for design.update.referenceLine. */
45
+ export const PluginDesignUpdateReferenceLineArgs = z
46
+ .object({
47
+ referenceLineId: z.string().min(1),
48
+ patch: PluginReferenceLineStylePatch,
49
+ })
50
+ .strict()
51
+
52
+ /** Styled line id and the applied project style. */
53
+ export const PluginDesignUpdateReferenceLineResult = z.object({
54
+ referenceLineId: z.string(),
55
+ styleId: PluginGraphicsLineStyleId,
56
+ })
57
+ export type PluginDesignUpdateReferenceLineResult = z.infer<
58
+ typeof PluginDesignUpdateReferenceLineResult
59
+ >
18
60
 
19
61
  /**
20
62
  * Sparse property updates for a space. Only provided fields change.
@@ -136,6 +178,22 @@ export type PluginDesignUpdateStaircaseArgs = z.infer<
136
178
  typeof PluginDesignUpdateStaircaseArgs
137
179
  >
138
180
 
181
+ /**
182
+ * Arguments for {@linkcode PluginDesignUpdateApi.parameters}.
183
+ *
184
+ * | Property | Type | Description |
185
+ * |---|---|---|
186
+ * | `component` | {@linkcode ComponentHandle} | The parametric mass to edit |
187
+ * | `patch` | {@linkcode MassParametersPatch} | Partial `values` (+ optional `operations`), or the full edited record |
188
+ */
189
+ export const PluginDesignUpdateParametersArgs = z.object({
190
+ component: ComponentHandle,
191
+ patch: MassParametersPatch,
192
+ })
193
+ export type PluginDesignUpdateParametersArgs = z.infer<
194
+ typeof PluginDesignUpdateParametersArgs
195
+ >
196
+
139
197
  /**
140
198
  * Sparse edits for a wall (all optional; at least one required). Only the
141
199
  * fields you provide change. Dimensions are in **engine units** (the same
@@ -146,13 +204,14 @@ export type PluginDesignUpdateStaircaseArgs = z.infer<
146
204
  * |---|---|---|
147
205
  * | `thickness` | `number`? | Wall thickness, engine units (> 0) |
148
206
  * | `height` | `number`? | Wall height, engine units (> 0) |
149
- * | `type` | `string`? | Convert the wall to another wall type — a name (or `wall:`-prefixed id) from `design.types.list("wall")` |
207
+ * | `type` | {@linkcode PluginWallType}? | Legacy name/id or exact authorized native `{ id, version }` pin from `design.types.list("wall")` |
150
208
  */
151
209
  export const PluginWallUpdates = z
152
210
  .object({
153
211
  thickness: z.number().positive().optional(),
154
212
  height: z.number().positive().optional(),
155
- type: z.string().trim().min(1).optional(),
213
+ type: PluginWallType.optional(),
214
+ values: PluginFamilyValues.optional(),
156
215
  })
157
216
  .refine((p) => Object.keys(p).length > 0, {
158
217
  message: "PluginWallUpdates requires at least one field to change",
@@ -177,6 +236,8 @@ export const PluginSlabUpdates = z
177
236
  .object({
178
237
  thickness: z.number().positive().optional(),
179
238
  overhang: z.number().optional(),
239
+ type: PluginConstructionType.optional(),
240
+ values: PluginFamilyValues.optional(),
180
241
  })
181
242
  .refine((p) => Object.keys(p).length > 0, {
182
243
  message: "PluginSlabUpdates requires at least one field to change",
@@ -238,15 +299,86 @@ export type PluginDesignSetStoreyArgs = z.infer<
238
299
  typeof PluginDesignSetStoreyArgs
239
300
  >
240
301
 
302
+ /**
303
+ * Object types {@linkcode PluginDesignUpdateApi.setObjectType} can turn a mass
304
+ * into — the `design.query` `type` vocabulary.
305
+ */
306
+ export const PluginObjectType = PluginEntityType.extract([
307
+ "wall",
308
+ "roof",
309
+ "slab",
310
+ "floor",
311
+ ])
312
+ export type PluginObjectType = z.infer<typeof PluginObjectType>
313
+
314
+ /**
315
+ * Arguments for {@linkcode PluginDesignUpdateApi.setObjectType}.
316
+ *
317
+ * | Property | Type | Description |
318
+ * |---|---|---|
319
+ * | `components` | {@linkcode ComponentHandle}`[]` | The masses to convert (>= 1) |
320
+ * | `objectType` | {@linkcode PluginObjectType} | Target object type (`"wall"`, `"roof"`, `"slab"`, `"floor"`) |
321
+ */
322
+ export const PluginDesignSetObjectTypeArgs = z.object({
323
+ components: z.array(ComponentHandle).min(1),
324
+ objectType: PluginObjectType,
325
+ })
326
+ export type PluginDesignSetObjectTypeArgs = z.infer<
327
+ typeof PluginDesignSetObjectTypeArgs
328
+ >
329
+
330
+ /**
331
+ * The sparse GROUP-LEVEL patch accepted by {@linkcode PluginDesignUpdateApi.grid}.
332
+ * Only provided fields change. Wing- and line-level updates live on the grids
333
+ * entity family: `design.grids.updateWings` / `design.grids.updateLines`.
334
+ */
335
+ export const PluginGridPatch = z.object({
336
+ angle: z.number().finite().optional(),
337
+ props: PluginGridStyleOptions.optional(),
338
+ storeyVisibility: z
339
+ .array(z.object({ storey: z.number().int(), visible: z.boolean() }))
340
+ .optional(),
341
+ })
342
+ export type PluginGridPatch = z.infer<typeof PluginGridPatch>
343
+
344
+ /** Arguments for {@linkcode PluginDesignUpdateApi.grid}. */
345
+ export const PluginDesignUpdateGridArgs = z.object({
346
+ grid: ComponentHandle,
347
+ patch: PluginGridPatch,
348
+ })
349
+ export type PluginDesignUpdateGridArgs = z.infer<
350
+ typeof PluginDesignUpdateGridArgs
351
+ >
352
+
241
353
  /**
242
354
  * `snaptrude.design.update` — edit existing scene entities (properties + geometry).
243
355
  *
244
356
  * Migrated from the removed `entity.space.{update, updateGeometryFromProfile, bulkUpdate}`.
245
357
  * Only provided fields change; each call is undoable. Failures throw (RPC rejects).
358
+ *
359
+ * Native family edits accept `type` and/or sparse `values` from `design.catalog`.
360
+ * Length overrides use mm; dimensional arguments use SU. Contours and axes stay unchanged.
361
+ * Shared/type overrides are refused. A thickness argument must agree with the layer values.
362
+ * Family roof overhang is unsupported; use the native slab path for family overhang edits.
246
363
  */
247
364
  export abstract class PluginDesignUpdateApi {
248
365
  constructor() {}
249
366
 
367
+ /**
368
+ * Apply a project style through the native reference-line property command.
369
+ * One saved undo step; no selection or tool preference changes. Saves the
370
+ * legacy thickness/mode mirror too. Requires Paper Pens and an editable line
371
+ * in the current proposal. A no-op creates no history entry.
372
+ * @param referenceLineId - Existing reference line id.
373
+ * @param patch - styleId from the project line-style catalog.
374
+ * @returns The line id and applied style id.
375
+ * @example await snaptrude.design.update.referenceLine(id, { styleId: "wide" })
376
+ */
377
+ public abstract referenceLine(
378
+ referenceLineId: string,
379
+ patch: PluginReferenceLineStylePatch,
380
+ ): PluginApiReturn<PluginDesignUpdateReferenceLineResult>
381
+
250
382
  /**
251
383
  * Set a component's **Label** — the same editable Label field the properties
252
384
  * panel shows (doors, windows, furniture, spaces, and every other labelled
@@ -290,6 +422,37 @@ export abstract class PluginDesignUpdateApi {
290
422
  label: string,
291
423
  ): PluginApiReturn<boolean>
292
424
 
425
+ /**
426
+ * Update a structural grid's **group-level** fields with a sparse patch —
427
+ * default line styling, absolute angle, and per-storey 2D visibility. Only
428
+ * provided fields change. Wing- and line-level updates live on the grids
429
+ * entity family: {@linkcode PluginDesignGridsApi.updateWings} /
430
+ * {@linkcode PluginDesignGridsApi.updateLines}.
431
+ *
432
+ * Every change routes through the exact setters the native panel uses —
433
+ * each changed field commits its own undoable command, identical to editing
434
+ * that field in the panel. `angle` is an absolute target in degrees (CCW
435
+ * about +Y).
436
+ *
437
+ * @param grid - The grid group to update
438
+ * @param patch - The sparse {@linkcode PluginGridPatch}
439
+ * @returns `true` once applied
440
+ *
441
+ * @examplePrompt Rotate the grid to 45 degrees
442
+ * @examplePrompt Make this grid's lines dashed and grey
443
+ * @examplePrompt Hide this grid on storey 3's plan
444
+ *
445
+ * # Example
446
+ * ```ts
447
+ * const [grid] = await snaptrude.design.query.listGrids()
448
+ * await snaptrude.design.update.grid(grid, { angle: 45, props: { style: "DASHED" } })
449
+ * ```
450
+ */
451
+ public abstract grid(
452
+ grid: ComponentHandle,
453
+ patch: PluginGridPatch,
454
+ ): PluginApiReturn<boolean>
455
+
293
456
  /**
294
457
  * Update a single space (room) — change its properties (room label, space
295
458
  * type, mass type, area class, department) and/or replace its geometry by
@@ -299,6 +462,8 @@ export abstract class PluginDesignUpdateApi {
299
462
  * @param space - The space to update
300
463
  * @param options - `properties` (sparse) and/or `geometry` ({ profile, extrudeHeight })
301
464
  * @returns the updated space's echoed {@linkcode PluginSpaceUpdateResult}
465
+ * @throws PRECONDITION_FAILED for a void (a hole cut with `design.create.void`): delete it and
466
+ * cut a new one
302
467
  *
303
468
  * @examplePrompt Rename this room to Office
304
469
  * @examplePrompt Change this space's room type to Meeting Room
@@ -332,6 +497,7 @@ export abstract class PluginDesignUpdateApi {
332
497
  *
333
498
  * @param items - One {@linkcode PluginUpdateSpaceItem} per space
334
499
  * @returns one {@linkcode PluginSpaceUpdateResult} per item, in input order
500
+ * @throws PRECONDITION_FAILED for a void, like {@linkcode space}
335
501
  *
336
502
  * @examplePrompt Label all the selected rooms as Bedrooms
337
503
  * @examplePrompt Change the room type of these five spaces at once
@@ -409,6 +575,98 @@ export abstract class PluginDesignUpdateApi {
409
575
  params: PluginStaircaseParamUpdates,
410
576
  ): PluginApiReturn<PluginDesignChangeResult>
411
577
 
578
+ /**
579
+ * Edit a parametric mass by patching its creation recipe and rebuilding the
580
+ * solid in place — the mass keeps its id, storey, materials, position and
581
+ * linked copies; only the geometry changes. Read the current record with
582
+ * `design.query.getParameters` first.
583
+ *
584
+ * `patch` is a partial of `record.values` — or the whole record you read
585
+ * back, edited. A key you leave out is unchanged (that includes
586
+ * `operations`). Each key you send replaces that value whole — a scalar, a
587
+ * point, a list or a record (`contour`, `profile`, `sections`, `path`,
588
+ * `options`, `operations`) alike — so send the complete value you read,
589
+ * edited (a partial `options` drops the switches it leaves out);
590
+ * `{ operations: [] }` drops every operation. An optional key
591
+ * the record does not carry yet may be patched in when the kind allows it:
592
+ * a straight extrusion acquires `twistInDegrees` or `topScale`, an
593
+ * options-less loft or sweep acquires `options` (`levels` is not one — send
594
+ * the angle, not the section count). A patch that changes nothing
595
+ * returns the current record and records no edit (no undo step). `kind` and
596
+ * `version` are immutable: to change the kind, build a new mass. Keys are the
597
+ * record's `values` keys for its `kind` (sphere: `centre`, `radius`;
598
+ * cylinder: `base`, `axis`, `radius`, `height`; torus: `centre`, `axis`,
599
+ * `majorRadius`, `minorRadius`; …) plus `operations`. To change a fillet
600
+ * radius, edit `operations[i].radius` in the record you read and send
601
+ * `{ operations }` back. Points and axes are WORLD coordinates in internal
602
+ * units, exactly as `getParameters` reports them.
603
+ *
604
+ * Rebuilds in memory first, then swaps onto the SAME component; every linked
605
+ * copy regenerates together. One undo step; saves and syncs to collaborators
606
+ * like any geometry edit. Kernel kinds (revolution, sweep, loft, primitives,
607
+ * any `operations`) run on OpenCascade — expect a short pause.
608
+ *
609
+ * @param component - a mass whose `getParameters` is non-null
610
+ * @param patch - partial `values` (+ optional `operations`), or the full edited record
611
+ * @returns the complete post-edit record, world coordinates (what
612
+ * `getParameters` now returns)
613
+ * @throws PRECONDITION_FAILED when the component is not a mass (a family
614
+ * instance: use `design.family.setParameters`).
615
+ * Also PRECONDITION_FAILED when the mass carries no live recipe — built
616
+ * from a boolean, split, `brepFromFaces`/`brepFromMesh` or drawn; edited
617
+ * free-form since (push/pull, move face, boolean); or scaled with the
618
+ * transform tool. `getParameters` returns `null` for exactly these.
619
+ * Do not retry — rebuild it with a recipe constructor and say so.
620
+ * A scaled mass is the exception: undo the scale and call again.
621
+ * Also PRECONDITION_FAILED when the mass (or a linked copy) is **locked**
622
+ * (the message says so). Locking is invisible to `getParameters` — a
623
+ * locked parametric mass still reads back a full record. Unlock it (and
624
+ * every linked copy) and call again; never rebuild it, the recipe is intact.
625
+ * Also PRECONDITION_FAILED when an `operations` entry's edge/face selectors
626
+ * no longer resolve on the rebuilt base (the message names the operation
627
+ * and edge): re-select the edges on the new shape and re-apply that
628
+ * operation.
629
+ * Also PRECONDITION_FAILED when the edit is the first twist or taper — or
630
+ * the straightening — of an extrusion that carries a shell, fillet or
631
+ * chamfer (the kernel numbers its faces differently): send the twist/taper
632
+ * keys with `operations: []` first (the message names them), re-select on
633
+ * the new shape, then send `{ operations }` back.
634
+ * Graph-bound spaces accept amount-only extrusion edits. Footprint, twist,
635
+ * taper and operation edits require the owning boundary tools, so generated
636
+ * walls, junctions and hosted openings remain synchronized.
637
+ * @throws VALIDATION for a key the kind does not have (the message lists the
638
+ * kind's keys), `kind` or `version` in a partial patch, or a value outside
639
+ * the constructor's own rules (torus tube ≥ ring, revolution angle ∉
640
+ * (0, 360], a profile crossing its axis, a spline with fewer than
641
+ * degree + 1 poles).
642
+ * @throws OPERATION_FAILED when the kernel cannot build the edited recipe;
643
+ * the model is left unchanged.
644
+ *
645
+ * @examplePrompt Make the dome's radius 8 metres
646
+ * @examplePrompt Raise the podium to 5 m
647
+ * @examplePrompt Widen the vase — move its profile points 20 cm outward
648
+ * @examplePrompt Change the fillet on the rounded column to 300 mm
649
+ *
650
+ * # Example
651
+ * ```ts
652
+ * // { kind: "sphere", values: { centre, radius: 19.685 }, … }
653
+ * const before = await snaptrude.design.query.getParameters(dome)
654
+ * const after = await snaptrude.design.update.parameters(dome, { radius: 31.496 }) // 8 m in internal units
655
+ *
656
+ * // Fillet radius on a recorded result: read → edit → send the array back
657
+ * const rec = await snaptrude.design.query.getParameters(column)
658
+ * const operations = rec?.operations ?? []
659
+ * if (operations[0]?.op === "fillet") {
660
+ * operations[0].radius = 1.181
661
+ * await snaptrude.design.update.parameters(column, { operations })
662
+ * }
663
+ * ```
664
+ */
665
+ public abstract parameters(
666
+ component: ComponentHandle,
667
+ patch: MassParametersPatch,
668
+ ): PluginApiReturn<MassParametersRecord>
669
+
412
670
  /**
413
671
  * Edit a **wall** — its thickness and/or height (the same command the
414
672
  * properties panel's Thickness/Height fields drive) and/or its **wall type**
@@ -583,6 +841,24 @@ export abstract class PluginDesignUpdateApi {
583
841
  updates: PluginSlabUpdates,
584
842
  ): PluginApiReturn<PluginDesignChangeResult>
585
843
 
844
+ /** Replace a native beam family while preserving its authored axis. Values use mm/degrees.
845
+ * @param component Native beam. @param updates Saved family reference and optional instance values.
846
+ * @returns Affected component IDs. One undoable operation; unsupported geometry fails before mutation.
847
+ */
848
+ public abstract beam(
849
+ component: ComponentHandle,
850
+ updates: PluginFamilyUpdates,
851
+ ): PluginApiReturn<PluginDesignChangeResult>
852
+
853
+ /** Replace a native column family while preserving its authored axis. Values use mm/degrees.
854
+ * @param component Native column. @param updates Saved family reference and optional instance values.
855
+ * @returns Affected component IDs. One undoable operation; unsupported geometry fails before mutation.
856
+ */
857
+ public abstract column(
858
+ component: ComponentHandle,
859
+ updates: PluginFamilyUpdates,
860
+ ): PluginApiReturn<PluginDesignChangeResult>
861
+
586
862
  /**
587
863
  * Set a component's **absolute world elevation** — moves it vertically so its
588
864
  * base (the bounding-box bottom, world Y) lands at `elevation`. Composed over
@@ -690,12 +966,65 @@ export abstract class PluginDesignUpdateApi {
690
966
  storey: number,
691
967
  ): PluginApiReturn<PluginDesignChangeResult>
692
968
 
969
+ /**
970
+ * Change the **object type** of one or more masses — turn a mass into a real
971
+ * wall, roof, slab or floor: the properties panel's Object Type dropdown,
972
+ * headless. The geometry is kept exactly as it is (a wedge stays a wedge;
973
+ * nothing is flattened to a default thickness), so a sloped mass built with
974
+ * `design.create.massFromBrep` becomes a sloped roof or a raked wall. The
975
+ * component keeps its handle, label and storey; it gains the target type's
976
+ * construction layers and properties, and the type's default material when
977
+ * the mass still wore the default. One undoable operation for the whole
978
+ * list; undo turns them back into masses.
979
+ *
980
+ * Instances convert as a family: passing one instance (or the source) of an
981
+ * instanced mass converts its source and every sibling; `affected` echoes
982
+ * every visible member (the hidden instancing template converts too but is
983
+ * not listed). A converted component cannot be converted again (same rule
984
+ * as the panel). A converted wall has no parametric centerline: it hosts
985
+ * doors and windows and exports, but neighbours do not re-mitre against it.
986
+ *
987
+ * Throws before anything changes (all-or-nothing) when a component is not a
988
+ * mass, is a plinth, is locked or in a locked bucket, already had its type
989
+ * changed, or when a handle is gone/forged.
990
+ *
991
+ * @param components - The masses to convert
992
+ * @param objectType - Target type: `"wall"`, `"roof"`, `"slab"` or `"floor"`
993
+ * (the `design.query.getEntityType` vocabulary)
994
+ * @returns the visible components converted — the same handles, plus any
995
+ * instance siblings pulled in by family expansion
996
+ *
997
+ * @examplePrompt Convert this mass into a wall
998
+ * @examplePrompt Turn the sloped mass into a roof
999
+ * @examplePrompt Make these masses real slabs
1000
+ * @examplePrompt Change the object type of the selection to wall
1001
+ * @examplePrompt Convert the wedge I built into a raked wall
1002
+ * @examplePrompt Turn this mass into a floor
1003
+ *
1004
+ * # Example
1005
+ * ```ts
1006
+ * const brep = await snaptrude.core.geom.create.brepFromFaces(wedgeFaces)
1007
+ * const wedge = await snaptrude.design.create.massFromBrep(brep, "Gable end")
1008
+ * const { affected } = await snaptrude.design.update.setObjectType([wedge], "wall")
1009
+ * console.log(await snaptrude.design.query.getEntityType(affected[0])) // "wall"
1010
+ * ```
1011
+ */
1012
+ public abstract setObjectType(
1013
+ components: ComponentHandle[],
1014
+ objectType: PluginObjectType,
1015
+ ): PluginApiReturn<PluginDesignChangeResult>
1016
+
693
1017
  /**
694
1018
  * Update an existing parametric buildable envelope — regenerate the zoning
695
1019
  * volume from a revised site polygon, setbacks, vertical cap, or FAR and
696
1020
  * lot-coverage limits, keeping the same envelope id. Canonical home of the
697
1021
  * update formerly at `entity.buildableEnvelope.update` (now deprecated).
698
1022
  *
1023
+ * Edge state is preserved, like the right panel: every edge's type
1024
+ * (front/side/rear) is kept. For each type whose value changed (by more than
1025
+ * 2 mm), the per-edge custom distances on edges of that type are cleared;
1026
+ * custom distances on types whose value did not change are kept.
1027
+ *
699
1028
  * @param buildableEnvelopeId - Existing envelope ID to update; non-empty and
700
1029
  * must match an existing envelope on the canvas.
701
1030
  * @param sitePolygon - Site polygon vertices in `lengthUnit`; minimum 3 vertices.
@@ -706,9 +1035,15 @@ export abstract class PluginDesignUpdateApi {
706
1035
  * @param farRatio - Optional FAR value, positive when provided.
707
1036
  * @param lotCoverageMaxPct - Optional lot coverage cap, `0..100`.
708
1037
  * @returns A {@linkcode PluginBuildableEnvelopeUpdateResult} with the
709
- * `buildableEnvelopeId` of the updated envelope.
1038
+ * `buildableEnvelopeId` of the updated envelope and `clearedEdgeSetbacks`,
1039
+ * the `edgeIndex` of each edge that lost its custom distance (empty when
1040
+ * none). Tell the user about any cleared edges.
710
1041
  * @throws If validation fails, the envelope does not exist, or generation
711
- * produces no renderable geometry.
1042
+ * produces no renderable geometry. Also throws `PRECONDITION_FAILED`
1043
+ * (`details.reason: "STALE_EDGE_SETTINGS"`, nothing changes) when the site
1044
+ * outline changed since the edge settings were made. Tell the user;
1045
+ * editing any edge on the canvas setback pills resets the edge settings
1046
+ * to the new outline (dropping the old ones), after which you can retry.
712
1047
  *
713
1048
  * @examplePrompt Change the envelope's height limit to 175 feet
714
1049
  * @examplePrompt Update the setbacks on the buildable envelope
@@ -742,4 +1077,63 @@ export abstract class PluginDesignUpdateApi {
742
1077
  farRatio?: number,
743
1078
  lotCoverageMaxPct?: number,
744
1079
  ): PluginApiReturn<PluginBuildableEnvelopeUpdateResult>
1080
+
1081
+ /**
1082
+ * Change one site edge's type (front / side / rear) and/or give that edge
1083
+ * its own setback distance, the same as editing a setback pill on the
1084
+ * canvas. One undo step; the pills and Site Analysis sheet refresh.
1085
+ *
1086
+ * Address the edge with `siteId` and `edgeIndex` from
1087
+ * `program.site.listEdges()`. Setting `role` clears that edge's own
1088
+ * distance. `setback: null` clears the edge's own distance and puts it back
1089
+ * on its type's distance. When `role` and a numeric `setback` are both
1090
+ * given, the role is applied first and then the setback, so the new distance
1091
+ * wins. On the only edge of its type, a numeric setback becomes that type's
1092
+ * value (like the canvas pills), so `null` afterwards has nothing to
1093
+ * clear; set the type's value instead. Only call this when the user asks to
1094
+ * change an edge.
1095
+ *
1096
+ * @param siteId - Site component id, from `program.site.listEdges()`.
1097
+ * @param edgeIndex - Edge index from `program.site.listEdges()`; nonnegative
1098
+ * integer, upper bound checked by the host.
1099
+ * @param patch - A {@linkcode PluginSiteEdgePatch}: `role`, `setback` (a
1100
+ * number in `lengthUnit`, or `null` to clear), and `lengthUnit` (required
1101
+ * with a numeric `setback`). Provide `role` and/or `setback`.
1102
+ * @returns The refreshed {@linkcode PluginDesignUpdateSiteEdgeResult} for the
1103
+ * site, as `program.site.listEdges()` returns it.
1104
+ * @throws
1105
+ * - `HANDLE_INVALID`: unknown `siteId` (invalid site handle).
1106
+ * - `VALIDATION`: `edgeIndex` is out of range or not a nonnegative
1107
+ * integer; when the index is out of range, `details` include `edgeCount`.
1108
+ * - `PRECONDITION_FAILED`, with `details.reason` one of:
1109
+ * - `NO_BUILDABLE_ENVELOPE`: the site has no envelope to store edge
1110
+ * settings on. Ask the user whether to create a default envelope with
1111
+ * `design.create.buildableEnvelopeFromSite(siteId)` or to create one
1112
+ * themselves; do not create one unasked.
1113
+ * - `MASSING_ENVELOPE`: the site's envelope is a massing envelope. Tell
1114
+ * the user; change nothing.
1115
+ * - `ENVELOPE_TRANSFORMED`: the envelope has been rotated or scaled, so
1116
+ * edge editing is unavailable. Tell the user.
1117
+ * - `STALE_EDGE_SETTINGS`: the site outline changed since the edge
1118
+ * settings were made. Tell the user; editing any edge on the canvas
1119
+ * setback pills resets the edge settings to the new outline (dropping
1120
+ * the old ones), after which you can retry.
1121
+ *
1122
+ * @examplePrompt Make edge 2 the front
1123
+ * @examplePrompt Set just the north edge setback to 8 m
1124
+ * @examplePrompt Remove the custom setback on edge 3
1125
+ *
1126
+ * # Example
1127
+ * ```ts
1128
+ * const [{ siteId }] = (await snaptrude.program.site.listEdges()).sites
1129
+ * await snaptrude.design.update.siteEdge(siteId, 2, { role: "front" })
1130
+ * await snaptrude.design.update.siteEdge(siteId, 3, { setback: 8, lengthUnit: "m" })
1131
+ * await snaptrude.design.update.siteEdge(siteId, 3, { setback: null })
1132
+ * ```
1133
+ */
1134
+ public abstract siteEdge(
1135
+ siteId: string,
1136
+ edgeIndex: number,
1137
+ patch: PluginSiteEdgePatch,
1138
+ ): PluginApiReturn<PluginDesignUpdateSiteEdgeResult>
745
1139
  }
@@ -10,13 +10,14 @@ import { PluginObjectCatalogGroup, PluginObjectCatalogItem } from "../doors"
10
10
  * at `design.query.*`. Window targets are {@linkcode ComponentHandle}s.
11
11
  *
12
12
  * The **catalog** reads (`listCatalogGroups`/`listCatalog`/`getCatalogItem`/`exists`)
13
- * browse the placeable window library — plain value records keyed by a library id
14
- * (team `_id` or general `fullName`), NOT handles — and feed `design.create.window`.
15
- * They are network-backed but carry no `Async` suffix (§6.6) and never throw
16
- * (`[]`/`null`). The {@linkcode PluginObjectCatalogGroup} / {@linkcode PluginObjectCatalogItem}
13
+ * browse saved hosted window families, keyed by definition ID, and feed design.create.window.
14
+ * They reject if saved definitions cannot be loaded completely. A missing item returns null.
15
+ * The {@linkcode PluginObjectCatalogGroup} / {@linkcode PluginObjectCatalogItem}
17
16
  * DTOs are shared with `design.doors` (defined there, re-exported here).
18
17
  *
19
- * `getSillHeight` (bounds-derived) and the command-wired `mirror` land in a later pass.
18
+ * PC-only: dimensions read the evaluated opening and host thickness in SU. Setters
19
+ * write declared width/height parameters, never mesh scale. Missing or derived
20
+ * controls reject. Use design.family.setParameters for sill and other controls.
20
21
  */
21
22
  export abstract class PluginDesignWindowsApi {
22
23
  constructor() {}
@@ -40,7 +41,9 @@ export abstract class PluginDesignWindowsApi {
40
41
  * if (type) console.log("window type:", type)
41
42
  * ```
42
43
  */
43
- public abstract getType(window: ComponentHandle): PluginApiReturn<string | null>
44
+ public abstract getType(
45
+ window: ComponentHandle,
46
+ ): PluginApiReturn<string | null>
44
47
 
45
48
  /**
46
49
  * Get the width of a window — how wide its opening is along the host wall.
@@ -60,7 +63,9 @@ export abstract class PluginDesignWindowsApi {
60
63
  * if (width !== null) console.log("window width:", width)
61
64
  * ```
62
65
  */
63
- public abstract getWidth(window: ComponentHandle): PluginApiReturn<number | null>
66
+ public abstract getWidth(
67
+ window: ComponentHandle,
68
+ ): PluginApiReturn<number | null>
64
69
 
65
70
  /**
66
71
  * Get the height of a window — how tall its opening is on the host wall.
@@ -80,12 +85,13 @@ export abstract class PluginDesignWindowsApi {
80
85
  * if (height !== null) console.log("window height:", height)
81
86
  * ```
82
87
  */
83
- public abstract getHeight(window: ComponentHandle): PluginApiReturn<number | null>
88
+ public abstract getHeight(
89
+ window: ComponentHandle,
90
+ ): PluginApiReturn<number | null>
84
91
 
85
92
  /**
86
- * Get a window's full dimensions in one call — width along the wall, vertical
87
- * height, and thickness through the wall — measured in the window's local
88
- * oriented space.
93
+ * Get evaluated opening width/height and host thickness in Snaptrude units.
94
+ * The opening can differ from the width/height input parameters.
89
95
  *
90
96
  * @param window The window to query
91
97
  * @returns The dimensions, or `null`
@@ -104,7 +110,7 @@ export abstract class PluginDesignWindowsApi {
104
110
  * ```
105
111
  */
106
112
  public abstract getDimensions(
107
- window: ComponentHandle
113
+ window: ComponentHandle,
108
114
  ): PluginApiReturn<PluginWindowDimensions | null>
109
115
 
110
116
  /**
@@ -129,7 +135,7 @@ export abstract class PluginDesignWindowsApi {
129
135
  */
130
136
  public abstract setWidth(
131
137
  window: ComponentHandle,
132
- width: number
138
+ width: number,
133
139
  ): PluginApiReturn<PluginDesignChangeResult>
134
140
 
135
141
  /**
@@ -153,7 +159,7 @@ export abstract class PluginDesignWindowsApi {
153
159
  */
154
160
  public abstract setHeight(
155
161
  window: ComponentHandle,
156
- height: number
162
+ height: number,
157
163
  ): PluginApiReturn<PluginDesignChangeResult>
158
164
 
159
165
  /**
@@ -174,7 +180,9 @@ export abstract class PluginDesignWindowsApi {
174
180
  * for (const g of groups) console.log(g.dbType, g.label, g.source)
175
181
  * ```
176
182
  */
177
- public abstract listCatalogGroups(): PluginApiReturn<PluginObjectCatalogGroup[]>
183
+ public abstract listCatalogGroups(): PluginApiReturn<
184
+ PluginObjectCatalogGroup[]
185
+ >
178
186
 
179
187
  /**
180
188
  * List the placeable window catalog (team + general libraries), optionally
@@ -196,7 +204,7 @@ export abstract class PluginDesignWindowsApi {
196
204
  * ```
197
205
  */
198
206
  public abstract listCatalog(
199
- group?: string
207
+ group?: string,
200
208
  ): PluginApiReturn<PluginObjectCatalogItem[]>
201
209
 
202
210
  /**
@@ -218,7 +226,7 @@ export abstract class PluginDesignWindowsApi {
218
226
  * ```
219
227
  */
220
228
  public abstract getCatalogItem(
221
- id: string
229
+ id: string,
222
230
  ): PluginApiReturn<PluginObjectCatalogItem | null>
223
231
 
224
232
  /**
@@ -282,7 +290,9 @@ export const PluginDesignWindowSetWidthArgs = z.object({
282
290
  window: ComponentHandle,
283
291
  width: z.number(),
284
292
  })
285
- export type PluginDesignWindowSetWidthArgs = z.infer<typeof PluginDesignWindowSetWidthArgs>
293
+ export type PluginDesignWindowSetWidthArgs = z.infer<
294
+ typeof PluginDesignWindowSetWidthArgs
295
+ >
286
296
 
287
297
  /**
288
298
  * Arguments for {@linkcode PluginDesignWindowsApi.setHeight}.
@@ -296,7 +306,9 @@ export const PluginDesignWindowSetHeightArgs = z.object({
296
306
  window: ComponentHandle,
297
307
  height: z.number(),
298
308
  })
299
- export type PluginDesignWindowSetHeightArgs = z.infer<typeof PluginDesignWindowSetHeightArgs>
309
+ export type PluginDesignWindowSetHeightArgs = z.infer<
310
+ typeof PluginDesignWindowSetHeightArgs
311
+ >
300
312
 
301
313
  // ---------------------------------------------------------------------------
302
314
  // catalog (shared DTOs defined in ../doors, re-exported here for symmetry)
@@ -315,7 +327,9 @@ export { PluginObjectCatalogGroup, PluginObjectCatalogItem }
315
327
  export const PluginDesignWindowListCatalogArgs = z.object({
316
328
  group: z.string().optional(),
317
329
  })
318
- export type PluginDesignWindowListCatalogArgs = z.infer<typeof PluginDesignWindowListCatalogArgs>
330
+ export type PluginDesignWindowListCatalogArgs = z.infer<
331
+ typeof PluginDesignWindowListCatalogArgs
332
+ >
319
333
 
320
334
  /**
321
335
  * Arguments for {@linkcode PluginDesignWindowsApi.getCatalogItem} / {@linkcode PluginDesignWindowsApi.exists}.
@@ -327,7 +341,11 @@ export type PluginDesignWindowListCatalogArgs = z.infer<typeof PluginDesignWindo
327
341
  export const PluginDesignWindowGetCatalogItemArgs = z.object({
328
342
  id: z.string(),
329
343
  })
330
- export type PluginDesignWindowGetCatalogItemArgs = z.infer<typeof PluginDesignWindowGetCatalogItemArgs>
344
+ export type PluginDesignWindowGetCatalogItemArgs = z.infer<
345
+ typeof PluginDesignWindowGetCatalogItemArgs
346
+ >
331
347
 
332
348
  export const PluginDesignWindowExistsArgs = PluginDesignWindowGetCatalogItemArgs
333
- export type PluginDesignWindowExistsArgs = z.infer<typeof PluginDesignWindowExistsArgs>
349
+ export type PluginDesignWindowExistsArgs = z.infer<
350
+ typeof PluginDesignWindowExistsArgs
351
+ >