@snaptrude/plugin-core 0.0.0-dev-20260708130115 → 0.0.0-dev-20260827194031
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.
- package/CHANGELOG.md +152 -1
- package/api-manifest.json +3643 -276
- package/dist/api/analysis/daylight.d.ts +603 -0
- package/dist/api/analysis/daylight.d.ts.map +1 -0
- package/dist/api/analysis/heatmaps.d.ts +658 -0
- package/dist/api/analysis/heatmaps.d.ts.map +1 -0
- package/dist/api/analysis/illuminance.d.ts +145 -0
- package/dist/api/analysis/illuminance.d.ts.map +1 -0
- package/dist/api/analysis/index.d.ts +59 -0
- package/dist/api/analysis/index.d.ts.map +1 -0
- package/dist/api/analysis/shadows.d.ts +165 -0
- package/dist/api/analysis/shadows.d.ts.map +1 -0
- package/dist/api/analysis/solar.d.ts +249 -0
- package/dist/api/analysis/solar.d.ts.map +1 -0
- package/dist/api/analysis/sunlightHours.d.ts +208 -0
- package/dist/api/analysis/sunlightHours.d.ts.map +1 -0
- package/dist/api/analysis/sunpath.d.ts +80 -0
- package/dist/api/analysis/sunpath.d.ts.map +1 -0
- package/dist/api/analysis/weather.d.ts +193 -0
- package/dist/api/analysis/weather.d.ts.map +1 -0
- package/dist/api/core/camera/index.d.ts +261 -0
- package/dist/api/core/camera/index.d.ts.map +1 -0
- package/dist/api/core/comment/index.d.ts +105 -2
- package/dist/api/core/comment/index.d.ts.map +1 -1
- package/dist/api/core/geom/create/index.d.ts +840 -14
- package/dist/api/core/geom/create/index.d.ts.map +1 -1
- package/dist/api/core/geom/delete/index.d.ts +8 -2
- package/dist/api/core/geom/delete/index.d.ts.map +1 -1
- package/dist/api/core/geom/query/arc.d.ts +5 -5
- package/dist/api/core/geom/query/brep.d.ts +130 -18
- package/dist/api/core/geom/query/brep.d.ts.map +1 -1
- package/dist/api/core/geom/query/circle.d.ts +18 -18
- package/dist/api/core/geom/query/contour.d.ts +20 -20
- package/dist/api/core/geom/query/curve.d.ts +49 -49
- package/dist/api/core/geom/query/edge.d.ts +5 -5
- package/dist/api/core/geom/query/face.d.ts +16 -16
- package/dist/api/core/geom/query/halfedge.d.ts +8 -8
- package/dist/api/core/geom/query/profile.d.ts +19 -19
- package/dist/api/core/geom/query/vertex.d.ts +8 -8
- package/dist/api/core/geom/update/contour.d.ts +14 -14
- package/dist/api/core/geom/update/curve.d.ts +7 -7
- package/dist/api/core/geom/update/profile.d.ts +16 -16
- package/dist/api/core/handles/index.d.ts +210 -0
- package/dist/api/core/handles/index.d.ts.map +1 -0
- package/dist/api/core/index.d.ts +34 -0
- package/dist/api/core/index.d.ts.map +1 -1
- package/dist/api/core/io/export/index.d.ts +134 -0
- package/dist/api/core/io/export/index.d.ts.map +1 -0
- package/dist/api/core/io/import/index.d.ts +453 -0
- package/dist/api/core/io/import/index.d.ts.map +1 -0
- package/dist/api/core/io/index.d.ts +40 -0
- package/dist/api/core/io/index.d.ts.map +1 -0
- package/dist/api/core/io/job/index.d.ts +139 -0
- package/dist/api/core/io/job/index.d.ts.map +1 -0
- package/dist/api/core/io/query/index.d.ts +74 -0
- package/dist/api/core/io/query/index.d.ts.map +1 -0
- package/dist/api/core/io/terrain/index.d.ts +341 -0
- package/dist/api/core/io/terrain/index.d.ts.map +1 -0
- package/dist/api/core/io/underlay/index.d.ts +805 -0
- package/dist/api/core/io/underlay/index.d.ts.map +1 -0
- package/dist/api/core/layers.d.ts +7 -7
- package/dist/api/core/mode/index.d.ts +99 -0
- package/dist/api/core/mode/index.d.ts.map +1 -0
- package/dist/api/core/project/index.d.ts +68 -1
- package/dist/api/core/project/index.d.ts.map +1 -1
- package/dist/api/core/proposals/index.d.ts +531 -0
- package/dist/api/core/proposals/index.d.ts.map +1 -0
- package/dist/api/core/storeys/index.d.ts +265 -0
- package/dist/api/core/storeys/index.d.ts.map +1 -0
- package/dist/api/core/tags.d.ts +24 -0
- package/dist/api/core/tags.d.ts.map +1 -1
- package/dist/api/core/user.d.ts +44 -0
- package/dist/api/core/user.d.ts.map +1 -0
- package/dist/api/core/zoom/index.d.ts +4 -0
- package/dist/api/core/zoom/index.d.ts.map +1 -1
- package/dist/api/design/boolean/index.d.ts +4 -4
- package/dist/api/design/create/index.d.ts +568 -45
- package/dist/api/design/create/index.d.ts.map +1 -1
- package/dist/api/design/delete/index.d.ts +3 -0
- package/dist/api/design/delete/index.d.ts.map +1 -1
- package/dist/api/design/doors/index.d.ts +195 -0
- package/dist/api/design/doors/index.d.ts.map +1 -1
- package/dist/api/design/edit/index.d.ts +1 -1
- package/dist/api/design/erase/index.d.ts +2 -2
- package/dist/api/design/family.d.ts +493 -0
- package/dist/api/design/family.d.ts.map +1 -0
- package/dist/api/design/furniture/index.d.ts +181 -8
- package/dist/api/design/furniture/index.d.ts.map +1 -1
- package/dist/api/design/index.d.ts +98 -0
- package/dist/api/design/index.d.ts.map +1 -1
- package/dist/api/design/lock.d.ts +26 -0
- package/dist/api/design/lock.d.ts.map +1 -1
- package/dist/api/design/materials/index.d.ts +270 -16
- package/dist/api/design/materials/index.d.ts.map +1 -1
- package/dist/api/design/query/geometry/index.d.ts +112 -0
- package/dist/api/design/query/geometry/index.d.ts.map +1 -1
- package/dist/api/design/query/index.d.ts +289 -11
- package/dist/api/design/query/index.d.ts.map +1 -1
- package/dist/api/design/query/referenceLines.d.ts +45 -0
- package/dist/api/design/query/referenceLines.d.ts.map +1 -0
- package/dist/api/design/query/spaces.d.ts +181 -8
- package/dist/api/design/query/spaces.d.ts.map +1 -1
- package/dist/api/design/selection/index.d.ts +144 -0
- package/dist/api/design/selection/index.d.ts.map +1 -1
- package/dist/api/design/transform/index.d.ts +172 -10
- package/dist/api/design/transform/index.d.ts.map +1 -1
- package/dist/api/design/types/index.d.ts +181 -0
- package/dist/api/design/types/index.d.ts.map +1 -0
- package/dist/api/design/update/index.d.ts +553 -2
- package/dist/api/design/update/index.d.ts.map +1 -1
- package/dist/api/design/visibility.d.ts +126 -0
- package/dist/api/design/visibility.d.ts.map +1 -0
- package/dist/api/design/windows/index.d.ts +113 -2
- package/dist/api/design/windows/index.d.ts.map +1 -1
- package/dist/api/entity/buildableEnvelope.d.ts +4 -0
- package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
- package/dist/api/entity/referenceLine.d.ts +10 -2
- package/dist/api/entity/referenceLine.d.ts.map +1 -1
- package/dist/api/entity/space.d.ts +21 -21
- package/dist/api/entity/story.d.ts +242 -15
- package/dist/api/entity/story.d.ts.map +1 -1
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/presentation/aiInspiration.d.ts +25 -25
- package/dist/api/presentation/annotate.d.ts +467 -0
- package/dist/api/presentation/annotate.d.ts.map +1 -0
- package/dist/api/presentation/diagrams.d.ts +111 -8
- package/dist/api/presentation/diagrams.d.ts.map +1 -1
- package/dist/api/presentation/export.d.ts +108 -0
- package/dist/api/presentation/export.d.ts.map +1 -0
- package/dist/api/presentation/import.d.ts +55 -4
- package/dist/api/presentation/import.d.ts.map +1 -1
- package/dist/api/presentation/index.d.ts +58 -1
- package/dist/api/presentation/index.d.ts.map +1 -1
- package/dist/api/presentation/placedViews.d.ts +1139 -0
- package/dist/api/presentation/placedViews.d.ts.map +1 -0
- package/dist/api/presentation/shapes.d.ts +481 -0
- package/dist/api/presentation/shapes.d.ts.map +1 -0
- package/dist/api/presentation/sheets.d.ts +452 -13
- package/dist/api/presentation/sheets.d.ts.map +1 -1
- package/dist/api/presentation/slideshow.d.ts +125 -0
- package/dist/api/presentation/slideshow.d.ts.map +1 -0
- package/dist/api/presentation/tables.d.ts +81 -0
- package/dist/api/presentation/tables.d.ts.map +1 -0
- package/dist/api/presentation/views.d.ts +367 -7
- package/dist/api/presentation/views.d.ts.map +1 -1
- package/dist/api/program/areas.d.ts +102 -12
- package/dist/api/program/areas.d.ts.map +1 -1
- package/dist/api/program/cores.d.ts +3 -99
- package/dist/api/program/cores.d.ts.map +1 -1
- package/dist/api/program/index.d.ts +7 -15
- package/dist/api/program/index.d.ts.map +1 -1
- package/dist/api/program/layout.d.ts +346 -11
- package/dist/api/program/layout.d.ts.map +1 -1
- package/dist/api/program/site.d.ts +469 -13
- package/dist/api/program/site.d.ts.map +1 -1
- package/dist/api/program/spreadsheet.d.ts +365 -41
- package/dist/api/program/spreadsheet.d.ts.map +1 -1
- package/dist/api/workspace/index.d.ts +505 -0
- package/dist/api/workspace/index.d.ts.map +1 -0
- package/dist/errors/codes.d.ts +34 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/envelope.d.ts +56 -0
- package/dist/errors/envelope.d.ts.map +1 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/plugin-error.d.ts +69 -0
- package/dist/errors/plugin-error.d.ts.map +1 -0
- package/dist/handles.d.ts +97 -25
- package/dist/handles.d.ts.map +1 -1
- package/dist/host-utils.d.ts +4 -0
- package/dist/host-utils.d.ts.map +1 -1
- package/dist/index.cjs +4605 -1423
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4191 -1412
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
- package/scripts/generate-manifest.mjs +45 -0
- package/scripts/generate-manifest.test.mjs +103 -4
- package/src/api/analysis/daylight.ts +470 -0
- package/src/api/analysis/heatmaps.ts +683 -0
- package/src/api/analysis/illuminance.ts +155 -0
- package/src/api/analysis/index.ts +61 -0
- package/src/api/analysis/shadows.ts +183 -0
- package/src/api/analysis/solar.ts +237 -0
- package/src/api/analysis/sunlightHours.ts +211 -0
- package/src/api/analysis/sunpath.ts +83 -0
- package/src/api/analysis/weather.ts +179 -0
- package/src/api/core/camera/index.ts +268 -0
- package/src/api/core/comment/index.ts +120 -2
- package/src/api/core/geom/create/index.ts +912 -1
- package/src/api/core/geom/delete/index.ts +6 -0
- package/src/api/core/geom/query/brep.ts +119 -0
- package/src/api/core/handles/index.ts +233 -0
- package/src/api/core/index.ts +34 -0
- package/src/api/core/io/export/index.ts +126 -0
- package/src/api/core/io/import/index.ts +496 -0
- package/src/api/core/io/index.ts +42 -0
- package/src/api/core/io/job/index.ts +140 -0
- package/src/api/core/io/query/index.ts +71 -0
- package/src/api/core/io/terrain/index.ts +360 -0
- package/src/api/core/io/underlay/index.ts +705 -0
- package/src/api/core/mode/index.ts +96 -0
- package/src/api/core/project/index.ts +62 -1
- package/src/api/core/proposals/index.ts +569 -0
- package/src/api/core/storeys/index.ts +294 -0
- package/src/api/core/tags.ts +27 -0
- package/src/api/core/user.ts +46 -0
- package/src/api/core/zoom/index.ts +4 -0
- package/src/api/design/create/index.ts +670 -30
- package/src/api/design/delete/index.ts +3 -0
- package/src/api/design/doors/index.ts +208 -0
- package/src/api/design/erase/index.ts +1 -1
- package/src/api/design/family.ts +544 -0
- package/src/api/design/furniture/index.ts +197 -8
- package/src/api/design/index.ts +102 -0
- package/src/api/design/lock.ts +27 -0
- package/src/api/design/materials/index.ts +334 -27
- package/src/api/design/query/geometry/index.ts +125 -3
- package/src/api/design/query/index.ts +219 -7
- package/src/api/design/query/referenceLines.ts +52 -0
- package/src/api/design/query/spaces.ts +143 -0
- package/src/api/design/selection/index.ts +129 -0
- package/src/api/design/transform/index.ts +170 -9
- package/src/api/design/types/index.ts +156 -0
- package/src/api/design/update/index.ts +631 -3
- package/src/api/design/visibility.ts +143 -0
- package/src/api/design/windows/index.ts +128 -2
- package/src/api/entity/buildableEnvelope.ts +4 -0
- package/src/api/entity/referenceLine.ts +8 -0
- package/src/api/entity/story.ts +259 -15
- package/src/api/index.ts +10 -0
- package/src/api/presentation/annotate.ts +385 -0
- package/src/api/presentation/diagrams.ts +118 -8
- package/src/api/presentation/export.ts +108 -0
- package/src/api/presentation/import.ts +51 -4
- package/src/api/presentation/index.ts +66 -1
- package/src/api/presentation/placedViews.ts +1120 -0
- package/src/api/presentation/shapes.ts +274 -0
- package/src/api/presentation/sheets.ts +400 -13
- package/src/api/presentation/slideshow.ts +134 -0
- package/src/api/presentation/tables.ts +84 -0
- package/src/api/presentation/views.ts +376 -8
- package/src/api/program/areas.ts +88 -15
- package/src/api/program/cores.ts +3 -91
- package/src/api/program/index.ts +7 -15
- package/src/api/program/layout.ts +365 -11
- package/src/api/program/site.ts +435 -13
- package/src/api/program/spreadsheet.ts +376 -35
- package/src/api/workspace/index.ts +563 -0
- package/src/errors/codes.ts +136 -0
- package/src/errors/envelope.ts +75 -0
- package/src/errors/index.ts +21 -0
- package/src/errors/plugin-error.ts +134 -0
- package/src/handles.ts +123 -13
- package/src/host-utils.ts +4 -0
- package/src/index.ts +1 -0
- package/test/errors.test.mjs +184 -0
- package/tsconfig.json +7 -2
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { PluginApiReturn } from "../../types";
|
|
3
|
+
import { ComponentHandle } from "../../handles";
|
|
4
|
+
/**
|
|
5
|
+
* `snaptrude.design.family.*` — author NATIVE parametric families from a JSON spec.
|
|
6
|
+
*
|
|
7
|
+
* A parametric family is a reusable, parameter-driven building component: a
|
|
8
|
+
* curtain-wall panel, a louvre screen, a balustrade, a shading fin. Unlike the
|
|
9
|
+
* rest of `design.*`, you do not build one out of geometry calls — you write a
|
|
10
|
+
* JSON **spec** describing its parameters and its geometry rules, and the host
|
|
11
|
+
* compiles that into a live parametric definition the user can place, flex and
|
|
12
|
+
* save to their library.
|
|
13
|
+
*
|
|
14
|
+
* ## Workflow
|
|
15
|
+
*
|
|
16
|
+
* ```
|
|
17
|
+
* getReference() read the spec DSL once — grammar, ops, expressions, example
|
|
18
|
+
* prepare({ bundle }) validate + compile + show a live ghost; nothing committed
|
|
19
|
+
* flex({ values }) re-run at new values; returns the geometry delta
|
|
20
|
+
* place() arm placement — the USER clicks to drop it
|
|
21
|
+
* create({ name }) commit it to the project's family library
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* ## Read getReference() first
|
|
25
|
+
*
|
|
26
|
+
* The spec DSL is a closed expression language with its own op set, coordinate
|
|
27
|
+
* convention (**+Y up, integer millimetres** — not Snaptrude's babylon units)
|
|
28
|
+
* and part-naming law. It is deliberately NOT duplicated in these types:
|
|
29
|
+
* {@linkcode PluginDesignFamilyApi.getReference} returns the whole reference,
|
|
30
|
+
* generated from a family that is actually registered in the host, so the
|
|
31
|
+
* documentation cannot drift from what the compiler accepts.
|
|
32
|
+
*
|
|
33
|
+
* ## The repair contract
|
|
34
|
+
*
|
|
35
|
+
* {@linkcode PluginDesignFamilyApi.prepare} does **not** throw on an invalid
|
|
36
|
+
* spec — it returns `{ ok: false, errors }` where each error carries a JSON
|
|
37
|
+
* pointer into the bundle you sent (e.g. `"/root/geometry/2/body/0/w"`). Read
|
|
38
|
+
* `errors[0].path`, fix that node, and call `prepare` again. A failed `prepare`
|
|
39
|
+
* leaves the previous good draft standing, so it costs nothing but the node you
|
|
40
|
+
* broke. Re-authoring from scratch throws away everything already correct.
|
|
41
|
+
*
|
|
42
|
+
* Accessed via `snaptrude.design.family`.
|
|
43
|
+
*/
|
|
44
|
+
export declare abstract class PluginDesignFamilyApi {
|
|
45
|
+
constructor();
|
|
46
|
+
/**
|
|
47
|
+
* Read the family-spec DSL reference: grammar, the op table, the expression
|
|
48
|
+
* whitelist, the coordinate convention, the repair contract, and a worked
|
|
49
|
+
* example taken from a registered family.
|
|
50
|
+
*
|
|
51
|
+
* Read this before authoring a family for the first time in a session. The
|
|
52
|
+
* DSL is a closed language — a guessed op or function is a rejected spec.
|
|
53
|
+
*
|
|
54
|
+
* @returns The reference text
|
|
55
|
+
*
|
|
56
|
+
* @examplePrompt How do I write a parametric family spec?
|
|
57
|
+
* @examplePrompt Show me the family DSL
|
|
58
|
+
*
|
|
59
|
+
* # Example
|
|
60
|
+
* ```ts
|
|
61
|
+
* const { reference } = await snaptrude.design.family.getReference()
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
abstract getReference(): PluginApiReturn<PluginFamilyReference>;
|
|
65
|
+
/**
|
|
66
|
+
* Validate, compile and preview a family spec. Nothing is committed to the
|
|
67
|
+
* model or the library — call {@linkcode PluginDesignFamilyApi.place} or
|
|
68
|
+
* {@linkcode PluginDesignFamilyApi.create} for that.
|
|
69
|
+
*
|
|
70
|
+
* Safe to call repeatedly while iterating. On success, check `partCount` and
|
|
71
|
+
* `bbox` against what you intended before treating the family as correct — a
|
|
72
|
+
* facade that built 3 parts, or a 3 m screen reporting 40 m of height, is a
|
|
73
|
+
* visible bug the validator cannot catch.
|
|
74
|
+
*
|
|
75
|
+
* @param args The spec bundle, as `{ bundle }` or `{ spec }`
|
|
76
|
+
* @returns Build report, or `{ ok: false, errors }` with JSON-pointer paths
|
|
77
|
+
*
|
|
78
|
+
* @examplePrompt Make a louvre screen with adjustable blade count and tilt
|
|
79
|
+
* @examplePrompt Design a curtain wall panel family with 8 bays
|
|
80
|
+
* @examplePrompt Create a railing family I can adjust
|
|
81
|
+
*
|
|
82
|
+
* # Example
|
|
83
|
+
* ```ts
|
|
84
|
+
* const r = await snaptrude.design.family.prepare({ bundle })
|
|
85
|
+
* if (!r.ok) console.error(r.errors[0].path, r.errors[0].message)
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
abstract prepare(args: PluginDesignFamilyPrepareArgs): PluginApiReturn<PluginFamilyPrepareResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Re-run the prepared family's recipe at new parameter values.
|
|
91
|
+
*
|
|
92
|
+
* Values are merged over the current ones and clamped to the parameter
|
|
93
|
+
* sheet's min/max, so a partial `{ bays: 6 }` is fine. The returned `changed`
|
|
94
|
+
* buckets are the host's own diff of what the geometry did — flexing a
|
|
95
|
+
* driving parameter and reporting them demonstrates the family is parametric.
|
|
96
|
+
*
|
|
97
|
+
* @param args The parameter values to change
|
|
98
|
+
* @returns The new build plus the geometry delta
|
|
99
|
+
*
|
|
100
|
+
* @examplePrompt Change it to 6 bays
|
|
101
|
+
* @examplePrompt Show me what happens with 20 blades
|
|
102
|
+
*
|
|
103
|
+
* # Example
|
|
104
|
+
* ```ts
|
|
105
|
+
* const { changed } = await snaptrude.design.family.flex({ values: { bays: 6 } })
|
|
106
|
+
* console.log(`removed ${changed.removed}, rebuilt ${changed.rebuilt}`)
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
abstract flex(args: PluginDesignFamilyFlexArgs): PluginApiReturn<PluginFamilyFlexResult>;
|
|
110
|
+
/**
|
|
111
|
+
* The prepared family's spec bundle, or `null` when nothing is prepared.
|
|
112
|
+
*
|
|
113
|
+
* @returns The draft bundle, or `null`
|
|
114
|
+
*
|
|
115
|
+
* # Example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const bundle = await snaptrude.design.family.get()
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
abstract get(): PluginApiReturn<PluginFamilyBundle | null>;
|
|
121
|
+
/**
|
|
122
|
+
* Every parametric family registered in this session — native and imported.
|
|
123
|
+
*
|
|
124
|
+
* @returns One summary per family
|
|
125
|
+
*
|
|
126
|
+
* @examplePrompt What families are available?
|
|
127
|
+
*
|
|
128
|
+
* # Example
|
|
129
|
+
* ```ts
|
|
130
|
+
* const families = await snaptrude.design.family.list()
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
abstract list(): PluginApiReturn<PluginFamilySummary[]>;
|
|
134
|
+
/**
|
|
135
|
+
* Put a family into the model — either the prepared draft or any family from
|
|
136
|
+
* {@linkcode PluginDesignFamilyApi.list}.
|
|
137
|
+
*
|
|
138
|
+
* Two modes, chosen by whether you pass `position`:
|
|
139
|
+
*
|
|
140
|
+
* **With `position`** the component is created there and then, undoably. Use
|
|
141
|
+
* this when you know where it goes — you were given coordinates, or you are
|
|
142
|
+
* copying an existing instance. The returned `component` handle works with
|
|
143
|
+
* `design.transform.move` / `.rotate` and with
|
|
144
|
+
* {@linkcode PluginDesignFamilyApi.setParameters}.
|
|
145
|
+
*
|
|
146
|
+
* **Without `position`** it arms placement mode with a ghost on the cursor
|
|
147
|
+
* and returns immediately — no geometry yet. The USER clicks to drop it, so
|
|
148
|
+
* tell them to. Prefer this when the location is a judgement call.
|
|
149
|
+
*
|
|
150
|
+
* To COPY a placed component, place its family again at the new position with
|
|
151
|
+
* the same `values` — there is no separate copy call.
|
|
152
|
+
*
|
|
153
|
+
* @param args Which family, where, and at what parameter values
|
|
154
|
+
* @returns What was placed; `component` is present only in positioned mode
|
|
155
|
+
*
|
|
156
|
+
* @examplePrompt Place it in the model
|
|
157
|
+
* @examplePrompt Put a louvre screen at the origin
|
|
158
|
+
* @examplePrompt Copy that table two metres to the right
|
|
159
|
+
*
|
|
160
|
+
* # Example
|
|
161
|
+
* ```ts
|
|
162
|
+
* // positioned — geometry exists when this resolves
|
|
163
|
+
* const { component } = await snaptrude.design.family.place({
|
|
164
|
+
* id: "revit:gypsum-stud-partition~90ad72",
|
|
165
|
+
* position: { x: 0, y: 0, z: 0 },
|
|
166
|
+
* rotation: 90,
|
|
167
|
+
* })
|
|
168
|
+
* await snaptrude.design.transform.move([component], { x: 2, y: 0, z: 0 })
|
|
169
|
+
*
|
|
170
|
+
* // interactive — the user clicks
|
|
171
|
+
* await snaptrude.design.family.place()
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
abstract place(args?: PluginDesignFamilyPlaceArgs): PluginApiReturn<PluginFamilyPlaceResult>;
|
|
175
|
+
/**
|
|
176
|
+
* Read a placed component's current parameter values and its sheet.
|
|
177
|
+
*
|
|
178
|
+
* Use before {@linkcode PluginDesignFamilyApi.setParameters} so you change
|
|
179
|
+
* what is actually there: parameter KEYS are the family's own, not the
|
|
180
|
+
* label the user says, and a Revit-imported family carries parameters that
|
|
181
|
+
* do not drive geometry at all.
|
|
182
|
+
*
|
|
183
|
+
* @param args The component to read
|
|
184
|
+
* @returns Its definition, current values, and the parameter sheet
|
|
185
|
+
*
|
|
186
|
+
* @examplePrompt What size is that table?
|
|
187
|
+
* @examplePrompt Show me the parameters on this partition
|
|
188
|
+
*
|
|
189
|
+
* # Example
|
|
190
|
+
* ```ts
|
|
191
|
+
* const { values, parameters } = await snaptrude.design.family.getParameters({ component })
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
abstract getParameters(args: PluginDesignFamilyGetParametersArgs): PluginApiReturn<PluginFamilyInstanceParameters | null>;
|
|
195
|
+
/**
|
|
196
|
+
* Change a placed component's parameters and rebuild its geometry in place.
|
|
197
|
+
*
|
|
198
|
+
* Partial: pass only what changes. The component keeps its position,
|
|
199
|
+
* rotation and identity — this is an edit, not a replace, and it is undoable.
|
|
200
|
+
*
|
|
201
|
+
* Only parameters with `drivesGeometry` actually move the mesh. Setting one
|
|
202
|
+
* that does not is accepted and stored (it round-trips to Revit) but nothing
|
|
203
|
+
* visible happens — say so rather than claiming a change the user cannot see.
|
|
204
|
+
*
|
|
205
|
+
* @param args The component and the values to change
|
|
206
|
+
* @returns The values now in effect
|
|
207
|
+
*
|
|
208
|
+
* @examplePrompt Make that table seat 8
|
|
209
|
+
* @examplePrompt Change the stud spacing to 400
|
|
210
|
+
*
|
|
211
|
+
* # Example
|
|
212
|
+
* ```ts
|
|
213
|
+
* await snaptrude.design.family.setParameters({ component, values: { seats: 8 } })
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
abstract setParameters(args: PluginDesignFamilySetParametersArgs): PluginApiReturn<PluginFamilyInstanceParameters>;
|
|
217
|
+
/**
|
|
218
|
+
* Commit the prepared bundle to the project's parametric-definition library,
|
|
219
|
+
* so it survives the session and appears in the Families panel.
|
|
220
|
+
*
|
|
221
|
+
* @param args Optional library name and team scope
|
|
222
|
+
* @returns The catalogued definition's id and version
|
|
223
|
+
*
|
|
224
|
+
* @examplePrompt Save this as a family called Vertical Louvre
|
|
225
|
+
* @examplePrompt Add it to my library
|
|
226
|
+
*
|
|
227
|
+
* # Example
|
|
228
|
+
* ```ts
|
|
229
|
+
* const { definitionId } = await snaptrude.design.family.create({ name: "Louvre Screen" })
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
abstract create(args?: PluginDesignFamilyCreateArgs): PluginApiReturn<PluginFamilyCreateResult>;
|
|
233
|
+
}
|
|
234
|
+
/** The family-spec DSL reference returned by `getReference`. */
|
|
235
|
+
export interface PluginFamilyReference {
|
|
236
|
+
/** Grammar, op table, expression whitelist, repair contract, worked example. */
|
|
237
|
+
reference: string;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* A family spec bundle. `root` is the family; `deps` carries every spec
|
|
241
|
+
* reachable through an `instance` op, keyed by spec id, so a saved family is
|
|
242
|
+
* self-contained and reloads anywhere.
|
|
243
|
+
*
|
|
244
|
+
* The internal shape of a spec is documented by
|
|
245
|
+
* {@linkcode PluginDesignFamilyApi.getReference}, not by these types — it is a
|
|
246
|
+
* data DSL whose grammar changes independently of this API surface.
|
|
247
|
+
*/
|
|
248
|
+
export interface PluginFamilyBundle {
|
|
249
|
+
root: Record<string, unknown>;
|
|
250
|
+
deps?: Record<string, Record<string, unknown>>;
|
|
251
|
+
}
|
|
252
|
+
/** Axis-aligned extents of a built family. Integer millimetres, +Y up. */
|
|
253
|
+
export interface PluginFamilyBBox {
|
|
254
|
+
min: [number, number, number];
|
|
255
|
+
max: [number, number, number];
|
|
256
|
+
/** `[width, height, depth]` in millimetres. */
|
|
257
|
+
size: [number, number, number];
|
|
258
|
+
}
|
|
259
|
+
/** One row of a family's parameter sheet. */
|
|
260
|
+
export interface PluginFamilyParameter {
|
|
261
|
+
key: string;
|
|
262
|
+
label: string;
|
|
263
|
+
type: "length" | "integer" | "enum" | "text" | "boolean";
|
|
264
|
+
/** Current value. `length`/`integer` are numbers; the rest are strings. */
|
|
265
|
+
value: string | number;
|
|
266
|
+
default: string | number;
|
|
267
|
+
/**
|
|
268
|
+
* Whether this parameter actually drives geometry — INFERRED by the host from
|
|
269
|
+
* which names the spec's expressions reference. `false` means the value is
|
|
270
|
+
* stored and round-tripped but moves nothing.
|
|
271
|
+
*/
|
|
272
|
+
drivesGeometry: boolean;
|
|
273
|
+
min?: number;
|
|
274
|
+
max?: number;
|
|
275
|
+
options?: readonly string[];
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* A validation diagnostic. `path` is a JSON pointer into the submitted bundle —
|
|
279
|
+
* fix that node and re-`prepare`.
|
|
280
|
+
*/
|
|
281
|
+
export interface PluginFamilyDiagnostic {
|
|
282
|
+
/** JSON pointer, e.g. `"/root/geometry/2/body/0/w"`. */
|
|
283
|
+
path: string;
|
|
284
|
+
code: "schema" | "bad-expression" | "unknown-name" | "unknown-def" | "cycle" | "duplicate-name" | "unbounded-repeat" | "depth" | "bad-dimension";
|
|
285
|
+
message: string;
|
|
286
|
+
hint?: string;
|
|
287
|
+
}
|
|
288
|
+
/** What `prepare` reports. */
|
|
289
|
+
export interface PluginFamilyPrepareResult {
|
|
290
|
+
/** `false` means the spec was rejected — read `errors`, fix, re-prepare. */
|
|
291
|
+
ok: boolean;
|
|
292
|
+
familyId?: string;
|
|
293
|
+
version?: number;
|
|
294
|
+
label?: string;
|
|
295
|
+
/** How many parts the family built. Sanity-check against intent. */
|
|
296
|
+
partCount?: number;
|
|
297
|
+
/** Extents in millimetres. Sanity-check against intent. */
|
|
298
|
+
bbox?: PluginFamilyBBox;
|
|
299
|
+
evalMs?: number;
|
|
300
|
+
parameters?: PluginFamilyParameter[];
|
|
301
|
+
/** Computed quantities, when the spec declares a `takeoff` block. */
|
|
302
|
+
takeoff?: Record<string, number | string>;
|
|
303
|
+
/** The first few part names — enough to check the naming came out right. */
|
|
304
|
+
sampleParts?: string[];
|
|
305
|
+
errors: PluginFamilyDiagnostic[];
|
|
306
|
+
warnings: PluginFamilyDiagnostic[];
|
|
307
|
+
/** Set when the bundle validated but threw while building. */
|
|
308
|
+
error?: string;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* The host's diff of what a flex did to the geometry. This is the evidence that
|
|
312
|
+
* a family is parametric.
|
|
313
|
+
*/
|
|
314
|
+
export interface PluginFamilyChangeBuckets {
|
|
315
|
+
added: number;
|
|
316
|
+
removed: number;
|
|
317
|
+
moved: number;
|
|
318
|
+
rebuilt: number;
|
|
319
|
+
addedNames: string[];
|
|
320
|
+
removedNames: string[];
|
|
321
|
+
}
|
|
322
|
+
/** What `flex` reports. */
|
|
323
|
+
export interface PluginFamilyFlexResult {
|
|
324
|
+
ok: boolean;
|
|
325
|
+
/** The RESOLVED values after merge + clamping — not necessarily what was sent. */
|
|
326
|
+
values?: Record<string, number | string>;
|
|
327
|
+
partCount?: number;
|
|
328
|
+
bbox?: PluginFamilyBBox;
|
|
329
|
+
evalMs?: number;
|
|
330
|
+
changed?: PluginFamilyChangeBuckets;
|
|
331
|
+
takeoff?: Record<string, number | string>;
|
|
332
|
+
error?: string;
|
|
333
|
+
}
|
|
334
|
+
/** One family available to place — from the session registry or the catalog. */
|
|
335
|
+
export interface PluginFamilySummary {
|
|
336
|
+
id: string;
|
|
337
|
+
version: number;
|
|
338
|
+
label: string;
|
|
339
|
+
category?: string;
|
|
340
|
+
/** Number of rows on the family's parameter sheet. */
|
|
341
|
+
parameters: number;
|
|
342
|
+
/**
|
|
343
|
+
* Where the family came from, which decides how far you can edit it.
|
|
344
|
+
*
|
|
345
|
+
* `"native"` — authored from a JSON spec through this API. Its recipe is
|
|
346
|
+
* data, so every parameter genuinely re-runs the geometry.
|
|
347
|
+
*
|
|
348
|
+
* `"revit"` — imported from a Revit family. Parameters exist and are
|
|
349
|
+
* editable, but only those the importer could bind to geometry actually
|
|
350
|
+
* change the mesh; the rest are carried for round-tripping. Check
|
|
351
|
+
* `drivesGeometry` on the parameter before promising the user a change.
|
|
352
|
+
*/
|
|
353
|
+
kind: "native" | "revit";
|
|
354
|
+
}
|
|
355
|
+
/** What `place` reports. */
|
|
356
|
+
export interface PluginFamilyPlaceResult {
|
|
357
|
+
ok: boolean;
|
|
358
|
+
familyId?: string;
|
|
359
|
+
version?: number;
|
|
360
|
+
/**
|
|
361
|
+
* The created component — present ONLY when `position` was given. In
|
|
362
|
+
* interactive mode nothing exists yet, so there is nothing to hand back;
|
|
363
|
+
* the user has not clicked.
|
|
364
|
+
*/
|
|
365
|
+
component?: ComponentHandle;
|
|
366
|
+
error?: string;
|
|
367
|
+
}
|
|
368
|
+
/** A placed component's parameter state, from `getParameters` / `setParameters`. */
|
|
369
|
+
export interface PluginFamilyInstanceParameters {
|
|
370
|
+
/** The definition this instance is pinned to. */
|
|
371
|
+
familyId: string;
|
|
372
|
+
version: number;
|
|
373
|
+
label: string;
|
|
374
|
+
/** Current values, keyed by parameter key. */
|
|
375
|
+
values: Record<string, number | string>;
|
|
376
|
+
/** The sheet: what each key means, its bounds, and whether it moves geometry. */
|
|
377
|
+
parameters: PluginFamilyParameter[];
|
|
378
|
+
}
|
|
379
|
+
/** What `create` reports. */
|
|
380
|
+
export interface PluginFamilyCreateResult {
|
|
381
|
+
ok: boolean;
|
|
382
|
+
definitionId?: string;
|
|
383
|
+
version?: number;
|
|
384
|
+
guid?: string;
|
|
385
|
+
error?: string;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* A spec bundle as it crosses the boundary: `root` plus optional `deps`.
|
|
389
|
+
*
|
|
390
|
+
* Loose by design — the spec grammar is a data DSL validated by the host's own
|
|
391
|
+
* validator, which returns JSON-pointer diagnostics far more useful than a Zod
|
|
392
|
+
* shape error. This schema only guarantees the envelope is an object.
|
|
393
|
+
*/
|
|
394
|
+
export declare const PluginFamilyBundleSchema: z.ZodObject<{
|
|
395
|
+
root: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
396
|
+
deps: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
397
|
+
}, z.core.$strip>;
|
|
398
|
+
/**
|
|
399
|
+
* Arguments for {@linkcode PluginDesignFamilyApi.prepare}.
|
|
400
|
+
*
|
|
401
|
+
* | Property | Type | Description |
|
|
402
|
+
* |---|---|---|
|
|
403
|
+
* | `bundle` | {@linkcode PluginFamilyBundle} | The family spec bundle |
|
|
404
|
+
* | `spec` | {@linkcode PluginFamilyBundle} | Alias for `bundle` |
|
|
405
|
+
*
|
|
406
|
+
* Exactly one of `bundle` / `spec` is required. A bare `FamilySpec` (no `root`
|
|
407
|
+
* wrapper) is also accepted by the host and wrapped for the caller.
|
|
408
|
+
*/
|
|
409
|
+
export declare const PluginDesignFamilyPrepareArgs: z.ZodObject<{
|
|
410
|
+
bundle: z.ZodOptional<z.ZodObject<{
|
|
411
|
+
root: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
412
|
+
deps: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
413
|
+
}, z.core.$strip>>;
|
|
414
|
+
spec: z.ZodOptional<z.ZodObject<{
|
|
415
|
+
root: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
416
|
+
deps: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
417
|
+
}, z.core.$strip>>;
|
|
418
|
+
}, z.core.$strip>;
|
|
419
|
+
export type PluginDesignFamilyPrepareArgs = z.infer<typeof PluginDesignFamilyPrepareArgs>;
|
|
420
|
+
/**
|
|
421
|
+
* Arguments for {@linkcode PluginDesignFamilyApi.flex}.
|
|
422
|
+
*
|
|
423
|
+
* | Property | Type | Description |
|
|
424
|
+
* |---|---|---|
|
|
425
|
+
* | `values` | `Record<string, number \| string>` | Parameter values to change (partial) |
|
|
426
|
+
*/
|
|
427
|
+
export declare const PluginDesignFamilyFlexArgs: z.ZodObject<{
|
|
428
|
+
values: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
429
|
+
}, z.core.$strip>;
|
|
430
|
+
export type PluginDesignFamilyFlexArgs = z.infer<typeof PluginDesignFamilyFlexArgs>;
|
|
431
|
+
/**
|
|
432
|
+
* Arguments for {@linkcode PluginDesignFamilyApi.create}.
|
|
433
|
+
*
|
|
434
|
+
* | Property | Type | Description |
|
|
435
|
+
* |---|---|---|
|
|
436
|
+
* | `name` | `string` | Library name; defaults to the spec's own label |
|
|
437
|
+
* | `teamId` | `string` | Team library to save into; omit for personal |
|
|
438
|
+
*/
|
|
439
|
+
export declare const PluginDesignFamilyCreateArgs: z.ZodObject<{
|
|
440
|
+
name: z.ZodOptional<z.ZodString>;
|
|
441
|
+
teamId: z.ZodOptional<z.ZodString>;
|
|
442
|
+
}, z.core.$strip>;
|
|
443
|
+
export type PluginDesignFamilyCreateArgs = z.infer<typeof PluginDesignFamilyCreateArgs>;
|
|
444
|
+
/**
|
|
445
|
+
* Arguments for {@linkcode PluginDesignFamilyApi.place}.
|
|
446
|
+
*
|
|
447
|
+
* | Property | Type | Description |
|
|
448
|
+
* |---|---|---|
|
|
449
|
+
* | `id` | `string` | Family to place, from {@linkcode PluginDesignFamilyApi.list}. Omit to place the prepared draft |
|
|
450
|
+
* | `version` | `number` | Exact version; defaults to the newest known |
|
|
451
|
+
* | `position` | `{ x, y, z }` | Place HERE, without user interaction. Omit to arm the cursor instead |
|
|
452
|
+
* | `rotation` | `number` | Yaw in degrees about +Y. Only with `position` |
|
|
453
|
+
* | `values` | `Record<string, number \| string>` | Parameter values for THIS instance |
|
|
454
|
+
* | `storey` | `number` | Storey to place on; defaults to the active one |
|
|
455
|
+
*/
|
|
456
|
+
export declare const PluginDesignFamilyPlaceArgs: z.ZodObject<{
|
|
457
|
+
id: z.ZodOptional<z.ZodString>;
|
|
458
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
459
|
+
position: z.ZodOptional<z.ZodObject<{
|
|
460
|
+
x: z.ZodNumber;
|
|
461
|
+
y: z.ZodNumber;
|
|
462
|
+
z: z.ZodNumber;
|
|
463
|
+
}, z.core.$strip>>;
|
|
464
|
+
rotation: z.ZodOptional<z.ZodNumber>;
|
|
465
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
|
|
466
|
+
storey: z.ZodOptional<z.ZodNumber>;
|
|
467
|
+
}, z.core.$strip>;
|
|
468
|
+
export type PluginDesignFamilyPlaceArgs = z.infer<typeof PluginDesignFamilyPlaceArgs>;
|
|
469
|
+
/**
|
|
470
|
+
* Arguments for {@linkcode PluginDesignFamilyApi.getParameters}.
|
|
471
|
+
*
|
|
472
|
+
* | Property | Type | Description |
|
|
473
|
+
* |---|---|---|
|
|
474
|
+
* | `component` | {@linkcode ComponentHandle} | A placed parametric component |
|
|
475
|
+
*/
|
|
476
|
+
export declare const PluginDesignFamilyGetParametersArgs: z.ZodObject<{
|
|
477
|
+
component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
478
|
+
}, z.core.$strip>;
|
|
479
|
+
export type PluginDesignFamilyGetParametersArgs = z.infer<typeof PluginDesignFamilyGetParametersArgs>;
|
|
480
|
+
/**
|
|
481
|
+
* Arguments for {@linkcode PluginDesignFamilyApi.setParameters}.
|
|
482
|
+
*
|
|
483
|
+
* | Property | Type | Description |
|
|
484
|
+
* |---|---|---|
|
|
485
|
+
* | `component` | {@linkcode ComponentHandle} | A placed parametric component |
|
|
486
|
+
* | `values` | `Record<string, number \| string>` | Values to change (partial) |
|
|
487
|
+
*/
|
|
488
|
+
export declare const PluginDesignFamilySetParametersArgs: z.ZodObject<{
|
|
489
|
+
component: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
490
|
+
values: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
491
|
+
}, z.core.$strip>;
|
|
492
|
+
export type PluginDesignFamilySetParametersArgs = z.infer<typeof PluginDesignFamilySetParametersArgs>;
|
|
493
|
+
//# sourceMappingURL=family.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"family.d.ts","sourceRoot":"","sources":["../../../src/api/design/family.ts"],"names":[],"mappings":"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"}
|