@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.
- package/CHANGELOG.md +24 -0
- package/api-manifest.full.json +8443 -0
- package/api-manifest.json +167 -10
- package/dist/api/core/io/import/index.d.ts +3 -1
- package/dist/api/core/io/import/index.d.ts.map +1 -1
- package/dist/api/design/create/bulk-items.d.ts +185 -0
- package/dist/api/design/create/bulk-items.d.ts.map +1 -0
- package/dist/api/design/create/index.d.ts +310 -22
- package/dist/api/design/create/index.d.ts.map +1 -1
- package/dist/api/design/create/opening-fields.d.ts +37 -0
- package/dist/api/design/create/opening-fields.d.ts.map +1 -0
- package/dist/api/design/delete/index.d.ts +4 -0
- package/dist/api/design/delete/index.d.ts.map +1 -1
- package/dist/api/design/dimensions.d.ts +427 -0
- package/dist/api/design/dimensions.d.ts.map +1 -0
- package/dist/api/design/doors/index.d.ts +20 -13
- package/dist/api/design/doors/index.d.ts.map +1 -1
- package/dist/api/design/index.d.ts +5 -0
- package/dist/api/design/index.d.ts.map +1 -1
- package/dist/api/presentation/annotate.d.ts +2 -2
- package/dist/api/presentation/shapes.d.ts +2 -2
- package/dist/handles.d.ts +19 -0
- package/dist/handles.d.ts.map +1 -1
- package/dist/index.cjs +2011 -1869
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1988 -1869
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/api/core/io/import/index.ts +11 -3
- package/src/api/design/create/bulk-items.ts +186 -0
- package/src/api/design/create/index.ts +335 -38
- package/src/api/design/create/opening-fields.ts +37 -0
- package/src/api/design/delete/index.ts +4 -0
- package/src/api/design/dimensions.ts +453 -0
- package/src/api/design/doors/index.ts +20 -13
- package/src/api/design/index.ts +5 -0
- 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
|
|
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}`);
|
|
449
|
-
*
|
|
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
|
-
*
|
|
499
|
-
*
|
|
500
|
-
*
|
|
501
|
-
*
|
|
502
|
-
*
|
|
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
|
-
*
|
|
552
|
-
*
|
|
553
|
-
*
|
|
554
|
-
*
|
|
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.
|
|
599
|
-
*
|
|
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`? |
|
|
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
|
|
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
|
|
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":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EACL,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,UAAU,EACX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EACnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,oCAAoC,EACpC,kCAAkC,EAClC,kCAAkC,EAClC,mCAAmC,EACpC,MAAM,gCAAgC,CAAA;AAEvC
|
|
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
|
|
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"}
|