@snaptrude/plugin-core 0.9.17 → 0.9.18-edgesetbacks-20261021.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/AGENTS.md +231 -231
  2. package/CHANGELOG.md +408 -408
  3. package/CLAUDE.md +11 -11
  4. package/api-manifest.json +1428 -712
  5. package/dist/api/analysis/daylight.d.ts +5 -5
  6. package/dist/api/analysis/solar.d.ts +2 -2
  7. package/dist/api/core/camera/index.d.ts +29 -0
  8. package/dist/api/core/camera/index.d.ts.map +1 -1
  9. package/dist/api/core/geom/create/index.d.ts +7 -1
  10. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  11. package/dist/api/core/geom/update/contour.d.ts +8 -2
  12. package/dist/api/core/geom/update/contour.d.ts.map +1 -1
  13. package/dist/api/core/storeys/index.d.ts +5 -2
  14. package/dist/api/core/storeys/index.d.ts.map +1 -1
  15. package/dist/api/core/zoom/index.d.ts +13 -0
  16. package/dist/api/core/zoom/index.d.ts.map +1 -1
  17. package/dist/api/design/bim.d.ts +299 -0
  18. package/dist/api/design/bim.d.ts.map +1 -0
  19. package/dist/api/design/boolean/index.d.ts +2 -0
  20. package/dist/api/design/boolean/index.d.ts.map +1 -1
  21. package/dist/api/design/catalog.d.ts +320 -0
  22. package/dist/api/design/catalog.d.ts.map +1 -0
  23. package/dist/api/design/create/bulk-items.d.ts +65 -25
  24. package/dist/api/design/create/bulk-items.d.ts.map +1 -1
  25. package/dist/api/design/create/index.d.ts +299 -100
  26. package/dist/api/design/create/index.d.ts.map +1 -1
  27. package/dist/api/design/create/opening-fields.d.ts +13 -12
  28. package/dist/api/design/create/opening-fields.d.ts.map +1 -1
  29. package/dist/api/design/delete/index.d.ts +1 -0
  30. package/dist/api/design/delete/index.d.ts.map +1 -1
  31. package/dist/api/design/doors/index.d.ts +18 -24
  32. package/dist/api/design/doors/index.d.ts.map +1 -1
  33. package/dist/api/design/family.d.ts +813 -35
  34. package/dist/api/design/family.d.ts.map +1 -1
  35. package/dist/api/design/index.d.ts +16 -0
  36. package/dist/api/design/index.d.ts.map +1 -1
  37. package/dist/api/design/networks.d.ts +1703 -0
  38. package/dist/api/design/networks.d.ts.map +1 -0
  39. package/dist/api/design/query/grids.d.ts +2 -2
  40. package/dist/api/design/query/index.d.ts +42 -32
  41. package/dist/api/design/query/index.d.ts.map +1 -1
  42. package/dist/api/design/selection/index.d.ts +10 -10
  43. package/dist/api/design/types/index.d.ts +40 -24
  44. package/dist/api/design/types/index.d.ts.map +1 -1
  45. package/dist/api/design/update/index.d.ts +111 -6
  46. package/dist/api/design/update/index.d.ts.map +1 -1
  47. package/dist/api/design/windows/index.d.ts +8 -8
  48. package/dist/api/design/windows/index.d.ts.map +1 -1
  49. package/dist/api/entity/buildableEnvelope.d.ts +84 -2
  50. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  51. package/dist/api/presentation/aiInspiration.d.ts +10 -10
  52. package/dist/api/presentation/annotate.d.ts +38 -22
  53. package/dist/api/presentation/annotate.d.ts.map +1 -1
  54. package/dist/api/presentation/drawingContract.d.ts +32 -0
  55. package/dist/api/presentation/drawingContract.d.ts.map +1 -0
  56. package/dist/api/presentation/drawings.d.ts +3523 -0
  57. package/dist/api/presentation/drawings.d.ts.map +1 -0
  58. package/dist/api/presentation/export.d.ts +23 -5
  59. package/dist/api/presentation/export.d.ts.map +1 -1
  60. package/dist/api/presentation/index.d.ts +32 -12
  61. package/dist/api/presentation/index.d.ts.map +1 -1
  62. package/dist/api/presentation/placedViews.d.ts +106 -6
  63. package/dist/api/presentation/placedViews.d.ts.map +1 -1
  64. package/dist/api/presentation/shapes.d.ts +2 -2
  65. package/dist/api/presentation/sheets.d.ts +175 -19
  66. package/dist/api/presentation/sheets.d.ts.map +1 -1
  67. package/dist/api/presentation/viewPresets.d.ts +222 -0
  68. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  69. package/dist/api/presentation/views.d.ts +141 -8
  70. package/dist/api/presentation/views.d.ts.map +1 -1
  71. package/dist/api/presentation/walkthroughs.d.ts +6 -6
  72. package/dist/errors/codes.d.ts +3 -1
  73. package/dist/errors/codes.d.ts.map +1 -1
  74. package/dist/index.cjs +3831 -2444
  75. package/dist/index.cjs.map +1 -1
  76. package/dist/index.js +3705 -2444
  77. package/dist/index.js.map +1 -1
  78. package/package.json +1 -1
  79. package/scripts/check-dist-fresh.mjs +22 -22
  80. package/scripts/generate-manifest.mjs +243 -238
  81. package/scripts/generate-manifest.test.mjs +303 -303
  82. package/src/api/analysis/daylight.ts +470 -470
  83. package/src/api/analysis/heatmaps.ts +683 -683
  84. package/src/api/analysis/illuminance.ts +155 -155
  85. package/src/api/analysis/index.ts +61 -61
  86. package/src/api/analysis/shadows.ts +183 -183
  87. package/src/api/analysis/solar.ts +237 -237
  88. package/src/api/analysis/sunlightHours.ts +211 -211
  89. package/src/api/analysis/sunpath.ts +83 -83
  90. package/src/api/analysis/weather.ts +179 -179
  91. package/src/api/core/buildings.ts +485 -485
  92. package/src/api/core/camera/index.ts +696 -667
  93. package/src/api/core/comment/index.ts +376 -376
  94. package/src/api/core/geom/create/index.ts +2139 -2133
  95. package/src/api/core/geom/delete/index.ts +84 -84
  96. package/src/api/core/geom/index.ts +35 -35
  97. package/src/api/core/geom/query/arc.ts +169 -169
  98. package/src/api/core/geom/query/brep.ts +621 -621
  99. package/src/api/core/geom/query/circle.ts +404 -404
  100. package/src/api/core/geom/query/contour.ts +540 -540
  101. package/src/api/core/geom/query/curve.ts +1102 -1102
  102. package/src/api/core/geom/query/edge.ts +130 -130
  103. package/src/api/core/geom/query/face.ts +508 -508
  104. package/src/api/core/geom/query/halfedge.ts +210 -210
  105. package/src/api/core/geom/query/index.ts +63 -63
  106. package/src/api/core/geom/query/profile.ts +473 -473
  107. package/src/api/core/geom/query/vertex.ts +205 -205
  108. package/src/api/core/geom/update/contour.ts +323 -317
  109. package/src/api/core/geom/update/curve.ts +209 -209
  110. package/src/api/core/geom/update/index.ts +29 -29
  111. package/src/api/core/geom/update/profile.ts +379 -379
  112. package/src/api/core/groups.ts +521 -521
  113. package/src/api/core/handles/index.ts +234 -234
  114. package/src/api/core/history/index.ts +84 -84
  115. package/src/api/core/index.ts +99 -99
  116. package/src/api/core/io/export/index.ts +126 -126
  117. package/src/api/core/io/import/index.ts +504 -504
  118. package/src/api/core/io/index.ts +42 -42
  119. package/src/api/core/io/job/index.ts +140 -140
  120. package/src/api/core/io/query/index.ts +71 -71
  121. package/src/api/core/io/terrain/index.ts +360 -360
  122. package/src/api/core/io/underlay/index.ts +705 -705
  123. package/src/api/core/layers.ts +540 -540
  124. package/src/api/core/math/index.ts +20 -20
  125. package/src/api/core/math/quat.ts +172 -172
  126. package/src/api/core/math/vec3.ts +179 -179
  127. package/src/api/core/mode/index.ts +108 -108
  128. package/src/api/core/project/index.ts +479 -479
  129. package/src/api/core/proposals/index.ts +570 -570
  130. package/src/api/core/storeys/index.ts +311 -308
  131. package/src/api/core/storeys/layers.ts +339 -339
  132. package/src/api/core/tags.ts +911 -911
  133. package/src/api/core/units/index.ts +164 -164
  134. package/src/api/core/user.ts +46 -46
  135. package/src/api/core/zoom/index.ts +64 -51
  136. package/src/api/design/bim.ts +210 -0
  137. package/src/api/design/boolean/index.ts +181 -179
  138. package/src/api/design/catalog.ts +203 -0
  139. package/src/api/design/create/bulk-items.ts +294 -254
  140. package/src/api/design/create/grids.ts +137 -137
  141. package/src/api/design/create/index.ts +2178 -1980
  142. package/src/api/design/create/opening-fields.ts +40 -37
  143. package/src/api/design/delete/index.ts +75 -74
  144. package/src/api/design/dimensions.ts +453 -453
  145. package/src/api/design/doors/index.ts +516 -500
  146. package/src/api/design/edit/index.ts +54 -54
  147. package/src/api/design/erase/index.ts +151 -151
  148. package/src/api/design/family.ts +1342 -704
  149. package/src/api/design/furniture/index.ts +319 -319
  150. package/src/api/design/grids.ts +237 -237
  151. package/src/api/design/index.ts +304 -274
  152. package/src/api/design/lock.ts +69 -69
  153. package/src/api/design/materials/index.ts +608 -608
  154. package/src/api/design/networks.ts +607 -0
  155. package/src/api/design/query/geometry/index.ts +319 -319
  156. package/src/api/design/query/grids.ts +197 -197
  157. package/src/api/design/query/index.ts +1236 -1226
  158. package/src/api/design/query/referenceLines.ts +52 -52
  159. package/src/api/design/query/spaces.ts +275 -275
  160. package/src/api/design/selection/index.ts +273 -273
  161. package/src/api/design/shared.ts +40 -40
  162. package/src/api/design/transform/index.ts +254 -254
  163. package/src/api/design/types/index.ts +163 -156
  164. package/src/api/design/update/index.ts +1096 -983
  165. package/src/api/design/visibility.ts +143 -143
  166. package/src/api/design/windows/index.ts +351 -333
  167. package/src/api/entity/buildableEnvelope.ts +397 -322
  168. package/src/api/entity/index.ts +30 -30
  169. package/src/api/entity/referenceLine.ts +235 -235
  170. package/src/api/entity/space.ts +612 -612
  171. package/src/api/entity/story.ts +517 -517
  172. package/src/api/index.ts +47 -47
  173. package/src/api/presentation/aiInspiration.ts +1116 -1116
  174. package/src/api/presentation/annotate.ts +417 -385
  175. package/src/api/presentation/camera.ts +289 -289
  176. package/src/api/presentation/diagrams.ts +194 -194
  177. package/src/api/presentation/drawingContract.ts +70 -0
  178. package/src/api/presentation/drawings.ts +1179 -0
  179. package/src/api/presentation/export.ts +134 -108
  180. package/src/api/presentation/import.ts +159 -159
  181. package/src/api/presentation/index.ts +160 -135
  182. package/src/api/presentation/placedViews.ts +1211 -1120
  183. package/src/api/presentation/sections.ts +420 -420
  184. package/src/api/presentation/shapes.ts +274 -274
  185. package/src/api/presentation/sheets.ts +746 -585
  186. package/src/api/presentation/slideshow.ts +134 -134
  187. package/src/api/presentation/tables.ts +84 -84
  188. package/src/api/presentation/viewPresets.ts +241 -0
  189. package/src/api/presentation/views.ts +742 -673
  190. package/src/api/presentation/walkthroughs.ts +1201 -1201
  191. package/src/api/program/adjacency.ts +164 -164
  192. package/src/api/program/areas.ts +408 -408
  193. package/src/api/program/classification.ts +138 -138
  194. package/src/api/program/cores.ts +83 -83
  195. package/src/api/program/departments.ts +517 -517
  196. package/src/api/program/index.ts +73 -73
  197. package/src/api/program/labels.ts +332 -332
  198. package/src/api/program/layout.ts +422 -422
  199. package/src/api/program/metadata.ts +364 -364
  200. package/src/api/program/metrics.ts +120 -120
  201. package/src/api/program/site.ts +748 -748
  202. package/src/api/program/spreadsheet.ts +2698 -2698
  203. package/src/api/workspace/index.ts +612 -612
  204. package/src/errors/codes.ts +143 -136
  205. package/src/errors/envelope.ts +75 -75
  206. package/src/errors/index.ts +21 -21
  207. package/src/errors/plugin-error.ts +134 -134
  208. package/src/handles.ts +297 -297
  209. package/src/host-utils.ts +67 -67
  210. package/src/index.ts +7 -7
  211. package/src/massParameters.ops.ts +246 -246
  212. package/src/massParameters.ts +427 -427
  213. package/src/types.ts +16 -16
  214. package/test/drawingContract.test.mjs +288 -0
  215. package/test/errors.test.mjs +185 -184
  216. package/test/massParameters.test.mjs +952 -952
  217. package/test/presentationViewSettings.test.mjs +85 -0
  218. package/tsconfig.json +22 -22
  219. package/tsup.config.ts +12 -12
@@ -1,164 +1,164 @@
1
- import * as z from "zod"
2
- import { PluginApiReturn } from "../../../types"
3
-
4
- /**
5
- * Unit-type queries and conversion.
6
- *
7
- * Snaptrude stores all geometry in an internal `babylon` unit. These methods
8
- * read the available unit types, the internal (`babylon`) type, and the current
9
- * project type; set the current project type; and convert values between any two
10
- * unit types.
11
- *
12
- * Accessed via `snaptrude.core.units`.
13
- */
14
- export abstract class PluginUnitsApi {
15
- constructor() {}
16
-
17
- /**
18
- * List the selectable real-world unit types (excludes the internal `babylon`
19
- * storage type, which is read via {@linkcode PluginUnitsApi.getBabylonType}).
20
- *
21
- * @examplePrompt What units can I use in this project?
22
- * @examplePrompt List all the available measurement units
23
- * @examplePrompt Which unit systems does Snaptrude support?
24
- * @examplePrompt Show the unit options I could switch the model to
25
- *
26
- * # Example
27
- * ```ts
28
- * const types = await snaptrude.core.units.listTypes()
29
- * console.log(types) // ["meters", "feet-inches", "inches", ...]
30
- * ```
31
- */
32
- public abstract listTypes(): PluginApiReturn<PUnitType[]>
33
-
34
- /**
35
- * Get the internal storage unit type that all geometry is kept in — always
36
- * `"babylon"` — for use as one side of a {@linkcode PluginUnitsApi.convert} call.
37
- *
38
- * @examplePrompt What unit does Snaptrude store geometry in internally?
39
- * @examplePrompt Get the internal babylon unit type
40
- * @examplePrompt Which unit are raw model coordinates saved in?
41
- *
42
- * # Example
43
- * ```ts
44
- * const babylon = await snaptrude.core.units.getBabylonType() // "babylon"
45
- * const meters = await snaptrude.core.units.convert(10, babylon, "meters")
46
- * ```
47
- */
48
- public abstract getBabylonType(): PluginApiReturn<PUnitType>
49
-
50
- /**
51
- * Get the current project's unit type — the unit lengths are displayed and
52
- * entered in. Paired with {@linkcode PluginUnitsApi.setType}.
53
- *
54
- * @examplePrompt What units is this project using?
55
- * @examplePrompt Are we working in metric or imperial?
56
- * @examplePrompt Check the current measurement unit of the model
57
- * @examplePrompt Is the file set to millimetres or feet and inches?
58
- *
59
- * # Example
60
- * ```ts
61
- * const type = await snaptrude.core.units.getType()
62
- * console.log(type) // e.g. "millimeters"
63
- * ```
64
- */
65
- public abstract getType(): PluginApiReturn<PUnitType>
66
-
67
- /**
68
- * Set the current project's unit type. Paired with {@linkcode PluginUnitsApi.getType}.
69
- *
70
- * @param type - The unit type to set as the project unit.
71
- * @returns `true` if applied; `false` if `type` is not a settable project unit
72
- * (e.g. `kilometers`, `miles`, `babylon`).
73
- *
74
- * @examplePrompt Change the project units to millimeters
75
- * @examplePrompt Switch this model to feet and inches
76
- * @examplePrompt Set the working units to metric
77
- * @examplePrompt Make the drawing use centimetres instead of meters
78
- *
79
- * # Example
80
- * ```ts
81
- * await snaptrude.core.units.setType("meters")
82
- * ```
83
- */
84
- public abstract setType(type: PUnitType): PluginApiReturn<boolean>
85
-
86
- /**
87
- * Convert a value between two unit types.
88
- *
89
- * @param value - The numeric value to convert.
90
- * @param from - Source unit type.
91
- * @param to - Target unit type.
92
- * @param degree - (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1.
93
- * @returns The converted numeric value.
94
- *
95
- * @examplePrompt Convert 5 meters to feet and inches
96
- * @examplePrompt How many millimetres is 12 feet?
97
- * @examplePrompt Change this area from internal units to square metres
98
- * @examplePrompt Turn 2500 mm into meters
99
- * @examplePrompt Convert a volume value from babylon units to cubic feet
100
- *
101
- * # Example
102
- * ```ts
103
- * // 5 meters → internal babylon units
104
- * const b = await snaptrude.core.units.convert(5, "meters", "babylon")
105
- * // an internal area → square metres
106
- * const m2 = await snaptrude.core.units.convert(area, "babylon", "meters", 2)
107
- * ```
108
- */
109
- public abstract convert(
110
- value: number,
111
- from: PUnitType,
112
- to: PUnitType,
113
- degree?: number,
114
- ): PluginApiReturn<number>
115
- }
116
-
117
- /**
118
- * Supported unit types. `babylon` is Snaptrude's internal storage unit; the rest
119
- * are real-world units. Mirrors the engine `Converter.UNITS` vocabulary.
120
- */
121
- export const PUnitType = z.enum([
122
- "meters",
123
- "feet-inches",
124
- "inches",
125
- "centimeters",
126
- "millimeters",
127
- "kilometers",
128
- "miles",
129
- "babylon",
130
- ])
131
-
132
- export type PUnitType = z.infer<typeof PUnitType>
133
-
134
- /**
135
- * Arguments for {@linkcode PluginUnitsApi.setType}.
136
- *
137
- * | Property | Type | Description |
138
- * |---|---|---|
139
- * | `type` | {@linkcode PUnitType} | The unit type to set as the project unit |
140
- */
141
- export const PluginUnitsSetTypeArgs = z.object({
142
- type: PUnitType,
143
- })
144
-
145
- export type PluginUnitsSetTypeArgs = z.infer<typeof PluginUnitsSetTypeArgs>
146
-
147
- /**
148
- * Arguments for {@linkcode PluginUnitsApi.convert}.
149
- *
150
- * | Property | Type | Description |
151
- * |---|---|---|
152
- * | `value` | `number` | The numeric value to convert |
153
- * | `from` | {@linkcode PUnitType} | Source unit type |
154
- * | `to` | {@linkcode PUnitType} | Target unit type |
155
- * | `degree` | `1 \| 2 \| 3` | (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1 |
156
- */
157
- export const PluginUnitsConvertArgs = z.object({
158
- value: z.number(),
159
- from: PUnitType,
160
- to: PUnitType,
161
- degree: z.number().int().min(1).max(3).optional(),
162
- })
163
-
164
- export type PluginUnitsConvertArgs = z.infer<typeof PluginUnitsConvertArgs>
1
+ import * as z from "zod"
2
+ import { PluginApiReturn } from "../../../types"
3
+
4
+ /**
5
+ * Unit-type queries and conversion.
6
+ *
7
+ * Snaptrude stores all geometry in an internal `babylon` unit. These methods
8
+ * read the available unit types, the internal (`babylon`) type, and the current
9
+ * project type; set the current project type; and convert values between any two
10
+ * unit types.
11
+ *
12
+ * Accessed via `snaptrude.core.units`.
13
+ */
14
+ export abstract class PluginUnitsApi {
15
+ constructor() {}
16
+
17
+ /**
18
+ * List the selectable real-world unit types (excludes the internal `babylon`
19
+ * storage type, which is read via {@linkcode PluginUnitsApi.getBabylonType}).
20
+ *
21
+ * @examplePrompt What units can I use in this project?
22
+ * @examplePrompt List all the available measurement units
23
+ * @examplePrompt Which unit systems does Snaptrude support?
24
+ * @examplePrompt Show the unit options I could switch the model to
25
+ *
26
+ * # Example
27
+ * ```ts
28
+ * const types = await snaptrude.core.units.listTypes()
29
+ * console.log(types) // ["meters", "feet-inches", "inches", ...]
30
+ * ```
31
+ */
32
+ public abstract listTypes(): PluginApiReturn<PUnitType[]>
33
+
34
+ /**
35
+ * Get the internal storage unit type that all geometry is kept in — always
36
+ * `"babylon"` — for use as one side of a {@linkcode PluginUnitsApi.convert} call.
37
+ *
38
+ * @examplePrompt What unit does Snaptrude store geometry in internally?
39
+ * @examplePrompt Get the internal babylon unit type
40
+ * @examplePrompt Which unit are raw model coordinates saved in?
41
+ *
42
+ * # Example
43
+ * ```ts
44
+ * const babylon = await snaptrude.core.units.getBabylonType() // "babylon"
45
+ * const meters = await snaptrude.core.units.convert(10, babylon, "meters")
46
+ * ```
47
+ */
48
+ public abstract getBabylonType(): PluginApiReturn<PUnitType>
49
+
50
+ /**
51
+ * Get the current project's unit type — the unit lengths are displayed and
52
+ * entered in. Paired with {@linkcode PluginUnitsApi.setType}.
53
+ *
54
+ * @examplePrompt What units is this project using?
55
+ * @examplePrompt Are we working in metric or imperial?
56
+ * @examplePrompt Check the current measurement unit of the model
57
+ * @examplePrompt Is the file set to millimetres or feet and inches?
58
+ *
59
+ * # Example
60
+ * ```ts
61
+ * const type = await snaptrude.core.units.getType()
62
+ * console.log(type) // e.g. "millimeters"
63
+ * ```
64
+ */
65
+ public abstract getType(): PluginApiReturn<PUnitType>
66
+
67
+ /**
68
+ * Set the current project's unit type. Paired with {@linkcode PluginUnitsApi.getType}.
69
+ *
70
+ * @param type - The unit type to set as the project unit.
71
+ * @returns `true` if applied; `false` if `type` is not a settable project unit
72
+ * (e.g. `kilometers`, `miles`, `babylon`).
73
+ *
74
+ * @examplePrompt Change the project units to millimeters
75
+ * @examplePrompt Switch this model to feet and inches
76
+ * @examplePrompt Set the working units to metric
77
+ * @examplePrompt Make the drawing use centimetres instead of meters
78
+ *
79
+ * # Example
80
+ * ```ts
81
+ * await snaptrude.core.units.setType("meters")
82
+ * ```
83
+ */
84
+ public abstract setType(type: PUnitType): PluginApiReturn<boolean>
85
+
86
+ /**
87
+ * Convert a value between two unit types.
88
+ *
89
+ * @param value - The numeric value to convert.
90
+ * @param from - Source unit type.
91
+ * @param to - Target unit type.
92
+ * @param degree - (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1.
93
+ * @returns The converted numeric value.
94
+ *
95
+ * @examplePrompt Convert 5 meters to feet and inches
96
+ * @examplePrompt How many millimetres is 12 feet?
97
+ * @examplePrompt Change this area from internal units to square metres
98
+ * @examplePrompt Turn 2500 mm into meters
99
+ * @examplePrompt Convert a volume value from babylon units to cubic feet
100
+ *
101
+ * # Example
102
+ * ```ts
103
+ * // 5 meters → internal babylon units
104
+ * const b = await snaptrude.core.units.convert(5, "meters", "babylon")
105
+ * // an internal area → square metres
106
+ * const m2 = await snaptrude.core.units.convert(area, "babylon", "meters", 2)
107
+ * ```
108
+ */
109
+ public abstract convert(
110
+ value: number,
111
+ from: PUnitType,
112
+ to: PUnitType,
113
+ degree?: number,
114
+ ): PluginApiReturn<number>
115
+ }
116
+
117
+ /**
118
+ * Supported unit types. `babylon` is Snaptrude's internal storage unit; the rest
119
+ * are real-world units. Mirrors the engine `Converter.UNITS` vocabulary.
120
+ */
121
+ export const PUnitType = z.enum([
122
+ "meters",
123
+ "feet-inches",
124
+ "inches",
125
+ "centimeters",
126
+ "millimeters",
127
+ "kilometers",
128
+ "miles",
129
+ "babylon",
130
+ ])
131
+
132
+ export type PUnitType = z.infer<typeof PUnitType>
133
+
134
+ /**
135
+ * Arguments for {@linkcode PluginUnitsApi.setType}.
136
+ *
137
+ * | Property | Type | Description |
138
+ * |---|---|---|
139
+ * | `type` | {@linkcode PUnitType} | The unit type to set as the project unit |
140
+ */
141
+ export const PluginUnitsSetTypeArgs = z.object({
142
+ type: PUnitType,
143
+ })
144
+
145
+ export type PluginUnitsSetTypeArgs = z.infer<typeof PluginUnitsSetTypeArgs>
146
+
147
+ /**
148
+ * Arguments for {@linkcode PluginUnitsApi.convert}.
149
+ *
150
+ * | Property | Type | Description |
151
+ * |---|---|---|
152
+ * | `value` | `number` | The numeric value to convert |
153
+ * | `from` | {@linkcode PUnitType} | Source unit type |
154
+ * | `to` | {@linkcode PUnitType} | Target unit type |
155
+ * | `degree` | `1 \| 2 \| 3` | (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1 |
156
+ */
157
+ export const PluginUnitsConvertArgs = z.object({
158
+ value: z.number(),
159
+ from: PUnitType,
160
+ to: PUnitType,
161
+ degree: z.number().int().min(1).max(3).optional(),
162
+ })
163
+
164
+ export type PluginUnitsConvertArgs = z.infer<typeof PluginUnitsConvertArgs>
@@ -1,46 +1,46 @@
1
- import * as z from "zod"
2
- import { PluginApiReturn } from "../../types"
3
-
4
- /**
5
- * User locale.
6
- *
7
- * Read the viewer's timezone and language — for date/number formatting and
8
- * localized labels. This is locale only: NO precise geolocation, no IP, no
9
- * account identity. Accessed via `snaptrude.core.user`.
10
- */
11
- export abstract class PluginUserApi {
12
- constructor() {}
13
-
14
- /**
15
- * Get the viewer's locale: IANA timezone and BCP-47 language tag, resolved
16
- * from the browser (`Intl.DateTimeFormat().resolvedOptions().timeZone` and
17
- * `navigator.language`). Locale only — no precise location.
18
- *
19
- * @returns `{ timezone, language }` — e.g. `{ timezone: "Asia/Kolkata", language: "en-US" }`.
20
- *
21
- * @examplePrompt What timezone is the user in?
22
- * @examplePrompt Get the viewer's language for localized labels
23
- * @examplePrompt Format the report date in the user's local timezone
24
- * @examplePrompt Which locale should I use for this plugin's UI?
25
- *
26
- * # Example
27
- * ```ts
28
- * const { timezone, language } = await snaptrude.core.user.getLocale()
29
- * ```
30
- */
31
- public abstract getLocale(): PluginApiReturn<PluginUserLocale>
32
- }
33
-
34
- /**
35
- * The viewer's locale.
36
- *
37
- * | Property | Type | Description |
38
- * |---|---|---|
39
- * | `timezone` | `string` | IANA timezone id (e.g. `"Asia/Kolkata"`) |
40
- * | `language` | `string` | BCP-47 language tag (e.g. `"en-US"`) |
41
- */
42
- export const PluginUserLocale = z.object({
43
- timezone: z.string(),
44
- language: z.string(),
45
- })
46
- export type PluginUserLocale = z.infer<typeof PluginUserLocale>
1
+ import * as z from "zod"
2
+ import { PluginApiReturn } from "../../types"
3
+
4
+ /**
5
+ * User locale.
6
+ *
7
+ * Read the viewer's timezone and language — for date/number formatting and
8
+ * localized labels. This is locale only: NO precise geolocation, no IP, no
9
+ * account identity. Accessed via `snaptrude.core.user`.
10
+ */
11
+ export abstract class PluginUserApi {
12
+ constructor() {}
13
+
14
+ /**
15
+ * Get the viewer's locale: IANA timezone and BCP-47 language tag, resolved
16
+ * from the browser (`Intl.DateTimeFormat().resolvedOptions().timeZone` and
17
+ * `navigator.language`). Locale only — no precise location.
18
+ *
19
+ * @returns `{ timezone, language }` — e.g. `{ timezone: "Asia/Kolkata", language: "en-US" }`.
20
+ *
21
+ * @examplePrompt What timezone is the user in?
22
+ * @examplePrompt Get the viewer's language for localized labels
23
+ * @examplePrompt Format the report date in the user's local timezone
24
+ * @examplePrompt Which locale should I use for this plugin's UI?
25
+ *
26
+ * # Example
27
+ * ```ts
28
+ * const { timezone, language } = await snaptrude.core.user.getLocale()
29
+ * ```
30
+ */
31
+ public abstract getLocale(): PluginApiReturn<PluginUserLocale>
32
+ }
33
+
34
+ /**
35
+ * The viewer's locale.
36
+ *
37
+ * | Property | Type | Description |
38
+ * |---|---|---|
39
+ * | `timezone` | `string` | IANA timezone id (e.g. `"Asia/Kolkata"`) |
40
+ * | `language` | `string` | BCP-47 language tag (e.g. `"en-US"`) |
41
+ */
42
+ export const PluginUserLocale = z.object({
43
+ timezone: z.string(),
44
+ language: z.string(),
45
+ })
46
+ export type PluginUserLocale = z.infer<typeof PluginUserLocale>
@@ -1,51 +1,64 @@
1
- import { PluginApiReturn } from "../../../types"
2
-
3
- /**
4
- * Camera zoom controls.
5
- *
6
- * Frame the viewport camera onto scene geometry — mirrors the canvas zoom menu
7
- * ("Zoom extents" / "Zoom to selection"). Accessed via `snaptrude.core.zoom`.
8
- */
9
- export abstract class PluginZoomApi {
10
- constructor() {}
11
-
12
- /**
13
- * Zoom (fit) the camera to all geometry in the scene — the "zoom extents" action.
14
- *
15
- * @returns `true` once the camera has been framed to the scene.
16
- *
17
- * @examplePrompt Zoom out so I can see the whole model
18
- * @examplePrompt Fit everything in the view
19
- * @examplePrompt Frame the entire building in the viewport
20
- * @examplePrompt Do a zoom extents on the canvas
21
- * @examplePrompt Show me the full scene
22
- *
23
- * # Example
24
- * ```ts
25
- * await snaptrude.core.zoom.extents()
26
- * ```
27
- *
28
- * @deprecated Use `core.camera.zoomExtents`
29
- */
30
- public abstract extents(): PluginApiReturn<boolean>
31
-
32
- /**
33
- * Zoom (fit) the camera to the current selection.
34
- *
35
- * @returns `true` if there was a selection to frame; `false` if nothing is
36
- * selected (no-op).
37
- *
38
- * @examplePrompt Zoom in on what I have selected
39
- * @examplePrompt Frame the selected walls in the view
40
- * @examplePrompt Focus the camera on my current selection
41
- * @examplePrompt Fit the view to the selected room
42
- *
43
- * # Example
44
- * ```ts
45
- * await snaptrude.core.zoom.selection()
46
- * ```
47
- *
48
- * @deprecated Use `core.camera.zoomSelection`
49
- */
50
- public abstract selection(): PluginApiReturn<boolean>
51
- }
1
+ import { PluginApiReturn } from "../../../types"
2
+
3
+ /**
4
+ * Camera zoom controls.
5
+ *
6
+ * Frame the viewport camera onto scene geometry — mirrors the canvas zoom menu
7
+ * ("Zoom extents" / "Zoom to selection"). Accessed via `snaptrude.core.zoom`.
8
+ *
9
+ * While Present mode is open these calls set the Design frame a view saved in
10
+ * Present (`presentation.views.create`) is taken from; they never move the
11
+ * Present sheet canvas. To pan, zoom or screenshot the Present canvas, use
12
+ * {@linkcode PluginPresentationCameraApi} (`presentation.camera`).
13
+ */
14
+ export abstract class PluginZoomApi {
15
+ constructor() {}
16
+
17
+ /**
18
+ * Zoom (fit) the camera to all geometry in the scene — the "zoom extents" action.
19
+ *
20
+ * While Present is open this sets the Design frame a view saved in Present
21
+ * is taken from; it never moves the Present sheet canvas; use
22
+ * `presentation.camera` for that.
23
+ *
24
+ * @returns `true` once the camera has been framed to the scene.
25
+ *
26
+ * @examplePrompt Zoom out so I can see the whole model
27
+ * @examplePrompt Fit everything in the view
28
+ * @examplePrompt Frame the entire building in the viewport
29
+ * @examplePrompt Do a zoom extents on the canvas
30
+ * @examplePrompt Show me the full scene
31
+ *
32
+ * # Example
33
+ * ```ts
34
+ * await snaptrude.core.zoom.extents()
35
+ * ```
36
+ *
37
+ * @deprecated Use `core.camera.zoomExtents`
38
+ */
39
+ public abstract extents(): PluginApiReturn<boolean>
40
+
41
+ /**
42
+ * Zoom (fit) the camera to the current selection.
43
+ *
44
+ * While Present is open this sets the Design frame a view saved in Present
45
+ * is taken from; it never moves the Present sheet canvas; use
46
+ * `presentation.camera` for that.
47
+ *
48
+ * @returns `true` if there was a selection to frame; `false` if nothing is
49
+ * selected (no-op).
50
+ *
51
+ * @examplePrompt Zoom in on what I have selected
52
+ * @examplePrompt Frame the selected walls in the view
53
+ * @examplePrompt Focus the camera on my current selection
54
+ * @examplePrompt Fit the view to the selected room
55
+ *
56
+ * # Example
57
+ * ```ts
58
+ * await snaptrude.core.zoom.selection()
59
+ * ```
60
+ *
61
+ * @deprecated Use `core.camera.zoomSelection`
62
+ */
63
+ public abstract selection(): PluginApiReturn<boolean>
64
+ }