@snaptrude/plugin-core 0.9.8 → 0.9.10

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/AGENTS.md CHANGED
@@ -180,6 +180,10 @@ These are in-browser integration tests that exercise the plugin API end-to-end.
180
180
  | `entity/referenceLine.ts` | `tests/referenceLines.ts` |
181
181
  | `entity/department.ts` | `tests/departments.ts` |
182
182
  | `entity/buildableEnvelope.ts` | `tests/buildableEnvelope.ts` |
183
+ | `program/metadata.ts` | `tests/programMetadata.ts` |
184
+ | `program/labels.ts` | `tests/programLabels.ts` |
185
+ | `program/spreadsheet.ts` (custom sheets) | `tests/spreadsheetCustomSheets.ts` |
186
+ | `core/tags.ts` (`listForComponents`) | `tests/tagsBulk.ts` |
183
187
  | `tools/selection.ts` | `tests/selection.ts` |
184
188
  | `tools/transform.ts` | `tests/transform.ts` |
185
189
  | `tools/copy.ts` | `tests/copy.ts` |
package/CHANGELOG.md CHANGED
@@ -1,14 +1,22 @@
1
1
  # @snaptrude/plugin-core
2
2
 
3
- ## 0.9.8
3
+ ## 0.9.10
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - 7fd374e: Add `hinge` to `design.create.door` / `window` (in `options`), `doors[]` / `windows[]` items and `opening`: a world point near the jamb the leaf is hinged on; the placed item is reflected along the wall when the catalog item's authored hinge side would land on the other jamb one undo entry, no extra command.
7
+ - `core.mode.set("program")` now opens the Program tab (the same path as the top bar's Program button) instead of refusing with `PRECONDITION_FAILED`; it resolves once the tab has connected, and waits for the user to confirm the editor's pop-up modal when the browser blocks the window.
8
+ - `workspace.openProgramMode()` / `closeProgramMode()` — the Program-tab counterpart of `openPresentMode` / `closePresentMode`: open (awaiting the tab's connection) and close the paired Program window.
8
9
 
9
- **BEHAVIOUR FIX — `facing`.** The host placed the swing on the side OPPOSITE the `facing` point (the interactive tool's cursor convention) while the contract said "the room it opens into". The host now matches the contract: the leaf swings open toward `facing`. Callers that passed a point on the room side get the documented result; nothing in the contract changed shape.
10
+ ## 0.9.9
10
11
 
11
- `design.doors.getSwingDirection` is now derived from the placed mesh's orientation (hand as seen standing on the swing side facing the door); it previously read a scaling sign that placement never sets and reported `"left"` for every door. `mirror` axis docs now say what each axis does to a door (`'x'` swing side, `'z'` hinged jamb, `'y'` upside down); behaviour unchanged.
12
+ ### Patch Changes
13
+
14
+ - Program-mode additions requested by the healthcare programming pilot (all additive; no signature changes):
15
+ - `program.metadata` — the Program Data sheet's custom columns and per-space values: `listHeaders`, `createHeader` (reuse-by-name), `get`, `list`, `update`, `updateMany`. Writes are undoable and work with the Program tab closed.
16
+ - `program.labels` — the program rows (space types) with targets: `list`, `get`, `create` (optionally `createSpaces`), `setTargetArea`, `setTargetCount`. Covers "target area of non-departments": a space inherits its label's target; departments keep `program.departments.setTargetArea`.
17
+ - `program.spreadsheet` — custom program sheets with a group-by hierarchy: `createCustomSheet`, `updateCustomSheet`, `getCustomSheet`, `listCustomSheets`, `listCustomSheetProperties`.
18
+ - `core.tags.listForComponents(componentIds?)` — every space's tags + colors in one round-trip.
19
+ - `program.departments` — `targetCount` on the department record and `setTargetCount(departmentId, targetCount)`, the count twin of `setTargetArea` (the engine stores both on the department, like on labels).
12
20
 
13
21
  ## 0.9.7
14
22
 
package/api-manifest.json CHANGED
@@ -3403,7 +3403,8 @@
3403
3403
  "examplePrompts": [
3404
3404
  "Switch to present mode",
3405
3405
  "Open BIM mode",
3406
- "Go back to design mode\n\n# Example\n```ts\nawait snaptrude.core.mode.set(\"present\")\n// ... presentation work ...\nawait snaptrude.core.mode.set(\"design\")\n```"
3406
+ "Go back to design mode",
3407
+ "Open program mode\n\n# Example\n```ts\nawait snaptrude.core.mode.set(\"present\")\n// ... presentation work ...\nawait snaptrude.core.mode.set(\"design\")\n```"
3407
3408
  ],
3408
3409
  "argsType": "PluginAppMode",
3409
3410
  "resultType": "PluginCoreModeSetResult"
@@ -4038,6 +4039,19 @@
4038
4039
  "argsType": "ComponentHandle",
4039
4040
  "resultType": "PluginCoreTagsGetTagsForComponentResult"
4040
4041
  },
4042
+ {
4043
+ "path": "core.tags.listForComponents",
4044
+ "namespace": "core.tags",
4045
+ "summary": "List the tags carried by many components in one call.",
4046
+ "examplePrompts": [
4047
+ "Get the tags of every space with their colors",
4048
+ "List the tags on all rooms so I can color them by Occupancy",
4049
+ "Which tag does each selected space carry?\n\n# Example\n```ts\nconst { components } = await snaptrude.core.tags.listForComponents()\nfor (const c of components) {\nconst occupancy = c.tags.find((t) => t.categoryName === \"Occupancy\")\nif (occupancy) paint(c.componentId, occupancy.color)\n}\n```"
4050
+ ],
4051
+ "argsType": "ComponentHandle[]",
4052
+ "resultType": "PluginCoreTagsListForComponentsResult",
4053
+ "performance": "One round-trip for any number of components — use this instead of a `listForComponent` loop."
4054
+ },
4041
4055
  {
4042
4056
  "path": "core.tags.unassign",
4043
4057
  "namespace": "core.tags",
@@ -7662,6 +7676,18 @@
7662
7676
  "argsType": "string",
7663
7677
  "resultType": "PluginProgramDepartmentsSetTargetAreaResult"
7664
7678
  },
7679
+ {
7680
+ "path": "program.departments.setTargetCount",
7681
+ "namespace": "program.departments",
7682
+ "summary": "Set a department's target unit count.",
7683
+ "examplePrompts": [
7684
+ "Set the Bedrooms department unit count to 12",
7685
+ "The program needs 4 clinic blocks — update the department count",
7686
+ "Update the target count for department dep_123\n\n# Example\n```ts\nawait snaptrude.program.departments.setTargetCount(\"dep_123\", 12)\n```"
7687
+ ],
7688
+ "argsType": "string",
7689
+ "resultType": "PluginProgramDepartmentsSetTargetCountResult"
7690
+ },
7665
7691
  {
7666
7692
  "path": "program.departments.unassign",
7667
7693
  "namespace": "program.departments",
@@ -7688,6 +7714,65 @@
7688
7714
  "argsType": "string",
7689
7715
  "resultType": "PluginProgramDepartmentsUpdateResult"
7690
7716
  },
7717
+ {
7718
+ "path": "program.labels.create",
7719
+ "namespace": "program.labels",
7720
+ "summary": "Create labels (program rows), optionally creating their spaces too.",
7721
+ "examplePrompts": [
7722
+ "Add program rows for 4 exam rooms of 120 sqft each",
7723
+ "Create the labels from this interpreted program",
7724
+ "Add an Office label with a 2000 sqft target to the Admin department",
7725
+ "Create program rows and their spaces on the canvas\n\n# Example\n```ts\nconst { labelIds } = await snaptrude.program.labels.create(\n[{ name: \"Exam Room\", targetArea: 480, targetCount: 4, departmentName: \"Clinic\" }],\n{ units: \"ft2\" },\n)\n```"
7726
+ ],
7727
+ "argsType": "PluginProgramLabelCreateItem[]",
7728
+ "resultType": "PluginProgramLabelsCreateResult"
7729
+ },
7730
+ {
7731
+ "path": "program.labels.get",
7732
+ "namespace": "program.labels",
7733
+ "summary": "Get a single label by id.",
7734
+ "examplePrompts": [
7735
+ "Get the label with id lbl_12",
7736
+ "What is the target area of this program row?\n\n# Example\n```ts\nconst label = await snaptrude.program.labels.get(\"lbl_12\")\nif (label) console.log(label.name, label.targetArea, label.units)\n```"
7737
+ ],
7738
+ "argsType": "string",
7739
+ "resultType": "PluginProgramLabelsGetResult"
7740
+ },
7741
+ {
7742
+ "path": "program.labels.list",
7743
+ "namespace": "program.labels",
7744
+ "summary": "List the labels (program rows) of the active program.",
7745
+ "examplePrompts": [
7746
+ "List all the program rows with their target areas",
7747
+ "What space labels are in the program and how many of each?",
7748
+ "Show every label with its department and target\n\n# Example\n```ts\nconst { units, labels } = await snaptrude.program.labels.list()\nfor (const l of labels) console.log(l.name, l.targetArea, units, l.targetCount)\n```"
7749
+ ],
7750
+ "argsType": null,
7751
+ "resultType": "PluginProgramLabelsListResult"
7752
+ },
7753
+ {
7754
+ "path": "program.labels.setTargetArea",
7755
+ "namespace": "program.labels",
7756
+ "summary": "Set a label's total target area.",
7757
+ "examplePrompts": [
7758
+ "Set the Exam Room target area to 480 sqft",
7759
+ "Give the Corridor program row a 150 sqm target",
7760
+ "Update the area target for label lbl_12\n\n# Example\n```ts\nawait snaptrude.program.labels.setTargetArea(\"lbl_12\", 480, \"ft2\")\n```"
7761
+ ],
7762
+ "argsType": "string",
7763
+ "resultType": "PluginProgramLabelsSetTargetAreaResult"
7764
+ },
7765
+ {
7766
+ "path": "program.labels.setTargetCount",
7767
+ "namespace": "program.labels",
7768
+ "summary": "Set a label's target unit count (how many of this space the program calls for).",
7769
+ "examplePrompts": [
7770
+ "Set the Exam Room count to 6",
7771
+ "The program needs 12 patient rooms — update the count\n\n# Example\n```ts\nawait snaptrude.program.labels.setTargetCount(\"lbl_12\", 6)\n```"
7772
+ ],
7773
+ "argsType": "string",
7774
+ "resultType": "PluginProgramLabelsSetTargetCountResult"
7775
+ },
7691
7776
  {
7692
7777
  "path": "program.layout.applySolution",
7693
7778
  "namespace": "program.layout",
@@ -7761,6 +7846,81 @@
7761
7846
  "argsType": null,
7762
7847
  "resultType": "PluginProgramLayoutStackResult"
7763
7848
  },
7849
+ {
7850
+ "path": "program.metadata.createHeader",
7851
+ "namespace": "program.metadata",
7852
+ "summary": "Create a metadata header (a custom column on the Program Data sheet).",
7853
+ "examplePrompts": [
7854
+ "Add a custom column called Occupancy to the program sheet",
7855
+ "Create a metadata header named Department Code",
7856
+ "Make a new program-mode column for Finish Level\n\n# Example\n```ts\nconst header = await snaptrude.program.metadata.createHeader(\"Occupancy\", {\ndescription: \"People per room\",\n})\n```"
7857
+ ],
7858
+ "argsType": "string",
7859
+ "resultType": "PluginProgramMetadataCreateHeaderResult"
7860
+ },
7861
+ {
7862
+ "path": "program.metadata.get",
7863
+ "namespace": "program.metadata",
7864
+ "summary": "Get one space's metadata values, keyed by header id.",
7865
+ "examplePrompts": [
7866
+ "Get the metadata on this space",
7867
+ "Read the custom column values for space sp_12",
7868
+ "What is this room's Occupancy metadata?\n\n# Example\n```ts\nconst record = await snaptrude.program.metadata.get(\"sp_12\")\nif (record) console.log(record.values)\n```"
7869
+ ],
7870
+ "argsType": "ComponentHandle",
7871
+ "resultType": "PluginProgramMetadataGetResult"
7872
+ },
7873
+ {
7874
+ "path": "program.metadata.list",
7875
+ "namespace": "program.metadata",
7876
+ "summary": "List metadata values for many spaces at once.",
7877
+ "examplePrompts": [
7878
+ "List the metadata of every space",
7879
+ "Read the custom column values for all rooms",
7880
+ "Get the metadata for these three spaces in one call\n\n# Example\n```ts\nconst { records } = await snaptrude.program.metadata.list()\nconst byId = Object.fromEntries(records.map((r) => [r.spaceId, r.values]))\n```"
7881
+ ],
7882
+ "argsType": "ComponentHandle[]",
7883
+ "resultType": "PluginProgramMetadataListResult",
7884
+ "performance": "One round-trip for any number of spaces — use this instead of a `get` loop."
7885
+ },
7886
+ {
7887
+ "path": "program.metadata.listHeaders",
7888
+ "namespace": "program.metadata",
7889
+ "summary": "List the metadata headers (custom columns) of the Program Data sheet.",
7890
+ "examplePrompts": [
7891
+ "List the custom metadata columns in program mode",
7892
+ "What metadata headers does the program sheet have?",
7893
+ "Show every custom column with its id\n\n# Example\n```ts\nconst { headers } = await snaptrude.program.metadata.listHeaders()\nfor (const h of headers) console.log(h.headerId, h.name)\n```"
7894
+ ],
7895
+ "argsType": null,
7896
+ "resultType": "PluginProgramMetadataListHeadersResult"
7897
+ },
7898
+ {
7899
+ "path": "program.metadata.update",
7900
+ "namespace": "program.metadata",
7901
+ "summary": "Update a space's metadata values (sparse).",
7902
+ "examplePrompts": [
7903
+ "Set the Occupancy metadata of this space to 4",
7904
+ "Store a department code on the selected rooms",
7905
+ "Write custom column values onto space sp_12",
7906
+ "Clear the Finish Level metadata on this space\n\n# Example\n```ts\nconst header = await snaptrude.program.metadata.createHeader(\"Occupancy\")\nawait snaptrude.program.metadata.update(\"sp_12\", { [header.headerId]: 4 })\n```"
7907
+ ],
7908
+ "argsType": "ComponentHandle",
7909
+ "resultType": "PluginProgramMetadataUpdateResult"
7910
+ },
7911
+ {
7912
+ "path": "program.metadata.updateMany",
7913
+ "namespace": "program.metadata",
7914
+ "summary": "Update metadata values on many spaces in one undoable step.",
7915
+ "examplePrompts": [
7916
+ "Fill the Occupancy column for all bedrooms",
7917
+ "Write metadata onto every selected space at once",
7918
+ "Bulk-update custom column values\n\n# Example\n```ts\nawait snaptrude.program.metadata.updateMany([\n{ spaceId: \"sp_12\", values: { [headerId]: 4 } },\n{ spaceId: \"sp_13\", values: { [headerId]: 2 } },\n])\n```"
7919
+ ],
7920
+ "argsType": "PluginProgramMetadataUpdateItem[]",
7921
+ "resultType": "PluginProgramMetadataUpdateManyResult",
7922
+ "performance": "One round-trip and one undo step for up to 1000 spaces — use this instead of an `update` loop."
7923
+ },
7764
7924
  {
7765
7925
  "path": "program.metrics.get",
7766
7926
  "namespace": "program.metrics",
@@ -7999,6 +8159,19 @@
7999
8159
  "argsType": "{\n name?: string\n }",
8000
8160
  "resultType": "PluginProgramSpreadsheetBindingsRefreshResult"
8001
8161
  },
8162
+ {
8163
+ "path": "program.spreadsheet.createCustomSheet",
8164
+ "namespace": "program.spreadsheet",
8165
+ "summary": "Create a **custom program sheet** — a live view of the program grouped by a configurable hierarchy (the Program tab's \"Custom\" sheet with *Organize → Group by*).",
8166
+ "examplePrompts": [
8167
+ "Create a custom sheet grouped by department then sub-department",
8168
+ "Make a program view grouped by storey and label",
8169
+ "Build a grouped program sheet for the healthcare hierarchy",
8170
+ "Add a custom sheet with a department → room type group-by\n\n# Example\n```ts\nconst { headers } = await snaptrude.program.metadata.listHeaders()\nconst subDept = headers.find((h) => h.name === \"Sub-department\")\nawait snaptrude.program.spreadsheet.createCustomSheet(\"Clinical Program\", {\ngroupBy: [\"departmentName\", subDept.headerId, \"label\"],\nproperties: [\"label\", \"count\", \"areas\", \"netAreaAchieved\"],\n})\n```"
8171
+ ],
8172
+ "argsType": "string",
8173
+ "resultType": "PluginProgramSpreadsheetCustomSheetResult"
8174
+ },
8002
8175
  {
8003
8176
  "path": "program.spreadsheet.createSheet",
8004
8177
  "namespace": "program.spreadsheet",
@@ -8064,6 +8237,17 @@
8064
8237
  "argsType": "{\n limit?: number\n }",
8065
8238
  "resultType": "PluginProgramSpreadsheetGetAuditLogResult"
8066
8239
  },
8240
+ {
8241
+ "path": "program.spreadsheet.getCustomSheet",
8242
+ "namespace": "program.spreadsheet",
8243
+ "summary": "Get a custom program sheet's configuration.",
8244
+ "examplePrompts": [
8245
+ "How is the Clinical Program sheet grouped?",
8246
+ "Get the group-by configuration of this custom sheet\n\n# Example\n```ts\nconst cfg = await snaptrude.program.spreadsheet.getCustomSheet(\"Clinical Program\")\nif (cfg) console.log(cfg.groupBy, cfg.properties)\n```"
8247
+ ],
8248
+ "argsType": "string",
8249
+ "resultType": "PluginProgramSpreadsheetGetCustomSheetResult"
8250
+ },
8067
8251
  {
8068
8252
  "path": "program.spreadsheet.getMaterialTakeoff",
8069
8253
  "namespace": "program.spreadsheet",
@@ -8130,6 +8314,28 @@
8130
8314
  "argsType": "string",
8131
8315
  "resultType": "PluginProgramSpreadsheetHighlightCellsResult"
8132
8316
  },
8317
+ {
8318
+ "path": "program.spreadsheet.listCustomSheetProperties",
8319
+ "namespace": "program.spreadsheet",
8320
+ "summary": "List the property ids a custom program sheet can show as columns or group by.",
8321
+ "examplePrompts": [
8322
+ "What can I group a custom program sheet by?",
8323
+ "List the columns available for a custom sheet\n\n# Example\n```ts\nconst { properties } = await snaptrude.program.spreadsheet.listCustomSheetProperties()\nconst groupable = properties.filter((p) => p.groupable).map((p) => p.id)\n```"
8324
+ ],
8325
+ "argsType": null,
8326
+ "resultType": "PluginProgramSpreadsheetListCustomSheetPropertiesResult"
8327
+ },
8328
+ {
8329
+ "path": "program.spreadsheet.listCustomSheets",
8330
+ "namespace": "program.spreadsheet",
8331
+ "summary": "List the custom program sheets in the workbook with their configurations.",
8332
+ "examplePrompts": [
8333
+ "List the custom program sheets",
8334
+ "Which sheets are grouped program views?\n\n# Example\n```ts\nconst { sheets } = await snaptrude.program.spreadsheet.listCustomSheets()\n```"
8335
+ ],
8336
+ "argsType": null,
8337
+ "resultType": "PluginProgramSpreadsheetListCustomSheetsResult"
8338
+ },
8133
8339
  {
8134
8340
  "path": "program.spreadsheet.listSheets",
8135
8341
  "namespace": "program.spreadsheet",
@@ -8306,6 +8512,18 @@
8306
8512
  "argsType": "PluginSpreadsheetTransactionOp[]",
8307
8513
  "resultType": "PluginProgramSpreadsheetTransactionResult"
8308
8514
  },
8515
+ {
8516
+ "path": "program.spreadsheet.updateCustomSheet",
8517
+ "namespace": "program.spreadsheet",
8518
+ "summary": "Update a custom program sheet's group-by hierarchy, columns, or group colors.",
8519
+ "examplePrompts": [
8520
+ "Change the custom sheet to group by storey first",
8521
+ "Add the Occupancy column to my grouped program sheet",
8522
+ "Regroup the Clinical Program sheet by department only\n\n# Example\n```ts\nawait snaptrude.program.spreadsheet.updateCustomSheet(\"Clinical Program\", {\ngroupBy: [\"storey\", \"departmentName\"],\n})\n```"
8523
+ ],
8524
+ "argsType": "string",
8525
+ "resultType": "PluginProgramSpreadsheetCustomSheetResult"
8526
+ },
8309
8527
  {
8310
8528
  "path": "workspace.closePresentMode",
8311
8529
  "namespace": "workspace",
@@ -8318,6 +8536,17 @@
8318
8536
  "argsType": null,
8319
8537
  "resultType": "void"
8320
8538
  },
8539
+ {
8540
+ "path": "workspace.closeProgramMode",
8541
+ "namespace": "workspace",
8542
+ "summary": "Close the Program tab.",
8543
+ "examplePrompts": [
8544
+ "Close program mode",
8545
+ "Close the Program tab\n\n# Example\n```ts\nawait snaptrude.workspace.closeProgramMode()\n```"
8546
+ ],
8547
+ "argsType": null,
8548
+ "resultType": "void"
8549
+ },
8321
8550
  {
8322
8551
  "path": "workspace.openPresentMode",
8323
8552
  "namespace": "workspace",
@@ -8330,6 +8559,18 @@
8330
8559
  "argsType": null,
8331
8560
  "resultType": "void"
8332
8561
  },
8562
+ {
8563
+ "path": "workspace.openProgramMode",
8564
+ "namespace": "workspace",
8565
+ "summary": "Open Program mode — the Program tab the `program.spreadsheet.*` calls run in.",
8566
+ "examplePrompts": [
8567
+ "Open program mode",
8568
+ "Open the Program tab so I can build a custom sheet",
8569
+ "Switch to the program spreadsheet\n\n# Example\n```ts\nawait snaptrude.workspace.openProgramMode()\nconst { sheets } = await snaptrude.program.spreadsheet.listSheets()\n```"
8570
+ ],
8571
+ "argsType": null,
8572
+ "resultType": "void"
8573
+ },
8333
8574
  {
8334
8575
  "path": "workspace.projects.copy",
8335
8576
  "namespace": "workspace.projects",
@@ -34,10 +34,14 @@ export interface PluginCoreModeSetResult {
34
34
  * Not to be confused with the viewport's 2D/3D camera mode
35
35
  * (`core.camera.setMode`) or saved presentation views (`presentation.views`).
36
36
  *
37
- * `set` covers `design`, `bim`, and `present` — in-page switches.
38
- * `program` opens in its own browser tab in the product, which a plugin worker
39
- * cannot do, so `set("program")` fails with `PRECONDITION_FAILED`; `get()`
40
- * still reports `"program"` for code running in the Program tab.
37
+ * `set` covers `design`, `bim`, and `present` — in-page switches — and
38
+ * `program`, which opens the Program tab (a paired browser window) through the
39
+ * same path as the top bar's Program button. Because the open happens outside a
40
+ * user gesture the browser may block the pop-up; the editor then shows its
41
+ * "Allow pop-up to continue" modal and the tab opens when the user confirms.
42
+ * `get()` reports `"program"` only for code running in the Program tab itself.
43
+ * Prefer {@linkcode PluginWorkspaceApi.openProgramMode} when you need to know
44
+ * the tab is ready before calling `program.spreadsheet.*`.
41
45
  */
42
46
  export declare abstract class PluginCoreModeApi {
43
47
  constructor();
@@ -76,16 +80,24 @@ export declare abstract class PluginCoreModeApi {
76
80
  * Switch the editor to another application mode — the same action as
77
81
  * clicking that tab in the top menu bar.
78
82
  *
79
- * Supported: `"design"`, `"bim"`, `"present"`. Switching to
80
- * `"program"` is rejected with `PRECONDITION_FAILED` (the Program surface
81
- * opens in its own browser tab in the product; a plugin cannot open one).
83
+ * `"design"`, `"bim"` and `"present"` switch in place. `"program"` opens
84
+ * the Program tab (a paired browser window) exactly as the top bar's Program
85
+ * button does, and resolves once that tab has connected to the editor (up to
86
+ * ~90s — the browser may block the pop-up, in which case the editor shows an
87
+ * "Allow pop-up to continue" modal and waits for the user to confirm).
88
+ * Idempotent when the Program tab is already open. Note `get()` in the model
89
+ * tab keeps reporting the model tab's own mode afterwards; the Program tab is
90
+ * a separate window.
82
91
  *
83
92
  * @param mode - Target mode token from {@linkcode PluginAppMode}
84
93
  * @returns The committed `{ mode }` after the switch.
94
+ * @throws `PRECONDITION_FAILED` for `"program"` when the user dismisses the
95
+ * pop-up modal or the tab does not connect within the timeout.
85
96
  *
86
97
  * @examplePrompt Switch to present mode
87
98
  * @examplePrompt Open BIM mode
88
99
  * @examplePrompt Go back to design mode
100
+ * @examplePrompt Open program mode
89
101
  *
90
102
  * # Example
91
103
  * ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/core/mode/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;EAAkD,CAAA;AAC5E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,eAAO,MAAM,qBAAqB;;;;;;;iBAEhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,aAAa,CAAA;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,8BAAsB,iBAAiB;;IAGrC;;;;;;;;;;;;;OAaG;aACa,IAAI,IAAI,eAAe,CAAC,wBAAwB,CAAC;IAEjE;;;;;;;;;;;;;;OAcG;aACa,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC;IAErD;;;;;;;;;;;;;;;;;;;;;OAqBG;aACa,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CAAC,uBAAuB,CAAC;CACnF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/core/mode/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;EAAkD,CAAA;AAC5E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,eAAO,MAAM,qBAAqB;;;;;;;iBAEhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,aAAa,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,8BAAsB,iBAAiB;;IAGrC;;;;;;;;;;;;;OAaG;aACa,IAAI,IAAI,eAAe,CAAC,wBAAwB,CAAC;IAEjE;;;;;;;;;;;;;;OAcG;aACa,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC;IAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;aACa,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CAAC,uBAAuB,CAAC;CACnF"}
@@ -145,6 +145,37 @@ export declare abstract class PluginCoreTagsApi {
145
145
  * ```
146
146
  */
147
147
  abstract listForComponent(componentId: ComponentHandle): PluginApiReturn<PluginCoreTagsGetTagsForComponentResult>;
148
+ /**
149
+ * List the tags carried by many components in one call.
150
+ *
151
+ * The plural of {@linkcode PluginCoreTagsApi.listForComponent}: pass
152
+ * `componentIds` to read specific components (unknown ids are skipped), or
153
+ * omit it to read **every** taggable component (Mass/Floor space) in the
154
+ * project. Each entry carries the component id and its tags — one per tagged
155
+ * category, with the tag's `color` — so a plugin can color every space by a
156
+ * chosen category's tag in a single round-trip.
157
+ *
158
+ * @param componentIds - Optional `Component.id`s to read; omit for all spaces.
159
+ * @returns A {@linkcode PluginCoreTagsListForComponentsResult} with a
160
+ * `components` array, one entry per component (in input order when
161
+ * `componentIds` is given).
162
+ *
163
+ * @performance One round-trip for any number of components — use this instead of a `listForComponent` loop.
164
+ *
165
+ * @examplePrompt Get the tags of every space with their colors
166
+ * @examplePrompt List the tags on all rooms so I can color them by Occupancy
167
+ * @examplePrompt Which tag does each selected space carry?
168
+ *
169
+ * # Example
170
+ * ```ts
171
+ * const { components } = await snaptrude.core.tags.listForComponents()
172
+ * for (const c of components) {
173
+ * const occupancy = c.tags.find((t) => t.categoryName === "Occupancy")
174
+ * if (occupancy) paint(c.componentId, occupancy.color)
175
+ * }
176
+ * ```
177
+ */
178
+ abstract listForComponents(componentIds?: ComponentHandle[]): PluginApiReturn<PluginCoreTagsListForComponentsResult>;
148
179
  /**
149
180
  * List the components carrying a given tag or category.
150
181
  *
@@ -546,6 +577,56 @@ export declare const PluginCoreTagsGetTagsForComponentResult: z.ZodObject<{
546
577
  }, z.core.$strip>>;
547
578
  }, z.core.$strip>;
548
579
  export type PluginCoreTagsGetTagsForComponentResult = z.infer<typeof PluginCoreTagsGetTagsForComponentResult>;
580
+ /**
581
+ * Arguments for {@linkcode PluginCoreTagsApi.listForComponents}.
582
+ *
583
+ * | Property | Type | Description |
584
+ * |---|---|---|
585
+ * | `componentIds` | `ComponentHandle[]?` | Components to read; omit for every taggable component |
586
+ */
587
+ export declare const PluginCoreTagsListForComponentsArgs: z.ZodObject<{
588
+ componentIds: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>>;
589
+ }, z.core.$strip>;
590
+ export type PluginCoreTagsListForComponentsArgs = z.infer<typeof PluginCoreTagsListForComponentsArgs>;
591
+ /**
592
+ * One component's tags, for {@linkcode PluginCoreTagsApi.listForComponents}.
593
+ *
594
+ * | Property | Type | Description |
595
+ * |---|---|---|
596
+ * | `componentId` | `ComponentHandle` | The component's id |
597
+ * | `tags` | {@linkcode PluginCoreComponentTag}`[]` | Its tags, one per tagged category (empty when none) |
598
+ */
599
+ export declare const PluginCoreComponentTags: z.ZodObject<{
600
+ componentId: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
601
+ tags: z.ZodArray<z.ZodObject<{
602
+ categoryId: z.ZodString;
603
+ categoryName: z.ZodString;
604
+ tagId: z.ZodString;
605
+ tagName: z.ZodString;
606
+ color: z.ZodString;
607
+ }, z.core.$strip>>;
608
+ }, z.core.$strip>;
609
+ export type PluginCoreComponentTags = z.infer<typeof PluginCoreComponentTags>;
610
+ /**
611
+ * Result of {@linkcode PluginCoreTagsApi.listForComponents}.
612
+ *
613
+ * | Property | Type | Description |
614
+ * |---|---|---|
615
+ * | `components` | {@linkcode PluginCoreComponentTags}`[]` | One entry per component |
616
+ */
617
+ export declare const PluginCoreTagsListForComponentsResult: z.ZodObject<{
618
+ components: z.ZodArray<z.ZodObject<{
619
+ componentId: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
620
+ tags: z.ZodArray<z.ZodObject<{
621
+ categoryId: z.ZodString;
622
+ categoryName: z.ZodString;
623
+ tagId: z.ZodString;
624
+ tagName: z.ZodString;
625
+ color: z.ZodString;
626
+ }, z.core.$strip>>;
627
+ }, z.core.$strip>>;
628
+ }, z.core.$strip>;
629
+ export type PluginCoreTagsListForComponentsResult = z.infer<typeof PluginCoreTagsListForComponentsResult>;
549
630
  /**
550
631
  * Arguments for {@linkcode PluginCoreTagsApi.listComponents}. Provide exactly one
551
632
  * of `tagId`, `categoryId`. `untagged` is valid only with `categoryId`.
@@ -1 +1 @@
1
- {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/api/core/tags.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/api/core/tags.ts"],"names":[],"mappings":"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"}