@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.
Files changed (261) hide show
  1. package/CHANGELOG.md +152 -1
  2. package/api-manifest.json +3643 -276
  3. package/dist/api/analysis/daylight.d.ts +603 -0
  4. package/dist/api/analysis/daylight.d.ts.map +1 -0
  5. package/dist/api/analysis/heatmaps.d.ts +658 -0
  6. package/dist/api/analysis/heatmaps.d.ts.map +1 -0
  7. package/dist/api/analysis/illuminance.d.ts +145 -0
  8. package/dist/api/analysis/illuminance.d.ts.map +1 -0
  9. package/dist/api/analysis/index.d.ts +59 -0
  10. package/dist/api/analysis/index.d.ts.map +1 -0
  11. package/dist/api/analysis/shadows.d.ts +165 -0
  12. package/dist/api/analysis/shadows.d.ts.map +1 -0
  13. package/dist/api/analysis/solar.d.ts +249 -0
  14. package/dist/api/analysis/solar.d.ts.map +1 -0
  15. package/dist/api/analysis/sunlightHours.d.ts +208 -0
  16. package/dist/api/analysis/sunlightHours.d.ts.map +1 -0
  17. package/dist/api/analysis/sunpath.d.ts +80 -0
  18. package/dist/api/analysis/sunpath.d.ts.map +1 -0
  19. package/dist/api/analysis/weather.d.ts +193 -0
  20. package/dist/api/analysis/weather.d.ts.map +1 -0
  21. package/dist/api/core/camera/index.d.ts +261 -0
  22. package/dist/api/core/camera/index.d.ts.map +1 -0
  23. package/dist/api/core/comment/index.d.ts +105 -2
  24. package/dist/api/core/comment/index.d.ts.map +1 -1
  25. package/dist/api/core/geom/create/index.d.ts +840 -14
  26. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  27. package/dist/api/core/geom/delete/index.d.ts +8 -2
  28. package/dist/api/core/geom/delete/index.d.ts.map +1 -1
  29. package/dist/api/core/geom/query/arc.d.ts +5 -5
  30. package/dist/api/core/geom/query/brep.d.ts +130 -18
  31. package/dist/api/core/geom/query/brep.d.ts.map +1 -1
  32. package/dist/api/core/geom/query/circle.d.ts +18 -18
  33. package/dist/api/core/geom/query/contour.d.ts +20 -20
  34. package/dist/api/core/geom/query/curve.d.ts +49 -49
  35. package/dist/api/core/geom/query/edge.d.ts +5 -5
  36. package/dist/api/core/geom/query/face.d.ts +16 -16
  37. package/dist/api/core/geom/query/halfedge.d.ts +8 -8
  38. package/dist/api/core/geom/query/profile.d.ts +19 -19
  39. package/dist/api/core/geom/query/vertex.d.ts +8 -8
  40. package/dist/api/core/geom/update/contour.d.ts +14 -14
  41. package/dist/api/core/geom/update/curve.d.ts +7 -7
  42. package/dist/api/core/geom/update/profile.d.ts +16 -16
  43. package/dist/api/core/handles/index.d.ts +210 -0
  44. package/dist/api/core/handles/index.d.ts.map +1 -0
  45. package/dist/api/core/index.d.ts +34 -0
  46. package/dist/api/core/index.d.ts.map +1 -1
  47. package/dist/api/core/io/export/index.d.ts +134 -0
  48. package/dist/api/core/io/export/index.d.ts.map +1 -0
  49. package/dist/api/core/io/import/index.d.ts +453 -0
  50. package/dist/api/core/io/import/index.d.ts.map +1 -0
  51. package/dist/api/core/io/index.d.ts +40 -0
  52. package/dist/api/core/io/index.d.ts.map +1 -0
  53. package/dist/api/core/io/job/index.d.ts +139 -0
  54. package/dist/api/core/io/job/index.d.ts.map +1 -0
  55. package/dist/api/core/io/query/index.d.ts +74 -0
  56. package/dist/api/core/io/query/index.d.ts.map +1 -0
  57. package/dist/api/core/io/terrain/index.d.ts +341 -0
  58. package/dist/api/core/io/terrain/index.d.ts.map +1 -0
  59. package/dist/api/core/io/underlay/index.d.ts +805 -0
  60. package/dist/api/core/io/underlay/index.d.ts.map +1 -0
  61. package/dist/api/core/layers.d.ts +7 -7
  62. package/dist/api/core/mode/index.d.ts +99 -0
  63. package/dist/api/core/mode/index.d.ts.map +1 -0
  64. package/dist/api/core/project/index.d.ts +68 -1
  65. package/dist/api/core/project/index.d.ts.map +1 -1
  66. package/dist/api/core/proposals/index.d.ts +531 -0
  67. package/dist/api/core/proposals/index.d.ts.map +1 -0
  68. package/dist/api/core/storeys/index.d.ts +265 -0
  69. package/dist/api/core/storeys/index.d.ts.map +1 -0
  70. package/dist/api/core/tags.d.ts +24 -0
  71. package/dist/api/core/tags.d.ts.map +1 -1
  72. package/dist/api/core/user.d.ts +44 -0
  73. package/dist/api/core/user.d.ts.map +1 -0
  74. package/dist/api/core/zoom/index.d.ts +4 -0
  75. package/dist/api/core/zoom/index.d.ts.map +1 -1
  76. package/dist/api/design/boolean/index.d.ts +4 -4
  77. package/dist/api/design/create/index.d.ts +568 -45
  78. package/dist/api/design/create/index.d.ts.map +1 -1
  79. package/dist/api/design/delete/index.d.ts +3 -0
  80. package/dist/api/design/delete/index.d.ts.map +1 -1
  81. package/dist/api/design/doors/index.d.ts +195 -0
  82. package/dist/api/design/doors/index.d.ts.map +1 -1
  83. package/dist/api/design/edit/index.d.ts +1 -1
  84. package/dist/api/design/erase/index.d.ts +2 -2
  85. package/dist/api/design/family.d.ts +493 -0
  86. package/dist/api/design/family.d.ts.map +1 -0
  87. package/dist/api/design/furniture/index.d.ts +181 -8
  88. package/dist/api/design/furniture/index.d.ts.map +1 -1
  89. package/dist/api/design/index.d.ts +98 -0
  90. package/dist/api/design/index.d.ts.map +1 -1
  91. package/dist/api/design/lock.d.ts +26 -0
  92. package/dist/api/design/lock.d.ts.map +1 -1
  93. package/dist/api/design/materials/index.d.ts +270 -16
  94. package/dist/api/design/materials/index.d.ts.map +1 -1
  95. package/dist/api/design/query/geometry/index.d.ts +112 -0
  96. package/dist/api/design/query/geometry/index.d.ts.map +1 -1
  97. package/dist/api/design/query/index.d.ts +289 -11
  98. package/dist/api/design/query/index.d.ts.map +1 -1
  99. package/dist/api/design/query/referenceLines.d.ts +45 -0
  100. package/dist/api/design/query/referenceLines.d.ts.map +1 -0
  101. package/dist/api/design/query/spaces.d.ts +181 -8
  102. package/dist/api/design/query/spaces.d.ts.map +1 -1
  103. package/dist/api/design/selection/index.d.ts +144 -0
  104. package/dist/api/design/selection/index.d.ts.map +1 -1
  105. package/dist/api/design/transform/index.d.ts +172 -10
  106. package/dist/api/design/transform/index.d.ts.map +1 -1
  107. package/dist/api/design/types/index.d.ts +181 -0
  108. package/dist/api/design/types/index.d.ts.map +1 -0
  109. package/dist/api/design/update/index.d.ts +553 -2
  110. package/dist/api/design/update/index.d.ts.map +1 -1
  111. package/dist/api/design/visibility.d.ts +126 -0
  112. package/dist/api/design/visibility.d.ts.map +1 -0
  113. package/dist/api/design/windows/index.d.ts +113 -2
  114. package/dist/api/design/windows/index.d.ts.map +1 -1
  115. package/dist/api/entity/buildableEnvelope.d.ts +4 -0
  116. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  117. package/dist/api/entity/referenceLine.d.ts +10 -2
  118. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  119. package/dist/api/entity/space.d.ts +21 -21
  120. package/dist/api/entity/story.d.ts +242 -15
  121. package/dist/api/entity/story.d.ts.map +1 -1
  122. package/dist/api/index.d.ts +10 -0
  123. package/dist/api/index.d.ts.map +1 -1
  124. package/dist/api/presentation/aiInspiration.d.ts +25 -25
  125. package/dist/api/presentation/annotate.d.ts +467 -0
  126. package/dist/api/presentation/annotate.d.ts.map +1 -0
  127. package/dist/api/presentation/diagrams.d.ts +111 -8
  128. package/dist/api/presentation/diagrams.d.ts.map +1 -1
  129. package/dist/api/presentation/export.d.ts +108 -0
  130. package/dist/api/presentation/export.d.ts.map +1 -0
  131. package/dist/api/presentation/import.d.ts +55 -4
  132. package/dist/api/presentation/import.d.ts.map +1 -1
  133. package/dist/api/presentation/index.d.ts +58 -1
  134. package/dist/api/presentation/index.d.ts.map +1 -1
  135. package/dist/api/presentation/placedViews.d.ts +1139 -0
  136. package/dist/api/presentation/placedViews.d.ts.map +1 -0
  137. package/dist/api/presentation/shapes.d.ts +481 -0
  138. package/dist/api/presentation/shapes.d.ts.map +1 -0
  139. package/dist/api/presentation/sheets.d.ts +452 -13
  140. package/dist/api/presentation/sheets.d.ts.map +1 -1
  141. package/dist/api/presentation/slideshow.d.ts +125 -0
  142. package/dist/api/presentation/slideshow.d.ts.map +1 -0
  143. package/dist/api/presentation/tables.d.ts +81 -0
  144. package/dist/api/presentation/tables.d.ts.map +1 -0
  145. package/dist/api/presentation/views.d.ts +367 -7
  146. package/dist/api/presentation/views.d.ts.map +1 -1
  147. package/dist/api/program/areas.d.ts +102 -12
  148. package/dist/api/program/areas.d.ts.map +1 -1
  149. package/dist/api/program/cores.d.ts +3 -99
  150. package/dist/api/program/cores.d.ts.map +1 -1
  151. package/dist/api/program/index.d.ts +7 -15
  152. package/dist/api/program/index.d.ts.map +1 -1
  153. package/dist/api/program/layout.d.ts +346 -11
  154. package/dist/api/program/layout.d.ts.map +1 -1
  155. package/dist/api/program/site.d.ts +469 -13
  156. package/dist/api/program/site.d.ts.map +1 -1
  157. package/dist/api/program/spreadsheet.d.ts +365 -41
  158. package/dist/api/program/spreadsheet.d.ts.map +1 -1
  159. package/dist/api/workspace/index.d.ts +505 -0
  160. package/dist/api/workspace/index.d.ts.map +1 -0
  161. package/dist/errors/codes.d.ts +34 -0
  162. package/dist/errors/codes.d.ts.map +1 -0
  163. package/dist/errors/envelope.d.ts +56 -0
  164. package/dist/errors/envelope.d.ts.map +1 -0
  165. package/dist/errors/index.d.ts +6 -0
  166. package/dist/errors/index.d.ts.map +1 -0
  167. package/dist/errors/plugin-error.d.ts +69 -0
  168. package/dist/errors/plugin-error.d.ts.map +1 -0
  169. package/dist/handles.d.ts +97 -25
  170. package/dist/handles.d.ts.map +1 -1
  171. package/dist/host-utils.d.ts +4 -0
  172. package/dist/host-utils.d.ts.map +1 -1
  173. package/dist/index.cjs +4605 -1423
  174. package/dist/index.cjs.map +1 -1
  175. package/dist/index.d.ts +1 -0
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +4191 -1412
  178. package/dist/index.js.map +1 -1
  179. package/package.json +4 -2
  180. package/scripts/generate-manifest.mjs +45 -0
  181. package/scripts/generate-manifest.test.mjs +103 -4
  182. package/src/api/analysis/daylight.ts +470 -0
  183. package/src/api/analysis/heatmaps.ts +683 -0
  184. package/src/api/analysis/illuminance.ts +155 -0
  185. package/src/api/analysis/index.ts +61 -0
  186. package/src/api/analysis/shadows.ts +183 -0
  187. package/src/api/analysis/solar.ts +237 -0
  188. package/src/api/analysis/sunlightHours.ts +211 -0
  189. package/src/api/analysis/sunpath.ts +83 -0
  190. package/src/api/analysis/weather.ts +179 -0
  191. package/src/api/core/camera/index.ts +268 -0
  192. package/src/api/core/comment/index.ts +120 -2
  193. package/src/api/core/geom/create/index.ts +912 -1
  194. package/src/api/core/geom/delete/index.ts +6 -0
  195. package/src/api/core/geom/query/brep.ts +119 -0
  196. package/src/api/core/handles/index.ts +233 -0
  197. package/src/api/core/index.ts +34 -0
  198. package/src/api/core/io/export/index.ts +126 -0
  199. package/src/api/core/io/import/index.ts +496 -0
  200. package/src/api/core/io/index.ts +42 -0
  201. package/src/api/core/io/job/index.ts +140 -0
  202. package/src/api/core/io/query/index.ts +71 -0
  203. package/src/api/core/io/terrain/index.ts +360 -0
  204. package/src/api/core/io/underlay/index.ts +705 -0
  205. package/src/api/core/mode/index.ts +96 -0
  206. package/src/api/core/project/index.ts +62 -1
  207. package/src/api/core/proposals/index.ts +569 -0
  208. package/src/api/core/storeys/index.ts +294 -0
  209. package/src/api/core/tags.ts +27 -0
  210. package/src/api/core/user.ts +46 -0
  211. package/src/api/core/zoom/index.ts +4 -0
  212. package/src/api/design/create/index.ts +670 -30
  213. package/src/api/design/delete/index.ts +3 -0
  214. package/src/api/design/doors/index.ts +208 -0
  215. package/src/api/design/erase/index.ts +1 -1
  216. package/src/api/design/family.ts +544 -0
  217. package/src/api/design/furniture/index.ts +197 -8
  218. package/src/api/design/index.ts +102 -0
  219. package/src/api/design/lock.ts +27 -0
  220. package/src/api/design/materials/index.ts +334 -27
  221. package/src/api/design/query/geometry/index.ts +125 -3
  222. package/src/api/design/query/index.ts +219 -7
  223. package/src/api/design/query/referenceLines.ts +52 -0
  224. package/src/api/design/query/spaces.ts +143 -0
  225. package/src/api/design/selection/index.ts +129 -0
  226. package/src/api/design/transform/index.ts +170 -9
  227. package/src/api/design/types/index.ts +156 -0
  228. package/src/api/design/update/index.ts +631 -3
  229. package/src/api/design/visibility.ts +143 -0
  230. package/src/api/design/windows/index.ts +128 -2
  231. package/src/api/entity/buildableEnvelope.ts +4 -0
  232. package/src/api/entity/referenceLine.ts +8 -0
  233. package/src/api/entity/story.ts +259 -15
  234. package/src/api/index.ts +10 -0
  235. package/src/api/presentation/annotate.ts +385 -0
  236. package/src/api/presentation/diagrams.ts +118 -8
  237. package/src/api/presentation/export.ts +108 -0
  238. package/src/api/presentation/import.ts +51 -4
  239. package/src/api/presentation/index.ts +66 -1
  240. package/src/api/presentation/placedViews.ts +1120 -0
  241. package/src/api/presentation/shapes.ts +274 -0
  242. package/src/api/presentation/sheets.ts +400 -13
  243. package/src/api/presentation/slideshow.ts +134 -0
  244. package/src/api/presentation/tables.ts +84 -0
  245. package/src/api/presentation/views.ts +376 -8
  246. package/src/api/program/areas.ts +88 -15
  247. package/src/api/program/cores.ts +3 -91
  248. package/src/api/program/index.ts +7 -15
  249. package/src/api/program/layout.ts +365 -11
  250. package/src/api/program/site.ts +435 -13
  251. package/src/api/program/spreadsheet.ts +376 -35
  252. package/src/api/workspace/index.ts +563 -0
  253. package/src/errors/codes.ts +136 -0
  254. package/src/errors/envelope.ts +75 -0
  255. package/src/errors/index.ts +21 -0
  256. package/src/errors/plugin-error.ts +134 -0
  257. package/src/handles.ts +123 -13
  258. package/src/host-utils.ts +4 -0
  259. package/src/index.ts +1 -0
  260. package/test/errors.test.mjs +184 -0
  261. 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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"}