@snaptrude/plugin-core 0.9.16 → 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 (221) hide show
  1. package/AGENTS.md +231 -231
  2. package/CHANGELOG.md +408 -402
  3. package/CLAUDE.md +11 -11
  4. package/api-manifest.json +1510 -701
  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 +41 -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/sections.d.ts +461 -0
  65. package/dist/api/presentation/sections.d.ts.map +1 -0
  66. package/dist/api/presentation/shapes.d.ts +2 -2
  67. package/dist/api/presentation/sheets.d.ts +175 -19
  68. package/dist/api/presentation/sheets.d.ts.map +1 -1
  69. package/dist/api/presentation/viewPresets.d.ts +222 -0
  70. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  71. package/dist/api/presentation/views.d.ts +141 -8
  72. package/dist/api/presentation/views.d.ts.map +1 -1
  73. package/dist/api/presentation/walkthroughs.d.ts +6 -6
  74. package/dist/errors/codes.d.ts +3 -1
  75. package/dist/errors/codes.d.ts.map +1 -1
  76. package/dist/index.cjs +3883 -2385
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.js +3744 -2385
  79. package/dist/index.js.map +1 -1
  80. package/package.json +1 -1
  81. package/scripts/check-dist-fresh.mjs +22 -22
  82. package/scripts/generate-manifest.mjs +243 -238
  83. package/scripts/generate-manifest.test.mjs +303 -303
  84. package/src/api/analysis/daylight.ts +470 -470
  85. package/src/api/analysis/heatmaps.ts +683 -683
  86. package/src/api/analysis/illuminance.ts +155 -155
  87. package/src/api/analysis/index.ts +61 -61
  88. package/src/api/analysis/shadows.ts +183 -183
  89. package/src/api/analysis/solar.ts +237 -237
  90. package/src/api/analysis/sunlightHours.ts +211 -211
  91. package/src/api/analysis/sunpath.ts +83 -83
  92. package/src/api/analysis/weather.ts +179 -179
  93. package/src/api/core/buildings.ts +485 -485
  94. package/src/api/core/camera/index.ts +696 -667
  95. package/src/api/core/comment/index.ts +376 -376
  96. package/src/api/core/geom/create/index.ts +2139 -2133
  97. package/src/api/core/geom/delete/index.ts +84 -84
  98. package/src/api/core/geom/index.ts +35 -35
  99. package/src/api/core/geom/query/arc.ts +169 -169
  100. package/src/api/core/geom/query/brep.ts +621 -621
  101. package/src/api/core/geom/query/circle.ts +404 -404
  102. package/src/api/core/geom/query/contour.ts +540 -540
  103. package/src/api/core/geom/query/curve.ts +1102 -1102
  104. package/src/api/core/geom/query/edge.ts +130 -130
  105. package/src/api/core/geom/query/face.ts +508 -508
  106. package/src/api/core/geom/query/halfedge.ts +210 -210
  107. package/src/api/core/geom/query/index.ts +63 -63
  108. package/src/api/core/geom/query/profile.ts +473 -473
  109. package/src/api/core/geom/query/vertex.ts +205 -205
  110. package/src/api/core/geom/update/contour.ts +323 -317
  111. package/src/api/core/geom/update/curve.ts +209 -209
  112. package/src/api/core/geom/update/index.ts +29 -29
  113. package/src/api/core/geom/update/profile.ts +379 -379
  114. package/src/api/core/groups.ts +521 -521
  115. package/src/api/core/handles/index.ts +234 -234
  116. package/src/api/core/history/index.ts +84 -84
  117. package/src/api/core/index.ts +99 -99
  118. package/src/api/core/io/export/index.ts +126 -126
  119. package/src/api/core/io/import/index.ts +504 -504
  120. package/src/api/core/io/index.ts +42 -42
  121. package/src/api/core/io/job/index.ts +140 -140
  122. package/src/api/core/io/query/index.ts +71 -71
  123. package/src/api/core/io/terrain/index.ts +360 -360
  124. package/src/api/core/io/underlay/index.ts +705 -705
  125. package/src/api/core/layers.ts +540 -540
  126. package/src/api/core/math/index.ts +20 -20
  127. package/src/api/core/math/quat.ts +172 -172
  128. package/src/api/core/math/vec3.ts +179 -179
  129. package/src/api/core/mode/index.ts +108 -108
  130. package/src/api/core/project/index.ts +479 -479
  131. package/src/api/core/proposals/index.ts +570 -570
  132. package/src/api/core/storeys/index.ts +311 -308
  133. package/src/api/core/storeys/layers.ts +339 -339
  134. package/src/api/core/tags.ts +911 -911
  135. package/src/api/core/units/index.ts +164 -164
  136. package/src/api/core/user.ts +46 -46
  137. package/src/api/core/zoom/index.ts +64 -51
  138. package/src/api/design/bim.ts +210 -0
  139. package/src/api/design/boolean/index.ts +181 -179
  140. package/src/api/design/catalog.ts +203 -0
  141. package/src/api/design/create/bulk-items.ts +294 -254
  142. package/src/api/design/create/grids.ts +137 -137
  143. package/src/api/design/create/index.ts +2178 -1980
  144. package/src/api/design/create/opening-fields.ts +40 -37
  145. package/src/api/design/delete/index.ts +75 -74
  146. package/src/api/design/dimensions.ts +453 -453
  147. package/src/api/design/doors/index.ts +516 -500
  148. package/src/api/design/edit/index.ts +54 -54
  149. package/src/api/design/erase/index.ts +151 -151
  150. package/src/api/design/family.ts +1342 -704
  151. package/src/api/design/furniture/index.ts +319 -319
  152. package/src/api/design/grids.ts +237 -237
  153. package/src/api/design/index.ts +304 -274
  154. package/src/api/design/lock.ts +69 -69
  155. package/src/api/design/materials/index.ts +608 -608
  156. package/src/api/design/networks.ts +607 -0
  157. package/src/api/design/query/geometry/index.ts +319 -319
  158. package/src/api/design/query/grids.ts +197 -197
  159. package/src/api/design/query/index.ts +1236 -1226
  160. package/src/api/design/query/referenceLines.ts +52 -52
  161. package/src/api/design/query/spaces.ts +275 -275
  162. package/src/api/design/selection/index.ts +273 -273
  163. package/src/api/design/shared.ts +40 -40
  164. package/src/api/design/transform/index.ts +254 -254
  165. package/src/api/design/types/index.ts +163 -156
  166. package/src/api/design/update/index.ts +1096 -983
  167. package/src/api/design/visibility.ts +143 -143
  168. package/src/api/design/windows/index.ts +351 -333
  169. package/src/api/entity/buildableEnvelope.ts +397 -322
  170. package/src/api/entity/index.ts +30 -30
  171. package/src/api/entity/referenceLine.ts +235 -235
  172. package/src/api/entity/space.ts +612 -612
  173. package/src/api/entity/story.ts +517 -517
  174. package/src/api/index.ts +47 -47
  175. package/src/api/presentation/aiInspiration.ts +1116 -1116
  176. package/src/api/presentation/annotate.ts +417 -385
  177. package/src/api/presentation/camera.ts +289 -289
  178. package/src/api/presentation/diagrams.ts +194 -194
  179. package/src/api/presentation/drawingContract.ts +70 -0
  180. package/src/api/presentation/drawings.ts +1179 -0
  181. package/src/api/presentation/export.ts +134 -108
  182. package/src/api/presentation/import.ts +159 -159
  183. package/src/api/presentation/index.ts +160 -126
  184. package/src/api/presentation/placedViews.ts +1211 -1120
  185. package/src/api/presentation/sections.ts +420 -0
  186. package/src/api/presentation/shapes.ts +274 -274
  187. package/src/api/presentation/sheets.ts +746 -585
  188. package/src/api/presentation/slideshow.ts +134 -134
  189. package/src/api/presentation/tables.ts +84 -84
  190. package/src/api/presentation/viewPresets.ts +241 -0
  191. package/src/api/presentation/views.ts +742 -673
  192. package/src/api/presentation/walkthroughs.ts +1201 -1201
  193. package/src/api/program/adjacency.ts +164 -164
  194. package/src/api/program/areas.ts +408 -408
  195. package/src/api/program/classification.ts +138 -138
  196. package/src/api/program/cores.ts +83 -83
  197. package/src/api/program/departments.ts +517 -517
  198. package/src/api/program/index.ts +73 -73
  199. package/src/api/program/labels.ts +332 -332
  200. package/src/api/program/layout.ts +422 -422
  201. package/src/api/program/metadata.ts +364 -364
  202. package/src/api/program/metrics.ts +120 -120
  203. package/src/api/program/site.ts +748 -748
  204. package/src/api/program/spreadsheet.ts +2698 -2698
  205. package/src/api/workspace/index.ts +612 -612
  206. package/src/errors/codes.ts +143 -136
  207. package/src/errors/envelope.ts +75 -75
  208. package/src/errors/index.ts +21 -21
  209. package/src/errors/plugin-error.ts +134 -134
  210. package/src/handles.ts +297 -297
  211. package/src/host-utils.ts +67 -67
  212. package/src/index.ts +7 -7
  213. package/src/massParameters.ops.ts +246 -246
  214. package/src/massParameters.ts +427 -427
  215. package/src/types.ts +16 -16
  216. package/test/drawingContract.test.mjs +288 -0
  217. package/test/errors.test.mjs +185 -184
  218. package/test/massParameters.test.mjs +952 -952
  219. package/test/presentationViewSettings.test.mjs +85 -0
  220. package/tsconfig.json +22 -22
  221. 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
+ }