@snaptrude/plugin-core 1.0.1 → 1.0.2-plainpoint-20261026.2

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 (84) hide show
  1. package/CHANGELOG.md +0 -6
  2. package/api-manifest.json +1581 -94
  3. package/dist/api/core/camera/index.d.ts +12 -4
  4. package/dist/api/core/camera/index.d.ts.map +1 -1
  5. package/dist/api/core/comment/index.d.ts +7 -3
  6. package/dist/api/core/comment/index.d.ts.map +1 -1
  7. package/dist/api/core/geom/create/index.d.ts +69 -21
  8. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  9. package/dist/api/core/geom/query/circle.d.ts +31 -11
  10. package/dist/api/core/geom/query/circle.d.ts.map +1 -1
  11. package/dist/api/core/geom/query/contour.d.ts +19 -7
  12. package/dist/api/core/geom/query/contour.d.ts.map +1 -1
  13. package/dist/api/core/geom/query/curve.d.ts +72 -24
  14. package/dist/api/core/geom/query/curve.d.ts.map +1 -1
  15. package/dist/api/core/geom/query/profile.d.ts +19 -7
  16. package/dist/api/core/geom/query/profile.d.ts.map +1 -1
  17. package/dist/api/core/geom/update/contour.d.ts +36 -12
  18. package/dist/api/core/geom/update/contour.d.ts.map +1 -1
  19. package/dist/api/core/geom/update/curve.d.ts +13 -5
  20. package/dist/api/core/geom/update/curve.d.ts.map +1 -1
  21. package/dist/api/core/geom/update/profile.d.ts +36 -12
  22. package/dist/api/core/geom/update/profile.d.ts.map +1 -1
  23. package/dist/api/core/io/import/index.d.ts +7 -3
  24. package/dist/api/core/io/import/index.d.ts.map +1 -1
  25. package/dist/api/core/math/quat.d.ts +2 -2
  26. package/dist/api/core/math/quat.d.ts.map +1 -1
  27. package/dist/api/core/math/vec3.d.ts +15 -15
  28. package/dist/api/core/math/vec3.d.ts.map +1 -1
  29. package/dist/api/design/boolean/index.d.ts +20 -4
  30. package/dist/api/design/boolean/index.d.ts.map +1 -1
  31. package/dist/api/design/create/bulk-items.d.ts +20 -4
  32. package/dist/api/design/create/bulk-items.d.ts.map +1 -1
  33. package/dist/api/design/create/index.d.ts +67 -27
  34. package/dist/api/design/create/index.d.ts.map +1 -1
  35. package/dist/api/design/delete/index.d.ts +14 -7
  36. package/dist/api/design/delete/index.d.ts.map +1 -1
  37. package/dist/api/design/dimensions.d.ts +12 -4
  38. package/dist/api/design/dimensions.d.ts.map +1 -1
  39. package/dist/api/design/edit/index.d.ts +7 -3
  40. package/dist/api/design/edit/index.d.ts.map +1 -1
  41. package/dist/api/design/erase/index.d.ts +10 -2
  42. package/dist/api/design/erase/index.d.ts.map +1 -1
  43. package/dist/api/design/family.d.ts +5 -1
  44. package/dist/api/design/family.d.ts.map +1 -1
  45. package/dist/api/design/lock.d.ts +3 -0
  46. package/dist/api/design/lock.d.ts.map +1 -1
  47. package/dist/api/design/transform/index.d.ts +28 -8
  48. package/dist/api/design/transform/index.d.ts.map +1 -1
  49. package/dist/api/entity/space.d.ts +30 -6
  50. package/dist/api/entity/space.d.ts.map +1 -1
  51. package/dist/api/presentation/drawings.d.ts +1 -1
  52. package/dist/handles.d.ts +8 -0
  53. package/dist/handles.d.ts.map +1 -1
  54. package/dist/index.cjs +91 -79
  55. package/dist/index.cjs.map +1 -1
  56. package/dist/index.js +90 -79
  57. package/dist/index.js.map +1 -1
  58. package/package.json +13 -13
  59. package/src/api/core/camera/index.ts +5 -5
  60. package/src/api/core/comment/index.ts +3 -3
  61. package/src/api/core/geom/create/index.ts +25 -25
  62. package/src/api/core/geom/query/circle.ts +11 -11
  63. package/src/api/core/geom/query/contour.ts +7 -6
  64. package/src/api/core/geom/query/curve.ts +25 -25
  65. package/src/api/core/geom/query/profile.ts +7 -6
  66. package/src/api/core/geom/update/contour.ts +12 -11
  67. package/src/api/core/geom/update/curve.ts +5 -5
  68. package/src/api/core/geom/update/profile.ts +12 -11
  69. package/src/api/core/io/import/index.ts +3 -2
  70. package/src/api/core/math/quat.ts +2 -2
  71. package/src/api/core/math/vec3.ts +16 -16
  72. package/src/api/design/boolean/index.ts +2 -2
  73. package/src/api/design/create/bulk-items.ts +3 -2
  74. package/src/api/design/create/index.ts +27 -26
  75. package/src/api/design/delete/index.ts +14 -7
  76. package/src/api/design/dimensions.ts +5 -4
  77. package/src/api/design/edit/index.ts +3 -3
  78. package/src/api/design/erase/index.ts +2 -2
  79. package/src/api/design/family.ts +2 -1
  80. package/src/api/design/lock.ts +6 -0
  81. package/src/api/design/transform/index.ts +15 -7
  82. package/src/api/entity/space.ts +5 -4
  83. package/src/handles.ts +11 -0
  84. package/test/handles.test.mjs +36 -0
@@ -4,6 +4,7 @@ import {
4
4
  ContourHandle,
5
5
  ProfileHandle,
6
6
  Vec3Handle,
7
+ Vec3Input,
7
8
  Vec3Components,
8
9
  } from "../../../../handles"
9
10
 
@@ -69,7 +70,7 @@ export abstract class PluginGeomUpdateContourApi {
69
70
  */
70
71
  public abstract move(
71
72
  contour: ContourHandle,
72
- translation: Vec3Handle,
73
+ translation: Vec3Input,
73
74
  ): PluginApiReturn<ContourHandle>
74
75
 
75
76
  /**
@@ -96,9 +97,9 @@ export abstract class PluginGeomUpdateContourApi {
96
97
  */
97
98
  public abstract rotate(
98
99
  contour: ContourHandle,
99
- axis: Vec3Handle,
100
+ axis: Vec3Input,
100
101
  angle: number,
101
- pivot?: Vec3Handle,
102
+ pivot?: Vec3Input,
102
103
  ): PluginApiReturn<ContourHandle>
103
104
 
104
105
  /**
@@ -124,7 +125,7 @@ export abstract class PluginGeomUpdateContourApi {
124
125
  public abstract scale(
125
126
  contour: ContourHandle,
126
127
  factor: number | Vec3Components,
127
- pivot?: Vec3Handle,
128
+ pivot?: Vec3Input,
128
129
  ): PluginApiReturn<ContourHandle>
129
130
 
130
131
  /**
@@ -149,7 +150,7 @@ export abstract class PluginGeomUpdateContourApi {
149
150
  */
150
151
  public abstract mirror(
151
152
  contour: ContourHandle,
152
- plane: { point: Vec3Handle; normal: Vec3Handle },
153
+ plane: { point: Vec3Input; normal: Vec3Input },
153
154
  ): PluginApiReturn<ContourHandle>
154
155
 
155
156
  /**
@@ -233,7 +234,7 @@ export type PluginGeomUpdateContourOffsetArgs = z.infer<typeof PluginGeomUpdateC
233
234
  */
234
235
  export const PluginGeomUpdateContourMoveArgs = z.object({
235
236
  contour: ContourHandle,
236
- translation: Vec3Handle,
237
+ translation: Vec3Input,
237
238
  })
238
239
 
239
240
  export type PluginGeomUpdateContourMoveArgs = z.infer<typeof PluginGeomUpdateContourMoveArgs>
@@ -250,9 +251,9 @@ export type PluginGeomUpdateContourMoveArgs = z.infer<typeof PluginGeomUpdateCon
250
251
  */
251
252
  export const PluginGeomUpdateContourRotateArgs = z.object({
252
253
  contour: ContourHandle,
253
- axis: Vec3Handle,
254
+ axis: Vec3Input,
254
255
  angle: z.number(),
255
- pivot: Vec3Handle.optional(),
256
+ pivot: Vec3Input.optional(),
256
257
  })
257
258
 
258
259
  export type PluginGeomUpdateContourRotateArgs = z.infer<typeof PluginGeomUpdateContourRotateArgs>
@@ -269,7 +270,7 @@ export type PluginGeomUpdateContourRotateArgs = z.infer<typeof PluginGeomUpdateC
269
270
  export const PluginGeomUpdateContourScaleArgs = z.object({
270
271
  contour: ContourHandle,
271
272
  factor: z.union([z.number(), Vec3Components]),
272
- pivot: Vec3Handle.optional(),
273
+ pivot: Vec3Input.optional(),
273
274
  })
274
275
 
275
276
  export type PluginGeomUpdateContourScaleArgs = z.infer<typeof PluginGeomUpdateContourScaleArgs>
@@ -285,8 +286,8 @@ export type PluginGeomUpdateContourScaleArgs = z.infer<typeof PluginGeomUpdateCo
285
286
  export const PluginGeomUpdateContourMirrorArgs = z.object({
286
287
  contour: ContourHandle,
287
288
  plane: z.object({
288
- point: Vec3Handle,
289
- normal: Vec3Handle,
289
+ point: Vec3Input,
290
+ normal: Vec3Input,
290
291
  }),
291
292
  })
292
293
 
@@ -1,6 +1,6 @@
1
1
  import * as z from "zod"
2
2
  import { PluginApiReturn } from "../../../../types"
3
- import { Vec3Handle, CurveHandle } from "../../../../handles"
3
+ import { Vec3Handle, Vec3Input, CurveHandle } from "../../../../handles"
4
4
 
5
5
  /**
6
6
  * Curve editing — produce NEW curves from an existing one (all-handle model, §11).
@@ -61,7 +61,7 @@ export abstract class PluginGeomUpdateCurveApi {
61
61
  */
62
62
  public abstract split(
63
63
  curve: CurveHandle,
64
- point: Vec3Handle,
64
+ point: Vec3Input,
65
65
  ): PluginApiReturn<CurveHandle[]>
66
66
 
67
67
  /**
@@ -110,7 +110,7 @@ export abstract class PluginGeomUpdateCurveApi {
110
110
  */
111
111
  public abstract offset(
112
112
  curve: CurveHandle,
113
- vector: Vec3Handle,
113
+ vector: Vec3Input,
114
114
  ): PluginApiReturn<CurveHandle>
115
115
 
116
116
  /**
@@ -158,7 +158,7 @@ export type PluginGeomUpdateCurveExtendArgs = z.infer<typeof PluginGeomUpdateCur
158
158
  */
159
159
  export const PluginGeomUpdateCurveSplitArgs = z.object({
160
160
  curve: CurveHandle,
161
- point: Vec3Handle,
161
+ point: Vec3Input,
162
162
  })
163
163
 
164
164
  export type PluginGeomUpdateCurveSplitArgs = z.infer<typeof PluginGeomUpdateCurveSplitArgs>
@@ -190,7 +190,7 @@ export type PluginGeomUpdateCurveTrimArgs = z.infer<typeof PluginGeomUpdateCurve
190
190
  */
191
191
  export const PluginGeomUpdateCurveOffsetArgs = z.object({
192
192
  curve: CurveHandle,
193
- vector: Vec3Handle,
193
+ vector: Vec3Input,
194
194
  })
195
195
 
196
196
  export type PluginGeomUpdateCurveOffsetArgs = z.infer<typeof PluginGeomUpdateCurveOffsetArgs>
@@ -3,6 +3,7 @@ import { PluginApiReturn } from "../../../../types"
3
3
  import {
4
4
  ProfileHandle,
5
5
  Vec3Handle,
6
+ Vec3Input,
6
7
  CurveHandle,
7
8
  Vec3Components,
8
9
  } from "../../../../handles"
@@ -66,7 +67,7 @@ export abstract class PluginGeomUpdateProfileApi {
66
67
  */
67
68
  public abstract move(
68
69
  profile: ProfileHandle,
69
- translation: Vec3Handle,
70
+ translation: Vec3Input,
70
71
  ): PluginApiReturn<ProfileHandle>
71
72
 
72
73
  /**
@@ -91,9 +92,9 @@ export abstract class PluginGeomUpdateProfileApi {
91
92
  */
92
93
  public abstract rotate(
93
94
  profile: ProfileHandle,
94
- axis: Vec3Handle,
95
+ axis: Vec3Input,
95
96
  angle: number,
96
- pivot?: Vec3Handle,
97
+ pivot?: Vec3Input,
97
98
  ): PluginApiReturn<ProfileHandle>
98
99
 
99
100
  /**
@@ -118,7 +119,7 @@ export abstract class PluginGeomUpdateProfileApi {
118
119
  public abstract scale(
119
120
  profile: ProfileHandle,
120
121
  factor: number | Vec3Components,
121
- pivot?: Vec3Handle,
122
+ pivot?: Vec3Input,
122
123
  ): PluginApiReturn<ProfileHandle>
123
124
 
124
125
  /**
@@ -142,7 +143,7 @@ export abstract class PluginGeomUpdateProfileApi {
142
143
  */
143
144
  public abstract mirror(
144
145
  profile: ProfileHandle,
145
- plane: { point: Vec3Handle; normal: Vec3Handle },
146
+ plane: { point: Vec3Input; normal: Vec3Input },
146
147
  ): PluginApiReturn<ProfileHandle>
147
148
 
148
149
  /**
@@ -261,7 +262,7 @@ export type PluginGeomUpdateProfileOffsetArgs = z.infer<typeof PluginGeomUpdateP
261
262
  */
262
263
  export const PluginGeomUpdateProfileMoveArgs = z.object({
263
264
  profile: ProfileHandle,
264
- translation: Vec3Handle,
265
+ translation: Vec3Input,
265
266
  })
266
267
 
267
268
  export type PluginGeomUpdateProfileMoveArgs = z.infer<typeof PluginGeomUpdateProfileMoveArgs>
@@ -278,9 +279,9 @@ export type PluginGeomUpdateProfileMoveArgs = z.infer<typeof PluginGeomUpdatePro
278
279
  */
279
280
  export const PluginGeomUpdateProfileRotateArgs = z.object({
280
281
  profile: ProfileHandle,
281
- axis: Vec3Handle,
282
+ axis: Vec3Input,
282
283
  angle: z.number(),
283
- pivot: Vec3Handle.optional(),
284
+ pivot: Vec3Input.optional(),
284
285
  })
285
286
 
286
287
  export type PluginGeomUpdateProfileRotateArgs = z.infer<typeof PluginGeomUpdateProfileRotateArgs>
@@ -297,7 +298,7 @@ export type PluginGeomUpdateProfileRotateArgs = z.infer<typeof PluginGeomUpdateP
297
298
  export const PluginGeomUpdateProfileScaleArgs = z.object({
298
299
  profile: ProfileHandle,
299
300
  factor: z.union([z.number(), Vec3Components]),
300
- pivot: Vec3Handle.optional(),
301
+ pivot: Vec3Input.optional(),
301
302
  })
302
303
 
303
304
  export type PluginGeomUpdateProfileScaleArgs = z.infer<typeof PluginGeomUpdateProfileScaleArgs>
@@ -313,8 +314,8 @@ export type PluginGeomUpdateProfileScaleArgs = z.infer<typeof PluginGeomUpdatePr
313
314
  export const PluginGeomUpdateProfileMirrorArgs = z.object({
314
315
  profile: ProfileHandle,
315
316
  plane: z.object({
316
- point: Vec3Handle,
317
- normal: Vec3Handle,
317
+ point: Vec3Input,
318
+ normal: Vec3Input,
318
319
  }),
319
320
  })
320
321
 
@@ -2,6 +2,7 @@ import * as z from "zod"
2
2
  import { PluginApiReturn } from "../../../../types"
3
3
  import {
4
4
  Vec3Handle,
5
+ Vec3Input,
5
6
  UnderlayHandle,
6
7
  TerrainHandle,
7
8
  ImportJobHandle,
@@ -266,7 +267,7 @@ export abstract class PluginCoreIoImportApi {
266
267
  source: string,
267
268
  storey?: number,
268
269
  format?: ModelFormat,
269
- position?: Vec3Handle,
270
+ position?: Vec3Input,
270
271
  label?: string,
271
272
  ): PluginApiReturn<ComponentHandle>
272
273
 
@@ -445,7 +446,7 @@ export const PluginImportModelArgs = z.object({
445
446
  source: ImportSource,
446
447
  storey: z.number().int().optional(),
447
448
  format: ModelFormat.optional(),
448
- position: Vec3Handle.optional(),
449
+ position: Vec3Input.optional(),
449
450
  label: z.string().optional(),
450
451
  })
451
452
  export type PluginImportModelArgs = z.infer<typeof PluginImportModelArgs>
@@ -1,5 +1,5 @@
1
1
  import { PluginApiReturn } from "../../../types"
2
- import { Vec3Handle, QuatHandle, QuatComponents } from "../../../handles"
2
+ import { Vec3Handle, Vec3Input, QuatHandle, QuatComponents } from "../../../handles"
3
3
 
4
4
  /**
5
5
  * Quaternion operations (all-handle model, §11).
@@ -39,7 +39,7 @@ export abstract class PluginQuatApi {
39
39
  * const quarterTurn = await snaptrude.core.math.quat.fromAxisAngle(axis, Math.PI / 2)
40
40
  * ```
41
41
  */
42
- abstract fromAxisAngle(axis: Vec3Handle, angle: number): PluginApiReturn<QuatHandle>
42
+ abstract fromAxisAngle(axis: Vec3Input, angle: number): PluginApiReturn<QuatHandle>
43
43
  /**
44
44
  * Build a quaternion from Euler angles in radians.
45
45
  *
@@ -1,5 +1,5 @@
1
1
  import { PluginApiReturn } from "../../../types"
2
- import { Vec3Handle, Vec3Components } from "../../../handles"
2
+ import { Vec3Handle, Vec3Input, Vec3Components } from "../../../handles"
3
3
 
4
4
  /**
5
5
  * 3D vector operations (all-handle model, §11).
@@ -31,7 +31,7 @@ export abstract class PluginVec3Api {
31
31
  * const sum = await snaptrude.core.math.vec3.add(a, b)
32
32
  * ```
33
33
  */
34
- abstract add(a: Vec3Handle, b: Vec3Handle): PluginApiReturn<Vec3Handle>
34
+ abstract add(a: Vec3Input, b: Vec3Input): PluginApiReturn<Vec3Handle>
35
35
  /**
36
36
  * Subtract vector `b` from `a` component-wise (`a - b`).
37
37
  *
@@ -42,7 +42,7 @@ export abstract class PluginVec3Api {
42
42
  * const diff = await snaptrude.core.math.vec3.subtract(a, b)
43
43
  * ```
44
44
  */
45
- abstract subtract(a: Vec3Handle, b: Vec3Handle): PluginApiReturn<Vec3Handle>
45
+ abstract subtract(a: Vec3Input, b: Vec3Input): PluginApiReturn<Vec3Handle>
46
46
  /**
47
47
  * Scale `v` by a scalar.
48
48
  *
@@ -52,7 +52,7 @@ export abstract class PluginVec3Api {
52
52
  * const doubled = await snaptrude.core.math.vec3.scale(v, 2)
53
53
  * ```
54
54
  */
55
- abstract scale(v: Vec3Handle, scalar: number): PluginApiReturn<Vec3Handle>
55
+ abstract scale(v: Vec3Input, scalar: number): PluginApiReturn<Vec3Handle>
56
56
  /**
57
57
  * Compute the dot product of two vectors.
58
58
  *
@@ -63,7 +63,7 @@ export abstract class PluginVec3Api {
63
63
  * const d = await snaptrude.core.math.vec3.dot(a, b) // 0.5
64
64
  * ```
65
65
  */
66
- abstract dot(a: Vec3Handle, b: Vec3Handle): PluginApiReturn<number>
66
+ abstract dot(a: Vec3Input, b: Vec3Input): PluginApiReturn<number>
67
67
  /**
68
68
  * Compute the cross product `a × b` — the vector perpendicular to both.
69
69
  *
@@ -74,7 +74,7 @@ export abstract class PluginVec3Api {
74
74
  * const perpendicular = await snaptrude.core.math.vec3.cross(a, b)
75
75
  * ```
76
76
  */
77
- abstract cross(a: Vec3Handle, b: Vec3Handle): PluginApiReturn<Vec3Handle>
77
+ abstract cross(a: Vec3Input, b: Vec3Input): PluginApiReturn<Vec3Handle>
78
78
  /**
79
79
  * Compute the Euclidean length (magnitude) of a vector.
80
80
  *
@@ -84,7 +84,7 @@ export abstract class PluginVec3Api {
84
84
  * const len = await snaptrude.core.math.vec3.length(v) // 5
85
85
  * ```
86
86
  */
87
- abstract length(v: Vec3Handle): PluginApiReturn<number>
87
+ abstract length(v: Vec3Input): PluginApiReturn<number>
88
88
  /**
89
89
  * Compute the squared Euclidean length of a vector (avoids the sqrt).
90
90
  *
@@ -94,7 +94,7 @@ export abstract class PluginVec3Api {
94
94
  * const sq = await snaptrude.core.math.vec3.lengthSquared(v) // 25
95
95
  * ```
96
96
  */
97
- abstract lengthSquared(v: Vec3Handle): PluginApiReturn<number>
97
+ abstract lengthSquared(v: Vec3Input): PluginApiReturn<number>
98
98
  /**
99
99
  * Return the unit vector in the same direction (the zero vector if length is 0).
100
100
  *
@@ -104,7 +104,7 @@ export abstract class PluginVec3Api {
104
104
  * const unit = await snaptrude.core.math.vec3.normalize(v) // (0, 0, 1)
105
105
  * ```
106
106
  */
107
- abstract normalize(v: Vec3Handle): PluginApiReturn<Vec3Handle>
107
+ abstract normalize(v: Vec3Input): PluginApiReturn<Vec3Handle>
108
108
  /**
109
109
  * Measure the straight-line (Euclidean) distance between two points.
110
110
  *
@@ -118,7 +118,7 @@ export abstract class PluginVec3Api {
118
118
  * const dist = await snaptrude.core.math.vec3.distance(a, b) // 5
119
119
  * ```
120
120
  */
121
- abstract distance(a: Vec3Handle, b: Vec3Handle): PluginApiReturn<number>
121
+ abstract distance(a: Vec3Input, b: Vec3Input): PluginApiReturn<number>
122
122
  /**
123
123
  * Linearly interpolate between two vectors: `a + (b - a) * t`.
124
124
  *
@@ -129,7 +129,7 @@ export abstract class PluginVec3Api {
129
129
  * const midpoint = await snaptrude.core.math.vec3.lerp(a, b, 0.5)
130
130
  * ```
131
131
  */
132
- abstract lerp(a: Vec3Handle, b: Vec3Handle, t: number): PluginApiReturn<Vec3Handle>
132
+ abstract lerp(a: Vec3Input, b: Vec3Input, t: number): PluginApiReturn<Vec3Handle>
133
133
  /**
134
134
  * Negate a vector, reversing its direction.
135
135
  *
@@ -139,7 +139,7 @@ export abstract class PluginVec3Api {
139
139
  * const reversed = await snaptrude.core.math.vec3.negate(v) // (-1, 2, -3)
140
140
  * ```
141
141
  */
142
- abstract negate(v: Vec3Handle): PluginApiReturn<Vec3Handle>
142
+ abstract negate(v: Vec3Input): PluginApiReturn<Vec3Handle>
143
143
  /**
144
144
  * Test whether two vectors have exactly equal components.
145
145
  *
@@ -150,7 +150,7 @@ export abstract class PluginVec3Api {
150
150
  * const same = await snaptrude.core.math.vec3.equals(a, b) // true
151
151
  * ```
152
152
  */
153
- abstract equals(a: Vec3Handle, b: Vec3Handle): PluginApiReturn<boolean>
153
+ abstract equals(a: Vec3Input, b: Vec3Input): PluginApiReturn<boolean>
154
154
  /**
155
155
  * Test whether two vectors are equal within a tolerance `epsilon` (default `1e-6`).
156
156
  *
@@ -162,8 +162,8 @@ export abstract class PluginVec3Api {
162
162
  * ```
163
163
  */
164
164
  abstract equalsApprox(
165
- a: Vec3Handle,
166
- b: Vec3Handle,
165
+ a: Vec3Input,
166
+ b: Vec3Input,
167
167
  epsilon?: number,
168
168
  ): PluginApiReturn<boolean>
169
169
  /**
@@ -175,5 +175,5 @@ export abstract class PluginVec3Api {
175
175
  * const { x, y, z } = await snaptrude.core.math.vec3.components(v)
176
176
  * ```
177
177
  */
178
- abstract components(v: Vec3Handle): PluginApiReturn<Vec3Components>
178
+ abstract components(v: Vec3Input): PluginApiReturn<Vec3Components>
179
179
  }
@@ -1,6 +1,6 @@
1
1
  import * as z from "zod"
2
2
  import { PluginApiReturn } from "../../../types"
3
- import { ComponentHandle, Vec3Handle } from "../../../handles"
3
+ import { ComponentHandle, Vec3Handle, Vec3Input } from "../../../handles"
4
4
  import { BooleanOutcome } from "../shared"
5
5
 
6
6
  /**
@@ -132,7 +132,7 @@ export abstract class PluginDesignBooleanApi {
132
132
  * | `offset` | {@linkcode Vec3Handle} | Translation added to the created result mass(es) (default: none) |
133
133
  */
134
134
  export const BooleanOptions = z.object({
135
- offset: Vec3Handle.optional(),
135
+ offset: Vec3Input.optional(),
136
136
  })
137
137
  export type BooleanOptions = z.infer<typeof BooleanOptions>
138
138
 
@@ -4,6 +4,7 @@ import {
4
4
  ContourHandle,
5
5
  ProfileHandle,
6
6
  Vec3Handle,
7
+ Vec3Input,
7
8
  } from "../../../handles"
8
9
  import { PluginOpeningBaseOptions } from "./opening-fields"
9
10
  import { PluginWallType } from "../types"
@@ -135,7 +136,7 @@ export type PluginCreateWallRunItems = z.infer<typeof PluginCreateWallRunItems>
135
136
  export const PluginCreateFloorItem = z.object({
136
137
  contour: ContourHandle,
137
138
  thickness: z.number(),
138
- position: Vec3Handle.optional(),
139
+ position: Vec3Input.optional(),
139
140
  })
140
141
  export type PluginCreateFloorItem = z.infer<typeof PluginCreateFloorItem>
141
142
 
@@ -245,7 +246,7 @@ export type PluginCreateWindowItems = z.infer<typeof PluginCreateWindowItems>
245
246
  */
246
247
  export const PluginCreateFurnitureItem = z.object({
247
248
  catalogId: z.string().min(1),
248
- position: Vec3Handle,
249
+ position: Vec3Input,
249
250
  label: z.string().optional(),
250
251
  angleInDegrees: z.number().optional(),
251
252
  })
@@ -8,6 +8,7 @@ import {
8
8
  CurveHandle,
9
9
  ProfileHandle,
10
10
  Vec3Handle,
11
+ Vec3Input,
11
12
  } from "../../../handles"
12
13
  import { PluginGridStyleOptions } from "./grids"
13
14
  import { PluginGraphicsLineStyleId } from "../../presentation/graphics"
@@ -130,7 +131,7 @@ export abstract class PluginDesignCreateApi {
130
131
  contour: ContourHandle,
131
132
  height: number,
132
133
  label?: string,
133
- position?: Vec3Handle,
134
+ position?: Vec3Input,
134
135
  spaceType?: PluginSpaceType,
135
136
  massType?: PluginMassType,
136
137
  departmentId?: PluginDepartmentId,
@@ -165,7 +166,7 @@ export abstract class PluginDesignCreateApi {
165
166
  contour: ContourHandle,
166
167
  height: number,
167
168
  label?: string,
168
- position?: Vec3Handle,
169
+ position?: Vec3Input,
169
170
  massType?: PluginMassType,
170
171
  ): PluginApiReturn<ComponentHandle>
171
172
 
@@ -288,7 +289,7 @@ export abstract class PluginDesignCreateApi {
288
289
  */
289
290
  public abstract floor(
290
291
  ...args:
291
- | [contour: ContourHandle, thickness: number, position?: Vec3Handle]
292
+ | [contour: ContourHandle, thickness: number, position?: Vec3Input]
292
293
  | [contour: ContourHandle, options: PluginFamilyFloorOptions]
293
294
  ): PluginApiReturn<ComponentHandle[]>
294
295
 
@@ -422,10 +423,10 @@ export abstract class PluginDesignCreateApi {
422
423
  public abstract column(
423
424
  ...args:
424
425
  | [
425
- position: Vec3Handle,
426
+ position: Vec3Input,
426
427
  crossSection: ContourHandle,
427
428
  height: number,
428
- directionUp?: Vec3Handle,
429
+ directionUp?: Vec3Input,
429
430
  ]
430
431
  | [axis: LineHandle, options: PluginFamilyPlacement]
431
432
  ): PluginApiReturn<ComponentHandle>
@@ -472,7 +473,7 @@ export abstract class PluginDesignCreateApi {
472
473
  */
473
474
  public abstract beam(
474
475
  ...args:
475
- | [section: ContourHandle, length: number, direction?: Vec3Handle]
476
+ | [section: ContourHandle, length: number, direction?: Vec3Input]
476
477
  | [axis: LineHandle, options: PluginFamilyPlacement]
477
478
  ): PluginApiReturn<ComponentHandle>
478
479
 
@@ -649,7 +650,7 @@ export abstract class PluginDesignCreateApi {
649
650
  */
650
651
  public abstract staircase(
651
652
  preset: PluginStaircasePreset,
652
- position: Vec3Handle,
653
+ position: Vec3Input,
653
654
  label?: string,
654
655
  structureId?: string,
655
656
  level?: string,
@@ -740,7 +741,7 @@ export abstract class PluginDesignCreateApi {
740
741
  spacingY: number,
741
742
  options?: {
742
743
  angle?: number
743
- center?: Vec3Handle
744
+ center?: Vec3Input
744
745
  } & PluginGridStyleOptions,
745
746
  ): PluginApiReturn<ComponentHandle>
746
747
 
@@ -895,7 +896,7 @@ export abstract class PluginDesignCreateApi {
895
896
  */
896
897
  public abstract furniture(
897
898
  catalogId: string,
898
- position: Vec3Handle,
899
+ position: Vec3Input,
899
900
  options?: { label?: string; createNewSourceMesh?: boolean },
900
901
  angleInDegrees?: number,
901
902
  ): PluginApiReturn<ComponentHandle>
@@ -1008,14 +1009,14 @@ export abstract class PluginDesignCreateApi {
1008
1009
  public abstract door(
1009
1010
  familyId: string,
1010
1011
  hostWall: ComponentHandle,
1011
- position: Vec3Handle,
1012
+ position: Vec3Input,
1012
1013
  options?: {
1013
1014
  label?: string
1014
- hinge?: Vec3Handle
1015
+ hinge?: Vec3Input
1015
1016
  version?: number
1016
1017
  values?: Record<string, number | string>
1017
1018
  },
1018
- facing?: Vec3Handle,
1019
+ facing?: Vec3Input,
1019
1020
  ): PluginApiReturn<ComponentHandle>
1020
1021
 
1021
1022
  /**
@@ -1112,14 +1113,14 @@ export abstract class PluginDesignCreateApi {
1112
1113
  public abstract window(
1113
1114
  familyId: string,
1114
1115
  hostWall: ComponentHandle,
1115
- position: Vec3Handle,
1116
+ position: Vec3Input,
1116
1117
  options?: {
1117
1118
  label?: string
1118
- hinge?: Vec3Handle
1119
+ hinge?: Vec3Input
1119
1120
  version?: number
1120
1121
  values?: Record<string, number | string>
1121
1122
  },
1122
- facing?: Vec3Handle,
1123
+ facing?: Vec3Input,
1123
1124
  ): PluginApiReturn<ComponentHandle>
1124
1125
 
1125
1126
  /**
@@ -1446,7 +1447,7 @@ export abstract class PluginDesignCreateApi {
1446
1447
  */
1447
1448
  public abstract copy(
1448
1449
  components: ComponentHandle[],
1449
- displacement: Vec3Handle,
1450
+ displacement: Vec3Input,
1450
1451
  options?: { count?: number; mode?: PluginCopyMode },
1451
1452
  ): PluginApiReturn<ComponentHandle[]>
1452
1453
 
@@ -1669,7 +1670,7 @@ export const PluginDesignCreateSpaceArgs = z.object({
1669
1670
  contour: ContourHandle,
1670
1671
  height: z.number(),
1671
1672
  label: z.string().optional(),
1672
- position: Vec3Handle.optional(),
1673
+ position: Vec3Input.optional(),
1673
1674
  spaceType: PluginSpaceType.optional(),
1674
1675
  massType: PluginMassType.optional(),
1675
1676
  departmentId: PluginDepartmentId.optional(),
@@ -1700,7 +1701,7 @@ export const PluginDesignCreateMassArgs = z.object({
1700
1701
  contour: ContourHandle,
1701
1702
  height: z.number(),
1702
1703
  label: z.string().optional(),
1703
- position: Vec3Handle.optional(),
1704
+ position: Vec3Input.optional(),
1704
1705
  massType: PluginMassType.optional(),
1705
1706
  })
1706
1707
  export type PluginDesignCreateMassArgs = z.infer<
@@ -1767,7 +1768,7 @@ export type PluginDesignCreateSlabArgs = z.infer<
1767
1768
  export const PluginDesignCreateFloorArgs = z.object({
1768
1769
  contour: ContourHandle,
1769
1770
  thickness: z.number(),
1770
- position: Vec3Handle.optional(),
1771
+ position: Vec3Input.optional(),
1771
1772
  })
1772
1773
  export type PluginDesignCreateFloorArgs = z.infer<
1773
1774
  typeof PluginDesignCreateFloorArgs
@@ -1830,10 +1831,10 @@ export type PluginDesignCreateCeilingArgs = z.infer<
1830
1831
  * | `directionUp` | {@linkcode Vec3Handle}? | Up axis (default world up) |
1831
1832
  */
1832
1833
  export const PluginDesignCreateColumnArgs = z.object({
1833
- position: Vec3Handle,
1834
+ position: Vec3Input,
1834
1835
  crossSection: ContourHandle,
1835
1836
  height: z.number(),
1836
- directionUp: Vec3Handle.optional(),
1837
+ directionUp: Vec3Input.optional(),
1837
1838
  })
1838
1839
  export type PluginDesignCreateColumnArgs = z.infer<
1839
1840
  typeof PluginDesignCreateColumnArgs
@@ -1855,7 +1856,7 @@ export type PluginDesignCreateColumnArgs = z.infer<
1855
1856
  export const PluginDesignCreateBeamArgs = z.object({
1856
1857
  section: ContourHandle,
1857
1858
  length: z.number(),
1858
- direction: Vec3Handle.optional(),
1859
+ direction: Vec3Input.optional(),
1859
1860
  })
1860
1861
  export type PluginDesignCreateBeamArgs = z.infer<
1861
1862
  typeof PluginDesignCreateBeamArgs
@@ -1910,7 +1911,7 @@ export type PluginDesignCreateWallsArgs = z.infer<
1910
1911
  */
1911
1912
  export const PluginDesignCreateStaircaseArgs = z.object({
1912
1913
  preset: PluginStaircasePreset,
1913
- position: Vec3Handle,
1914
+ position: Vec3Input,
1914
1915
  label: z.string().optional(),
1915
1916
  structureId: z.string().optional(),
1916
1917
  level: z.string().optional(),
@@ -1937,7 +1938,7 @@ export type PluginDesignCreateStaircaseArgs = z.infer<
1937
1938
  */
1938
1939
  export const PluginDesignCreateFurnitureArgs = z.object({
1939
1940
  catalogId: z.string().min(1),
1940
- position: Vec3Handle,
1941
+ position: Vec3Input,
1941
1942
  label: z.string().optional(),
1942
1943
  createNewSourceMesh: z.boolean().optional(),
1943
1944
  angleInDegrees: z.number().optional(),
@@ -2195,7 +2196,7 @@ export type PluginCopyMode = z.infer<typeof PluginCopyMode>
2195
2196
  */
2196
2197
  export const PluginDesignCreateCopyArgs = z.object({
2197
2198
  components: z.array(ComponentHandle).min(1),
2198
- displacement: Vec3Handle,
2199
+ displacement: Vec3Input,
2199
2200
  count: z.number().int().positive().optional(),
2200
2201
  mode: PluginCopyMode.optional(),
2201
2202
  })
@@ -2228,7 +2229,7 @@ export const PluginCreateSpaceItem = z.object({
2228
2229
  contour: ContourHandle,
2229
2230
  height: z.number(),
2230
2231
  label: z.string().optional(),
2231
- position: Vec3Handle.optional(),
2232
+ position: Vec3Input.optional(),
2232
2233
  spaceType: PluginSpaceType.optional(),
2233
2234
  massType: PluginMassType.optional(),
2234
2235
  departmentId: PluginDepartmentId.optional(),
@@ -8,7 +8,7 @@ import { PluginDesignChangeResult } from "../lock"
8
8
  *
9
9
  * | Property | Type | Description |
10
10
  * |---|---|---|
11
- * | `components` | {@linkcode ComponentHandle}`[]` | Entities to delete. Unknown/forged handles reject the whole call (fail-fast). |
11
+ * | `components` | {@linkcode ComponentHandle}`[]` | Entities to delete. Handles that no longer resolve are skipped and returned as `missing`; the call rejects only when none resolve. |
12
12
  *
13
13
  * `.min(1)` is deliberately stricter than the shipped `PluginDesignLockArgs`
14
14
  * (which allows an empty array) — an empty delete is a caller error, not a no-op.
@@ -43,12 +43,19 @@ export abstract class PluginDesignDeleteApi {
43
43
  * entry, exactly as the editor's Delete key does — see `design.dimensions`. They are
44
44
  * NOT listed in `affected`, which reports component handles only.
45
45
  *
46
- * @param components - Entities to delete. Unknown/forged handles reject the whole call (fail-fast).
47
- * @returns The entities that were deleted, as {@linkcode ComponentHandle}`[]`
48
- * (echoed host-side from the resolved+deleted set — the engine returns no ids).
49
- * Deleted handles are **stale** afterwards: re-resolving one throws `HANDLE_INVALID`.
50
- * @throws If any supplied handle is unknown/forged (`HANDLE_INVALID`) — the whole
51
- * call rejects before anything is deleted (all-or-nothing resolution).
46
+ * @param components - Entities to delete. A handle that no longer resolves (already
47
+ * removed by an earlier edit — a door deleted with its wall, a wall replaced by an
48
+ * opening's re-cut) is skipped, not fatal.
49
+ * @returns `{ affected, cascaded?, missing?, rejected? }`: the entities you asked to delete
50
+ * (echoed host-side — the engine returns no ids); `cascaded`, the derived walls/floors/slabs
51
+ * the parametric graph removed with a deleted space; `missing`, handles that no longer
52
+ * resolved and were skipped; `rejected`, handles the engine accepted but left standing
53
+ * (delete them again, one at a time, or report them). Deleted handles are **stale**
54
+ * afterwards: re-resolving one throws `HANDLE_STALE`.
55
+ * @throws `HANDLE_INVALID` when NONE of the supplied handles resolve (nothing is deleted);
56
+ * hosts before Oct 2026 reject the whole call when any handle is gone. `OPERATION_FAILED`
57
+ * when the parametric engine rejects the deletion — the batch is rolled back.
58
+ * `HANDLE_STALE` for a handle the caller held that has since been retired.
52
59
  *
53
60
  * @examplePrompt Delete the selected objects
54
61
  * @examplePrompt Remove these walls from the model