@snaptrude/plugin-core 0.9.16-networks-20261012.1 → 0.9.17

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 (88) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/api-manifest.json +9711 -0
  3. package/dist/api/analysis/daylight.d.ts +5 -5
  4. package/dist/api/analysis/solar.d.ts +2 -2
  5. package/dist/api/core/camera/index.d.ts +0 -29
  6. package/dist/api/core/camera/index.d.ts.map +1 -1
  7. package/dist/api/core/zoom/index.d.ts +0 -13
  8. package/dist/api/core/zoom/index.d.ts.map +1 -1
  9. package/dist/api/design/create/bulk-items.d.ts +21 -40
  10. package/dist/api/design/create/bulk-items.d.ts.map +1 -1
  11. package/dist/api/design/create/index.d.ts +97 -120
  12. package/dist/api/design/create/index.d.ts.map +1 -1
  13. package/dist/api/design/create/opening-fields.d.ts +12 -13
  14. package/dist/api/design/create/opening-fields.d.ts.map +1 -1
  15. package/dist/api/design/doors/index.d.ts +24 -18
  16. package/dist/api/design/doors/index.d.ts.map +1 -1
  17. package/dist/api/design/family.d.ts +27 -797
  18. package/dist/api/design/family.d.ts.map +1 -1
  19. package/dist/api/design/index.d.ts +0 -16
  20. package/dist/api/design/index.d.ts.map +1 -1
  21. package/dist/api/design/query/index.d.ts +30 -30
  22. package/dist/api/design/selection/index.d.ts +10 -10
  23. package/dist/api/design/types/index.d.ts +24 -40
  24. package/dist/api/design/types/index.d.ts.map +1 -1
  25. package/dist/api/design/update/index.d.ts +3 -40
  26. package/dist/api/design/update/index.d.ts.map +1 -1
  27. package/dist/api/design/windows/index.d.ts +8 -8
  28. package/dist/api/design/windows/index.d.ts.map +1 -1
  29. package/dist/api/presentation/aiInspiration.d.ts +10 -10
  30. package/dist/api/presentation/annotate.d.ts +22 -38
  31. package/dist/api/presentation/annotate.d.ts.map +1 -1
  32. package/dist/api/presentation/export.d.ts +5 -23
  33. package/dist/api/presentation/export.d.ts.map +1 -1
  34. package/dist/api/presentation/index.d.ts +21 -32
  35. package/dist/api/presentation/index.d.ts.map +1 -1
  36. package/dist/api/presentation/placedViews.d.ts +6 -106
  37. package/dist/api/presentation/placedViews.d.ts.map +1 -1
  38. package/dist/api/presentation/sections.d.ts +461 -0
  39. package/dist/api/presentation/sections.d.ts.map +1 -0
  40. package/dist/api/presentation/shapes.d.ts +2 -2
  41. package/dist/api/presentation/sheets.d.ts +19 -175
  42. package/dist/api/presentation/sheets.d.ts.map +1 -1
  43. package/dist/api/presentation/views.d.ts +5 -103
  44. package/dist/api/presentation/views.d.ts.map +1 -1
  45. package/dist/api/presentation/walkthroughs.d.ts +6 -6
  46. package/dist/index.cjs +2434 -3619
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.js +2421 -3501
  49. package/dist/index.js.map +1 -1
  50. package/package.json +1 -1
  51. package/scripts/generate-manifest.mjs +0 -5
  52. package/src/api/core/camera/index.ts +0 -29
  53. package/src/api/core/zoom/index.ts +0 -13
  54. package/src/api/design/create/bulk-items.ts +16 -23
  55. package/src/api/design/create/index.ts +119 -129
  56. package/src/api/design/create/opening-fields.ts +12 -15
  57. package/src/api/design/doors/index.ts +42 -58
  58. package/src/api/design/family.ts +32 -662
  59. package/src/api/design/index.ts +4 -34
  60. package/src/api/design/types/index.ts +24 -31
  61. package/src/api/design/update/index.ts +3 -41
  62. package/src/api/design/windows/index.ts +22 -40
  63. package/src/api/presentation/annotate.ts +58 -90
  64. package/src/api/presentation/export.ts +6 -32
  65. package/src/api/presentation/index.ts +23 -39
  66. package/src/api/presentation/placedViews.ts +28 -119
  67. package/src/api/presentation/sections.ts +420 -0
  68. package/src/api/presentation/sheets.ts +20 -181
  69. package/src/api/presentation/views.ts +6 -46
  70. package/dist/api/design/bim.d.ts +0 -209
  71. package/dist/api/design/bim.d.ts.map +0 -1
  72. package/dist/api/design/catalog.d.ts +0 -320
  73. package/dist/api/design/catalog.d.ts.map +0 -1
  74. package/dist/api/design/networks.d.ts +0 -1703
  75. package/dist/api/design/networks.d.ts.map +0 -1
  76. package/dist/api/presentation/drawingContract.d.ts +0 -32
  77. package/dist/api/presentation/drawingContract.d.ts.map +0 -1
  78. package/dist/api/presentation/drawings.d.ts +0 -3523
  79. package/dist/api/presentation/drawings.d.ts.map +0 -1
  80. package/dist/api/presentation/viewPresets.d.ts +0 -222
  81. package/dist/api/presentation/viewPresets.d.ts.map +0 -1
  82. package/src/api/design/bim.ts +0 -121
  83. package/src/api/design/catalog.ts +0 -203
  84. package/src/api/design/networks.ts +0 -607
  85. package/src/api/presentation/drawingContract.ts +0 -70
  86. package/src/api/presentation/drawings.ts +0 -1179
  87. package/src/api/presentation/viewPresets.ts +0 -241
  88. package/test/drawingContract.test.mjs +0 -288
@@ -18,14 +18,7 @@ import { PluginDesignDimensionsApi } from "./dimensions"
18
18
  import { PluginDesignTypesApi } from "./types"
19
19
  import { PluginDesignFamilyApi } from "./family"
20
20
  import { PluginDesignGridsApi } from "./grids"
21
- import { PluginDesignCatalogApi } from "./catalog"
22
- import { PluginDesignBimApi } from "./bim"
23
21
  import { PluginDesignChangeResult } from "./lock"
24
- import {
25
- PluginElectricalApi,
26
- PluginPlumbingApi,
27
- PluginMechanicalApi,
28
- } from "./networks"
29
22
 
30
23
  /**
31
24
  * `snaptrude.design.*` — author, query & edit BIM geometry.
@@ -83,22 +76,10 @@ export abstract class PluginDesignApi {
83
76
  public abstract types: PluginDesignTypesApi
84
77
  /** Author parametric families from a JSON spec. See {@linkcode PluginDesignFamilyApi}. */
85
78
  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
79
 
92
80
  /** Structural edits on a grid's line structure. See {@linkcode PluginDesignGridsApi}. */
93
81
  public abstract grids: PluginDesignGridsApi
94
82
 
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
83
  /**
103
84
  * Lock entities so they cannot be edited. Undoable. Cascades to void/door/window
104
85
  * children, stacked-wall companions, and terrain neighborhood; skips
@@ -119,9 +100,7 @@ export abstract class PluginDesignApi {
119
100
  * // affected is post-cascade: hosted doors/windows are included
120
101
  * ```
121
102
  */
122
- public abstract lock(
123
- components: ComponentHandle[],
124
- ): PluginApiReturn<PluginDesignChangeResult>
103
+ public abstract lock(components: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
125
104
 
126
105
  /**
127
106
  * Unlock previously locked entities so they can be edited again. Undoable.
@@ -141,9 +120,7 @@ export abstract class PluginDesignApi {
141
120
  * const { affected } = await snaptrude.design.unlock(locked)
142
121
  * ```
143
122
  */
144
- public abstract unlock(
145
- components: ComponentHandle[],
146
- ): PluginApiReturn<PluginDesignChangeResult>
123
+ public abstract unlock(components: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
147
124
 
148
125
  /**
149
126
  * Test whether an entity is locked (folds group + bucket lock unless `includeInherited: false`).
@@ -211,9 +188,7 @@ export abstract class PluginDesignApi {
211
188
  * console.log("area-locked", affected.length, "spaces")
212
189
  * ```
213
190
  */
214
- public abstract lockArea(
215
- spaces: ComponentHandle[],
216
- ): PluginApiReturn<PluginDesignChangeResult>
191
+ public abstract lockArea(spaces: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
217
192
 
218
193
  /**
219
194
  * Unlock the footprint area of previously area-locked spaces so their area can
@@ -234,9 +209,7 @@ export abstract class PluginDesignApi {
234
209
  * const { affected } = await snaptrude.design.unlockArea(locked)
235
210
  * ```
236
211
  */
237
- public abstract unlockArea(
238
- spaces: ComponentHandle[],
239
- ): PluginApiReturn<PluginDesignChangeResult>
212
+ public abstract unlockArea(spaces: ComponentHandle[]): PluginApiReturn<PluginDesignChangeResult>
240
213
 
241
214
  /**
242
215
  * Test whether a space's footprint area is locked. A read — never throws;
@@ -299,6 +272,3 @@ export * from "./dimensions"
299
272
  export * from "./types"
300
273
  export * from "./family"
301
274
  export * from "./grids"
302
- export * from "./networks"
303
- export * from "./catalog"
304
- export * from "./bim"
@@ -1,25 +1,23 @@
1
1
  import * as z from "zod"
2
2
  import { PluginApiReturn } from "../../../types"
3
3
 
4
- /** An exact saved native wall family. Access is checked on every use; Draw selection is not registration. */
5
- export const PluginNativeWallType = z.object({
6
- id: z.string().min(1),
7
- version: z.number().int().positive(),
8
- })
9
- export type PluginNativeWallType = z.infer<typeof PluginNativeWallType>
10
-
11
- /** Legacy project type name/id, or an exact authorized native wall family pin. */
12
- export const PluginWallType = z.union([z.string().trim().min(1), PluginNativeWallType])
13
- export type PluginWallType = z.infer<typeof PluginWallType>
14
-
15
4
  /**
16
- * Read-only project assemblies and authorized saved native wall families.
17
- * Legacy ids use `"<kind>:<name>"`. Native wall records carry `nativeFamily`:
18
- * pass that exact `{ id, version }` pin to get, create.walls, create.wallRuns,
19
- * or update.wall. Labels and bare definition ids do not select native families.
20
- * Native lengths use Snaptrude units (1 SU = 254 mm).
21
- * Missing ids return null; catalog/network failures reject rather than return
22
- * an incomplete catalog. Author native families with design.family.
5
+ * `snaptrude.design.types` — READ-ONLY reference over the project's building
6
+ * **type / assembly** system (the Project Properties layer stacks: External /
7
+ * Internal walls, slabs, floors, ceilings, roofs). A type bundles a labelled
8
+ * layer stack — each layer's role, thickness (engine units) and material — plus a
9
+ * summed total thickness. Both the built-in defaults and any team/user-added types
10
+ * are surfaced.
11
+ *
12
+ * Types are plain value records ({@linkcode PluginBuildingType}) — NOT scene
13
+ * entities/handles. A type's `id` is a stable `"<kind>:<name>"` token
14
+ * (e.g. `"wall:brickWithPlasterAndPaint"`) returned by
15
+ * {@linkcode PluginDesignTypesApi.list} and consumed by
16
+ * {@linkcode PluginDesignTypesApi.get}. Reads never throw — an unknown id yields
17
+ * `null`; a kind with no types yields `[]`.
18
+ *
19
+ * These are reads only: there is no engine seam to author a type from a plugin
20
+ * (types are created through the construction/project-properties UI).
23
21
  */
24
22
  export abstract class PluginDesignTypesApi {
25
23
  constructor() {}
@@ -48,10 +46,10 @@ export abstract class PluginDesignTypesApi {
48
46
  ): PluginApiReturn<PluginBuildingTypeSummary[]>
49
47
 
50
48
  /**
51
- * Get one building type by its legacy id or exact native wall pin — its labelled layer stack
49
+ * Get one building type by its `"<kind>:<name>"` id — its labelled layer stack
52
50
  * (each layer's role, thickness and material) plus the summed total thickness.
53
51
  *
54
- * @param typeId The legacy id or nativeFamily pin from {@linkcode PluginDesignTypesApi.list}
52
+ * @param typeId The type id from {@linkcode PluginDesignTypesApi.list} (e.g. `"wall:exposedConcrete"`)
55
53
  * @returns The full type, or `null` if no type matches
56
54
  *
57
55
  * @examplePrompt What layers make up this wall type?
@@ -62,11 +60,11 @@ export abstract class PluginDesignTypesApi {
62
60
  * # Example
63
61
  * ```ts
64
62
  * const [first] = await snaptrude.design.types.list("wall")
65
- * const type = await snaptrude.design.types.get(first.nativeFamily ?? first.id)
63
+ * const type = await snaptrude.design.types.get(first.id)
66
64
  * if (type) for (const layer of type.layers) console.log(layer.name, layer.thickness)
67
65
  * ```
68
66
  */
69
- public abstract get(typeId: PluginWallType): PluginApiReturn<PluginBuildingType | null>
67
+ public abstract get(typeId: string): PluginApiReturn<PluginBuildingType | null>
70
68
  }
71
69
 
72
70
  /** The building-type families exposed by {@linkcode PluginDesignTypesApi}. */
@@ -87,8 +85,6 @@ export const PluginTypeLayer = z.object({
87
85
  name: z.string(),
88
86
  role: z.string(),
89
87
  thickness: z.number(),
90
- /** Native authored core membership. Never inferred from material or layer name. */
91
- isCore: z.boolean().optional(),
92
88
  material: z
93
89
  .object({
94
90
  name: z.string(),
@@ -103,7 +99,7 @@ export type PluginTypeLayer = z.infer<typeof PluginTypeLayer>
103
99
  *
104
100
  * | Property | Type | Description |
105
101
  * |---|---|---|
106
- * | `id` | `string` | Legacy `"<kind>:<name>"` token or native definition id; native lookups use `nativeFamily` |
102
+ * | `id` | `string` | Stable `"<kind>:<name>"` token — pass to `design.types.get` |
107
103
  * | `kind` | {@linkcode PluginBuildingTypeKind} | Which family it belongs to |
108
104
  * | `label` | `string` | Human-readable label |
109
105
  * | `isDefault` | `boolean` | `true` for a built-in type, `false` for a team/user type |
@@ -115,8 +111,6 @@ export const PluginBuildingTypeSummary = z.object({
115
111
  label: z.string(),
116
112
  isDefault: z.boolean(),
117
113
  thickness: z.number(),
118
- /** Present for native walls. Pass the whole pin to get/create/update, not its label or bare id. */
119
- nativeFamily: PluginNativeWallType.optional(),
120
114
  })
121
115
  export type PluginBuildingTypeSummary = z.infer<typeof PluginBuildingTypeSummary>
122
116
 
@@ -125,7 +119,7 @@ export type PluginBuildingTypeSummary = z.infer<typeof PluginBuildingTypeSummary
125
119
  *
126
120
  * | Property | Type | Description |
127
121
  * |---|---|---|
128
- * | `id` | `string` | Legacy type token or native definition id |
122
+ * | `id` | `string` | Stable `"<kind>:<name>"` token |
129
123
  * | `kind` | {@linkcode PluginBuildingTypeKind} | Which family it belongs to |
130
124
  * | `label` | `string` | Human-readable label |
131
125
  * | `isDefault` | `boolean` | `true` for a built-in type |
@@ -154,10 +148,9 @@ export type PluginDesignTypesListArgs = z.infer<typeof PluginDesignTypesListArgs
154
148
  *
155
149
  * | Property | Type | Description |
156
150
  * |---|---|---|
157
- * | `typeId` | {@linkcode PluginWallType} | A legacy `"<kind>:<name>"` id or exact `nativeFamily` pin from `design.types.list` |
151
+ * | `typeId` | `string` | The `"<kind>:<name>"` id from `design.types.list` |
158
152
  */
159
153
  export const PluginDesignTypesGetArgs = z.object({
160
- // Preserve legacy lookup behavior: malformed string ids return null in the host.
161
- typeId: z.union([z.string(), PluginNativeWallType]),
154
+ typeId: z.string(),
162
155
  })
163
156
  export type PluginDesignTypesGetArgs = z.infer<typeof PluginDesignTypesGetArgs>
@@ -9,10 +9,7 @@ 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
+ import { MassParametersPatch, type MassParametersRecord } from "../../../massParameters"
16
13
  import {
17
14
  PluginBuildableEnvelopePolygonVertex,
18
15
  PluginBuildableEnvelopeSetbackTier,
@@ -21,12 +18,6 @@ import {
21
18
  } from "../../entity/buildableEnvelope"
22
19
  import { PluginGridStyleOptions } from "../create/grids"
23
20
  import { PluginEntityType } from "../query"
24
- import { PluginWallType } from "../types"
25
- import {
26
- PluginConstructionType,
27
- PluginFamilyValues,
28
- type PluginFamilyUpdates,
29
- } from "../catalog"
30
21
 
31
22
  /**
32
23
  * Sparse property updates for a space. Only provided fields change.
@@ -174,14 +165,13 @@ export type PluginDesignUpdateParametersArgs = z.infer<
174
165
  * |---|---|---|
175
166
  * | `thickness` | `number`? | Wall thickness, engine units (> 0) |
176
167
  * | `height` | `number`? | Wall height, engine units (> 0) |
177
- * | `type` | {@linkcode PluginWallType}? | Legacy name/id or exact authorized native `{ id, version }` pin from `design.types.list("wall")` |
168
+ * | `type` | `string`? | Convert the wall to another wall type — a name (or `wall:`-prefixed id) from `design.types.list("wall")` |
178
169
  */
179
170
  export const PluginWallUpdates = z
180
171
  .object({
181
172
  thickness: z.number().positive().optional(),
182
173
  height: z.number().positive().optional(),
183
- type: PluginWallType.optional(),
184
- values: PluginFamilyValues.optional(),
174
+ type: z.string().trim().min(1).optional(),
185
175
  })
186
176
  .refine((p) => Object.keys(p).length > 0, {
187
177
  message: "PluginWallUpdates requires at least one field to change",
@@ -206,8 +196,6 @@ export const PluginSlabUpdates = z
206
196
  .object({
207
197
  thickness: z.number().positive().optional(),
208
198
  overhang: z.number().optional(),
209
- type: PluginConstructionType.optional(),
210
- values: PluginFamilyValues.optional(),
211
199
  })
212
200
  .refine((p) => Object.keys(p).length > 0, {
213
201
  message: "PluginSlabUpdates requires at least one field to change",
@@ -325,11 +313,6 @@ export type PluginDesignUpdateGridArgs = z.infer<
325
313
  *
326
314
  * Migrated from the removed `entity.space.{update, updateGeometryFromProfile, bulkUpdate}`.
327
315
  * Only provided fields change; each call is undoable. Failures throw (RPC rejects).
328
- *
329
- * Native family edits accept `type` and/or sparse `values` from `design.catalog`.
330
- * Length overrides use mm; dimensional arguments use SU. Contours and axes stay unchanged.
331
- * Shared/type overrides are refused. A thickness argument must agree with the layer values.
332
- * Family roof overhang is unsupported; use the native slab path for family overhang edits.
333
316
  */
334
317
  export abstract class PluginDesignUpdateApi {
335
318
  constructor() {}
@@ -583,9 +566,6 @@ export abstract class PluginDesignUpdateApi {
583
566
  * chamfer (the kernel numbers its faces differently): send the twist/taper
584
567
  * keys with `operations: []` first (the message names them), re-select on
585
568
  * the new shape, then send `{ operations }` back.
586
- * Graph-bound spaces accept amount-only extrusion edits. Footprint, twist,
587
- * taper and operation edits require the owning boundary tools, so generated
588
- * walls, junctions and hosted openings remain synchronized.
589
569
  * @throws VALIDATION for a key the kind does not have (the message lists the
590
570
  * kind's keys), `kind` or `version` in a partial patch, or a value outside
591
571
  * the constructor's own rules (torus tube ≥ ring, revolution angle ∉
@@ -793,24 +773,6 @@ export abstract class PluginDesignUpdateApi {
793
773
  updates: PluginSlabUpdates,
794
774
  ): PluginApiReturn<PluginDesignChangeResult>
795
775
 
796
- /** Replace a native beam family while preserving its authored axis. Values use mm/degrees.
797
- * @param component Native beam. @param updates Saved family reference and optional instance values.
798
- * @returns Affected component IDs. One undoable operation; unsupported geometry fails before mutation.
799
- */
800
- public abstract beam(
801
- component: ComponentHandle,
802
- updates: PluginFamilyUpdates,
803
- ): PluginApiReturn<PluginDesignChangeResult>
804
-
805
- /** Replace a native column family while preserving its authored axis. Values use mm/degrees.
806
- * @param component Native column. @param updates Saved family reference and optional instance values.
807
- * @returns Affected component IDs. One undoable operation; unsupported geometry fails before mutation.
808
- */
809
- public abstract column(
810
- component: ComponentHandle,
811
- updates: PluginFamilyUpdates,
812
- ): PluginApiReturn<PluginDesignChangeResult>
813
-
814
776
  /**
815
777
  * Set a component's **absolute world elevation** — moves it vertically so its
816
778
  * base (the bounding-box bottom, world Y) lands at `elevation`. Composed over
@@ -10,14 +10,13 @@ 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 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}
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}
16
17
  * DTOs are shared with `design.doors` (defined there, re-exported here).
17
18
  *
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.
19
+ * `getSillHeight` (bounds-derived) and the command-wired `mirror` land in a later pass.
21
20
  */
22
21
  export abstract class PluginDesignWindowsApi {
23
22
  constructor() {}
@@ -41,9 +40,7 @@ export abstract class PluginDesignWindowsApi {
41
40
  * if (type) console.log("window type:", type)
42
41
  * ```
43
42
  */
44
- public abstract getType(
45
- window: ComponentHandle,
46
- ): PluginApiReturn<string | null>
43
+ public abstract getType(window: ComponentHandle): PluginApiReturn<string | null>
47
44
 
48
45
  /**
49
46
  * Get the width of a window — how wide its opening is along the host wall.
@@ -63,9 +60,7 @@ export abstract class PluginDesignWindowsApi {
63
60
  * if (width !== null) console.log("window width:", width)
64
61
  * ```
65
62
  */
66
- public abstract getWidth(
67
- window: ComponentHandle,
68
- ): PluginApiReturn<number | null>
63
+ public abstract getWidth(window: ComponentHandle): PluginApiReturn<number | null>
69
64
 
70
65
  /**
71
66
  * Get the height of a window — how tall its opening is on the host wall.
@@ -85,13 +80,12 @@ export abstract class PluginDesignWindowsApi {
85
80
  * if (height !== null) console.log("window height:", height)
86
81
  * ```
87
82
  */
88
- public abstract getHeight(
89
- window: ComponentHandle,
90
- ): PluginApiReturn<number | null>
83
+ public abstract getHeight(window: ComponentHandle): PluginApiReturn<number | null>
91
84
 
92
85
  /**
93
- * Get evaluated opening width/height and host thickness in Snaptrude units.
94
- * The opening can differ from the width/height input parameters.
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.
95
89
  *
96
90
  * @param window The window to query
97
91
  * @returns The dimensions, or `null`
@@ -110,7 +104,7 @@ export abstract class PluginDesignWindowsApi {
110
104
  * ```
111
105
  */
112
106
  public abstract getDimensions(
113
- window: ComponentHandle,
107
+ window: ComponentHandle
114
108
  ): PluginApiReturn<PluginWindowDimensions | null>
115
109
 
116
110
  /**
@@ -135,7 +129,7 @@ export abstract class PluginDesignWindowsApi {
135
129
  */
136
130
  public abstract setWidth(
137
131
  window: ComponentHandle,
138
- width: number,
132
+ width: number
139
133
  ): PluginApiReturn<PluginDesignChangeResult>
140
134
 
141
135
  /**
@@ -159,7 +153,7 @@ export abstract class PluginDesignWindowsApi {
159
153
  */
160
154
  public abstract setHeight(
161
155
  window: ComponentHandle,
162
- height: number,
156
+ height: number
163
157
  ): PluginApiReturn<PluginDesignChangeResult>
164
158
 
165
159
  /**
@@ -180,9 +174,7 @@ export abstract class PluginDesignWindowsApi {
180
174
  * for (const g of groups) console.log(g.dbType, g.label, g.source)
181
175
  * ```
182
176
  */
183
- public abstract listCatalogGroups(): PluginApiReturn<
184
- PluginObjectCatalogGroup[]
185
- >
177
+ public abstract listCatalogGroups(): PluginApiReturn<PluginObjectCatalogGroup[]>
186
178
 
187
179
  /**
188
180
  * List the placeable window catalog (team + general libraries), optionally
@@ -204,7 +196,7 @@ export abstract class PluginDesignWindowsApi {
204
196
  * ```
205
197
  */
206
198
  public abstract listCatalog(
207
- group?: string,
199
+ group?: string
208
200
  ): PluginApiReturn<PluginObjectCatalogItem[]>
209
201
 
210
202
  /**
@@ -226,7 +218,7 @@ export abstract class PluginDesignWindowsApi {
226
218
  * ```
227
219
  */
228
220
  public abstract getCatalogItem(
229
- id: string,
221
+ id: string
230
222
  ): PluginApiReturn<PluginObjectCatalogItem | null>
231
223
 
232
224
  /**
@@ -290,9 +282,7 @@ export const PluginDesignWindowSetWidthArgs = z.object({
290
282
  window: ComponentHandle,
291
283
  width: z.number(),
292
284
  })
293
- export type PluginDesignWindowSetWidthArgs = z.infer<
294
- typeof PluginDesignWindowSetWidthArgs
295
- >
285
+ export type PluginDesignWindowSetWidthArgs = z.infer<typeof PluginDesignWindowSetWidthArgs>
296
286
 
297
287
  /**
298
288
  * Arguments for {@linkcode PluginDesignWindowsApi.setHeight}.
@@ -306,9 +296,7 @@ export const PluginDesignWindowSetHeightArgs = z.object({
306
296
  window: ComponentHandle,
307
297
  height: z.number(),
308
298
  })
309
- export type PluginDesignWindowSetHeightArgs = z.infer<
310
- typeof PluginDesignWindowSetHeightArgs
311
- >
299
+ export type PluginDesignWindowSetHeightArgs = z.infer<typeof PluginDesignWindowSetHeightArgs>
312
300
 
313
301
  // ---------------------------------------------------------------------------
314
302
  // catalog (shared DTOs defined in ../doors, re-exported here for symmetry)
@@ -327,9 +315,7 @@ export { PluginObjectCatalogGroup, PluginObjectCatalogItem }
327
315
  export const PluginDesignWindowListCatalogArgs = z.object({
328
316
  group: z.string().optional(),
329
317
  })
330
- export type PluginDesignWindowListCatalogArgs = z.infer<
331
- typeof PluginDesignWindowListCatalogArgs
332
- >
318
+ export type PluginDesignWindowListCatalogArgs = z.infer<typeof PluginDesignWindowListCatalogArgs>
333
319
 
334
320
  /**
335
321
  * Arguments for {@linkcode PluginDesignWindowsApi.getCatalogItem} / {@linkcode PluginDesignWindowsApi.exists}.
@@ -341,11 +327,7 @@ export type PluginDesignWindowListCatalogArgs = z.infer<
341
327
  export const PluginDesignWindowGetCatalogItemArgs = z.object({
342
328
  id: z.string(),
343
329
  })
344
- export type PluginDesignWindowGetCatalogItemArgs = z.infer<
345
- typeof PluginDesignWindowGetCatalogItemArgs
346
- >
330
+ export type PluginDesignWindowGetCatalogItemArgs = z.infer<typeof PluginDesignWindowGetCatalogItemArgs>
347
331
 
348
332
  export const PluginDesignWindowExistsArgs = PluginDesignWindowGetCatalogItemArgs
349
- export type PluginDesignWindowExistsArgs = z.infer<
350
- typeof PluginDesignWindowExistsArgs
351
- >
333
+ export type PluginDesignWindowExistsArgs = z.infer<typeof PluginDesignWindowExistsArgs>