@snaptrude/plugin-core 0.0.4 → 0.0.6

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 (59) hide show
  1. package/dist/api/core/geom/arc.d.ts +50 -1
  2. package/dist/api/core/geom/arc.d.ts.map +1 -1
  3. package/dist/api/core/geom/curve.d.ts +26 -1
  4. package/dist/api/core/geom/curve.d.ts.map +1 -1
  5. package/dist/api/core/geom/index.d.ts +16 -0
  6. package/dist/api/core/geom/index.d.ts.map +1 -1
  7. package/dist/api/core/geom/line.d.ts +35 -1
  8. package/dist/api/core/geom/line.d.ts.map +1 -1
  9. package/dist/api/core/geom/profile.d.ts +66 -2
  10. package/dist/api/core/geom/profile.d.ts.map +1 -1
  11. package/dist/api/core/index.d.ts +8 -0
  12. package/dist/api/core/index.d.ts.map +1 -1
  13. package/dist/api/core/math/index.d.ts +8 -0
  14. package/dist/api/core/math/index.d.ts.map +1 -1
  15. package/dist/api/core/math/quat.d.ts +156 -15
  16. package/dist/api/core/math/quat.d.ts.map +1 -1
  17. package/dist/api/core/math/vec3.d.ts +131 -14
  18. package/dist/api/core/math/vec3.d.ts.map +1 -1
  19. package/dist/api/entity/index.d.ts +8 -0
  20. package/dist/api/entity/index.d.ts.map +1 -1
  21. package/dist/api/entity/space.d.ts +217 -4
  22. package/dist/api/entity/space.d.ts.map +1 -1
  23. package/dist/api/entity/story.d.ts +166 -0
  24. package/dist/api/entity/story.d.ts.map +1 -1
  25. package/dist/api/index.d.ts +14 -0
  26. package/dist/api/index.d.ts.map +1 -1
  27. package/dist/api/tools/index.d.ts +8 -0
  28. package/dist/api/tools/index.d.ts.map +1 -1
  29. package/dist/api/tools/selection.d.ts +37 -0
  30. package/dist/api/tools/selection.d.ts.map +1 -1
  31. package/dist/api/tools/transform.d.ts +82 -0
  32. package/dist/api/tools/transform.d.ts.map +1 -1
  33. package/dist/api/units/index.d.ts +72 -13
  34. package/dist/api/units/index.d.ts.map +1 -1
  35. package/dist/index.cjs +322 -36
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.js +321 -35
  38. package/dist/index.js.map +1 -1
  39. package/dist/types.d.ts +8 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/package.json +1 -1
  42. package/src/api/core/geom/arc.ts +50 -1
  43. package/src/api/core/geom/curve.ts +26 -1
  44. package/src/api/core/geom/index.ts +16 -0
  45. package/src/api/core/geom/line.ts +35 -1
  46. package/src/api/core/geom/profile.ts +66 -2
  47. package/src/api/core/index.ts +8 -0
  48. package/src/api/core/math/index.ts +8 -0
  49. package/src/api/core/math/quat.ts +156 -15
  50. package/src/api/core/math/vec3.ts +131 -14
  51. package/src/api/entity/index.ts +8 -0
  52. package/src/api/entity/space.ts +218 -5
  53. package/src/api/entity/story.ts +166 -0
  54. package/src/api/index.ts +14 -0
  55. package/src/api/tools/index.ts +8 -0
  56. package/src/api/tools/selection.ts +37 -0
  57. package/src/api/tools/transform.ts +82 -0
  58. package/src/api/units/index.ts +72 -13
  59. package/src/types.ts +8 -1
@@ -1,12 +1,125 @@
1
1
  import * as z from "zod";
2
2
  import { PluginApiReturn } from "../../types";
3
+ /**
4
+ * Story (floor/storey) management.
5
+ *
6
+ * A story represents a building floor in the Snaptrude project. Stories
7
+ * are identified by their integer **story value** (e.g. `1` for ground
8
+ * floor, `2` for first floor, `-1` for a basement).
9
+ *
10
+ * All methods are **host API calls** that return Promises and support
11
+ * undo/redo via Snaptrude's command system.
12
+ *
13
+ * Accessed via `snaptrude.entity.story`.
14
+ */
3
15
  export declare abstract class PluginStoryApi {
4
16
  constructor();
17
+ /**
18
+ * Get properties of a story by its storey number.
19
+ *
20
+ * Only the properties listed in {@linkcode PluginStoryGetArgs.properties args.properties}
21
+ * are returned — unlisted properties will be `undefined` in the result.
22
+ *
23
+ * @param args - An object containing:
24
+ * - {@linkcode PluginStoryGetArgs.storyValue args.storyValue} — Integer storey number
25
+ * (e.g. `1` for ground floor, `2` for first floor, `-1` for basement)
26
+ * - {@linkcode PluginStoryGetArgs.properties args.properties} — Array of property names
27
+ * to retrieve. See {@linkcode PluginStoryGetProperty} for available values.
28
+ * @returns A partial {@linkcode PluginStoryGetResult} containing only the requested properties
29
+ * @throws If the story with the given value does not exist
30
+ *
31
+ * # Example
32
+ * ```ts
33
+ * const info = await snaptrude.entity.story.get({
34
+ * storyValue: 1,
35
+ * properties: ["height", "name", "spacesCount"],
36
+ * })
37
+ * console.log(info.name, info.height, info.spacesCount)
38
+ * ```
39
+ */
5
40
  abstract get({ storyValue, properties, }: PluginStoryGetArgs): PluginApiReturn<PluginStoryGetResult>;
41
+ /**
42
+ * Get all stories in the current project.
43
+ *
44
+ * Returns basic identification data for every storey. Stories are sorted
45
+ * from **top to bottom** (highest story value first).
46
+ *
47
+ * @returns A {@linkcode PluginStoryGetAllResult} with a `stories` array,
48
+ * each entry containing `value`, `id`, and `name`
49
+ *
50
+ * # Example
51
+ * ```ts
52
+ * const { stories } = await snaptrude.entity.story.getAll()
53
+ * for (const s of stories) {
54
+ * console.log(`Story ${s.value}: ${s.name} (id: ${s.id})`)
55
+ * }
56
+ * ```
57
+ */
6
58
  abstract getAll(): PluginApiReturn<PluginStoryGetAllResult>;
59
+ /**
60
+ * Create a new story (floor) in the project.
61
+ *
62
+ * The new story is inserted at the position specified by
63
+ * {@linkcode PluginStoryCreateArgs.storyValue args.storyValue}. This
64
+ * operation is undoable.
65
+ *
66
+ * @param args - An object containing:
67
+ * - {@linkcode PluginStoryCreateArgs.storyValue args.storyValue} — Integer storey number
68
+ * to create (e.g. `3` to add a third floor)
69
+ * - {@linkcode PluginStoryCreateArgs.height args.height} — Optional height in Babylon
70
+ * units. If omitted, the project's default storey height is used.
71
+ * @returns A {@linkcode PluginStoryCreateResult} with `storyId` and `storyValue`
72
+ * @throws If a story with the given value already exists or creation fails
73
+ *
74
+ * # Example
75
+ * ```ts
76
+ * // Create a new third floor with custom height
77
+ * const { storyId } = await snaptrude.entity.story.create({
78
+ * storyValue: 3,
79
+ * height: 4.5,
80
+ * })
81
+ * ```
82
+ */
7
83
  abstract create({ storyValue, height, }: PluginStoryCreateArgs): PluginApiReturn<PluginStoryCreateResult>;
84
+ /**
85
+ * Update a story's height.
86
+ *
87
+ * Changes the floor-to-floor height of the specified story. This
88
+ * operation is undoable.
89
+ *
90
+ * @param args - An object containing:
91
+ * - {@linkcode PluginStoryUpdateArgs.storyValue args.storyValue} — Integer storey number
92
+ * identifying the story to update
93
+ * - {@linkcode PluginStoryUpdateArgs.height args.height} — New height value in Babylon
94
+ * units
95
+ * @returns A {@linkcode PluginStoryUpdateResult} with the updated `storyValue` and `height`
96
+ * @throws If the story does not exist or the update fails
97
+ *
98
+ * # Example
99
+ * ```ts
100
+ * // Set ground floor height to 5 Babylon units
101
+ * const result = await snaptrude.entity.story.update({
102
+ * storyValue: 1,
103
+ * height: 5,
104
+ * })
105
+ * ```
106
+ */
8
107
  abstract update({ storyValue, height, }: PluginStoryUpdateArgs): PluginApiReturn<PluginStoryUpdateResult>;
9
108
  }
109
+ /**
110
+ * Available properties that can be queried on a story.
111
+ *
112
+ * | Value | Type | Description |
113
+ * |---|---|---|
114
+ * | `"value"` | `number` | The integer storey number |
115
+ * | `"id"` | `string` | Unique story identifier |
116
+ * | `"name"` | `string` | Display name of the story |
117
+ * | `"height"` | `number` | Floor-to-floor height in Babylon units |
118
+ * | `"base"` | `number` | Base elevation in Babylon units |
119
+ * | `"hidden"` | `boolean` | Whether the story is hidden in the viewport |
120
+ * | `"spacesCount"` | `number` | Number of spaces on this story |
121
+ * | `"totalArea"` | `number` | Total floor area of this story |
122
+ */
10
123
  export declare const PluginStoryGetProperty: z.ZodEnum<{
11
124
  height: "height";
12
125
  id: "id";
@@ -17,6 +130,14 @@ export declare const PluginStoryGetProperty: z.ZodEnum<{
17
130
  spacesCount: "spacesCount";
18
131
  totalArea: "totalArea";
19
132
  }>;
133
+ /**
134
+ * Arguments for {@linkcode PluginStoryApi.get}.
135
+ *
136
+ * | Property | Type | Description |
137
+ * |---|---|---|
138
+ * | `storyValue` | `number` (int) | The storey number to query |
139
+ * | `properties` | {@linkcode PluginStoryGetProperty}`[]` | Properties to retrieve |
140
+ */
20
141
  export declare const PluginStoryGetArgs: z.ZodObject<{
21
142
  storyValue: z.ZodNumber;
22
143
  properties: z.ZodArray<z.ZodEnum<{
@@ -31,6 +152,12 @@ export declare const PluginStoryGetArgs: z.ZodObject<{
31
152
  }>>;
32
153
  }, z.core.$strip>;
33
154
  export type PluginStoryGetArgs = z.infer<typeof PluginStoryGetArgs>;
155
+ /**
156
+ * Result of {@linkcode PluginStoryApi.get}.
157
+ *
158
+ * A partial object — only the properties that were requested in
159
+ * {@linkcode PluginStoryGetArgs.properties} will be present.
160
+ */
34
161
  export declare const PluginStoryGetResult: z.ZodObject<{
35
162
  value: z.ZodOptional<z.ZodNumber>;
36
163
  id: z.ZodOptional<z.ZodString>;
@@ -42,6 +169,13 @@ export declare const PluginStoryGetResult: z.ZodObject<{
42
169
  totalArea: z.ZodOptional<z.ZodNumber>;
43
170
  }, z.core.$strip>;
44
171
  export type PluginStoryGetResult = z.infer<typeof PluginStoryGetResult>;
172
+ /**
173
+ * Result of {@linkcode PluginStoryApi.getAll}.
174
+ *
175
+ * | Property | Type | Description |
176
+ * |---|---|---|
177
+ * | `stories` | `Array<{ value, id, name }>` | All stories, sorted top to bottom |
178
+ */
45
179
  export declare const PluginStoryGetAllResult: z.ZodObject<{
46
180
  stories: z.ZodArray<z.ZodObject<{
47
181
  value: z.ZodNumber;
@@ -50,21 +184,53 @@ export declare const PluginStoryGetAllResult: z.ZodObject<{
50
184
  }, z.core.$strip>>;
51
185
  }, z.core.$strip>;
52
186
  export type PluginStoryGetAllResult = z.infer<typeof PluginStoryGetAllResult>;
187
+ /**
188
+ * Arguments for {@linkcode PluginStoryApi.create}.
189
+ *
190
+ * | Property | Type | Description |
191
+ * |---|---|---|
192
+ * | `storyValue` | `number` (int) | The storey number for the new story |
193
+ * | `height` | `number?` | Optional height in Babylon units |
194
+ */
53
195
  export declare const PluginStoryCreateArgs: z.ZodObject<{
54
196
  storyValue: z.ZodNumber;
55
197
  height: z.ZodOptional<z.ZodNumber>;
56
198
  }, z.core.$strip>;
57
199
  export type PluginStoryCreateArgs = z.infer<typeof PluginStoryCreateArgs>;
200
+ /**
201
+ * Result of {@linkcode PluginStoryApi.create}.
202
+ *
203
+ * | Property | Type | Description |
204
+ * |---|---|---|
205
+ * | `storyId` | `string` | Unique ID of the created story |
206
+ * | `storyValue` | `number` | The storey number of the created story |
207
+ */
58
208
  export declare const PluginStoryCreateResult: z.ZodObject<{
59
209
  storyId: z.ZodString;
60
210
  storyValue: z.ZodNumber;
61
211
  }, z.core.$strip>;
62
212
  export type PluginStoryCreateResult = z.infer<typeof PluginStoryCreateResult>;
213
+ /**
214
+ * Arguments for {@linkcode PluginStoryApi.update}.
215
+ *
216
+ * | Property | Type | Description |
217
+ * |---|---|---|
218
+ * | `storyValue` | `number` (int) | Storey number of the story to update |
219
+ * | `height` | `number` | New height in Babylon units |
220
+ */
63
221
  export declare const PluginStoryUpdateArgs: z.ZodObject<{
64
222
  storyValue: z.ZodNumber;
65
223
  height: z.ZodNumber;
66
224
  }, z.core.$strip>;
67
225
  export type PluginStoryUpdateArgs = z.infer<typeof PluginStoryUpdateArgs>;
226
+ /**
227
+ * Result of {@linkcode PluginStoryApi.update}.
228
+ *
229
+ * | Property | Type | Description |
230
+ * |---|---|---|
231
+ * | `storyValue` | `number` | The storey number of the updated story |
232
+ * | `height` | `number` | The new height after the update |
233
+ */
68
234
  export declare const PluginStoryUpdateResult: z.ZodObject<{
69
235
  storyValue: z.ZodNumber;
70
236
  height: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../../../src/api/entity/story.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,8BAAsB,cAAc;;aAGlB,GAAG,CAAC,EAClB,UAAU,EACV,UAAU,GACX,EAAE,kBAAkB,GAAG,eAAe,CAAC,oBAAoB,CAAC;aAE7C,MAAM,IAAI,eAAe,CAAC,uBAAuB,CAAC;aAElD,MAAM,CAAC,EACrB,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,GAAG,eAAe,CAAC,uBAAuB,CAAC;aAEnD,MAAM,CAAC,EACrB,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,GAAG,eAAe,CAAC,uBAAuB,CAAC;CACpE;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;EASjC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAG7B,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,oBAAoB;;;;;;;;;iBAWrB,CAAA;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,eAAO,MAAM,uBAAuB;;;;;;iBAQlC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
1
+ {"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../../../src/api/entity/story.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;;;;;;;;GAWG;AACH,8BAAsB,cAAc;;IAGlC;;;;;;;;;;;;;;;;;;;;;;OAsBG;aACa,GAAG,CAAC,EAClB,UAAU,EACV,UAAU,GACX,EAAE,kBAAkB,GAAG,eAAe,CAAC,oBAAoB,CAAC;IAE7D;;;;;;;;;;;;;;;;OAgBG;aACa,MAAM,IAAI,eAAe,CAAC,uBAAuB,CAAC;IAElE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACa,MAAM,CAAC,EACrB,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,GAAG,eAAe,CAAC,uBAAuB,CAAC;IAEnE;;;;;;;;;;;;;;;;;;;;;;OAsBG;aACa,MAAM,CAAC,EACrB,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,GAAG,eAAe,CAAC,uBAAuB,CAAC;CACpE;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;EASjC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAG7B,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;iBAWrB,CAAA;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB;;;;;;iBAQlC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
@@ -2,10 +2,24 @@ import { PluginCoreApi } from "./core";
2
2
  import { PluginEntityApi } from "./entity";
3
3
  import { PluginToolsApi } from "./tools";
4
4
  import { PluginUnitsApi } from "./units";
5
+ /**
6
+ * Root API surface for Snaptrude plugins.
7
+ *
8
+ * Access all plugin capabilities through the namespaced properties:
9
+ *
10
+ * - {@linkcode PluginApi.core} — Math and geometry primitives
11
+ * - {@linkcode PluginApi.entity} — CRUD operations on Snaptrude entities (spaces, stories)
12
+ * - {@linkcode PluginApi.tools} — Selection and transform tools
13
+ * - {@linkcode PluginApi.units} — Unit conversion utilities
14
+ */
5
15
  export declare abstract class PluginApi {
16
+ /** Core math and geometry primitives. See {@linkcode PluginCoreApi}. */
6
17
  abstract core: PluginCoreApi;
18
+ /** Selection and transform tools. See {@linkcode PluginToolsApi}. */
7
19
  abstract tools: PluginToolsApi;
20
+ /** CRUD operations on Snaptrude entities. See {@linkcode PluginEntityApi}. */
8
21
  abstract entity: PluginEntityApi;
22
+ /** Unit conversion utilities. See {@linkcode PluginUnitsApi}. */
9
23
  abstract units: PluginUnitsApi;
10
24
  constructor();
11
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExC,8BAAsB,SAAS;IAC7B,SAAgB,IAAI,EAAE,aAAa,CAAA;IACnC,SAAgB,KAAK,EAAE,cAAc,CAAA;IACrC,SAAgB,MAAM,EAAE,eAAe,CAAA;IACvC,SAAgB,KAAK,EAAE,cAAc,CAAA;;CAGtC;AAED,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExC;;;;;;;;;GASG;AACH,8BAAsB,SAAS;IAC7B,wEAAwE;IACxE,SAAgB,IAAI,EAAE,aAAa,CAAA;IACnC,qEAAqE;IACrE,SAAgB,KAAK,EAAE,cAAc,CAAA;IACrC,8EAA8E;IAC9E,SAAgB,MAAM,EAAE,eAAe,CAAA;IACvC,iEAAiE;IACjE,SAAgB,KAAK,EAAE,cAAc,CAAA;;CAGtC;AAED,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
@@ -1,7 +1,15 @@
1
1
  import { PluginSelectionApi } from "./selection";
2
2
  import { PluginTransformApi } from "./transform";
3
+ /**
4
+ * Snaptrude editor tools for querying and manipulating scene components.
5
+ *
6
+ * - {@linkcode PluginToolsApi.selection} — Query the current user selection
7
+ * - {@linkcode PluginToolsApi.transform} — Move and rotate components
8
+ */
3
9
  export declare abstract class PluginToolsApi {
10
+ /** Query the current selection. See {@linkcode PluginSelectionApi}. */
4
11
  abstract selection: PluginSelectionApi;
12
+ /** Move and rotate components. See {@linkcode PluginTransformApi}. */
5
13
  abstract transform: PluginTransformApi;
6
14
  constructor();
7
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,8BAAsB,cAAc;IAClC,SAAgB,SAAS,EAAE,kBAAkB,CAAA;IAC7C,SAAgB,SAAS,EAAE,kBAAkB,CAAA;;CAG9C;AAED,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD;;;;;GAKG;AACH,8BAAsB,cAAc;IAClC,uEAAuE;IACvE,SAAgB,SAAS,EAAE,kBAAkB,CAAA;IAC7C,sEAAsE;IACtE,SAAgB,SAAS,EAAE,kBAAkB,CAAA;;CAG9C;AAED,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
@@ -1,9 +1,46 @@
1
1
  import * as z from "zod";
2
2
  import { PluginApiReturn } from "../../types";
3
+ /**
4
+ * Query the current user selection in the Snaptrude editor.
5
+ *
6
+ * Accessed via `snaptrude.tools.selection`.
7
+ */
3
8
  export declare abstract class PluginSelectionApi {
4
9
  constructor();
10
+ /**
11
+ * Get the IDs of all currently selected components.
12
+ *
13
+ * Returns the component IDs from the editor's active selection stack.
14
+ * If nothing is selected, returns an empty array.
15
+ *
16
+ * The returned IDs can be used with {@linkcode PluginTransformApi.move},
17
+ * {@linkcode PluginTransformApi.rotate}, or entity query methods like
18
+ * {@linkcode PluginSpaceApi.get}.
19
+ *
20
+ * @returns A {@linkcode PluginSelectionGetResult} with a `selected` array
21
+ * of component ID strings
22
+ *
23
+ * # Example
24
+ * ```ts
25
+ * const { selected } = await snaptrude.tools.selection.get()
26
+ * if (selected.length > 0) {
27
+ * // Move selected components 5 units along X
28
+ * await snaptrude.tools.transform.move({
29
+ * componentIds: selected,
30
+ * displacement: snaptrude.core.math.vec3.new(5, 0, 0),
31
+ * })
32
+ * }
33
+ * ```
34
+ */
5
35
  abstract get(): PluginApiReturn<PluginSelectionGetResult>;
6
36
  }
37
+ /**
38
+ * Result of {@linkcode PluginSelectionApi.get}.
39
+ *
40
+ * | Property | Type | Description |
41
+ * |---|---|---|
42
+ * | `selected` | `string[]` | Component IDs of the current selection |
43
+ */
7
44
  export declare const PluginSelectionGetResult: z.ZodObject<{
8
45
  selected: z.ZodArray<z.ZodString>;
9
46
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/api/tools/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,8BAAsB,kBAAkB;;aAGtB,GAAG,IAAI,eAAe,CAAC,wBAAwB,CAAC;CACjE;AAED,eAAO,MAAM,wBAAwB;;iBAEnC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/api/tools/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;GAIG;AACH,8BAAsB,kBAAkB;;IAGtC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;aACa,GAAG,IAAI,eAAe,CAAC,wBAAwB,CAAC;CACjE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;;iBAEnC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
@@ -1,10 +1,82 @@
1
1
  import * as z from "zod";
2
2
  import { PluginApiReturn } from "../../types";
3
+ /**
4
+ * Transform operations — move and rotate scene components.
5
+ *
6
+ * All transform methods accept an array of component IDs and apply the
7
+ * transformation to each. Operations are recorded in Snaptrude's
8
+ * command system for undo/redo support.
9
+ *
10
+ * Accessed via `snaptrude.tools.transform`.
11
+ */
3
12
  export declare abstract class PluginTransformApi {
4
13
  constructor();
14
+ /**
15
+ * Translate components by a displacement vector.
16
+ *
17
+ * Each component's position is offset by the given
18
+ * {@linkcode PluginMoveArgs.displacement displacement} vector.
19
+ * This operation is undoable.
20
+ *
21
+ * @param args - An object containing:
22
+ * - {@linkcode PluginMoveArgs.componentIds args.componentIds} — Array of component
23
+ * ID strings to move
24
+ * - {@linkcode PluginMoveArgs.displacement args.displacement} — Translation vector
25
+ * as a {@linkcode PVec3} in Babylon units
26
+ * @throws If any component ID is not found in the scene
27
+ *
28
+ * # Example
29
+ * ```ts
30
+ * const { vec3 } = snaptrude.core.math
31
+ *
32
+ * // Move a space 10 units along the X axis
33
+ * await snaptrude.tools.transform.move({
34
+ * componentIds: ["some-space-id"],
35
+ * displacement: vec3.new(10, 0, 0),
36
+ * })
37
+ * ```
38
+ */
5
39
  abstract move({ componentIds, displacement, }: PluginMoveArgs): PluginApiReturn<void>;
40
+ /**
41
+ * Rotate components around an axis through a pivot point.
42
+ *
43
+ * Each component is rotated by {@linkcode PluginRotateArgs.angle angle}
44
+ * radians around the {@linkcode PluginRotateArgs.axis axis} vector,
45
+ * pivoting about the {@linkcode PluginRotateArgs.pivot pivot} point.
46
+ * This operation is undoable.
47
+ *
48
+ * @param args - An object containing:
49
+ * - {@linkcode PluginRotateArgs.componentIds args.componentIds} — Array of component
50
+ * ID strings to rotate
51
+ * - {@linkcode PluginRotateArgs.angle args.angle} — Rotation angle in **radians**
52
+ * - {@linkcode PluginRotateArgs.axis args.axis} — Rotation axis as a {@linkcode PVec3}
53
+ * - {@linkcode PluginRotateArgs.pivot args.pivot} — Pivot point as a {@linkcode PVec3}
54
+ * in Babylon units
55
+ * @throws If any component ID is not found in the scene
56
+ *
57
+ * # Example
58
+ * ```ts
59
+ * const { vec3 } = snaptrude.core.math
60
+ *
61
+ * // Rotate a space 45° around the Y axis at the origin
62
+ * await snaptrude.tools.transform.rotate({
63
+ * componentIds: ["some-space-id"],
64
+ * angle: Math.PI / 4,
65
+ * axis: vec3.new(0, 1, 0),
66
+ * pivot: vec3.new(0, 0, 0),
67
+ * })
68
+ * ```
69
+ */
6
70
  abstract rotate({ componentIds, angle, axis, pivot, }: PluginRotateArgs): PluginApiReturn<void>;
7
71
  }
72
+ /**
73
+ * Arguments for {@linkcode PluginTransformApi.move}.
74
+ *
75
+ * | Property | Type | Description |
76
+ * |---|---|---|
77
+ * | `componentIds` | `string[]` | Component IDs to move |
78
+ * | `displacement` | {@linkcode PVec3} | Translation vector in Babylon units |
79
+ */
8
80
  export declare const PluginMoveArgs: z.ZodObject<{
9
81
  componentIds: z.ZodArray<z.ZodString>;
10
82
  displacement: z.ZodObject<{
@@ -14,6 +86,16 @@ export declare const PluginMoveArgs: z.ZodObject<{
14
86
  }, z.core.$strip>;
15
87
  }, z.core.$strip>;
16
88
  export type PluginMoveArgs = z.infer<typeof PluginMoveArgs>;
89
+ /**
90
+ * Arguments for {@linkcode PluginTransformApi.rotate}.
91
+ *
92
+ * | Property | Type | Description |
93
+ * |---|---|---|
94
+ * | `componentIds` | `string[]` | Component IDs to rotate |
95
+ * | `angle` | `number` | Rotation angle in radians |
96
+ * | `axis` | {@linkcode PVec3} | Rotation axis direction |
97
+ * | `pivot` | {@linkcode PVec3} | Pivot point in Babylon units |
98
+ */
17
99
  export declare const PluginRotateArgs: z.ZodObject<{
18
100
  componentIds: z.ZodArray<z.ZodString>;
19
101
  angle: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/api/tools/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,8BAAsB,kBAAkB;;aAGtB,IAAI,CAAC,EACnB,YAAY,EACZ,YAAY,GACb,EAAE,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC;aAEzB,MAAM,CAAC,EACrB,YAAY,EACZ,KAAK,EACL,IAAI,EACJ,KAAK,GACN,EAAE,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,cAAc;;;;;;;iBAGzB,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;iBAK3B,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/api/tools/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C;;;;;;;;GAQG;AACH,8BAAsB,kBAAkB;;IAGtC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;aACa,IAAI,CAAC,EACnB,YAAY,EACZ,YAAY,GACb,EAAE,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;aACa,MAAM,CAAC,EACrB,YAAY,EACZ,KAAK,EACL,IAAI,EACJ,KAAK,GACN,EAAE,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC;CAC5C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;iBAGzB,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;iBAK3B,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA"}
@@ -1,38 +1,67 @@
1
1
  import * as z from "zod";
2
2
  import { PluginApiReturn } from "../../types";
3
+ /**
4
+ * Unit conversion between real-world units and Snaptrude's internal
5
+ * (Babylon) coordinate system.
6
+ *
7
+ * Snaptrude uses an internal unit system (Babylon units) for all
8
+ * coordinates and dimensions. Use these methods to convert between
9
+ * real-world measurements and Babylon units.
10
+ *
11
+ * Accessed via `snaptrude.units`.
12
+ */
3
13
  export declare abstract class PluginUnitsApi {
4
14
  constructor();
5
15
  /**
6
- * Convert a value from the given unit to Snaptrude's internal (Babylon) units.
16
+ * Convert a value from a real-world unit to Snaptrude's internal (Babylon) units.
7
17
  *
8
18
  * Use this when you have a measurement in real-world units (e.g. meters, feet)
9
19
  * and need to convert it to the coordinate system used by Snaptrude internally.
10
20
  *
11
- * @param args.unit - The source unit to convert from (e.g. `"meters"`, `"feet-inches"`)
12
- * @param args.value - The numeric value in the source unit
13
- * @returns An object containing the converted `value` in Snaptrude/Babylon units
21
+ * @param args - An object containing:
22
+ * - {@linkcode PluginUnitsConvertFromArgs.unit args.unit} The source unit
23
+ * to convert from. See {@linkcode PUnitType} for supported values.
24
+ * - {@linkcode PluginUnitsConvertFromArgs.value args.value} — The numeric
25
+ * value in the source unit
26
+ * @returns A {@linkcode PluginUnitsConvertFromResult} containing the converted
27
+ * `value` in Babylon units
14
28
  *
15
- * @example
29
+ * # Example
16
30
  * ```ts
31
+ * // Convert 5 meters to Babylon units for use in API calls
17
32
  * const result = await snaptrude.units.convertFrom({ unit: "meters", value: 5 })
18
- * // result.value is 5 meters expressed in Babylon units
33
+ * const { spaceId } = await snaptrude.entity.space.createRectangular({
34
+ * position: snaptrude.core.math.vec3.new(0, 0, 0),
35
+ * dimensions: { width: result.value, height: result.value, depth: result.value },
36
+ * })
19
37
  * ```
20
38
  */
21
39
  abstract convertFrom(args: PluginUnitsConvertFromArgs): PluginApiReturn<PluginUnitsConvertFromResult>;
22
40
  /**
23
- * Convert a value from Snaptrude's internal (Babylon) units to the given unit.
41
+ * Convert a value from Snaptrude's internal (Babylon) units to a real-world unit.
24
42
  *
25
43
  * Use this when you have a value in Snaptrude's internal coordinate system
26
44
  * and need to express it in real-world units (e.g. meters, feet).
27
45
  *
28
- * @param args.unit - The target unit to convert to (e.g. `"meters"`, `"feet-inches"`)
29
- * @param args.value - The numeric value in Snaptrude/Babylon units
30
- * @returns An object containing the converted `value` in the target unit
46
+ * @param args - An object containing:
47
+ * - {@linkcode PluginUnitsConvertToArgs.unit args.unit} The target unit
48
+ * to convert to. See {@linkcode PUnitType} for supported values.
49
+ * - {@linkcode PluginUnitsConvertToArgs.value args.value} — The numeric
50
+ * value in Babylon units
51
+ * @returns A {@linkcode PluginUnitsConvertToResult} containing the converted
52
+ * `value` in the target unit
31
53
  *
32
- * @example
54
+ * # Example
33
55
  * ```ts
34
- * const result = await snaptrude.units.convertTo({ unit: "feet-inches", value: 1.2 })
35
- * // result.value is 1.2 Babylon units expressed in feet
56
+ * // Get a space's area in square meters
57
+ * const info = await snaptrude.entity.space.get({
58
+ * spaceId: "some-id",
59
+ * properties: ["area"],
60
+ * })
61
+ * const areaInMeters = await snaptrude.units.convertTo({
62
+ * unit: "meters",
63
+ * value: info.area!,
64
+ * })
36
65
  * ```
37
66
  */
38
67
  abstract convertTo(args: PluginUnitsConvertToArgs): PluginApiReturn<PluginUnitsConvertToResult>;
@@ -58,6 +87,14 @@ export declare const PUnitType: z.ZodEnum<{
58
87
  miles: "miles";
59
88
  }>;
60
89
  export type PUnitType = z.infer<typeof PUnitType>;
90
+ /**
91
+ * Arguments for {@linkcode PluginUnitsApi.convertFrom}.
92
+ *
93
+ * | Property | Type | Description |
94
+ * |---|---|---|
95
+ * | `unit` | {@linkcode PUnitType} | Source real-world unit |
96
+ * | `value` | `number` | Numeric value in the source unit |
97
+ */
61
98
  export declare const PluginUnitsConvertFromArgs: z.ZodObject<{
62
99
  unit: z.ZodEnum<{
63
100
  meters: "meters";
@@ -71,10 +108,25 @@ export declare const PluginUnitsConvertFromArgs: z.ZodObject<{
71
108
  value: z.ZodNumber;
72
109
  }, z.core.$strip>;
73
110
  export type PluginUnitsConvertFromArgs = z.infer<typeof PluginUnitsConvertFromArgs>;
111
+ /**
112
+ * Result of {@linkcode PluginUnitsApi.convertFrom}.
113
+ *
114
+ * | Property | Type | Description |
115
+ * |---|---|---|
116
+ * | `value` | `number` | The converted value in Babylon units |
117
+ */
74
118
  export declare const PluginUnitsConvertFromResult: z.ZodObject<{
75
119
  value: z.ZodNumber;
76
120
  }, z.core.$strip>;
77
121
  export type PluginUnitsConvertFromResult = z.infer<typeof PluginUnitsConvertFromResult>;
122
+ /**
123
+ * Arguments for {@linkcode PluginUnitsApi.convertTo}.
124
+ *
125
+ * | Property | Type | Description |
126
+ * |---|---|---|
127
+ * | `unit` | {@linkcode PUnitType} | Target real-world unit |
128
+ * | `value` | `number` | Numeric value in Babylon units |
129
+ */
78
130
  export declare const PluginUnitsConvertToArgs: z.ZodObject<{
79
131
  unit: z.ZodEnum<{
80
132
  meters: "meters";
@@ -88,6 +140,13 @@ export declare const PluginUnitsConvertToArgs: z.ZodObject<{
88
140
  value: z.ZodNumber;
89
141
  }, z.core.$strip>;
90
142
  export type PluginUnitsConvertToArgs = z.infer<typeof PluginUnitsConvertToArgs>;
143
+ /**
144
+ * Result of {@linkcode PluginUnitsApi.convertTo}.
145
+ *
146
+ * | Property | Type | Description |
147
+ * |---|---|---|
148
+ * | `value` | `number` | The converted value in the target unit |
149
+ */
91
150
  export declare const PluginUnitsConvertToResult: z.ZodObject<{
92
151
  value: z.ZodNumber;
93
152
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/units/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,8BAAsB,cAAc;;IAGlC;;;;;;;;;;;;;;;OAeG;aACa,WAAW,CACzB,IAAI,EAAE,0BAA0B,GAC/B,eAAe,CAAC,4BAA4B,CAAC;IAEhD;;;;;;;;;;;;;;;OAeG;aACa,SAAS,CACvB,IAAI,EAAE,wBAAwB,GAC7B,eAAe,CAAC,0BAA0B,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS;;;;;;;;EAQpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAEjD,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBAGrC,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF,eAAO,MAAM,4BAA4B;;iBAEvC,CAAA;AAEF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAGnC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,eAAO,MAAM,0BAA0B;;iBAErC,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/units/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;;;;;;GASG;AACH,8BAAsB,cAAc;;IAGlC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACa,WAAW,CACzB,IAAI,EAAE,0BAA0B,GAC/B,eAAe,CAAC,4BAA4B,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;aACa,SAAS,CACvB,IAAI,EAAE,wBAAwB,GAC7B,eAAe,CAAC,0BAA0B,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS;;;;;;;;EAQpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBAGrC,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B;;iBAEvC,CAAA;AAEF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAGnC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;iBAErC,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA"}