@snaptrude/plugin-core 0.7.1 → 0.9.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 (193) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/api-manifest.full.json +7703 -0
  3. package/api-manifest.json +2946 -259
  4. package/dist/api/analysis/daylight.d.ts +603 -0
  5. package/dist/api/analysis/daylight.d.ts.map +1 -0
  6. package/dist/api/analysis/heatmaps.d.ts +438 -14
  7. package/dist/api/analysis/heatmaps.d.ts.map +1 -1
  8. package/dist/api/analysis/index.d.ts +15 -0
  9. package/dist/api/analysis/index.d.ts.map +1 -1
  10. package/dist/api/analysis/solar.d.ts +249 -0
  11. package/dist/api/analysis/solar.d.ts.map +1 -0
  12. package/dist/api/analysis/weather.d.ts +193 -0
  13. package/dist/api/analysis/weather.d.ts.map +1 -0
  14. package/dist/api/core/camera/index.d.ts +245 -0
  15. package/dist/api/core/camera/index.d.ts.map +1 -0
  16. package/dist/api/core/comment/index.d.ts +105 -2
  17. package/dist/api/core/comment/index.d.ts.map +1 -1
  18. package/dist/api/core/geom/create/index.d.ts +331 -14
  19. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  20. package/dist/api/core/geom/delete/index.d.ts +8 -2
  21. package/dist/api/core/geom/delete/index.d.ts.map +1 -1
  22. package/dist/api/core/geom/query/arc.d.ts +5 -5
  23. package/dist/api/core/geom/query/brep.d.ts +18 -18
  24. package/dist/api/core/geom/query/circle.d.ts +18 -18
  25. package/dist/api/core/geom/query/contour.d.ts +20 -20
  26. package/dist/api/core/geom/query/curve.d.ts +49 -49
  27. package/dist/api/core/geom/query/edge.d.ts +5 -5
  28. package/dist/api/core/geom/query/face.d.ts +16 -16
  29. package/dist/api/core/geom/query/halfedge.d.ts +8 -8
  30. package/dist/api/core/geom/query/profile.d.ts +19 -19
  31. package/dist/api/core/geom/query/vertex.d.ts +8 -8
  32. package/dist/api/core/geom/update/contour.d.ts +14 -14
  33. package/dist/api/core/geom/update/curve.d.ts +7 -7
  34. package/dist/api/core/geom/update/profile.d.ts +16 -16
  35. package/dist/api/core/handles/index.d.ts +210 -0
  36. package/dist/api/core/handles/index.d.ts.map +1 -0
  37. package/dist/api/core/index.d.ts +24 -0
  38. package/dist/api/core/index.d.ts.map +1 -1
  39. package/dist/api/core/io/export/index.d.ts +134 -0
  40. package/dist/api/core/io/export/index.d.ts.map +1 -0
  41. package/dist/api/core/io/import/index.d.ts +62 -1
  42. package/dist/api/core/io/import/index.d.ts.map +1 -1
  43. package/dist/api/core/io/index.d.ts +5 -0
  44. package/dist/api/core/io/index.d.ts.map +1 -1
  45. package/dist/api/core/layers.d.ts +7 -7
  46. package/dist/api/core/mode/index.d.ts +99 -0
  47. package/dist/api/core/mode/index.d.ts.map +1 -0
  48. package/dist/api/core/proposals/index.d.ts +65 -9
  49. package/dist/api/core/proposals/index.d.ts.map +1 -1
  50. package/dist/api/core/storeys/index.d.ts +251 -0
  51. package/dist/api/core/storeys/index.d.ts.map +1 -0
  52. package/dist/api/core/tags.d.ts +24 -0
  53. package/dist/api/core/tags.d.ts.map +1 -1
  54. package/dist/api/core/user.d.ts +44 -0
  55. package/dist/api/core/user.d.ts.map +1 -0
  56. package/dist/api/core/zoom/index.d.ts +4 -0
  57. package/dist/api/core/zoom/index.d.ts.map +1 -1
  58. package/dist/api/design/boolean/index.d.ts +4 -4
  59. package/dist/api/design/create/index.d.ts +253 -47
  60. package/dist/api/design/create/index.d.ts.map +1 -1
  61. package/dist/api/design/delete/index.d.ts +3 -0
  62. package/dist/api/design/delete/index.d.ts.map +1 -1
  63. package/dist/api/design/doors/index.d.ts +36 -0
  64. package/dist/api/design/doors/index.d.ts.map +1 -1
  65. package/dist/api/design/edit/index.d.ts +1 -1
  66. package/dist/api/design/erase/index.d.ts +2 -2
  67. package/dist/api/design/furniture/index.d.ts +114 -3
  68. package/dist/api/design/furniture/index.d.ts.map +1 -1
  69. package/dist/api/design/index.d.ts +10 -0
  70. package/dist/api/design/index.d.ts.map +1 -1
  71. package/dist/api/design/materials/index.d.ts +111 -14
  72. package/dist/api/design/materials/index.d.ts.map +1 -1
  73. package/dist/api/design/query/geometry/index.d.ts +112 -0
  74. package/dist/api/design/query/geometry/index.d.ts.map +1 -1
  75. package/dist/api/design/query/index.d.ts +35 -1
  76. package/dist/api/design/query/index.d.ts.map +1 -1
  77. package/dist/api/design/query/referenceLines.d.ts +45 -0
  78. package/dist/api/design/query/referenceLines.d.ts.map +1 -0
  79. package/dist/api/design/query/spaces.d.ts +178 -5
  80. package/dist/api/design/query/spaces.d.ts.map +1 -1
  81. package/dist/api/design/transform/index.d.ts +95 -14
  82. package/dist/api/design/transform/index.d.ts.map +1 -1
  83. package/dist/api/design/types/index.d.ts +181 -0
  84. package/dist/api/design/types/index.d.ts.map +1 -0
  85. package/dist/api/design/update/index.d.ts +385 -2
  86. package/dist/api/design/update/index.d.ts.map +1 -1
  87. package/dist/api/design/visibility.d.ts +98 -0
  88. package/dist/api/design/visibility.d.ts.map +1 -0
  89. package/dist/api/entity/buildableEnvelope.d.ts +4 -0
  90. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  91. package/dist/api/entity/referenceLine.d.ts +10 -2
  92. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  93. package/dist/api/entity/space.d.ts +19 -19
  94. package/dist/api/entity/story.d.ts +148 -15
  95. package/dist/api/entity/story.d.ts.map +1 -1
  96. package/dist/api/index.d.ts +5 -0
  97. package/dist/api/index.d.ts.map +1 -1
  98. package/dist/api/presentation/annotate.d.ts +448 -0
  99. package/dist/api/presentation/annotate.d.ts.map +1 -0
  100. package/dist/api/presentation/diagrams.d.ts +49 -8
  101. package/dist/api/presentation/diagrams.d.ts.map +1 -1
  102. package/dist/api/presentation/export.d.ts +108 -0
  103. package/dist/api/presentation/export.d.ts.map +1 -0
  104. package/dist/api/presentation/import.d.ts +6 -0
  105. package/dist/api/presentation/import.d.ts.map +1 -1
  106. package/dist/api/presentation/index.d.ts +47 -0
  107. package/dist/api/presentation/index.d.ts.map +1 -1
  108. package/dist/api/presentation/placedViews.d.ts +370 -0
  109. package/dist/api/presentation/placedViews.d.ts.map +1 -0
  110. package/dist/api/presentation/shapes.d.ts +481 -0
  111. package/dist/api/presentation/shapes.d.ts.map +1 -0
  112. package/dist/api/presentation/sheets.d.ts +410 -13
  113. package/dist/api/presentation/sheets.d.ts.map +1 -1
  114. package/dist/api/presentation/views.d.ts +165 -10
  115. package/dist/api/presentation/views.d.ts.map +1 -1
  116. package/dist/api/program/areas.d.ts +63 -3
  117. package/dist/api/program/areas.d.ts.map +1 -1
  118. package/dist/api/program/cores.d.ts +3 -99
  119. package/dist/api/program/cores.d.ts.map +1 -1
  120. package/dist/api/program/index.d.ts +2 -2
  121. package/dist/api/program/index.d.ts.map +1 -1
  122. package/dist/api/program/layout.d.ts +172 -12
  123. package/dist/api/program/layout.d.ts.map +1 -1
  124. package/dist/api/program/site.d.ts +105 -8
  125. package/dist/api/program/site.d.ts.map +1 -1
  126. package/dist/api/program/spreadsheet.d.ts +365 -41
  127. package/dist/api/program/spreadsheet.d.ts.map +1 -1
  128. package/dist/api/workspace/index.d.ts +460 -0
  129. package/dist/api/workspace/index.d.ts.map +1 -0
  130. package/dist/handles.d.ts +64 -25
  131. package/dist/handles.d.ts.map +1 -1
  132. package/dist/index.cjs +3210 -1671
  133. package/dist/index.cjs.map +1 -1
  134. package/dist/index.js +3008 -1666
  135. package/dist/index.js.map +1 -1
  136. package/package.json +3 -2
  137. package/scripts/generate-manifest.mjs +45 -0
  138. package/src/api/analysis/daylight.ts +470 -0
  139. package/src/api/analysis/heatmaps.ts +444 -17
  140. package/src/api/analysis/index.ts +15 -0
  141. package/src/api/analysis/solar.ts +237 -0
  142. package/src/api/analysis/weather.ts +179 -0
  143. package/src/api/core/camera/index.ts +251 -0
  144. package/src/api/core/comment/index.ts +120 -2
  145. package/src/api/core/geom/create/index.ts +344 -1
  146. package/src/api/core/geom/delete/index.ts +6 -0
  147. package/src/api/core/handles/index.ts +233 -0
  148. package/src/api/core/index.ts +24 -0
  149. package/src/api/core/io/export/index.ts +126 -0
  150. package/src/api/core/io/import/index.ts +64 -0
  151. package/src/api/core/io/index.ts +5 -0
  152. package/src/api/core/mode/index.ts +96 -0
  153. package/src/api/core/proposals/index.ts +71 -11
  154. package/src/api/core/storeys/index.ts +279 -0
  155. package/src/api/core/tags.ts +27 -0
  156. package/src/api/core/user.ts +46 -0
  157. package/src/api/core/zoom/index.ts +4 -0
  158. package/src/api/design/create/index.ts +303 -36
  159. package/src/api/design/delete/index.ts +3 -0
  160. package/src/api/design/doors/index.ts +40 -0
  161. package/src/api/design/furniture/index.ts +127 -3
  162. package/src/api/design/index.ts +10 -0
  163. package/src/api/design/materials/index.ts +157 -30
  164. package/src/api/design/query/geometry/index.ts +125 -3
  165. package/src/api/design/query/index.ts +37 -7
  166. package/src/api/design/query/referenceLines.ts +52 -0
  167. package/src/api/design/query/spaces.ts +143 -0
  168. package/src/api/design/transform/index.ts +101 -12
  169. package/src/api/design/types/index.ts +156 -0
  170. package/src/api/design/update/index.ts +467 -6
  171. package/src/api/design/visibility.ts +109 -0
  172. package/src/api/entity/buildableEnvelope.ts +4 -0
  173. package/src/api/entity/referenceLine.ts +8 -0
  174. package/src/api/entity/story.ts +161 -15
  175. package/src/api/index.ts +5 -0
  176. package/src/api/presentation/annotate.ts +360 -0
  177. package/src/api/presentation/diagrams.ts +53 -8
  178. package/src/api/presentation/export.ts +108 -0
  179. package/src/api/presentation/import.ts +6 -0
  180. package/src/api/presentation/index.ts +55 -0
  181. package/src/api/presentation/placedViews.ts +363 -0
  182. package/src/api/presentation/shapes.ts +274 -0
  183. package/src/api/presentation/sheets.ts +346 -13
  184. package/src/api/presentation/views.ts +164 -12
  185. package/src/api/program/areas.ts +57 -6
  186. package/src/api/program/cores.ts +3 -91
  187. package/src/api/program/index.ts +2 -2
  188. package/src/api/program/layout.ts +182 -12
  189. package/src/api/program/site.ts +106 -8
  190. package/src/api/program/spreadsheet.ts +376 -35
  191. package/src/api/workspace/index.ts +516 -0
  192. package/src/handles.ts +77 -13
  193. package/tsconfig.json +7 -2
@@ -0,0 +1,274 @@
1
+ import * as z from "zod"
2
+ import { PluginApiReturn } from "../../types"
3
+ import {
4
+ PluginAnnotateFill,
5
+ PluginAnnotateGeoKind,
6
+ PluginAnnotateTextColor,
7
+ PluginAnnotateTextSize,
8
+ } from "./annotate"
9
+
10
+ /**
11
+ * Presentation shapes — a stable, plugin-owned shape lifecycle on Present-mode
12
+ * sheets.
13
+ *
14
+ * Where {@linkcode PluginPresentationAnnotateApi} is fire-and-forget (every call
15
+ * creates a new shape), this namespace keys each shape by a caller-chosen
16
+ * string, so rerunning an analysis **updates** its sheet output in place instead
17
+ * of duplicating it:
18
+ *
19
+ * - {@linkcode PluginPresentationShapesApi.upsert} — create or update the shape for a key
20
+ * - {@linkcode PluginPresentationShapesApi.remove} — delete the shape for a key
21
+ * - {@linkcode PluginPresentationShapesApi.removeAll} — delete every shape owned by the calling plugin
22
+ * - {@linkcode PluginPresentationShapesApi.list} — the calling plugin's shapes (key, shapeId, type)
23
+ *
24
+ * Shape ids are derived deterministically from the plugin id + key, so upserts
25
+ * converge across collaborators. Mutations require **Present mode to be open**
26
+ * (`list` is a never-throw read); each plugin sees and mutates only its own
27
+ * shapes.
28
+ *
29
+ * Accessed via `snaptrude.presentation.shapes`.
30
+ */
31
+ export abstract class PluginPresentationShapesApi {
32
+ constructor() {}
33
+
34
+ /**
35
+ * Create or update the shape for a key.
36
+ *
37
+ * The `shape` spec is a discriminated union over the same four annotation
38
+ * kinds as `presentation.annotate` (`text`, `note`, `arrow`, `geo`), with the
39
+ * same option shapes. On first call for a key the shape is created on the
40
+ * target sheet (`options.sheetId`, default: the first sheet) and nested under
41
+ * the sheet frame; on later calls the existing shape is updated in place —
42
+ * same shape id, same sheet, one undo step. Positions/bounds are relative to
43
+ * the sheet's top-left, in canvas units. Requires Present mode to be open.
44
+ *
45
+ * @param key - Caller-chosen stable identifier for the shape (per plugin).
46
+ * @param shape - The desired shape ({@linkcode PluginPresentationShapeSpec}):
47
+ * `{ type: "text" | "note" | "arrow" | "geo", ... }` with the matching
48
+ * annotate options. Changing `type` for an existing key replaces the shape
49
+ * (same shape id).
50
+ * @param options - Optional `sheetId` — the sheet to create the shape on
51
+ * (defaults to the first sheet; ignored on update, the shape stays on its
52
+ * sheet).
53
+ * @returns A {@linkcode PluginPresentationShapesUpsertResult} — the stable
54
+ * `shapeId` and `created` (`true` on first upsert, `false` on update).
55
+ * @throws If Present mode is not open, the args are invalid, or the sheet id
56
+ * is unknown.
57
+ *
58
+ * @examplePrompt Update the analysis label on the sheet instead of adding another one
59
+ * @examplePrompt Rerun the daylight report and refresh its annotations
60
+ * @examplePrompt Keep one "FAR: 2.4" text on Sheet 1 that updates on each run
61
+ * @examplePrompt Draw a highlight rectangle the plugin can move on the next run
62
+ *
63
+ * # Example
64
+ * ```ts
65
+ * const { shapeId, created } = await snaptrude.presentation.shapes.upsert("far-label", {
66
+ * type: "text",
67
+ * text: "FAR: 2.4",
68
+ * position: { x: 40, y: 40 },
69
+ * color: "blue",
70
+ * })
71
+ * ```
72
+ */
73
+ public abstract upsert(
74
+ key: string,
75
+ shape: PluginPresentationShapeSpec,
76
+ options?: { sheetId?: string },
77
+ ): PluginApiReturn<PluginPresentationShapesUpsertResult>
78
+
79
+ /**
80
+ * Delete the shape for a key.
81
+ *
82
+ * Removes the calling plugin's shape registered under `key`, if it exists.
83
+ * Requires Present mode to be open.
84
+ *
85
+ * @param key - The key passed to {@linkcode PluginPresentationShapesApi.upsert}.
86
+ * @returns `true` if a shape was deleted, `false` if no shape exists for the
87
+ * key.
88
+ * @throws If Present mode is not open or the key is invalid.
89
+ *
90
+ * @examplePrompt Remove the FAR label from the sheet
91
+ * @examplePrompt Delete the highlight the plugin added earlier
92
+ * @examplePrompt Clear the "far-label" annotation
93
+ *
94
+ * # Example
95
+ * ```ts
96
+ * const removed = await snaptrude.presentation.shapes.remove("far-label")
97
+ * ```
98
+ */
99
+ public abstract remove(key: string): PluginApiReturn<boolean>
100
+
101
+ /**
102
+ * Delete every shape owned by the calling plugin.
103
+ *
104
+ * Removes all shapes the calling plugin has upserted (across all sheets) in
105
+ * one undo step. Requires Present mode to be open.
106
+ *
107
+ * @returns The number of shapes deleted.
108
+ * @throws If Present mode is not open.
109
+ *
110
+ * @examplePrompt Clear all annotations my plugin added
111
+ * @examplePrompt Reset the sheet output before rerunning the analysis
112
+ * @examplePrompt Remove every plugin-drawn shape
113
+ *
114
+ * # Example
115
+ * ```ts
116
+ * const deleted = await snaptrude.presentation.shapes.removeAll()
117
+ * ```
118
+ */
119
+ public abstract removeAll(): PluginApiReturn<number>
120
+
121
+ /**
122
+ * List the calling plugin's shapes.
123
+ *
124
+ * Returns one entry per live shape the calling plugin has upserted — its
125
+ * `key`, the underlying canvas `shapeId`, and the shape `type`. A never-throw
126
+ * read: returns an empty list when Present mode is closed.
127
+ *
128
+ * @returns A {@linkcode PluginPresentationShapesListResult} with the `shapes`
129
+ * array (empty when Present mode is closed).
130
+ *
131
+ * @examplePrompt Which annotations has my plugin placed on the sheets?
132
+ * @examplePrompt List the plugin's shapes before refreshing them
133
+ * @examplePrompt Check whether the FAR label already exists
134
+ *
135
+ * # Example
136
+ * ```ts
137
+ * const { shapes } = await snaptrude.presentation.shapes.list()
138
+ * const hasLabel = shapes.some((s) => s.key === "far-label")
139
+ * ```
140
+ */
141
+ public abstract list(): PluginApiReturn<PluginPresentationShapesListResult>
142
+ }
143
+
144
+ /**
145
+ * Desired shape for {@linkcode PluginPresentationShapesApi.upsert} — a
146
+ * discriminated union over the four annotate kinds, with the same option shapes
147
+ * as the matching `presentation.annotate` call:
148
+ *
149
+ * | `type` | Payload | Mirrors |
150
+ * |---|---|---|
151
+ * | `"text"` | `text`, `position?`, `size?`, `color?` | `annotate.text` |
152
+ * | `"note"` | `text`, `position?`, `color?`, `size?` | `annotate.note` |
153
+ * | `"arrow"` | `start`, `end`, `color?`, `size?` | `annotate.arrow` |
154
+ * | `"geo"` | `kind`, `bounds`, `color?`, `fill?` | `annotate.shape` |
155
+ *
156
+ * Positions/bounds are relative to the sheet's top-left, in canvas units.
157
+ */
158
+ export const PluginPresentationShapeSpec = z.discriminatedUnion("type", [
159
+ z.object({
160
+ type: z.literal("text"),
161
+ text: z.string(),
162
+ position: z.object({ x: z.number(), y: z.number() }).optional(),
163
+ size: PluginAnnotateTextSize.optional(),
164
+ color: PluginAnnotateTextColor.optional(),
165
+ }),
166
+ z.object({
167
+ type: z.literal("note"),
168
+ text: z.string(),
169
+ position: z.object({ x: z.number(), y: z.number() }).optional(),
170
+ color: PluginAnnotateTextColor.optional(),
171
+ size: PluginAnnotateTextSize.optional(),
172
+ }),
173
+ z.object({
174
+ type: z.literal("arrow"),
175
+ start: z.object({ x: z.number(), y: z.number() }),
176
+ end: z.object({ x: z.number(), y: z.number() }),
177
+ color: PluginAnnotateTextColor.optional(),
178
+ size: PluginAnnotateTextSize.optional(),
179
+ }),
180
+ z.object({
181
+ type: z.literal("geo"),
182
+ kind: PluginAnnotateGeoKind,
183
+ bounds: z.object({
184
+ x: z.number(),
185
+ y: z.number(),
186
+ w: z.number().positive(),
187
+ h: z.number().positive(),
188
+ }),
189
+ color: PluginAnnotateTextColor.optional(),
190
+ fill: PluginAnnotateFill.optional(),
191
+ }),
192
+ ])
193
+ export type PluginPresentationShapeSpec = z.infer<
194
+ typeof PluginPresentationShapeSpec
195
+ >
196
+
197
+ /** The shape kind of a plugin-owned shape (the `type` discriminant of {@linkcode PluginPresentationShapeSpec}). */
198
+ export const PluginPresentationShapeType = z.enum([
199
+ "text",
200
+ "note",
201
+ "arrow",
202
+ "geo",
203
+ ])
204
+ export type PluginPresentationShapeType = z.infer<
205
+ typeof PluginPresentationShapeType
206
+ >
207
+
208
+ /**
209
+ * Arguments for {@linkcode PluginPresentationShapesApi.upsert}.
210
+ *
211
+ * | Property | Type | Description |
212
+ * |---|---|---|
213
+ * | `key` | `string` | Caller-chosen stable identifier (non-empty) |
214
+ * | `shape` | {@linkcode PluginPresentationShapeSpec} | The desired shape |
215
+ * | `sheetId` | `string \| undefined` | Sheet to create on (default: first sheet; ignored on update) |
216
+ */
217
+ export const PluginPresentationShapesUpsertArgs = z.object({
218
+ key: z.string().min(1),
219
+ shape: PluginPresentationShapeSpec,
220
+ sheetId: z.string().optional(),
221
+ })
222
+ export type PluginPresentationShapesUpsertArgs = z.infer<
223
+ typeof PluginPresentationShapesUpsertArgs
224
+ >
225
+
226
+ /**
227
+ * Result of {@linkcode PluginPresentationShapesApi.upsert}.
228
+ *
229
+ * | Property | Type | Description |
230
+ * |---|---|---|
231
+ * | `shapeId` | `string` | Stable id of the canvas shape for the key |
232
+ * | `created` | `boolean` | `true` if the shape was created, `false` if updated |
233
+ */
234
+ export const PluginPresentationShapesUpsertResult = z.object({
235
+ shapeId: z.string(),
236
+ created: z.boolean(),
237
+ })
238
+ export type PluginPresentationShapesUpsertResult = z.infer<
239
+ typeof PluginPresentationShapesUpsertResult
240
+ >
241
+
242
+ /**
243
+ * Arguments for {@linkcode PluginPresentationShapesApi.remove}.
244
+ *
245
+ * | Property | Type | Description |
246
+ * |---|---|---|
247
+ * | `key` | `string` | The key the shape was upserted under (non-empty) |
248
+ */
249
+ export const PluginPresentationShapesRemoveArgs = z.object({
250
+ key: z.string().min(1),
251
+ })
252
+ export type PluginPresentationShapesRemoveArgs = z.infer<
253
+ typeof PluginPresentationShapesRemoveArgs
254
+ >
255
+
256
+ /**
257
+ * Result of {@linkcode PluginPresentationShapesApi.list}.
258
+ *
259
+ * | Property | Type | Description |
260
+ * |---|---|---|
261
+ * | `shapes` | `{ key: string; shapeId: string; type: `{@linkcode PluginPresentationShapeType}` }[]` | One entry per live plugin-owned shape |
262
+ */
263
+ export const PluginPresentationShapesListResult = z.object({
264
+ shapes: z.array(
265
+ z.object({
266
+ key: z.string(),
267
+ shapeId: z.string(),
268
+ type: PluginPresentationShapeType,
269
+ }),
270
+ ),
271
+ })
272
+ export type PluginPresentationShapesListResult = z.infer<
273
+ typeof PluginPresentationShapesListResult
274
+ >