@snaptrude/plugin-core 0.3.0 → 0.6.0

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 (302) hide show
  1. package/AGENTS.md +130 -48
  2. package/CHANGELOG.md +163 -0
  3. package/api-manifest.full.json +5600 -0
  4. package/api-manifest.json +5502 -0
  5. package/dist/api/analysis/heatmaps.d.ts +234 -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 +44 -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/sunlightHours.d.ts +208 -0
  14. package/dist/api/analysis/sunlightHours.d.ts.map +1 -0
  15. package/dist/api/analysis/sunpath.d.ts +80 -0
  16. package/dist/api/analysis/sunpath.d.ts.map +1 -0
  17. package/dist/api/core/buildings.d.ts +427 -0
  18. package/dist/api/core/buildings.d.ts.map +1 -0
  19. package/dist/api/core/comment/index.d.ts +230 -0
  20. package/dist/api/core/comment/index.d.ts.map +1 -0
  21. package/dist/api/core/geom/create/index.d.ts +247 -0
  22. package/dist/api/core/geom/create/index.d.ts.map +1 -0
  23. package/dist/api/core/geom/delete/index.d.ts +72 -0
  24. package/dist/api/core/geom/delete/index.d.ts.map +1 -0
  25. package/dist/api/core/geom/index.d.ts +24 -23
  26. package/dist/api/core/geom/index.d.ts.map +1 -1
  27. package/dist/api/core/geom/query/arc.d.ts +169 -0
  28. package/dist/api/core/geom/query/arc.d.ts.map +1 -0
  29. package/dist/api/core/geom/query/brep.d.ts +402 -0
  30. package/dist/api/core/geom/query/brep.d.ts.map +1 -0
  31. package/dist/api/core/geom/query/circle.d.ts +378 -0
  32. package/dist/api/core/geom/query/circle.d.ts.map +1 -0
  33. package/dist/api/core/geom/query/contour.d.ts +450 -0
  34. package/dist/api/core/geom/query/contour.d.ts.map +1 -0
  35. package/dist/api/core/geom/query/curve.d.ts +918 -0
  36. package/dist/api/core/geom/query/curve.d.ts.map +1 -0
  37. package/dist/api/core/geom/query/edge.d.ts +128 -0
  38. package/dist/api/core/geom/query/edge.d.ts.map +1 -0
  39. package/dist/api/core/geom/query/face.d.ts +363 -0
  40. package/dist/api/core/geom/query/face.d.ts.map +1 -0
  41. package/dist/api/core/geom/query/halfedge.d.ts +206 -0
  42. package/dist/api/core/geom/query/halfedge.d.ts.map +1 -0
  43. package/dist/api/core/geom/query/index.d.ts +61 -0
  44. package/dist/api/core/geom/query/index.d.ts.map +1 -0
  45. package/dist/api/core/geom/query/profile.d.ts +410 -0
  46. package/dist/api/core/geom/query/profile.d.ts.map +1 -0
  47. package/dist/api/core/geom/query/vertex.d.ts +187 -0
  48. package/dist/api/core/geom/query/vertex.d.ts.map +1 -0
  49. package/dist/api/core/geom/update/contour.d.ts +272 -0
  50. package/dist/api/core/geom/update/contour.d.ts.map +1 -0
  51. package/dist/api/core/geom/update/curve.d.ts +180 -0
  52. package/dist/api/core/geom/update/curve.d.ts.map +1 -0
  53. package/dist/api/core/geom/update/index.d.ts +27 -0
  54. package/dist/api/core/geom/update/index.d.ts.map +1 -0
  55. package/dist/api/core/geom/update/profile.d.ts +329 -0
  56. package/dist/api/core/geom/update/profile.d.ts.map +1 -0
  57. package/dist/api/core/groups.d.ts +485 -0
  58. package/dist/api/core/groups.d.ts.map +1 -0
  59. package/dist/api/core/history/index.d.ts +78 -0
  60. package/dist/api/core/history/index.d.ts.map +1 -0
  61. package/dist/api/core/index.d.ts +51 -1
  62. package/dist/api/core/index.d.ts.map +1 -1
  63. package/dist/api/core/io/import/index.d.ts +392 -0
  64. package/dist/api/core/io/import/index.d.ts.map +1 -0
  65. package/dist/api/core/io/index.d.ts +35 -0
  66. package/dist/api/core/io/index.d.ts.map +1 -0
  67. package/dist/api/core/io/job/index.d.ts +139 -0
  68. package/dist/api/core/io/job/index.d.ts.map +1 -0
  69. package/dist/api/core/io/query/index.d.ts +74 -0
  70. package/dist/api/core/io/query/index.d.ts.map +1 -0
  71. package/dist/api/core/io/terrain/index.d.ts +206 -0
  72. package/dist/api/core/io/terrain/index.d.ts.map +1 -0
  73. package/dist/api/core/io/underlay/index.d.ts +286 -0
  74. package/dist/api/core/io/underlay/index.d.ts.map +1 -0
  75. package/dist/api/core/layers.d.ts +402 -0
  76. package/dist/api/core/layers.d.ts.map +1 -0
  77. package/dist/api/core/math/quat.d.ts +111 -128
  78. package/dist/api/core/math/quat.d.ts.map +1 -1
  79. package/dist/api/core/math/vec3.d.ts +120 -102
  80. package/dist/api/core/math/vec3.d.ts.map +1 -1
  81. package/dist/api/core/project/index.d.ts +399 -0
  82. package/dist/api/core/project/index.d.ts.map +1 -0
  83. package/dist/api/core/tags.d.ts +755 -0
  84. package/dist/api/core/tags.d.ts.map +1 -0
  85. package/dist/api/core/units/index.d.ts +175 -0
  86. package/dist/api/core/units/index.d.ts.map +1 -0
  87. package/dist/api/core/zoom/index.d.ts +45 -0
  88. package/dist/api/core/zoom/index.d.ts.map +1 -0
  89. package/dist/api/design/boolean/index.d.ts +168 -0
  90. package/dist/api/design/boolean/index.d.ts.map +1 -0
  91. package/dist/api/design/create/index.d.ts +837 -0
  92. package/dist/api/design/create/index.d.ts.map +1 -0
  93. package/dist/api/design/delete/index.d.ts +63 -0
  94. package/dist/api/design/delete/index.d.ts.map +1 -0
  95. package/dist/api/design/doors/index.d.ts +268 -0
  96. package/dist/api/design/doors/index.d.ts.map +1 -0
  97. package/dist/api/design/edit/index.d.ts +49 -0
  98. package/dist/api/design/edit/index.d.ts.map +1 -0
  99. package/dist/api/design/erase/index.d.ts +160 -0
  100. package/dist/api/design/erase/index.d.ts.map +1 -0
  101. package/dist/api/design/furniture/index.d.ts +123 -0
  102. package/dist/api/design/furniture/index.d.ts.map +1 -0
  103. package/dist/api/design/index.d.ts +153 -0
  104. package/dist/api/design/index.d.ts.map +1 -0
  105. package/dist/api/design/lock.d.ts +41 -0
  106. package/dist/api/design/lock.d.ts.map +1 -0
  107. package/dist/api/design/materials/index.d.ts +297 -0
  108. package/dist/api/design/materials/index.d.ts.map +1 -0
  109. package/dist/api/design/query/geometry/index.d.ts +140 -0
  110. package/dist/api/design/query/geometry/index.d.ts.map +1 -0
  111. package/dist/api/design/query/index.d.ts +1011 -0
  112. package/dist/api/design/query/index.d.ts.map +1 -0
  113. package/dist/api/design/query/spaces.d.ts +221 -0
  114. package/dist/api/design/query/spaces.d.ts.map +1 -0
  115. package/dist/api/design/selection/index.d.ts +282 -0
  116. package/dist/api/design/selection/index.d.ts.map +1 -0
  117. package/dist/api/design/shared.d.ts +38 -0
  118. package/dist/api/design/shared.d.ts.map +1 -0
  119. package/dist/api/design/transform/index.d.ts +87 -0
  120. package/dist/api/design/transform/index.d.ts.map +1 -0
  121. package/dist/api/design/update/index.d.ts +178 -0
  122. package/dist/api/design/update/index.d.ts.map +1 -0
  123. package/dist/api/design/windows/index.d.ts +189 -0
  124. package/dist/api/design/windows/index.d.ts.map +1 -0
  125. package/dist/api/entity/buildableEnvelope.d.ts +261 -0
  126. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -0
  127. package/dist/api/entity/department.d.ts +0 -98
  128. package/dist/api/entity/department.d.ts.map +1 -1
  129. package/dist/api/entity/index.d.ts +9 -9
  130. package/dist/api/entity/index.d.ts.map +1 -1
  131. package/dist/api/entity/referenceLine.d.ts +49 -106
  132. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  133. package/dist/api/entity/space.d.ts +484 -251
  134. package/dist/api/entity/space.d.ts.map +1 -1
  135. package/dist/api/entity/story.d.ts +49 -39
  136. package/dist/api/entity/story.d.ts.map +1 -1
  137. package/dist/api/index.d.ts +22 -12
  138. package/dist/api/index.d.ts.map +1 -1
  139. package/dist/api/presentation/aiInspiration.d.ts +440 -0
  140. package/dist/api/presentation/aiInspiration.d.ts.map +1 -0
  141. package/dist/api/presentation/diagrams.d.ts +81 -0
  142. package/dist/api/presentation/diagrams.d.ts.map +1 -0
  143. package/dist/api/presentation/import.d.ts +113 -0
  144. package/dist/api/presentation/import.d.ts.map +1 -0
  145. package/dist/api/presentation/index.d.ts +46 -0
  146. package/dist/api/presentation/index.d.ts.map +1 -0
  147. package/dist/api/presentation/sheets.d.ts +176 -0
  148. package/dist/api/presentation/sheets.d.ts.map +1 -0
  149. package/dist/api/presentation/views.d.ts +296 -0
  150. package/dist/api/presentation/views.d.ts.map +1 -0
  151. package/dist/api/program/adjacency.d.ts +155 -0
  152. package/dist/api/program/adjacency.d.ts.map +1 -0
  153. package/dist/api/program/areas.d.ts +360 -0
  154. package/dist/api/program/areas.d.ts.map +1 -0
  155. package/dist/api/program/classification.d.ts +135 -0
  156. package/dist/api/program/classification.d.ts.map +1 -0
  157. package/dist/api/program/cores.d.ts +174 -0
  158. package/dist/api/program/cores.d.ts.map +1 -0
  159. package/dist/api/program/departments.d.ts +431 -0
  160. package/dist/api/program/departments.d.ts.map +1 -0
  161. package/dist/api/program/index.d.ts +69 -0
  162. package/dist/api/program/index.d.ts.map +1 -0
  163. package/dist/api/program/layout.d.ts +63 -0
  164. package/dist/api/program/layout.d.ts.map +1 -0
  165. package/dist/api/program/metrics.d.ts +108 -0
  166. package/dist/api/program/metrics.d.ts.map +1 -0
  167. package/dist/api/program/site.d.ts +451 -0
  168. package/dist/api/program/site.d.ts.map +1 -0
  169. package/dist/api/program/spreadsheet.d.ts +2041 -0
  170. package/dist/api/program/spreadsheet.d.ts.map +1 -0
  171. package/dist/handles.d.ts +171 -0
  172. package/dist/handles.d.ts.map +1 -0
  173. package/dist/host-utils.d.ts +7 -5
  174. package/dist/host-utils.d.ts.map +1 -1
  175. package/dist/index.cjs +4344 -899
  176. package/dist/index.cjs.map +1 -1
  177. package/dist/index.d.ts +1 -0
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +3682 -865
  180. package/dist/index.js.map +1 -1
  181. package/package.json +6 -2
  182. package/scripts/generate-manifest.mjs +193 -0
  183. package/scripts/generate-manifest.test.mjs +215 -0
  184. package/src/api/analysis/heatmaps.ts +256 -0
  185. package/src/api/analysis/illuminance.ts +155 -0
  186. package/src/api/analysis/index.ts +46 -0
  187. package/src/api/analysis/shadows.ts +183 -0
  188. package/src/api/analysis/sunlightHours.ts +211 -0
  189. package/src/api/analysis/sunpath.ts +83 -0
  190. package/src/api/core/buildings.ts +485 -0
  191. package/src/api/core/comment/index.ts +258 -0
  192. package/src/api/core/geom/create/index.ts +293 -0
  193. package/src/api/core/geom/delete/index.ts +78 -0
  194. package/src/api/core/geom/index.ts +24 -23
  195. package/src/api/core/geom/query/arc.ts +169 -0
  196. package/src/api/core/geom/query/brep.ts +444 -0
  197. package/src/api/core/geom/query/circle.ts +404 -0
  198. package/src/api/core/geom/query/contour.ts +540 -0
  199. package/src/api/core/geom/query/curve.ts +1078 -0
  200. package/src/api/core/geom/query/edge.ts +130 -0
  201. package/src/api/core/geom/query/face.ts +403 -0
  202. package/src/api/core/geom/query/halfedge.ts +210 -0
  203. package/src/api/core/geom/query/index.ts +63 -0
  204. package/src/api/core/geom/query/profile.ts +473 -0
  205. package/src/api/core/geom/query/vertex.ts +205 -0
  206. package/src/api/core/geom/update/contour.ts +315 -0
  207. package/src/api/core/geom/update/curve.ts +209 -0
  208. package/src/api/core/geom/update/index.ts +29 -0
  209. package/src/api/core/geom/update/profile.ts +377 -0
  210. package/src/api/core/groups.ts +521 -0
  211. package/src/api/core/history/index.ts +84 -0
  212. package/src/api/core/index.ts +51 -1
  213. package/src/api/core/io/import/index.ts +432 -0
  214. package/src/api/core/io/index.ts +37 -0
  215. package/src/api/core/io/job/index.ts +140 -0
  216. package/src/api/core/io/query/index.ts +71 -0
  217. package/src/api/core/io/terrain/index.ts +214 -0
  218. package/src/api/core/io/underlay/index.ts +295 -0
  219. package/src/api/core/layers.ts +333 -0
  220. package/src/api/core/math/quat.ts +112 -235
  221. package/src/api/core/math/vec3.ts +124 -159
  222. package/src/api/core/project/index.ts +418 -0
  223. package/src/api/core/tags.ts +808 -0
  224. package/src/api/core/units/index.ts +164 -0
  225. package/src/api/core/zoom/index.ts +47 -0
  226. package/src/api/design/boolean/index.ts +179 -0
  227. package/src/api/design/create/index.ts +895 -0
  228. package/src/api/design/delete/index.ts +67 -0
  229. package/src/api/design/doors/index.ts +285 -0
  230. package/src/api/design/edit/index.ts +54 -0
  231. package/src/api/design/erase/index.ts +151 -0
  232. package/src/api/design/furniture/index.ts +130 -0
  233. package/src/api/design/index.ts +162 -0
  234. package/src/api/design/lock.ts +42 -0
  235. package/src/api/design/materials/index.ts +301 -0
  236. package/src/api/design/query/geometry/index.ts +166 -0
  237. package/src/api/design/query/index.ts +937 -0
  238. package/src/api/design/query/spaces.ts +132 -0
  239. package/src/api/design/selection/index.ts +273 -0
  240. package/src/api/design/shared.ts +40 -0
  241. package/src/api/design/transform/index.ts +93 -0
  242. package/src/api/design/update/index.ts +117 -0
  243. package/src/api/design/windows/index.ts +207 -0
  244. package/src/api/entity/buildableEnvelope.ts +318 -0
  245. package/src/api/entity/department.ts +0 -113
  246. package/src/api/entity/index.ts +9 -9
  247. package/src/api/entity/referenceLine.ts +50 -38
  248. package/src/api/entity/space.ts +285 -226
  249. package/src/api/entity/story.ts +53 -42
  250. package/src/api/index.ts +22 -12
  251. package/src/api/presentation/aiInspiration.ts +362 -0
  252. package/src/api/presentation/diagrams.ts +84 -0
  253. package/src/api/presentation/import.ts +112 -0
  254. package/src/api/presentation/index.ts +48 -0
  255. package/src/api/presentation/sheets.ts +198 -0
  256. package/src/api/presentation/views.ts +303 -0
  257. package/src/api/program/adjacency.ts +164 -0
  258. package/src/api/program/areas.ts +335 -0
  259. package/src/api/program/classification.ts +138 -0
  260. package/src/api/program/cores.ts +171 -0
  261. package/src/api/program/departments.ts +465 -0
  262. package/src/api/program/index.ts +71 -0
  263. package/src/api/program/layout.ts +68 -0
  264. package/src/api/program/metrics.ts +120 -0
  265. package/src/api/program/site.ts +419 -0
  266. package/src/api/program/spreadsheet.ts +2075 -0
  267. package/src/handles.ts +194 -0
  268. package/src/host-utils.ts +10 -6
  269. package/src/index.ts +1 -0
  270. package/dist/api/core/geom/arc.d.ts +0 -81
  271. package/dist/api/core/geom/arc.d.ts.map +0 -1
  272. package/dist/api/core/geom/curve.d.ts +0 -70
  273. package/dist/api/core/geom/curve.d.ts.map +0 -1
  274. package/dist/api/core/geom/line.d.ts +0 -56
  275. package/dist/api/core/geom/line.d.ts.map +0 -1
  276. package/dist/api/core/geom/profile.d.ts +0 -121
  277. package/dist/api/core/geom/profile.d.ts.map +0 -1
  278. package/dist/api/tools/copy.d.ts +0 -59
  279. package/dist/api/tools/copy.d.ts.map +0 -1
  280. package/dist/api/tools/index.d.ts +0 -33
  281. package/dist/api/tools/index.d.ts.map +0 -1
  282. package/dist/api/tools/material.d.ts +0 -51
  283. package/dist/api/tools/material.d.ts.map +0 -1
  284. package/dist/api/tools/offset.d.ts +0 -43
  285. package/dist/api/tools/offset.d.ts.map +0 -1
  286. package/dist/api/tools/selection.d.ts +0 -48
  287. package/dist/api/tools/selection.d.ts.map +0 -1
  288. package/dist/api/tools/transform.d.ts +0 -114
  289. package/dist/api/tools/transform.d.ts.map +0 -1
  290. package/dist/api/units/index.d.ts +0 -163
  291. package/dist/api/units/index.d.ts.map +0 -1
  292. package/src/api/core/geom/arc.ts +0 -70
  293. package/src/api/core/geom/curve.ts +0 -41
  294. package/src/api/core/geom/line.ts +0 -53
  295. package/src/api/core/geom/profile.ts +0 -94
  296. package/src/api/tools/copy.ts +0 -55
  297. package/src/api/tools/index.ts +0 -39
  298. package/src/api/tools/material.ts +0 -49
  299. package/src/api/tools/offset.ts +0 -43
  300. package/src/api/tools/selection.ts +0 -51
  301. package/src/api/tools/transform.ts +0 -117
  302. package/src/api/units/index.ts +0 -163
@@ -0,0 +1,333 @@
1
+ import * as z from "zod"
2
+ import { PluginApiReturn } from "../../types"
3
+
4
+ /**
5
+ * Layers — read and toggle the drawing/reference layers of a storey.
6
+ *
7
+ * These are the **drawing/reference** layers shown in the storey's Layers panel —
8
+ * the surfaces you sketch on and the imported underlays (CAD, PDF, images,
9
+ * terrain). They are **not** wall/floor construction-assembly material layers,
10
+ * which are a property of the built element, not this namespace.
11
+ *
12
+ * Reads return plain records and never throw for a missing layer (`get` and
13
+ * `getActive` return `null`, `list` returns `[]`).
14
+ *
15
+ * v1 exposes reads plus visibility edits and the active-layer switch.
16
+ * Creating and deleting layers are intentionally not part of this contract yet.
17
+ *
18
+ * Sub-namespace members typed as optional (`?`) are **authored ahead of the
19
+ * host** — declared so plugins and codegen can see the shape, but kept out of the
20
+ * discovery manifest until the host lands them (at which point they are promoted
21
+ * to required `abstract` members).
22
+ *
23
+ * Accessed via `snaptrude.core.layers`.
24
+ */
25
+ export abstract class PluginCoreLayersApi {
26
+ constructor() {}
27
+
28
+ /**
29
+ * List the drawing layers of a storey.
30
+ *
31
+ * Optionally filter to a single {@linkcode PluginCoreLayerType}.
32
+ *
33
+ * @param storeyId - The storey whose layers to read.
34
+ * @param layerType - Optional {@linkcode PluginCoreLayerType} filter.
35
+ * @returns A {@linkcode PluginCoreLayersListResult} with a `layers` array
36
+ * (empty when the storey is missing or has no matching layers).
37
+ *
38
+ * @examplePrompt List the drawing layers on this storey
39
+ * @examplePrompt Show all the PDF underlays on storey st_2
40
+ * @examplePrompt What CAD layers are on the ground floor?
41
+ *
42
+ * # Example
43
+ * ```ts
44
+ * const { layers } = await snaptrude.core.layers.list("st_2")
45
+ * for (const l of layers) console.log(l.name, l.layerType, l.hidden)
46
+ * ```
47
+ */
48
+ public abstract list(
49
+ storeyId: string,
50
+ layerType?: PluginCoreLayerType,
51
+ ): PluginApiReturn<PluginCoreLayersListResult>
52
+
53
+ /**
54
+ * Get a single drawing layer by id.
55
+ *
56
+ * @param layerId - The id of the layer to read.
57
+ * @returns The matching {@linkcode PluginCoreLayer}, or `null` if no layer has
58
+ * that id.
59
+ *
60
+ * @examplePrompt Get the drawing layer with id ly_5
61
+ * @examplePrompt Is layer ly_5 hidden or locked?
62
+ * @examplePrompt Look up a single drawing layer by its id
63
+ *
64
+ * # Example
65
+ * ```ts
66
+ * const layer = await snaptrude.core.layers.get("ly_5")
67
+ * if (layer) console.log(layer.name, layer.hidden, layer.locked)
68
+ * ```
69
+ */
70
+ public abstract get(
71
+ layerId: string,
72
+ ): PluginApiReturn<PluginCoreLayersGetResult>
73
+
74
+ /**
75
+ * Get the active drawing layer of a storey.
76
+ *
77
+ * The active layer is the one new sketch geometry is drawn onto. Paired with
78
+ * {@linkcode PluginCoreLayersApi.setActive}.
79
+ *
80
+ * @param storeyId - The storey whose active layer to read.
81
+ * @returns The active {@linkcode PluginCoreLayer}, or `null` if the storey is
82
+ * missing or has no active layer.
83
+ *
84
+ * @examplePrompt Which drawing layer is active on this storey?
85
+ * @examplePrompt Get the current layer on storey st_2
86
+ * @examplePrompt What layer am I drawing on?
87
+ *
88
+ * # Example
89
+ * ```ts
90
+ * const active = await snaptrude.core.layers.getActive("st_2")
91
+ * if (active) console.log(active.name)
92
+ * ```
93
+ */
94
+ public abstract getActive(
95
+ storeyId: string,
96
+ ): PluginApiReturn<PluginCoreLayersGetActiveResult>
97
+
98
+ /**
99
+ * Make a drawing layer the active layer of its storey.
100
+ *
101
+ * Paired with {@linkcode PluginCoreLayersApi.getActive}.
102
+ *
103
+ * @param layerId - The id of the layer to activate.
104
+ * @returns The id of the now-active layer.
105
+ * @throws If no layer has the given id.
106
+ *
107
+ * @examplePrompt Draw on layer ly_5
108
+ * @examplePrompt Make this the active layer
109
+ * @examplePrompt Switch the active layer to the CAD underlay
110
+ *
111
+ * # Example
112
+ * ```ts
113
+ * await snaptrude.core.layers.setActive("ly_5")
114
+ * ```
115
+ */
116
+ public abstract setActive(
117
+ layerId: string,
118
+ ): PluginApiReturn<PluginCoreLayersSetActiveResult>
119
+
120
+ /**
121
+ * Update a drawing layer's visibility.
122
+ *
123
+ * A **sparse** update: omit `hidden` to leave it unchanged. This edit is **not
124
+ * undoable**. Locking and renaming are not exposed — layer `locked` is a
125
+ * read-only status here (setting it at runtime does not lock the live meshes or
126
+ * flip the panel padlock until a reload), and a rename cascades to every member
127
+ * mesh's `layerName`, a corruption hazard.
128
+ *
129
+ * @param layerId - The id of the layer to update.
130
+ * @param hidden - New hidden state (unchanged if omitted).
131
+ * @returns The updated {@linkcode PluginCoreLayer}.
132
+ * @throws If no layer has the given id.
133
+ *
134
+ * @examplePrompt Hide the PDF underlay layer
135
+ * @examplePrompt Show the CAD layer again
136
+ * @examplePrompt Hide layer ly_5
137
+ *
138
+ * # Example
139
+ * ```ts
140
+ * const layer = await snaptrude.core.layers.update("ly_5", true)
141
+ * ```
142
+ */
143
+ public abstract update(
144
+ layerId: string,
145
+ hidden?: boolean,
146
+ ): PluginApiReturn<PluginCoreLayersUpdateResult>
147
+ }
148
+
149
+ /**
150
+ * The kind of a drawing layer.
151
+ *
152
+ * Author-drawable kinds (`floor`, `wall`, `ceiling`, `rough`, `default`) plus
153
+ * read-only imported underlays (`image`, `cad`, `pdf`, `terrain`, `buildings`).
154
+ */
155
+ export const PluginCoreLayerType = z.enum([
156
+ "floor",
157
+ "wall",
158
+ "ceiling",
159
+ "rough",
160
+ "default",
161
+ "image",
162
+ "cad",
163
+ "pdf",
164
+ "terrain",
165
+ "buildings",
166
+ ])
167
+ export type PluginCoreLayerType = z.infer<typeof PluginCoreLayerType>
168
+
169
+ /**
170
+ * A drawing/reference layer on a storey.
171
+ *
172
+ * | Property | Type | Description |
173
+ * |---|---|---|
174
+ * | `id` | `string` | Stable public layer id (e.g. `"ly_5"`) |
175
+ * | `name` | `string` | Display name |
176
+ * | `layerType` | {@linkcode PluginCoreLayerType} | The layer's kind |
177
+ * | `storeyId` | `string` | The stable id of the storey this layer belongs to |
178
+ * | `buildingId` | `string` | The stable id of the building this layer belongs to |
179
+ * | `hidden` | `boolean` | Whether the layer is hidden |
180
+ * | `locked` | `boolean` | Whether the layer is locked against edits |
181
+ * | `contentSummary` | `object` | A summary of what the layer holds (see below) |
182
+ *
183
+ * `contentSummary`:
184
+ *
185
+ * | Property | Type | Description |
186
+ * |---|---|---|
187
+ * | `hasFloorplan` | `boolean` | Whether the layer holds drawn floorplan geometry |
188
+ * | `pdfCount` | `number` | Number of PDF underlays on the layer |
189
+ * | `hasTerrain` | `boolean` | Whether the layer holds terrain |
190
+ */
191
+ export const PluginCoreLayer = z.object({
192
+ id: z.string(),
193
+ name: z.string(),
194
+ layerType: PluginCoreLayerType,
195
+ storeyId: z.string(),
196
+ buildingId: z.string(),
197
+ hidden: z.boolean(),
198
+ locked: z.boolean(),
199
+ contentSummary: z.object({
200
+ hasFloorplan: z.boolean(),
201
+ pdfCount: z.number().int(),
202
+ hasTerrain: z.boolean(),
203
+ }),
204
+ })
205
+ export type PluginCoreLayer = z.infer<typeof PluginCoreLayer>
206
+
207
+ /**
208
+ * Arguments for {@linkcode PluginCoreLayersApi.list}.
209
+ *
210
+ * | Property | Type | Description |
211
+ * |---|---|---|
212
+ * | `storeyId` | `string` | The storey whose layers to read |
213
+ * | `layerType` | {@linkcode PluginCoreLayerType}` \| undefined` | Optional layer-type filter |
214
+ */
215
+ export const PluginCoreLayersListArgs = z.object({
216
+ storeyId: z.string(),
217
+ layerType: PluginCoreLayerType.optional(),
218
+ })
219
+ export type PluginCoreLayersListArgs = z.infer<
220
+ typeof PluginCoreLayersListArgs
221
+ >
222
+
223
+ /**
224
+ * Result of {@linkcode PluginCoreLayersApi.list}.
225
+ *
226
+ * | Property | Type | Description |
227
+ * |---|---|---|
228
+ * | `layers` | {@linkcode PluginCoreLayer}`[]` | The storey's drawing layers (empty when missing or none match) |
229
+ */
230
+ export const PluginCoreLayersListResult = z.object({
231
+ layers: z.array(PluginCoreLayer),
232
+ })
233
+ export type PluginCoreLayersListResult = z.infer<
234
+ typeof PluginCoreLayersListResult
235
+ >
236
+
237
+ /**
238
+ * Arguments for {@linkcode PluginCoreLayersApi.get}.
239
+ *
240
+ * | Property | Type | Description |
241
+ * |---|---|---|
242
+ * | `layerId` | `string` | The id of the layer to read |
243
+ */
244
+ export const PluginCoreLayersGetArgs = z.object({
245
+ layerId: z.string(),
246
+ })
247
+ export type PluginCoreLayersGetArgs = z.infer<
248
+ typeof PluginCoreLayersGetArgs
249
+ >
250
+
251
+ /**
252
+ * Result of {@linkcode PluginCoreLayersApi.get} — the layer, or `null`
253
+ * when no layer has the given id.
254
+ */
255
+ export const PluginCoreLayersGetResult = PluginCoreLayer.nullable()
256
+ export type PluginCoreLayersGetResult = z.infer<
257
+ typeof PluginCoreLayersGetResult
258
+ >
259
+
260
+ /**
261
+ * Arguments for {@linkcode PluginCoreLayersApi.getActive}.
262
+ *
263
+ * | Property | Type | Description |
264
+ * |---|---|---|
265
+ * | `storeyId` | `string` | The storey whose active layer to read |
266
+ */
267
+ export const PluginCoreLayersGetActiveArgs = z.object({
268
+ storeyId: z.string(),
269
+ })
270
+ export type PluginCoreLayersGetActiveArgs = z.infer<
271
+ typeof PluginCoreLayersGetActiveArgs
272
+ >
273
+
274
+ /**
275
+ * Result of {@linkcode PluginCoreLayersApi.getActive} — the active layer,
276
+ * or `null` when the storey is missing or has no active layer.
277
+ */
278
+ export const PluginCoreLayersGetActiveResult = PluginCoreLayer.nullable()
279
+ export type PluginCoreLayersGetActiveResult = z.infer<
280
+ typeof PluginCoreLayersGetActiveResult
281
+ >
282
+
283
+ /**
284
+ * Arguments for {@linkcode PluginCoreLayersApi.setActive}.
285
+ *
286
+ * | Property | Type | Description |
287
+ * |---|---|---|
288
+ * | `layerId` | `string` | The id of the layer to activate |
289
+ */
290
+ export const PluginCoreLayersSetActiveArgs = z.object({
291
+ layerId: z.string(),
292
+ })
293
+ export type PluginCoreLayersSetActiveArgs = z.infer<
294
+ typeof PluginCoreLayersSetActiveArgs
295
+ >
296
+
297
+ /**
298
+ * Result of {@linkcode PluginCoreLayersApi.setActive} — the now-active
299
+ * layer's id.
300
+ *
301
+ * | Property | Type | Description |
302
+ * |---|---|---|
303
+ * | `layerId` | `string` | The id of the now-active layer |
304
+ */
305
+ export const PluginCoreLayersSetActiveResult = z.object({
306
+ layerId: z.string(),
307
+ })
308
+ export type PluginCoreLayersSetActiveResult = z.infer<
309
+ typeof PluginCoreLayersSetActiveResult
310
+ >
311
+
312
+ /**
313
+ * Arguments for {@linkcode PluginCoreLayersApi.update}. Sparse — only the
314
+ * provided fields are changed.
315
+ *
316
+ * | Property | Type | Description |
317
+ * |---|---|---|
318
+ * | `layerId` | `string` | The id of the layer to update |
319
+ * | `hidden` | `boolean \| undefined` | New hidden state (unchanged if omitted) |
320
+ */
321
+ export const PluginCoreLayersUpdateArgs = z.object({
322
+ layerId: z.string(),
323
+ hidden: z.boolean().optional(),
324
+ })
325
+ export type PluginCoreLayersUpdateArgs = z.infer<
326
+ typeof PluginCoreLayersUpdateArgs
327
+ >
328
+
329
+ /** Result of {@linkcode PluginCoreLayersApi.update} — the updated layer. */
330
+ export const PluginCoreLayersUpdateResult = PluginCoreLayer
331
+ export type PluginCoreLayersUpdateResult = z.infer<
332
+ typeof PluginCoreLayersUpdateResult
333
+ >