@snaptrude/plugin-core 1.0.2-plainpoint-20261026.2 → 1.0.2-plainpoint-20261102.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 (51) hide show
  1. package/AGENTS.md +1 -0
  2. package/CHANGELOG.md +12 -0
  3. package/api-manifest.json +116 -39
  4. package/dist/api/core/camera/index.d.ts +4 -2
  5. package/dist/api/core/camera/index.d.ts.map +1 -1
  6. package/dist/api/core/storeys/index.d.ts +5 -0
  7. package/dist/api/core/storeys/index.d.ts.map +1 -1
  8. package/dist/api/design/create/bulk-items.d.ts +64 -12
  9. package/dist/api/design/create/bulk-items.d.ts.map +1 -1
  10. package/dist/api/design/create/index.d.ts +67 -32
  11. package/dist/api/design/create/index.d.ts.map +1 -1
  12. package/dist/api/design/create/opening-fields.d.ts +18 -6
  13. package/dist/api/design/create/opening-fields.d.ts.map +1 -1
  14. package/dist/api/design/erase/index.d.ts +2 -10
  15. package/dist/api/design/erase/index.d.ts.map +1 -1
  16. package/dist/api/design/index.d.ts +5 -0
  17. package/dist/api/design/index.d.ts.map +1 -1
  18. package/dist/api/design/text.d.ts +400 -0
  19. package/dist/api/design/text.d.ts.map +1 -0
  20. package/dist/api/entity/story.d.ts +4 -0
  21. package/dist/api/entity/story.d.ts.map +1 -1
  22. package/dist/api/presentation/drawings.d.ts +45 -0
  23. package/dist/api/presentation/drawings.d.ts.map +1 -1
  24. package/dist/api/presentation/graphics.d.ts +4 -0
  25. package/dist/api/presentation/graphics.d.ts.map +1 -1
  26. package/dist/api/presentation/placedViews.d.ts +29 -1
  27. package/dist/api/presentation/placedViews.d.ts.map +1 -1
  28. package/dist/api/presentation/standards.d.ts +14 -0
  29. package/dist/api/presentation/standards.d.ts.map +1 -1
  30. package/dist/api/presentation/views.d.ts +5 -1
  31. package/dist/api/presentation/views.d.ts.map +1 -1
  32. package/dist/index.cjs +2209 -2102
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.js +2197 -2102
  35. package/dist/index.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/api/core/camera/index.ts +4 -2
  38. package/src/api/core/storeys/index.ts +5 -0
  39. package/src/api/design/create/bulk-items.ts +4 -0
  40. package/src/api/design/create/index.ts +7 -20
  41. package/src/api/design/create/opening-fields.ts +7 -7
  42. package/src/api/design/erase/index.ts +2 -2
  43. package/src/api/design/index.ts +5 -0
  44. package/src/api/design/text.ts +394 -0
  45. package/src/api/entity/story.ts +4 -0
  46. package/src/api/presentation/graphics.ts +4 -1
  47. package/src/api/presentation/placedViews.ts +12 -0
  48. package/src/api/presentation/standards.ts +6 -0
  49. package/src/api/presentation/views.ts +7 -2
  50. package/test/designText.test.mjs +72 -0
  51. package/test/paperPensContract.test.mjs +39 -0
package/AGENTS.md CHANGED
@@ -169,6 +169,7 @@ These are in-browser integration tests that exercise the plugin API end-to-end.
169
169
  | `design/query/*` | `tests/designQuery.ts` |
170
170
  | `design/selection/*` | `tests/designSelection.ts` |
171
171
  | `design/lock.ts` | `tests/designLock.ts` |
172
+ | `design/text.ts` | `tests/designText.ts` |
172
173
  | `design/delete/*` | `tests/delete.ts` |
173
174
  | `design/erase/*` | `tests/erase.ts` |
174
175
  | `design/doors/*` | `tests/doors.ts` |
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @snaptrude/plugin-core
2
2
 
3
+ ## 1.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - c05661a: Add `design.text` — authored text and annotations (Text / Annotate tools): `create`, `list`, `get`, `update`, `setLeader`; texts are `ComponentHandle`s, so delete / move / rotate / copy / hide / lock use the generic design APIs. Paper Pens gains a `"Text"` annotation category (projection pen = leader weight, `annotationText.Text.textMm` size, resolved `text.annotationMm`; no per-view override), and `presentation.placedViews.updateStyles` gains the `"Text"` and `"Annotation"` categories with `textFontFamily`, `textFontStyle` and `leaderVisible`.
8
+
9
+ ## 1.0.1
10
+
11
+ ### Patch Changes
12
+
13
+ - b404589: Add design.family.duplicate and design.family.saveToLibrary
14
+
3
15
  ## 1.0.0
4
16
 
5
17
  ### Major Changes
package/api-manifest.json CHANGED
@@ -540,7 +540,7 @@
540
540
  "Point the camera at the centre of the building from the side",
541
541
  "Set the eye to this point and aim it at that point\n\n# Example\n```ts\nconst { vec3 } = snaptrude.core.math\nawait snaptrude.core.camera.lookFrom(vec3.new(50, 30, 50), vec3.new(0, 0, 0))\n```"
542
542
  ],
543
- "argsType": "Vec3Handle",
543
+ "argsType": "Vec3Input",
544
544
  "resultType": "boolean"
545
545
  },
546
546
  {
@@ -797,7 +797,7 @@
797
797
  "Draw an arc between these two points around a centre",
798
798
  "Add a curved segment from A to B"
799
799
  ],
800
- "argsType": "Vec3Handle",
800
+ "argsType": "Vec3Input",
801
801
  "resultType": "ArcHandle"
802
802
  },
803
803
  {
@@ -1074,7 +1074,7 @@
1074
1074
  "Make a circle of radius 2 at this point",
1075
1075
  "Draw a circular outline 5m across"
1076
1076
  ],
1077
- "argsType": "Vec3Handle",
1077
+ "argsType": "Vec3Input",
1078
1078
  "resultType": "CircleHandle"
1079
1079
  },
1080
1080
  {
@@ -1112,7 +1112,7 @@
1112
1112
  "Draw a line from point A to point B",
1113
1113
  "Draw a straight edge between these two points"
1114
1114
  ],
1115
- "argsType": "Vec3Handle",
1115
+ "argsType": "Vec3Input",
1116
1116
  "resultType": "LineHandle"
1117
1117
  },
1118
1118
  {
@@ -1133,7 +1133,7 @@
1133
1133
  "Draw a closed polygon through these corner points",
1134
1134
  "Create an L-shaped outline from a list of points"
1135
1135
  ],
1136
- "argsType": "Vec3Handle[]",
1136
+ "argsType": "Vec3Input[]",
1137
1137
  "resultType": "ProfileHandle"
1138
1138
  },
1139
1139
  {
@@ -1145,7 +1145,7 @@
1145
1145
  "Organic curved outline through these corners",
1146
1146
  "Freeform podium profile\n\n# Example\n```ts\nconst profile = await snaptrude.core.geom.create.profileFromSplinePoints([p0, p1, p2, p3, p4])\nconst contour = await snaptrude.core.geom.create.contourFromProfile(profile)\nconst brep = await snaptrude.core.geom.create.brepFromExtrusion(contour, { x: 0, y: 1, z: 0 }, 3)\nconst podium = await snaptrude.design.create.massFromBrep(brep, \"Podium\")\n```"
1147
1147
  ],
1148
- "argsType": "Vec3Handle[]",
1148
+ "argsType": "Vec3Input[]",
1149
1149
  "resultType": "ProfileHandle"
1150
1150
  },
1151
1151
  {
@@ -1166,7 +1166,7 @@
1166
1166
  "examplePrompts": [
1167
1167
  "Draw a smooth curve controlled by these four points\n\n# Example\n```ts\nconst curve = await snaptrude.core.geom.create.splineFromControlPoints([p0, p1, p2, p3])\n// Quadratic instead of the default cubic\nconst tighter = await snaptrude.core.geom.create.splineFromControlPoints(\n[p0, p1, p2, p3],\n{ degree: 2 },\n)\n```"
1168
1168
  ],
1169
- "argsType": "Vec3Handle[]",
1169
+ "argsType": "Vec3Input[]",
1170
1170
  "resultType": "SplineHandle"
1171
1171
  },
1172
1172
  {
@@ -1178,7 +1178,7 @@
1178
1178
  "Make a wavy edge that passes through A, B, C and D",
1179
1179
  "Freeform curved wall path through these clicks\n\n# Example\n```ts\nconst spline = await snaptrude.core.geom.create.splineFromPoints([p0, p1, p2, p3])\n// Mixed profile: smooth top, straight closing base\nconst base = await snaptrude.core.geom.create.line(p3, p0)\nconst profile = await snaptrude.core.geom.create.profileFromCurves([spline, base])\n```"
1180
1180
  ],
1181
- "argsType": "Vec3Handle[]",
1181
+ "argsType": "Vec3Input[]",
1182
1182
  "resultType": "SplineHandle"
1183
1183
  },
1184
1184
  {
@@ -3486,7 +3486,7 @@
3486
3486
  "namespace": "core.math.quat",
3487
3487
  "summary": "Build a quaternion from a rotation axis and an angle in radians.",
3488
3488
  "examplePrompts": [],
3489
- "argsType": "Vec3Handle",
3489
+ "argsType": "Vec3Input",
3490
3490
  "resultType": "QuatHandle"
3491
3491
  },
3492
3492
  {
@@ -3566,7 +3566,7 @@
3566
3566
  "namespace": "core.math.vec3",
3567
3567
  "summary": "Add two vectors component-wise (`a + b`).",
3568
3568
  "examplePrompts": [],
3569
- "argsType": "Vec3Handle",
3569
+ "argsType": "Vec3Input",
3570
3570
  "resultType": "Vec3Handle"
3571
3571
  },
3572
3572
  {
@@ -3574,7 +3574,7 @@
3574
3574
  "namespace": "core.math.vec3",
3575
3575
  "summary": "Read the primitive `{ x, y, z }` components of a vector handle.",
3576
3576
  "examplePrompts": [],
3577
- "argsType": "Vec3Handle",
3577
+ "argsType": "Vec3Input",
3578
3578
  "resultType": "Vec3Components"
3579
3579
  },
3580
3580
  {
@@ -3582,7 +3582,7 @@
3582
3582
  "namespace": "core.math.vec3",
3583
3583
  "summary": "Compute the cross product `a × b` — the vector perpendicular to both.",
3584
3584
  "examplePrompts": [],
3585
- "argsType": "Vec3Handle",
3585
+ "argsType": "Vec3Input",
3586
3586
  "resultType": "Vec3Handle"
3587
3587
  },
3588
3588
  {
@@ -3593,7 +3593,7 @@
3593
3593
  "What is the distance between these two points?",
3594
3594
  "Measure how far apart these two points are\n\n# Example\n```ts\nconst a = await snaptrude.core.math.vec3.new(0, 0, 0)\nconst b = await snaptrude.core.math.vec3.new(3, 4, 0)\nconst dist = await snaptrude.core.math.vec3.distance(a, b) // 5\n```"
3595
3595
  ],
3596
- "argsType": "Vec3Handle",
3596
+ "argsType": "Vec3Input",
3597
3597
  "resultType": "number"
3598
3598
  },
3599
3599
  {
@@ -3601,7 +3601,7 @@
3601
3601
  "namespace": "core.math.vec3",
3602
3602
  "summary": "Compute the dot product of two vectors.",
3603
3603
  "examplePrompts": [],
3604
- "argsType": "Vec3Handle",
3604
+ "argsType": "Vec3Input",
3605
3605
  "resultType": "number"
3606
3606
  },
3607
3607
  {
@@ -3609,7 +3609,7 @@
3609
3609
  "namespace": "core.math.vec3",
3610
3610
  "summary": "Test whether two vectors have exactly equal components.",
3611
3611
  "examplePrompts": [],
3612
- "argsType": "Vec3Handle",
3612
+ "argsType": "Vec3Input",
3613
3613
  "resultType": "boolean"
3614
3614
  },
3615
3615
  {
@@ -3617,7 +3617,7 @@
3617
3617
  "namespace": "core.math.vec3",
3618
3618
  "summary": "Test whether two vectors are equal within a tolerance `epsilon` (default `1e-6`).",
3619
3619
  "examplePrompts": [],
3620
- "argsType": "Vec3Handle",
3620
+ "argsType": "Vec3Input",
3621
3621
  "resultType": "boolean"
3622
3622
  },
3623
3623
  {
@@ -3625,7 +3625,7 @@
3625
3625
  "namespace": "core.math.vec3",
3626
3626
  "summary": "Compute the Euclidean length (magnitude) of a vector.",
3627
3627
  "examplePrompts": [],
3628
- "argsType": "Vec3Handle",
3628
+ "argsType": "Vec3Input",
3629
3629
  "resultType": "number"
3630
3630
  },
3631
3631
  {
@@ -3633,7 +3633,7 @@
3633
3633
  "namespace": "core.math.vec3",
3634
3634
  "summary": "Compute the squared Euclidean length of a vector (avoids the sqrt).",
3635
3635
  "examplePrompts": [],
3636
- "argsType": "Vec3Handle",
3636
+ "argsType": "Vec3Input",
3637
3637
  "resultType": "number"
3638
3638
  },
3639
3639
  {
@@ -3641,7 +3641,7 @@
3641
3641
  "namespace": "core.math.vec3",
3642
3642
  "summary": "Linearly interpolate between two vectors: `a + (b - a) * t`.",
3643
3643
  "examplePrompts": [],
3644
- "argsType": "Vec3Handle",
3644
+ "argsType": "Vec3Input",
3645
3645
  "resultType": "Vec3Handle"
3646
3646
  },
3647
3647
  {
@@ -3649,7 +3649,7 @@
3649
3649
  "namespace": "core.math.vec3",
3650
3650
  "summary": "Negate a vector, reversing its direction.",
3651
3651
  "examplePrompts": [],
3652
- "argsType": "Vec3Handle",
3652
+ "argsType": "Vec3Input",
3653
3653
  "resultType": "Vec3Handle"
3654
3654
  },
3655
3655
  {
@@ -3665,7 +3665,7 @@
3665
3665
  "namespace": "core.math.vec3",
3666
3666
  "summary": "Return the unit vector in the same direction (the zero vector if length is 0).",
3667
3667
  "examplePrompts": [],
3668
- "argsType": "Vec3Handle",
3668
+ "argsType": "Vec3Input",
3669
3669
  "resultType": "Vec3Handle"
3670
3670
  },
3671
3671
  {
@@ -3673,7 +3673,7 @@
3673
3673
  "namespace": "core.math.vec3",
3674
3674
  "summary": "Scale `v` by a scalar.",
3675
3675
  "examplePrompts": [],
3676
- "argsType": "Vec3Handle",
3676
+ "argsType": "Vec3Input",
3677
3677
  "resultType": "Vec3Handle"
3678
3678
  },
3679
3679
  {
@@ -3681,7 +3681,7 @@
3681
3681
  "namespace": "core.math.vec3",
3682
3682
  "summary": "Subtract vector `b` from `a` component-wise (`a - b`).",
3683
3683
  "examplePrompts": [],
3684
- "argsType": "Vec3Handle",
3684
+ "argsType": "Vec3Input",
3685
3685
  "resultType": "Vec3Handle"
3686
3686
  },
3687
3687
  {
@@ -4689,7 +4689,7 @@
4689
4689
  "Run a 300x600 beam across the room",
4690
4690
  "Extrude this cross-section into a 5m long beam\n\n# Example\n```ts\nconst rect = await snaptrude.core.geom.create.profileRect(0.3, 0.6)\nconst section = await snaptrude.core.geom.create.contourFromProfile(rect)\nconst alongX = await snaptrude.core.math.vec3.new(1, 0, 0)\nconst beam = await snaptrude.design.create.beam(section, 6, alongX)\n```"
4691
4691
  ],
4692
- "argsType": "| [section: ContourHandle, length: number, direction?: Vec3Handle]\n | [axis: LineHandle, options: PluginFamilyPlacement]",
4692
+ "argsType": "| [section: ContourHandle, length: number, direction?: Vec3Input]\n | [axis: LineHandle, options: PluginFamilyPlacement]",
4693
4693
  "resultType": "ComponentHandle"
4694
4694
  },
4695
4695
  {
@@ -4739,7 +4739,7 @@
4739
4739
  "Create a 450mm square concrete column 4 metres high",
4740
4740
  "Stand a column up from this base point\n\n# Example\n```ts\nconst rect = await snaptrude.core.geom.create.profileRect(0.45, 0.45)\nconst crossSection = await snaptrude.core.geom.create.contourFromProfile(rect)\nconst base = await snaptrude.core.math.vec3.new(4, 0, 4)\nconst column = await snaptrude.design.create.column(base, crossSection, 3)\n```"
4741
4741
  ],
4742
- "argsType": "| [\n position: Vec3Handle,\n crossSection: ContourHandle,\n height: number,\n directionUp?: Vec3Handle,\n ]\n | [axis: LineHandle, options: PluginFamilyPlacement]",
4742
+ "argsType": "| [\n position: Vec3Input,\n crossSection: ContourHandle,\n height: number,\n directionUp?: Vec3Input,\n ]\n | [axis: LineHandle, options: PluginFamilyPlacement]",
4743
4743
  "resultType": "ComponentHandle"
4744
4744
  },
4745
4745
  {
@@ -4793,7 +4793,7 @@
4793
4793
  "Place a door in every room in one operation",
4794
4794
  "Bulk add the entrance doors from this schedule",
4795
4795
  "Put three doors on this wall in a single undo step",
4796
- "Add all the doors for this floor plan together"
4796
+ "Add all the doors for this floor plan together\n\nA width/height (top-level, or under the family's own keys in `values`) on a family that\ntakes its size from its Type while Custom Sizes is off is never dropped: the Type within\n25 mm is chosen, else Custom Sizes is turned on and that size is built, leaving the Type\nlabel stale. `design.doors.checkPlacement` reports which as `sizing`; `customSizes: \"No\"`\nwith a size no Type matches is refused."
4797
4797
  ],
4798
4798
  "argsType": "PluginCreateDoorItem[]",
4799
4799
  "resultType": "ComponentHandle[]",
@@ -4809,7 +4809,7 @@
4809
4809
  "Lay flooring across the selected outline",
4810
4810
  "Put a floor at this position with 150mm thickness\n\n# Example\n```ts\nconst rect = await snaptrude.core.geom.create.profileRect(5, 4)\nconst contour = await snaptrude.core.geom.create.contourFromProfile(rect)\nconst floor = await snaptrude.design.create.floor(contour, 0.1)\n```"
4811
4811
  ],
4812
- "argsType": "| [contour: ContourHandle, thickness: number, position?: Vec3Handle]\n | [contour: ContourHandle, options: PluginFamilyFloorOptions]",
4812
+ "argsType": "| [contour: ContourHandle, thickness: number, position?: Vec3Input]\n | [contour: ContourHandle, options: PluginFamilyFloorOptions]",
4813
4813
  "resultType": "ComponentHandle[]",
4814
4814
  "performance": "For dimensional floors, `design.create.floors(items[])` uses one host round-trip and one undo entry. That bulk method does not accept native family options; use this method for a family-backed floor."
4815
4815
  },
@@ -5068,18 +5068,17 @@
5068
5068
  {
5069
5069
  "path": "design.create.wallRuns",
5070
5070
  "namespace": "design.create",
5071
- "summary": "Create **many wall runs** in one undoable operation (bulk plural of {@linkcode walls}). Each item is one full run — a wall per curve in that item's profile chain, mitred at shared endpoints. Junctions resolve within a run, not between runs. Each item carries its own dimensions, `wallType` and `storey`, so a single call can build a whole floor plate or several storeys at once. Per-curve `topProfiles` make raked or gabled walls (see {@linkcode PluginWallTopProfile}). Validate-all-or-throw; one command.",
5071
+ "summary": "Create **many wall runs** in one undoable operation (bulk plural of {@linkcode walls}). Each item is one full run — a wall per curve in that item's profile chain, mitred at shared endpoints. Junctions resolve within a run, not between runs. Each item carries its own dimensions, `wallType` and `storey`, so a single call can build a whole floor plate or several storeys at once. Walls have one height: a non-null `topProfiles` entry is refused with `PRECONDITION_FAILED` (`details.itemIndex` names the item) and nothing is created. Validate-all-or-throw; one command.",
5072
5072
  "examplePrompts": [
5073
5073
  "Draw all the walls of this floor plan at once",
5074
5074
  "Build every room's perimeter in one operation",
5075
5075
  "Bulk create wall runs from these centerlines",
5076
5076
  "Create the walls for both storeys in a single undo step",
5077
- "Turn these polylines into 200mm brick walls together",
5078
- "Import these raked walls with their top profiles in one go"
5077
+ "Turn these polylines into 200mm brick walls together"
5079
5078
  ],
5080
5079
  "argsType": "PluginCreateWallRunItem[]",
5081
5080
  "resultType": "ComponentHandle[][]",
5082
- "performance": "Bulk creator — the whole batch is ONE host round-trip and ONE undo entry. Always prefer this over calling `design.create.walls` in a loop: build the full `items[]` array first (all profiles up front), then make one call. # Example ```ts const v = snaptrude.core.math.vec3 const ground = await snaptrude.core.geom.create.profileFromLinePoints([ await v.new(0, 0, 0), await v.new(8, 0, 0), await v.new(8, 0, 6), ]) const upper = await snaptrude.core.geom.create.profileFromLinePoints([ await v.new(0, 0, 0), await v.new(8, 0, 0), ]) const [groundWalls, upperWalls] = await snaptrude.design.create.wallRuns([ { profile: ground, height: 3, thickness: 0.2 }, { profile: upper, height: 3, storey: 2 }, // one gable wall: 3m at both ends, 5m ridge in the middle { profile: upper, thickness: 0.2, storey: 3, topProfiles: [[{ along: 0, height: 3 }, { along: 0.5, height: 5 }, { along: 1, height: 3 }]] }, ]) console.log(groundWalls.length, \"walls on the ground floor\") ```"
5081
+ "performance": "Bulk creator — the whole batch is ONE host round-trip and ONE undo entry. Always prefer this over calling `design.create.walls` in a loop: build the full `items[]` array first (all profiles up front), then make one call. # Example ```ts const v = snaptrude.core.math.vec3 const ground = await snaptrude.core.geom.create.profileFromLinePoints([ await v.new(0, 0, 0), await v.new(8, 0, 0), await v.new(8, 0, 6), ]) const upper = await snaptrude.core.geom.create.profileFromLinePoints([ await v.new(0, 0, 0), await v.new(8, 0, 0), ]) const [groundWalls, upperWalls] = await snaptrude.design.create.wallRuns([ { profile: ground, height: 3, thickness: 0.2 }, { profile: upper, height: 3, storey: 2 }, ]) console.log(groundWalls.length, \"walls on the ground floor\") ```"
5083
5082
  },
5084
5083
  {
5085
5084
  "path": "design.create.walls",
@@ -5092,10 +5091,7 @@
5092
5091
  "Turn this polyline sketch into walls",
5093
5092
  "Add walls with mitred corners along the path",
5094
5093
  "Draw brick walls with plaster along this outline",
5095
- "Build the perimeter in exposed concrete walls",
5096
- "Create a raked wall that slopes from 3m to 5m",
5097
- "Build a gable end wall with the ridge in the middle",
5098
- "Draw a wall with a sloped top edge\n\n# Example\n```ts\nconst v = snaptrude.core.math.vec3\nconst centerlines = await snaptrude.core.geom.create.profileFromLinePoints([\nawait v.new(0, 0, 0),\nawait v.new(8, 0, 0),\nawait v.new(8, 0, 6),\n])\nconst walls = await snaptrude.design.create.walls(centerlines, 3, 0.2)\n// …built as a specific wall type (layers/material/thickness from the type):\nconst [brick] = await snaptrude.design.types.list(\"wall\")\nconst brickWalls = await snaptrude.design.create.walls(\ncenterlines, 3, undefined, brick.label,\n)\n// …a raked wall (3m at the start, 5m at the end) on a single centerline:\nconst run = await snaptrude.core.geom.create.profileFromCurves([\nawait snaptrude.core.geom.create.line(await v.new(0, 0, 10), await v.new(8, 0, 10)),\n])\nconst [raked] = await snaptrude.design.create.walls(run, undefined, 0.2, undefined, undefined, [\n[{ along: 0, height: 3 }, { along: 1, height: 5 }],\n])\n```"
5094
+ "Build the perimeter in exposed concrete walls\n\n# Example\n```ts\nconst v = snaptrude.core.math.vec3\nconst centerlines = await snaptrude.core.geom.create.profileFromLinePoints([\nawait v.new(0, 0, 0),\nawait v.new(8, 0, 0),\nawait v.new(8, 0, 6),\n])\nconst walls = await snaptrude.design.create.walls(centerlines, 3, 0.2)\n// …built as a specific wall type (layers/material/thickness from the type):\nconst [brick] = await snaptrude.design.types.list(\"wall\")\nconst brickWalls = await snaptrude.design.create.walls(\ncenterlines, 3, undefined, brick.label,\n)\n```"
5099
5095
  ],
5100
5096
  "argsType": "ProfileHandle",
5101
5097
  "resultType": "ComponentHandle[]",
@@ -5126,7 +5122,7 @@
5126
5122
  "Place a window in every bedroom in one operation",
5127
5123
  "Bulk add the windows from this schedule",
5128
5124
  "Put four windows on this wall in a single undo step",
5129
- "Add all the windows with a 0.9m sill height together"
5125
+ "Add all the windows with a 0.9m sill height together\n\nA width/height (top-level, or under the family's own keys in `values`) on a family that\ntakes its size from its Type while Custom Sizes is off is never dropped: the Type within\n25 mm is chosen, else Custom Sizes is turned on and that size is built, leaving the Type\nlabel stale. `design.windows.checkPlacement` reports which as `sizing`; `customSizes: \"No\"`\nwith a size no Type matches is refused."
5130
5126
  ],
5131
5127
  "argsType": "PluginCreateWindowItem[]",
5132
5128
  "resultType": "ComponentHandle[]",
@@ -5157,7 +5153,7 @@
5157
5153
  "Add a dimension line along this wall",
5158
5154
  "Measure the width of this room and label it on the plan\n\n# Example\n```ts\nconst { design, core } = snaptrude\nconst v = core.math.vec3\nconst curve = core.geom.query.curve\nfor (const wall of await design.query.listWalls({ storeys: [2] })) {\nconst cl = await design.query.geometry.getCenterline(wall)\nif (!cl) continue\nconst a = await curve.getStartPoint(cl)\nconst b = await curve.getEndPoint(cl)\nawait design.dimensions.create(\nawait v.new(a.x, a.y, a.z),\nawait v.new(b.x, b.y, b.z),\nwall,\n)\n}\n```"
5159
5155
  ],
5160
- "argsType": "Vec3Handle",
5156
+ "argsType": "Vec3Input",
5161
5157
  "resultType": "DimensionHandle"
5162
5158
  },
5163
5159
  {
@@ -5224,6 +5220,16 @@
5224
5220
  "resultType": "PluginDimensionsChangeResult",
5225
5221
  "performance": "Array API — one host round-trip and one undo entry for the whole set. # Example ```ts const dims = snaptrude.design.dimensions const hidden = await dims.list({ isHidden: true }) await dims.show(hidden.map((d) => d.id)) ```"
5226
5222
  },
5223
+ {
5224
+ "path": "design.doors.checkPlacement",
5225
+ "namespace": "design.doors",
5226
+ "summary": "Trial the native host fit and geometry rebuild, then restore the model without publishing commands. The first result uses the creation options; subsequent results use candidateWidths in input order. Widths are authored parameters, not physical envelopes or a guaranteed maximum width. No catalog save, history entry or model persistence occurs. Rerun after model edits. A failed fit leaves cut unverified. Family-host cuts are also unverified: their rebuild cannot supply a reversible, authoritative trial result. Material clearance checks evaluated parts against physical neighbours across hosts. The intended host uses native fit/cut checks. Creation repeats clearance immediately before placement; this report grants no later approval. Editing permission is required; locked hosts and an active opening tool reject. It does not say which room the door opens into: read `opensInto` from `design.validation.access()` after placement (see {@linkcode getSwingDirection}). A requested width/height on a family sized by its Type (Custom Sizes off) picks the Type within 25 mm, else turns Custom Sizes on; each result's `sizing` says which. Creation (`design.create.door(s)`) applies the same rule, so the size you pass is the size built.",
5227
+ "examplePrompts": [
5228
+ "Check which door widths fit this host without placing a door"
5229
+ ],
5230
+ "argsType": "PluginOpeningPlacementArgs",
5231
+ "resultType": "PluginOpeningPlacementResult"
5232
+ },
5227
5233
  {
5228
5234
  "path": "design.doors.exists",
5229
5235
  "namespace": "design.doors",
@@ -5310,7 +5316,8 @@
5310
5316
  "Which way does this door swing?",
5311
5317
  "Is the selected door left-handed or right-handed?",
5312
5318
  "Check the hinge side of this door",
5313
- "Does the entrance door open to the left or the right?\n\n# Example\n```ts\nconst [door] = await snaptrude.design.query.listDoors({ isSelected: true })\nconst swing = await snaptrude.design.doors.getSwingDirection(door)\nif (swing) console.log(\"opens as a\", swing, \"hand door\")\n```"
5319
+ "Does the entrance door open to the left or the right?",
5320
+ "Which room does this door open into?\n\n# Example\n```ts\nconst [door] = await snaptrude.design.query.listDoors({ isSelected: true })\nconst swing = await snaptrude.design.doors.getSwingDirection(door)\nif (swing) console.log(\"opens as a\", swing, \"hand door\")\n// Which room it opens into\nconst { topology } = await snaptrude.design.validation.access()\nconst side = topology.rooms.flatMap((r) => r.doors).find((d) => d.door === door)?.opensInto\n```"
5314
5321
  ],
5315
5322
  "argsType": "ComponentHandle",
5316
5323
  "resultType": "\"left\" | \"right\" | null"
@@ -5370,7 +5377,7 @@
5370
5377
  {
5371
5378
  "path": "design.doors.mirror",
5372
5379
  "namespace": "design.doors",
5373
- "summary": "Change authored controls in one undo step: x (default) toggles swing front/back; z toggles hand left/right. The recipe must declare these enums. Axis y rejects. No mesh reflection occurs. Recipes use outputs.swingSide (1 or -1) for the adjoining room's floor ownership. A door between two room floors requires this output; a missing or invalid report rejects the cut.",
5380
+ "summary": "Change authored controls in one undo step: x (default) toggles swing front/back; z toggles hand left/right. The recipe must declare these enums. Axis y rejects. No mesh reflection occurs. Recipes use outputs.swingSide (1 or -1) for the adjoining room's floor ownership. A door between two room floors requires this output; a missing or invalid report rejects the cut. The same side decides `opensInto` in `design.validation.access()`; read it there to confirm which room the door now opens into.",
5374
5381
  "examplePrompts": [
5375
5382
  "Flip this door's swing",
5376
5383
  "Mirror the selected door",
@@ -6767,6 +6774,66 @@
6767
6774
  "argsType": "PluginSelectionFilter",
6768
6775
  "resultType": "PluginDesignChangeResult"
6769
6776
  },
6777
+ {
6778
+ "path": "design.text.create",
6779
+ "namespace": "design.text",
6780
+ "summary": "Place a text, or an annotation when `options.arrowhead` is given.",
6781
+ "examplePrompts": [
6782
+ "Label the living room \"LIVING\" on the plan",
6783
+ "Add an annotation pointing at this column saying \"RCC 300x300\"",
6784
+ "Write \"NORTH ENTRY\" in red bold text at the entrance on level 2\n\n# Example\n```ts\nconst { design, core } = snaptrude\nconst v = core.math.vec3\n// A plain label on storey 1.\nawait design.text.create(await v.new(10, 0, 20), \"LIVING\", { storey: 1 })\n// An annotation whose leader points at a wall corner.\nawait design.text.create(await v.new(30, 0, 40), \"Shear wall\", {\narrowhead: await v.new(22, 0, 32),\ncolor: \"#c62828\",\nfontStyle: \"Bold\",\n})\n```"
6785
+ ],
6786
+ "argsType": "Vec3Handle",
6787
+ "resultType": "ComponentHandle"
6788
+ },
6789
+ {
6790
+ "path": "design.text.get",
6791
+ "namespace": "design.text",
6792
+ "summary": "Read one text by handle.",
6793
+ "examplePrompts": [
6794
+ "What does this text say?",
6795
+ "Read the annotation I just placed\n\n# Example\n```ts\nconst t = await snaptrude.design.text.get(handle)\nif (t?.leader) console.log(t.content, \"points at\", t.leader.arrowhead)\n```"
6796
+ ],
6797
+ "argsType": "ComponentHandle",
6798
+ "resultType": "PluginText | null"
6799
+ },
6800
+ {
6801
+ "path": "design.text.list",
6802
+ "namespace": "design.text",
6803
+ "summary": "List the texts and annotations of every building in the active design option as full records (each carries its `buildingId`).",
6804
+ "examplePrompts": [
6805
+ "List all the text labels on level 1",
6806
+ "Which annotations are in this model?",
6807
+ "Find the text that says \"LOBBY\""
6808
+ ],
6809
+ "argsType": "{\n storeys?: number[]\n kind?: PluginTextKind\n isHidden?: boolean\n }",
6810
+ "resultType": "PluginText[]",
6811
+ "performance": "Array read — one host round-trip returns every record. Filter in one call rather than calling `get` per text. # Example ```ts const texts = await snaptrude.design.text.list({ storeys: [1] }) const lobby = texts.find((t) => t.content === \"LOBBY\") ```"
6812
+ },
6813
+ {
6814
+ "path": "design.text.setLeader",
6815
+ "namespace": "design.text",
6816
+ "summary": "Point a text's leader at a new place — the same edit as dragging an annotation's arrowhead with the Edit tool. Passing `null` removes the leader (the annotation becomes a plain text); giving a plain text an arrowhead turns it into an annotation. The text itself does not move. To move the text while its arrowhead stays put, move it with `design.transform.move`, then call this with the old `leader.arrowhead`.",
6817
+ "examplePrompts": [
6818
+ "Point this annotation at the door instead",
6819
+ "Remove the leader from this label\n\n# Example\n```ts\nconst { design, core } = snaptrude\nawait design.text.setLeader(handle, await core.math.vec3.new(12, 0, 8))\n```"
6820
+ ],
6821
+ "argsType": "ComponentHandle",
6822
+ "resultType": "PluginText"
6823
+ },
6824
+ {
6825
+ "path": "design.text.update",
6826
+ "namespace": "design.text",
6827
+ "summary": "Change the words, colour or font of one or more texts — the same edit as the Properties panel. Fields left out keep each text's own value. A font style the (new) family does not have falls back to `\"Regular\"`, as in the panel. One undo entry for the whole batch.",
6828
+ "examplePrompts": [
6829
+ "Make all the room labels bold",
6830
+ "Change this annotation to read \"Fire exit\"",
6831
+ "Use Roboto in blue for every text on level 2"
6832
+ ],
6833
+ "argsType": "ComponentHandle[]",
6834
+ "resultType": "PluginTextChangeResult",
6835
+ "performance": "Array API — pass the whole set in one call (one host round-trip, one undo entry). Never loop this per text. # Example ```ts const text = snaptrude.design.text const level2 = await text.list({ storeys: [2] }) await text.update(level2.map((t) => t.id), { fontFamily: \"Roboto\", color: \"#1565c0\" }) ```"
6836
+ },
6770
6837
  {
6771
6838
  "path": "design.transform.align",
6772
6839
  "namespace": "design.transform",
@@ -7178,6 +7245,16 @@
7178
7245
  "argsType": null,
7179
7246
  "resultType": "PluginDesignChangeResult"
7180
7247
  },
7248
+ {
7249
+ "path": "design.windows.checkPlacement",
7250
+ "namespace": "design.windows",
7251
+ "summary": "Trial the native host fit and geometry rebuild, then restore the model without publishing commands. The first result uses the creation options; subsequent results use candidateWidths in input order. Widths are authored parameters, not physical envelopes or a guaranteed maximum width. No catalog save, history entry or model persistence occurs. Rerun after model edits. A failed fit leaves cut unverified. Family-host cuts are also unverified: their rebuild cannot supply a reversible, authoritative trial result. Material clearance checks evaluated parts against physical neighbours across hosts. The intended host uses native fit/cut checks. Creation repeats clearance immediately before placement; this report grants no later approval. Editing permission is required; locked hosts and an active opening tool reject. A requested width/height on a family sized by its Type (Custom Sizes off) picks the Type within 25 mm, else turns Custom Sizes on; each result's `sizing` says which. Creation (`design.create.window(s)`) applies the same rule, so the size you pass is the size built.",
7252
+ "examplePrompts": [
7253
+ "Check whether this window fits and its host can be cut"
7254
+ ],
7255
+ "argsType": "PluginOpeningPlacementArgs",
7256
+ "resultType": "PluginOpeningPlacementResult"
7257
+ },
7181
7258
  {
7182
7259
  "path": "design.windows.exists",
7183
7260
  "namespace": "design.windows",
@@ -28,12 +28,14 @@ export declare abstract class PluginCameraApi {
28
28
  * Point the camera: place its eye at `eye` looking toward `target` (world
29
29
  * coordinates, internal `babylon` units). View-state only — not undoable.
30
30
  *
31
+ * From a 2D plan the camera first switches to 3D (a plan's camera is pinned
32
+ * top-down, so an eye there would be ignored); read `getPose().mode` after.
31
33
  * While Present is open this sets the Design frame a view saved in Present
32
34
  * is taken from; it never moves the Present sheet canvas; use
33
35
  * `presentation.camera` for that.
34
36
  *
35
- * @param eye - Camera position as a {@linkcode Vec3Handle}
36
- * @param target - Point the camera looks at as a {@linkcode Vec3Handle}
37
+ * @param eye - Camera position: a {@linkcode Vec3Handle} or a plain `{ x, y, z }`
38
+ * @param target - Point the camera looks at: a {@linkcode Vec3Handle} or a plain `{ x, y, z }`
37
39
  * @returns `true` once the camera has been positioned.
38
40
  *
39
41
  * @examplePrompt Look at the model from above the north-east corner
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/core/camera/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAA8B,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAExE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,8BAAsB,eAAe;;IAGnC;;;;;;;;;;;;;;;;;;;;;;OAsBG;aACa,QAAQ,CACtB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,SAAS,GAChB,eAAe,CAAC,OAAO,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACa,eAAe,CAC7B,IAAI,EAAE,kBAAkB,GACvB,eAAe,CAAC,OAAO,CAAC;IAE3B;;;;;;;;;;;;;;OAcG;aACa,OAAO,IAAI,eAAe,CAAC,gBAAgB,CAAC;IAE5D;;;;;;;;;;;;;;;;;;;;;OAqBG;aACa,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC;IAEzE;;;;;;;;;;;;;;;;OAgBG;aACa,aAAa,IAAI,eAAe,CAAC,sBAAsB,CAAC;IAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;aACa,aAAa,CAC3B,UAAU,EAAE,sBAAsB,GACjC,eAAe,CAAC,OAAO,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;;OAoBG;aACa,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC;IAEvD;;;;;;;;;;;;;;;;;;;;;OAqBG;aACa,aAAa,IAAI,eAAe,CAAC,OAAO,CAAC;IAEzD;;;;;;;;;;;;;;;;;;;OAmBG;aACa,OAAO,IAAI,eAAe,CAAC,gBAAgB,CAAC;IAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;aACa,OAAO,CACrB,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,0BAA0B,GACnC,eAAe,CAAC,gBAAgB,CAAC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;aACa,IAAI,CAClB,YAAY,EAAE,4BAA4B,EAC1C,OAAO,CAAC,EAAE,uBAAuB,GAChC,eAAe,CAAC,gBAAgB,CAAC;IAEpC;;;;;;;;;;;;;;;;;;;;;;OAsBG;aACa,MAAM,CACpB,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,yBAAyB,GAClC,eAAe,CAAC,gBAAgB,CAAC;IAEpC;;;;;;;;;;;;;;;;OAgBG;aACa,qBAAqB,IAAI,eAAe,CAAC,8BAA8B,CAAC;IAExF;;;;;;;;;;;;;;;;;;;;;OAqBG;aACa,wBAAwB,CACtC,KAAK,EAAE,mCAAmC,GACzC,eAAe,CAAC,8BAA8B,CAAC;CACnD;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;EAO7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;EAAuB,CAAA;AACpD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;EAA0C,CAAA;AAC7E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAGnC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;iBAE1C,CAAA;AACF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,+BAA+B,CACvC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB;;;;;iBAElC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B;;;;;iBAExC,CAAA;AACF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CACjD,OAAO,6BAA6B,CACrC,CAAA;AAeD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;iBAQ3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;oBAiBhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;kBAE5B,CAAA;AACX,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,0BAA0B,CAClC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGlC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B;;;;kBAM9B,CAAA;AACX,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAChD,OAAO,4BAA4B,CACpC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB;;;kBAKzB,CAAA;AACX,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAG/B,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB;;kBAE3B,CAAA;AACX,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,yBAAyB,CACjC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;iBAIjC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;EAAqC,CAAA;AACvE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;iBAKzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAClD,OAAO,8BAA8B,CACtC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mCAAmC;;;;;;;;;kBAOrC,CAAA;AACX,MAAM,MAAM,mCAAmC,GAAG,CAAC,CAAC,KAAK,CACvD,OAAO,mCAAmC,CAC3C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wCAAwC;;;;;;;;;;;iBAEnD,CAAA;AACF,MAAM,MAAM,wCAAwC,GAAG,CAAC,CAAC,KAAK,CAC5D,OAAO,wCAAwC,CAChD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/core/camera/index.ts"],"names":[],"mappings":"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"}
@@ -84,6 +84,11 @@ export declare abstract class PluginCoreStoreysApi {
84
84
  * The new storey is inserted at the position specified by `storyValue`. This
85
85
  * operation is undoable.
86
86
  *
87
+ * Storeys are added at the ends of the stack only. A value above the top (or below the
88
+ * bottom) also creates every storey in between at the default height — `create(5)` on a
89
+ * stack of 1–2 adds 3, 4 and 5 and returns only 5 — and a value inside a gap of the
90
+ * stack is refused (PRECONDITION_FAILED). Read the stack back with `list` afterwards.
91
+ *
87
92
  * @param storyValue - Integer storey number
88
93
  * to create (e.g. `3` to add a third floor)
89
94
  * @param height - Optional height in Babylon
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/core/storeys/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EAEpB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,8BAAsB,oBAAoB;;IAGxC;;;;OAIG;IACH,SAAgB,MAAM,EAAE,0BAA0B,CAAA;IAElD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;aACa,GAAG,CACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,sBAAsB,EAAE,GACnC,eAAe,CAAC,oBAAoB,CAAC;IAExC;;;;;;;;;;;;;;;;;;;;;OAqBG;aACa,IAAI,IAAI,eAAe,CAAC,2BAA2B,CAAC;IAEpE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACa,MAAM,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,eAAe,CAAC,uBAAuB,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;aACa,MAAM,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1B,eAAe,CAAC,uBAAuB,CAAC;IAE3C;;;;;;;;;;;;OAYG;aACa,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC;IAEpD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACa,SAAS,CACvB,UAAU,EAAE,MAAM,GACjB,eAAe,CAAC,0BAA0B,CAAC;IAE9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;aACa,MAAM,CACpB,UAAU,EAAE,MAAM,GACjB,eAAe,CAAC,uBAAuB,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;aACa,IAAI,CAClB,SAAS,EAAE,IAAI,GAAG,MAAM,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7D,eAAe,CAAC,0BAA0B,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;;;;;iBAEtC,CAAA;AAEF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAC/C,OAAO,2BAA2B,CACnC,CAAA;AAED,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/core/storeys/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EAEpB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,8BAAsB,oBAAoB;;IAGxC;;;;OAIG;IACH,SAAgB,MAAM,EAAE,0BAA0B,CAAA;IAElD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;aACa,GAAG,CACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,sBAAsB,EAAE,GACnC,eAAe,CAAC,oBAAoB,CAAC;IAExC;;;;;;;;;;;;;;;;;;;;;OAqBG;aACa,IAAI,IAAI,eAAe,CAAC,2BAA2B,CAAC;IAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;aACa,MAAM,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,eAAe,CAAC,uBAAuB,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;aACa,MAAM,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1B,eAAe,CAAC,uBAAuB,CAAC;IAE3C;;;;;;;;;;;;OAYG;aACa,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC;IAEpD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACa,SAAS,CACvB,UAAU,EAAE,MAAM,GACjB,eAAe,CAAC,0BAA0B,CAAC;IAE9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;aACa,MAAM,CACpB,UAAU,EAAE,MAAM,GACjB,eAAe,CAAC,uBAAuB,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;aACa,IAAI,CAClB,SAAS,EAAE,IAAI,GAAG,MAAM,EACxB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7D,eAAe,CAAC,0BAA0B,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;;;;;iBAEtC,CAAA;AAEF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAC/C,OAAO,2BAA2B,CACnC,CAAA;AAED,cAAc,UAAU,CAAA"}
@@ -20,6 +20,10 @@ export declare const PluginWallTopProfilePoint: z.ZodObject<{
20
20
  }, z.core.$strip>;
21
21
  export type PluginWallTopProfilePoint = z.infer<typeof PluginWallTopProfilePoint>;
22
22
  /**
23
+ * Current hosts refuse a non-null top profile (`PRECONDITION_FAILED`, "Walls have one
24
+ * height: sloped or stepped tops are not supported") and create nothing; the shape is
25
+ * kept for compatibility. The description below is the original contract.
26
+ *
23
27
  * The top edge of ONE wall as a polyline over its centerline: at least two
24
28
  * points, `along` strictly increasing from `0` (curve start) to `1` (curve end),
25
29
  * straight segments between them. Two points give a single slope (a raked
@@ -143,9 +147,21 @@ export declare const PluginCreateDoorItem: z.ZodObject<{
143
147
  version: z.ZodOptional<z.ZodNumber>;
144
148
  values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
145
149
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
146
- position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
147
- facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
148
- hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
150
+ position: z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
151
+ x: z.ZodNumber;
152
+ y: z.ZodNumber;
153
+ z: z.ZodNumber;
154
+ }, z.core.$strip>]>;
155
+ facing: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
156
+ x: z.ZodNumber;
157
+ y: z.ZodNumber;
158
+ z: z.ZodNumber;
159
+ }, z.core.$strip>]>>;
160
+ hinge: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
161
+ x: z.ZodNumber;
162
+ y: z.ZodNumber;
163
+ z: z.ZodNumber;
164
+ }, z.core.$strip>]>>;
149
165
  label: z.ZodOptional<z.ZodString>;
150
166
  width: z.ZodOptional<z.ZodNumber>;
151
167
  height: z.ZodOptional<z.ZodNumber>;
@@ -157,9 +173,21 @@ export declare const PluginCreateDoorItems: z.ZodArray<z.ZodObject<{
157
173
  version: z.ZodOptional<z.ZodNumber>;
158
174
  values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
159
175
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
160
- position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
161
- facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
162
- hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
176
+ position: z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
177
+ x: z.ZodNumber;
178
+ y: z.ZodNumber;
179
+ z: z.ZodNumber;
180
+ }, z.core.$strip>]>;
181
+ facing: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
182
+ x: z.ZodNumber;
183
+ y: z.ZodNumber;
184
+ z: z.ZodNumber;
185
+ }, z.core.$strip>]>>;
186
+ hinge: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
187
+ x: z.ZodNumber;
188
+ y: z.ZodNumber;
189
+ z: z.ZodNumber;
190
+ }, z.core.$strip>]>>;
163
191
  label: z.ZodOptional<z.ZodString>;
164
192
  width: z.ZodOptional<z.ZodNumber>;
165
193
  height: z.ZodOptional<z.ZodNumber>;
@@ -194,9 +222,21 @@ export declare const PluginCreateWindowItem: z.ZodObject<{
194
222
  version: z.ZodOptional<z.ZodNumber>;
195
223
  values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
196
224
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
197
- position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
198
- facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
199
- hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
225
+ position: z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
226
+ x: z.ZodNumber;
227
+ y: z.ZodNumber;
228
+ z: z.ZodNumber;
229
+ }, z.core.$strip>]>;
230
+ facing: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
231
+ x: z.ZodNumber;
232
+ y: z.ZodNumber;
233
+ z: z.ZodNumber;
234
+ }, z.core.$strip>]>>;
235
+ hinge: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
236
+ x: z.ZodNumber;
237
+ y: z.ZodNumber;
238
+ z: z.ZodNumber;
239
+ }, z.core.$strip>]>>;
200
240
  label: z.ZodOptional<z.ZodString>;
201
241
  width: z.ZodOptional<z.ZodNumber>;
202
242
  height: z.ZodOptional<z.ZodNumber>;
@@ -209,9 +249,21 @@ export declare const PluginCreateWindowItems: z.ZodArray<z.ZodObject<{
209
249
  version: z.ZodOptional<z.ZodNumber>;
210
250
  values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
211
251
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
212
- position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
213
- facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
214
- hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
252
+ position: z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
253
+ x: z.ZodNumber;
254
+ y: z.ZodNumber;
255
+ z: z.ZodNumber;
256
+ }, z.core.$strip>]>;
257
+ facing: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
258
+ x: z.ZodNumber;
259
+ y: z.ZodNumber;
260
+ z: z.ZodNumber;
261
+ }, z.core.$strip>]>>;
262
+ hinge: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>, z.ZodObject<{
263
+ x: z.ZodNumber;
264
+ y: z.ZodNumber;
265
+ z: z.ZodNumber;
266
+ }, z.core.$strip>]>>;
215
267
  label: z.ZodOptional<z.ZodString>;
216
268
  width: z.ZodOptional<z.ZodNumber>;
217
269
  height: z.ZodOptional<z.ZodNumber>;