@snaptrude/plugin-core 0.9.6 → 0.9.8

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 (37) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/api-manifest.full.json +8443 -0
  3. package/api-manifest.json +167 -10
  4. package/dist/api/core/io/import/index.d.ts +3 -1
  5. package/dist/api/core/io/import/index.d.ts.map +1 -1
  6. package/dist/api/design/create/bulk-items.d.ts +185 -0
  7. package/dist/api/design/create/bulk-items.d.ts.map +1 -0
  8. package/dist/api/design/create/index.d.ts +310 -22
  9. package/dist/api/design/create/index.d.ts.map +1 -1
  10. package/dist/api/design/create/opening-fields.d.ts +37 -0
  11. package/dist/api/design/create/opening-fields.d.ts.map +1 -0
  12. package/dist/api/design/delete/index.d.ts +4 -0
  13. package/dist/api/design/delete/index.d.ts.map +1 -1
  14. package/dist/api/design/dimensions.d.ts +427 -0
  15. package/dist/api/design/dimensions.d.ts.map +1 -0
  16. package/dist/api/design/doors/index.d.ts +20 -13
  17. package/dist/api/design/doors/index.d.ts.map +1 -1
  18. package/dist/api/design/index.d.ts +5 -0
  19. package/dist/api/design/index.d.ts.map +1 -1
  20. package/dist/api/presentation/annotate.d.ts +2 -2
  21. package/dist/api/presentation/shapes.d.ts +2 -2
  22. package/dist/handles.d.ts +19 -0
  23. package/dist/handles.d.ts.map +1 -1
  24. package/dist/index.cjs +2011 -1869
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.js +1988 -1869
  27. package/dist/index.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/api/core/io/import/index.ts +11 -3
  30. package/src/api/design/create/bulk-items.ts +186 -0
  31. package/src/api/design/create/index.ts +335 -38
  32. package/src/api/design/create/opening-fields.ts +37 -0
  33. package/src/api/design/delete/index.ts +4 -0
  34. package/src/api/design/dimensions.ts +453 -0
  35. package/src/api/design/doors/index.ts +20 -13
  36. package/src/api/design/index.ts +5 -0
  37. package/src/handles.ts +24 -0
@@ -3,11 +3,13 @@ import { PluginApiReturn } from "../../../types";
3
3
  import { BrepHandle, ComponentHandle, ContourHandle, ProfileHandle, Vec3Handle } from "../../../handles";
4
4
  import { PluginSpaceType, PluginMassType, PluginDepartmentId } from "../../entity/space";
5
5
  import { PluginBuildableEnvelopePolygonVertex, PluginBuildableEnvelopeSetbackTier, PluginBuildableEnvelopeVerticalCap, PluginBuildableEnvelopeCreateResult } from "../../entity/buildableEnvelope";
6
+ import type { PluginCreateDoorItem, PluginCreateFloorItem, PluginCreateFurnitureItem, PluginCreateWallRunItem, PluginCreateWindowItem } from "./bulk-items";
6
7
  /**
7
8
  * `design.create.*` — author new scene-committed BIM entities.
8
9
  *
9
10
  * Every creator takes geometry handles + scalars and returns a
10
- * {@linkcode ComponentHandle} (or `ComponentHandle[]` for plural creators) — the
11
+ * {@linkcode ComponentHandle} (or `ComponentHandle[]` for plural creators;
12
+ * `wallRuns` returns one `ComponentHandle[]` per run) — the
11
13
  * `Component.id` of the created entity, resolvable across the rest of the
12
14
  * `design.*` surface. Creation is an undoable host call; it **throws** on failure
13
15
  * (no `Result` wrapper — consistent with `core.geom.create.*`).
@@ -190,8 +192,49 @@ export declare abstract class PluginDesignCreateApi {
190
192
  * const contour = await snaptrude.core.geom.create.contourFromProfile(rect)
191
193
  * const floor = await snaptrude.design.create.floor(contour, 0.1)
192
194
  * ```
195
+ *
196
+ * @performance For MORE THAN ONE floor, call `design.create.floors(items[])` — one
197
+ * host round-trip and ONE undo entry for the whole batch. Looping this single-floor
198
+ * creator is N round-trips and N undo entries.
193
199
  */
194
200
  abstract floor(contour: ContourHandle, thickness: number, position?: Vec3Handle): PluginApiReturn<ComponentHandle>;
201
+ /**
202
+ * Create **many floors** in one undoable operation (bulk plural of
203
+ * {@linkcode floor}). Each item extrudes its own footprint contour (outer
204
+ * profile + holes) upward by its own `thickness`, at its own optional
205
+ * position offset. Validate-all-or-throw; one command.
206
+ *
207
+ * @param items - One {@linkcode PluginCreateFloorItem} per floor to create
208
+ * (≥1, ≤1000)
209
+ * @returns the created floors as {@linkcode ComponentHandle}`[]`, in input order
210
+ * @throws `VALIDATION` if the items fail the schema (empty array, more than
211
+ * 1000 items, a non-positive thickness) or a contour is degenerate;
212
+ * `HANDLE_INVALID` if a `contour` or `position` handle is unknown or
213
+ * released; `OPERATION_FAILED` if extrusion fails (nothing is created —
214
+ * `details.itemIndex` is the failing item); `METHOD_NOT_PERMITTED` if the
215
+ * plugin may not write.
216
+ *
217
+ * @examplePrompt Create floors for all these room outlines at once
218
+ * @examplePrompt Add a floor to every space in one operation
219
+ * @examplePrompt Bulk create the floor plates for this building
220
+ * @examplePrompt Lay 100mm floors across these five footprints in one undo step
221
+ * @examplePrompt Create the ground and first floor slabs together
222
+ *
223
+ * @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
224
+ * entry. Always prefer this over calling `design.create.floor` in a loop: build the
225
+ * full `items[]` array first (all contours and offsets up front), then make one call.
226
+ *
227
+ * # Example
228
+ * ```ts
229
+ * const rect = await snaptrude.core.geom.create.profileRect(5, 4)
230
+ * const contour = await snaptrude.core.geom.create.contourFromProfile(rect)
231
+ * const [ground, upper] = await snaptrude.design.create.floors([
232
+ * { contour, thickness: 0.1 },
233
+ * { contour, thickness: 0.1, position: await snaptrude.core.math.vec3.new(0, 3, 0) },
234
+ * ])
235
+ * ```
236
+ */
237
+ abstract floors(items: PluginCreateFloorItem[]): PluginApiReturn<ComponentHandle[]>;
195
238
  /**
196
239
  * Create a **roof** by extruding a footprint contour by `thickness`. Created
197
240
  * flat (extruded downward); pitch/slope is a separate post-creation edit.
@@ -353,8 +396,63 @@ export declare abstract class PluginDesignCreateApi {
353
396
  * centerlines, 3, undefined, brick.label,
354
397
  * )
355
398
  * ```
399
+ *
400
+ * @performance For MORE THAN ONE run, call `design.create.wallRuns(items[])` — one
401
+ * host round-trip and ONE undo entry for every run in the batch. Looping this
402
+ * single-run creator is N round-trips and N undo entries.
356
403
  */
357
404
  abstract walls(profile: ProfileHandle, height?: number, thickness?: number, wallType?: string, storey?: number): PluginApiReturn<ComponentHandle[]>;
405
+ /**
406
+ * Create **many wall runs** in one undoable operation (bulk plural of
407
+ * {@linkcode walls}). Each item is one full run — a wall per curve in that
408
+ * item's profile chain, mitred at shared endpoints. Junctions resolve within a
409
+ * run, not between runs. Each item carries its own
410
+ * dimensions, `wallType` and `storey`, so a single call can build a whole
411
+ * floor plate or several storeys at once. Validate-all-or-throw; one command.
412
+ *
413
+ * @param items - One {@linkcode PluginCreateWallRunItem} per run to create
414
+ * (≥1, ≤1000)
415
+ * @returns one {@linkcode ComponentHandle}`[]` per item, in input order —
416
+ * each inner array holding that run's walls in profile-curve order
417
+ * @throws `VALIDATION` if the items fail the schema (empty array, more than
418
+ * 1000 items, a non-positive height or thickness, a zero-length curve);
419
+ * `HANDLE_INVALID` if a `profile` handle is unknown or released;
420
+ * `PRECONDITION_FAILED` if a profile has no curves, `wallType` names no
421
+ * wall type in the project, or `storey` does not exist;
422
+ * `OPERATION_FAILED` if wall creation fails (nothing is created —
423
+ * `details.itemIndex` is the failing item); `METHOD_NOT_PERMITTED` if the
424
+ * plugin may not write.
425
+ *
426
+ * @examplePrompt Draw all the walls of this floor plan at once
427
+ * @examplePrompt Build every room's perimeter in one operation
428
+ * @examplePrompt Bulk create wall runs from these centerlines
429
+ * @examplePrompt Create the walls for both storeys in a single undo step
430
+ * @examplePrompt Turn these polylines into 200mm brick walls together
431
+ *
432
+ * @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
433
+ * entry. Always prefer this over calling `design.create.walls` in a loop: build the
434
+ * full `items[]` array first (all profiles up front), then make one call.
435
+ *
436
+ * # Example
437
+ * ```ts
438
+ * const v = snaptrude.core.math.vec3
439
+ * const ground = await snaptrude.core.geom.create.profileFromLinePoints([
440
+ * await v.new(0, 0, 0),
441
+ * await v.new(8, 0, 0),
442
+ * await v.new(8, 0, 6),
443
+ * ])
444
+ * const upper = await snaptrude.core.geom.create.profileFromLinePoints([
445
+ * await v.new(0, 0, 0),
446
+ * await v.new(8, 0, 0),
447
+ * ])
448
+ * const [groundWalls, upperWalls] = await snaptrude.design.create.wallRuns([
449
+ * { profile: ground, height: 3, thickness: 0.2 },
450
+ * { profile: upper, height: 3, storey: 2 },
451
+ * ])
452
+ * console.log(groundWalls.length, "walls on the ground floor")
453
+ * ```
454
+ */
455
+ abstract wallRuns(items: PluginCreateWallRunItem[]): PluginApiReturn<ComponentHandle[][]>;
358
456
  /**
359
457
  * Create a **staircase** from a parametric preset, placed at a point.
360
458
  *
@@ -444,15 +542,19 @@ export declare abstract class PluginDesignCreateApi {
444
542
  * `position.y` (the same surface-flush contract as interactive drag-drop) —
445
543
  * pass the floor/storey elevation to stand furniture on it; never add half
446
544
  * the item's height yourself.
447
- * @param options - Optional placement options: `label` — instance name
448
- * (default auto `${name}Ins${n}`); `createNewSourceMesh` — emit a
449
- * source-mesh creation command (default `true`)
545
+ * @param options - Optional placement options: `label` — instance name and
546
+ * readable label (`design.query.getLabel`; default auto `${name}Ins${n}`);
547
+ * `createNewSourceMesh` legacy flag, kept for compatibility. The host owns
548
+ * source-mesh persistence: a catalog source is recorded exactly once, by the
549
+ * first placement that brings it in, and this flag cannot skip that record.
450
550
  * @param angleInDegrees - Optional signed rotation about the vertical axis, in
451
551
  * degrees (same convention as {@linkcode PluginDesignTransformApi.rotate}).
452
552
  * Applied at creation time so it is part of the placement's single undo entry.
453
553
  * Default: the item's own (unrotated) orientation.
454
554
  * @returns the {@linkcode ComponentHandle} of the placed furniture instance
455
- * @throws if the catalog id is unknown, the source mesh fails to load, or placement fails
555
+ * @throws if the catalog id is unknown, the source mesh fails to load, or placement fails;
556
+ * `PRECONDITION_FAILED` (`details.engineCode: "TOOL_ACTIVE"`) while the interactive
557
+ * furniture tool is active — finish or cancel it first
456
558
  *
457
559
  * @examplePrompt Place a chair from the library at this spot
458
560
  * @examplePrompt Add a sofa from the furniture catalog to the living room
@@ -476,11 +578,58 @@ export declare abstract class PluginDesignCreateApi {
476
578
  * 90,
477
579
  * )
478
580
  * ```
581
+ *
582
+ * @performance For MORE THAN ONE item, call `design.create.furnitureItems(items[])` —
583
+ * one host round-trip and ONE undo entry, and a catalog source shared by several
584
+ * items is fetched once. Looping this single-item creator is N round-trips.
479
585
  */
480
586
  abstract furniture(catalogId: string, position: Vec3Handle, options?: {
481
587
  label?: string;
482
588
  createNewSourceMesh?: boolean;
483
589
  }, angleInDegrees?: number): PluginApiReturn<ComponentHandle>;
590
+ /**
591
+ * Place **many furniture items** in one undoable operation (bulk plural of
592
+ * {@linkcode furniture}). Each item names a catalog id and an absolute world
593
+ * position (`position.y` is the REST elevation — the same grounding contract
594
+ * as the singular creator), with optional label and rotation. A catalog
595
+ * source shared by several items is fetched and recorded once for the whole
596
+ * batch, so the host — not the caller — owns source persistence (there is no
597
+ * per-item `createNewSourceMesh`). Validate-all-or-throw; one command.
598
+ *
599
+ * @param items - One {@linkcode PluginCreateFurnitureItem} per instance to
600
+ * place (≥1, ≤1000)
601
+ * @returns the placed instances as {@linkcode ComponentHandle}`[]`, in input order
602
+ * @throws `VALIDATION` if the items fail the schema (empty array, more than
603
+ * 1000 items); `HANDLE_INVALID` if a `position` handle is unknown or
604
+ * released; `PRECONDITION_FAILED` if a catalog id is unknown, a furniture
605
+ * tool is active, or a parametric group is active (exit it first, or place
606
+ * items one at a time with `furniture`); `OPERATION_FAILED` if a source
607
+ * mesh fails to load or placement fails (nothing is created —
608
+ * `details.itemIndex` is the failing item); `METHOD_NOT_PERMITTED` if the plugin may not write.
609
+ *
610
+ * @examplePrompt Place all the desks for this office at once
611
+ * @examplePrompt Furnish every bedroom in one operation
612
+ * @examplePrompt Bulk place these chairs around the table
613
+ * @examplePrompt Add the whole furniture layout in a single undo step
614
+ * @examplePrompt Drop twenty copies of this chair at these positions
615
+ *
616
+ * @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
617
+ * entry, and each distinct catalog source loads once. Always prefer this over
618
+ * calling `design.create.furniture` in a loop: build the full `items[]` array
619
+ * first (all positions and angles up front), then make one call.
620
+ *
621
+ * # Example
622
+ * ```ts
623
+ * const v = snaptrude.core.math.vec3
624
+ * const [chair] = await snaptrude.design.furniture.listCatalog()
625
+ * const placed = await snaptrude.design.create.furnitureItems([
626
+ * { catalogId: chair.id, position: await v.new(3, 0, 5), label: "Chair-01" },
627
+ * { catalogId: chair.id, position: await v.new(4, 0, 5), angleInDegrees: 90 },
628
+ * { catalogId: chair.id, position: await v.new(5, 0, 5), angleInDegrees: 180 },
629
+ * ])
630
+ * ```
631
+ */
632
+ abstract furnitureItems(items: PluginCreateFurnitureItem[]): PluginApiReturn<ComponentHandle[]>;
484
633
  /**
485
634
  * Place a **door** from the catalog into a host wall.
486
635
  *
@@ -494,12 +643,15 @@ export declare abstract class PluginDesignCreateApi {
494
643
  * @param catalogId - Library id: team `_id` or general `fullName`
495
644
  * @param hostWall - The wall to host the door
496
645
  * @param position - World point projected onto the wall to locate the opening
497
- * @param options - Optional placement options: `label` — instance name
498
- * @param facing - World point selecting which side of the wall the door faces
499
- * (the room it opens into) the same convention as approaching the wall
500
- * from that side with the cursor in the interactive tool. Any point clearly
501
- * on that side works (e.g. the room's center). Default: the engine picks a
502
- * side (nondeterministic when `position` sits on the wall centerline).
646
+ * @param options - Optional placement options: `label` — instance name;
647
+ * `hinge` world point near the jamb the door is hinged on (the door is
648
+ * reflected along the wall so its hinged jamb is the one nearer this
649
+ * point; default the catalog item's authored hinge side)
650
+ * @param facing - World point on the side of the wall the door swings open
651
+ * to (the room it opens into — where the plan symbol draws the swing arc).
652
+ * Any point clearly on that side works (e.g. the room's center). Default:
653
+ * the engine picks a side (nondeterministic when `position` sits on the
654
+ * wall centerline).
503
655
  * @returns the {@linkcode ComponentHandle} of the placed door
504
656
  * @throws if the catalog id is unknown, the host is not a wall, the source
505
657
  * mesh fails to load, or the projected point falls **outside** the host wall
@@ -510,6 +662,7 @@ export declare abstract class PluginDesignCreateApi {
510
662
  * @examplePrompt Insert the entrance door into this wall
511
663
  * @examplePrompt Add a door to the wall and call it Entry-01
512
664
  * @examplePrompt Add a door that opens into the living room
665
+ * @examplePrompt Put a door here hinged on the north jamb
513
666
  *
514
667
  * # Example
515
668
  * ```ts
@@ -529,11 +682,76 @@ export declare abstract class PluginDesignCreateApi {
529
682
  * undefined,
530
683
  * await snaptrude.core.math.vec3.new(3, 0, 9),
531
684
  * )
685
+ * // …and hinged on the jamb nearest a point (here the +x end of the opening):
686
+ * const hingedRight = await snaptrude.design.create.door(
687
+ * entry.id,
688
+ * wall,
689
+ * await snaptrude.core.math.vec3.new(3, 0, 5),
690
+ * { hinge: await snaptrude.core.math.vec3.new(3.5, 0, 5) },
691
+ * await snaptrude.core.math.vec3.new(3, 0, 9),
692
+ * )
532
693
  * ```
694
+ *
695
+ * @performance For MORE THAN ONE door, call `design.create.doors(items[])` — one host
696
+ * round-trip and ONE undo entry, with each host wall re-cut once per opening inside
697
+ * that single call. Looping this single-door creator is N round-trips.
533
698
  */
534
699
  abstract door(catalogId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
535
700
  label?: string;
701
+ hinge?: Vec3Handle;
536
702
  }, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
703
+ /**
704
+ * Place **many doors** into host walls in one undoable operation (bulk plural
705
+ * of {@linkcode door}). Each item carries its own catalog id, host wall,
706
+ * world position, and optional `facing`, `label`, `width` and `height` — the
707
+ * same fields as a `"door"` {@linkcode PluginDesignCreateOpeningOptions}.
708
+ * Validate-all-or-throw; one command.
709
+ *
710
+ * As with the singular creator, placing an opening **re-cuts its host wall**:
711
+ * the wall you passed as `hostWall` stops resolving once the call returns.
712
+ * Several items MAY name the same original wall handle in one call — the host
713
+ * chains the re-cuts internally — but after the call recover the surviving
714
+ * wall with `design.query.getHost(opening)`, never by reusing the handle you
715
+ * passed in.
716
+ *
717
+ * @param items - One {@linkcode PluginCreateDoorItem} per door to place
718
+ * (≥1, ≤1000)
719
+ * @returns the placed doors as {@linkcode ComponentHandle}`[]`, in input order
720
+ * @throws `VALIDATION` if the items fail the schema (empty array, more than
721
+ * 1000 items, unknown fields, a non-positive `width`/`height`);
722
+ * `HANDLE_INVALID` if a `position`, `facing` or `hinge` handle is unknown
723
+ * or released; `PRECONDITION_FAILED` if a catalog id is unknown, a `hostWall`
724
+ * is not a wall / is locked / is not in the active proposal, the projected
725
+ * point falls outside its host wall, or a door tool is active;
726
+ * `OPERATION_FAILED` if a source mesh fails to load or placement fails
727
+ * (nothing is created — `details.itemIndex` is the failing item);
728
+ * `METHOD_NOT_PERMITTED` if the plugin may not write.
729
+ *
730
+ * @examplePrompt Add doors to all of these walls at once
731
+ * @examplePrompt Place a door in every room in one operation
732
+ * @examplePrompt Bulk add the entrance doors from this schedule
733
+ * @examplePrompt Put three doors on this wall in a single undo step
734
+ * @examplePrompt Add all the doors for this floor plan together
735
+ *
736
+ * @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
737
+ * entry, and each distinct catalog source loads once. Always prefer this over
738
+ * calling `design.create.door` in a loop: build the full `items[]` array first
739
+ * (all host walls and points up front), then make one call.
740
+ *
741
+ * # Example
742
+ * ```ts
743
+ * const v = snaptrude.core.math.vec3
744
+ * const [wall] = await snaptrude.design.query.listWalls({ isSelected: true })
745
+ * const [entry] = await snaptrude.design.doors.listCatalog()
746
+ * const [front, side] = await snaptrude.design.create.doors([
747
+ * { catalogId: entry.id, hostWall: wall, position: await v.new(2, 0, 5), label: "D-01" },
748
+ * { catalogId: entry.id, hostWall: wall, position: await v.new(6, 0, 5), width: 1.2 },
749
+ * ])
750
+ * // `wall` was re-cut twice and no longer resolves — ask the opening for its host:
751
+ * const currentWall = await snaptrude.design.query.getHost(front)
752
+ * ```
753
+ */
754
+ abstract doors(items: PluginCreateDoorItem[]): PluginApiReturn<ComponentHandle[]>;
537
755
  /**
538
756
  * Place a **window** from the catalog into a host wall.
539
757
  *
@@ -547,11 +765,14 @@ export declare abstract class PluginDesignCreateApi {
547
765
  * @param catalogId - Library id: team `_id` or general `fullName`
548
766
  * @param hostWall - The wall to host the window
549
767
  * @param position - World point projected onto the wall to locate the opening
550
- * @param options - Optional placement options: `label` — instance name
551
- * @param facing - World point selecting which side of the wall the window
552
- * faces (matters for asymmetric windows, e.g. casement swing) same
553
- * convention as {@linkcode PluginDesignCreateApi.door}. Default: the engine
554
- * picks a side (nondeterministic when `position` sits on the centerline).
768
+ * @param options - Optional placement options: `label` — instance name;
769
+ * `hinge` world point near the jamb the window is hinged on (same rule
770
+ * as {@linkcode PluginDesignCreateApi.door}; default the catalog item's
771
+ * authored side)
772
+ * @param facing - World point on the side of the wall the window opens to
773
+ * (matters for asymmetric windows, e.g. casement swing) — same convention
774
+ * as {@linkcode PluginDesignCreateApi.door}. Default: the engine picks a
775
+ * side (nondeterministic when `position` sits on the centerline).
555
776
  * @returns the {@linkcode ComponentHandle} of the placed window
556
777
  * @throws if the catalog id is unknown, the host is not a wall, the source
557
778
  * mesh fails to load, or the projected point falls **outside** the host wall
@@ -574,10 +795,68 @@ export declare abstract class PluginDesignCreateApi {
574
795
  * { label: "Win-01" },
575
796
  * )
576
797
  * ```
798
+ *
799
+ * @performance For MORE THAN ONE window, call `design.create.windows(items[])` — one
800
+ * host round-trip and ONE undo entry, with each host wall re-cut once per opening
801
+ * inside that single call. Looping this single-window creator is N round-trips.
577
802
  */
578
803
  abstract window(catalogId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
579
804
  label?: string;
805
+ hinge?: Vec3Handle;
580
806
  }, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
807
+ /**
808
+ * Place **many windows** into host walls in one undoable operation (bulk
809
+ * plural of {@linkcode window}). Each item carries its own catalog id, host
810
+ * wall, world position, and optional `facing`, `label`, `width`, `height` and
811
+ * `sillHeight` — the same fields as a `"window"`
812
+ * {@linkcode PluginDesignCreateOpeningOptions}. `sillHeight` is measured from
813
+ * the host wall base to the BOTTOM of the window. Validate-all-or-throw; one
814
+ * command.
815
+ *
816
+ * As with the singular creator, placing an opening **re-cuts its host wall**:
817
+ * the wall you passed as `hostWall` stops resolving once the call returns.
818
+ * Several items MAY name the same original wall handle in one call — the host
819
+ * chains the re-cuts internally — but after the call recover the surviving
820
+ * wall with `design.query.getHost(opening)`, never by reusing the handle you
821
+ * passed in.
822
+ *
823
+ * @param items - One {@linkcode PluginCreateWindowItem} per window to place
824
+ * (≥1, ≤1000)
825
+ * @returns the placed windows as {@linkcode ComponentHandle}`[]`, in input order
826
+ * @throws `VALIDATION` if the items fail the schema (empty array, more than
827
+ * 1000 items, unknown fields, a non-positive `width`/`height`, a negative
828
+ * `sillHeight`); `HANDLE_INVALID` if a `position`, `facing` or `hinge`
829
+ * handle is unknown or released; `PRECONDITION_FAILED` if a catalog id is unknown, a
830
+ * `hostWall` is not a wall / is locked / is not in the active proposal, the
831
+ * projected point falls outside its host wall, or a window tool is active;
832
+ * `OPERATION_FAILED` if a source mesh fails to load or placement fails
833
+ * (nothing is created — `details.itemIndex` is the failing item);
834
+ * `METHOD_NOT_PERMITTED` if the plugin may not write.
835
+ *
836
+ * @examplePrompt Add windows along this whole facade at once
837
+ * @examplePrompt Place a window in every bedroom in one operation
838
+ * @examplePrompt Bulk add the windows from this schedule
839
+ * @examplePrompt Put four windows on this wall in a single undo step
840
+ * @examplePrompt Add all the windows with a 0.9m sill height together
841
+ *
842
+ * @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
843
+ * entry, and each distinct catalog source loads once. Always prefer this over
844
+ * calling `design.create.window` in a loop: build the full `items[]` array first
845
+ * (all host walls and points up front), then make one call.
846
+ *
847
+ * # Example
848
+ * ```ts
849
+ * const v = snaptrude.core.math.vec3
850
+ * const [wall] = await snaptrude.design.query.listWalls({ isSelected: true })
851
+ * const [casement] = await snaptrude.design.windows.listCatalog()
852
+ * const placed = await snaptrude.design.create.windows([
853
+ * { catalogId: casement.id, hostWall: wall, position: await v.new(2, 0, 5), sillHeight: 0.9 },
854
+ * { catalogId: casement.id, hostWall: wall, position: await v.new(5, 0, 5), sillHeight: 0.9 },
855
+ * ])
856
+ * const currentWall = await snaptrude.design.query.getHost(placed[0])
857
+ * ```
858
+ */
859
+ abstract windows(items: PluginCreateWindowItem[]): PluginApiReturn<ComponentHandle[]>;
581
860
  /**
582
861
  * Place a catalog **door or window** into a host wall with optional size overrides.
583
862
  *
@@ -587,7 +866,7 @@ export declare abstract class PluginDesignCreateApi {
587
866
  * its center. Placement is asynchronous and committed as one undoable creation.
588
867
  *
589
868
  * @param options - Opening kind, catalog and host references, placement, and
590
- * optional facing, label, and dimensions
869
+ * optional facing (swing side), hinge (hinged jamb), label, and dimensions
591
870
  * @returns the {@linkcode ComponentHandle} of the placed door or window
592
871
  * @throws if the options are invalid, the catalog id is unknown, the host is
593
872
  * not a wall, loading fails, or the opening cannot be placed on the host
@@ -595,8 +874,9 @@ export declare abstract class PluginDesignCreateApi {
595
874
  * @examplePrompt Add a 1m wide door to this wall here
596
875
  * @examplePrompt Place a window with a 0.9m sill height on the selected wall
597
876
  *
598
- * @performance Single-opening creator — use it for one hosted opening. A plural
599
- * API is intentionally unavailable until host placement can be atomic.
877
+ * @performance Single-opening creator — use it for one hosted opening. For MORE
878
+ * THAN ONE, call `design.create.doors(items[])` / `design.create.windows(items[])`:
879
+ * the same per-item fields, one host round-trip, ONE undo entry.
600
880
  *
601
881
  * # Example
602
882
  * ```ts
@@ -1118,7 +1398,7 @@ export type PluginDesignCreateStaircaseArgs = z.infer<typeof PluginDesignCreateS
1118
1398
  * | `catalogId` | `string` | Library id: team `_id` or general `fullName` |
1119
1399
  * | `position` | {@linkcode Vec3Handle} | Absolute world placement point |
1120
1400
  * | `label` | `string`? | Instance name (default auto `${name}Ins${n}`) |
1121
- * | `createNewSourceMesh` | `boolean`? | Emit a source-mesh creation command (default `true`) |
1401
+ * | `createNewSourceMesh` | `boolean`? | Legacy, kept for compatibility; the host records a catalog source exactly once and this flag cannot skip it |
1122
1402
  * | `angleInDegrees` | `number`? | Rotation about the vertical axis, in degrees (default unrotated) |
1123
1403
  */
1124
1404
  export declare const PluginDesignCreateFurnitureArgs: z.ZodObject<{
@@ -1138,7 +1418,8 @@ export type PluginDesignCreateFurnitureArgs = z.infer<typeof PluginDesignCreateF
1138
1418
  * | `hostWall` | {@linkcode ComponentHandle} | The wall to host the door |
1139
1419
  * | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
1140
1420
  * | `label` | `string`? | Instance name (optional) |
1141
- * | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the door faces (default engine-chosen) |
1421
+ * | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the door swings open to (default engine-chosen) |
1422
+ * | `hinge` | {@linkcode Vec3Handle}? | World point near the jamb the door is hinged on (default the catalog item's authored side) |
1142
1423
  */
1143
1424
  export declare const PluginDesignCreateDoorArgs: z.ZodObject<{
1144
1425
  catalogId: z.ZodString;
@@ -1146,6 +1427,7 @@ export declare const PluginDesignCreateDoorArgs: z.ZodObject<{
1146
1427
  position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1147
1428
  label: z.ZodOptional<z.ZodString>;
1148
1429
  facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1430
+ hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1149
1431
  }, z.core.$strip>;
1150
1432
  export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorArgs>;
1151
1433
  /**
@@ -1157,7 +1439,8 @@ export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorAr
1157
1439
  * | `hostWall` | {@linkcode ComponentHandle} | The wall to host the window |
1158
1440
  * | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
1159
1441
  * | `label` | `string`? | Instance name (optional) |
1160
- * | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the window faces (default engine-chosen) |
1442
+ * | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the window opens to (default engine-chosen) |
1443
+ * | `hinge` | {@linkcode Vec3Handle}? | World point near the jamb the window is hinged on (default the catalog item's authored side) |
1161
1444
  */
1162
1445
  export declare const PluginDesignCreateWindowArgs: z.ZodObject<{
1163
1446
  catalogId: z.ZodString;
@@ -1165,6 +1448,7 @@ export declare const PluginDesignCreateWindowArgs: z.ZodObject<{
1165
1448
  position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1166
1449
  label: z.ZodOptional<z.ZodString>;
1167
1450
  facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1451
+ hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1168
1452
  }, z.core.$strip>;
1169
1453
  export type PluginDesignCreateWindowArgs = z.infer<typeof PluginDesignCreateWindowArgs>;
1170
1454
  /**
@@ -1178,6 +1462,7 @@ export declare const PluginDesignCreateOpeningOptions: z.ZodDiscriminatedUnion<[
1178
1462
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
1179
1463
  position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1180
1464
  facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1465
+ hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1181
1466
  label: z.ZodOptional<z.ZodString>;
1182
1467
  width: z.ZodOptional<z.ZodNumber>;
1183
1468
  height: z.ZodOptional<z.ZodNumber>;
@@ -1188,6 +1473,7 @@ export declare const PluginDesignCreateOpeningOptions: z.ZodDiscriminatedUnion<[
1188
1473
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
1189
1474
  position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1190
1475
  facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1476
+ hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1191
1477
  label: z.ZodOptional<z.ZodString>;
1192
1478
  width: z.ZodOptional<z.ZodNumber>;
1193
1479
  height: z.ZodOptional<z.ZodNumber>;
@@ -1348,4 +1634,6 @@ export declare const PluginCreateSpaceItem: z.ZodObject<{
1348
1634
  storey: z.ZodOptional<z.ZodNumber>;
1349
1635
  }, z.core.$strip>;
1350
1636
  export type PluginCreateSpaceItem = z.infer<typeof PluginCreateSpaceItem>;
1637
+ export * from "./opening-fields";
1638
+ export * from "./bulk-items";
1351
1639
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/create/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/create/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import * as z from "zod";
2
+ import { ComponentHandle } from "../../../handles";
3
+ /**
4
+ * The shared field bag every hosted opening (door / window) carries — used by
5
+ * {@linkcode PluginDesignCreateOpeningOptions} and by the bulk item schemas in
6
+ * `bulk-items.ts`, so singular and plural openings validate identically.
7
+ *
8
+ * `facing` and `hinge` are WORLD POINTS, not directions: `facing` sits on the
9
+ * side of the wall the leaf swings open to (where the plan symbol draws the
10
+ * swing arc); `hinge` sits near the jamb the leaf is hinged on — the item is
11
+ * reflected along the wall so its hinged jamb is the one nearer that point.
12
+ * Either may be omitted (engine-chosen side / the catalog item's authored
13
+ * hinge side). Neither has a visible effect on symmetric items such as
14
+ * sliders or fixed windows.
15
+ *
16
+ * | Property | Type | Description |
17
+ * |---|---|---|
18
+ * | `catalogId` | `string` | Library id: team `_id` or general `fullName` |
19
+ * | `hostWall` | {@linkcode ComponentHandle} | The wall to host the opening |
20
+ * | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
21
+ * | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the opening swings open to (default engine-chosen) |
22
+ * | `hinge` | {@linkcode Vec3Handle}? | World point near the jamb the opening is hinged on (default the catalog item's authored side) |
23
+ * | `label` | `string`? | Instance name (optional) |
24
+ * | `width` | `number`? | Width override (Snaptrude units, > 0; default the catalog item's) |
25
+ * | `height` | `number`? | Height override (Snaptrude units, > 0; default the catalog item's) |
26
+ */
27
+ export declare const PluginOpeningBaseOptions: {
28
+ catalogId: z.ZodString;
29
+ hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
30
+ position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
31
+ facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
32
+ hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
33
+ label: z.ZodOptional<z.ZodString>;
34
+ width: z.ZodOptional<z.ZodNumber>;
35
+ height: z.ZodOptional<z.ZodNumber>;
36
+ };
37
+ //# sourceMappingURL=opening-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening-fields.d.ts","sourceRoot":"","sources":["../../../../src/api/design/create/opening-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAc,MAAM,kBAAkB,CAAA;AAE9D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;CASpC,CAAA"}
@@ -36,6 +36,10 @@ export declare abstract class PluginDesignDeleteApi {
36
36
  * children are removed and linked-list neighbours are fixed up — not caller-tunable
37
37
  * in v1. Undoable — commits as a **single** undo entry.
38
38
  *
39
+ * Dimension lines anchored to a deleted entity are removed with it, in the same undo
40
+ * entry, exactly as the editor's Delete key does — see `design.dimensions`. They are
41
+ * NOT listed in `affected`, which reports component handles only.
42
+ *
39
43
  * @param components - Entities to delete. Unknown/forged handles reject the whole call (fail-fast).
40
44
  * @returns The entities that were deleted, as {@linkcode ComponentHandle}`[]`
41
45
  * (echoed host-side from the resolved+deleted set — the engine returns no ids).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/delete/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,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAElD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B;;iBAEzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAE3F;;;;;;;;;GASG;AACH,8BAAsB,qBAAqB;;IAGzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;aACa,QAAQ,CACtB,UAAU,EAAE,eAAe,EAAE,GAC5B,eAAe,CAAC,wBAAwB,CAAC;CAC7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/delete/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,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAElD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B;;iBAEzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAE3F;;;;;;;;;GASG;AACH,8BAAsB,qBAAqB;;IAGzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;aACa,QAAQ,CACtB,UAAU,EAAE,eAAe,EAAE,GAC5B,eAAe,CAAC,wBAAwB,CAAC;CAC7C"}