@snaptrude/plugin-core 0.8.0 → 0.9.1
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 +35 -1
- package/api-manifest.full.json +1350 -89
- package/api-manifest.json +1146 -48
- package/dist/api/analysis/daylight.d.ts +603 -0
- package/dist/api/analysis/daylight.d.ts.map +1 -0
- package/dist/api/analysis/heatmaps.d.ts +438 -14
- package/dist/api/analysis/heatmaps.d.ts.map +1 -1
- package/dist/api/analysis/index.d.ts +15 -0
- package/dist/api/analysis/index.d.ts.map +1 -1
- package/dist/api/analysis/solar.d.ts +249 -0
- package/dist/api/analysis/solar.d.ts.map +1 -0
- package/dist/api/analysis/weather.d.ts +193 -0
- package/dist/api/analysis/weather.d.ts.map +1 -0
- package/dist/api/core/camera/index.d.ts +37 -0
- package/dist/api/core/camera/index.d.ts.map +1 -1
- package/dist/api/core/geom/create/index.d.ts +318 -1
- package/dist/api/core/geom/create/index.d.ts.map +1 -1
- package/dist/api/core/index.d.ts +9 -0
- package/dist/api/core/index.d.ts.map +1 -1
- package/dist/api/core/io/export/index.d.ts +3 -1
- package/dist/api/core/io/export/index.d.ts.map +1 -1
- package/dist/api/core/io/import/index.d.ts +61 -0
- package/dist/api/core/io/import/index.d.ts.map +1 -1
- package/dist/api/core/io/terrain/index.d.ts +132 -0
- package/dist/api/core/io/terrain/index.d.ts.map +1 -1
- package/dist/api/core/mode/index.d.ts +99 -0
- package/dist/api/core/mode/index.d.ts.map +1 -0
- package/dist/api/core/storeys/index.d.ts +251 -0
- package/dist/api/core/storeys/index.d.ts.map +1 -0
- package/dist/api/core/tags.d.ts +24 -0
- package/dist/api/core/tags.d.ts.map +1 -1
- package/dist/api/core/zoom/index.d.ts +4 -0
- package/dist/api/core/zoom/index.d.ts.map +1 -1
- package/dist/api/design/create/index.d.ts +115 -4
- package/dist/api/design/create/index.d.ts.map +1 -1
- package/dist/api/design/delete/index.d.ts +3 -0
- package/dist/api/design/delete/index.d.ts.map +1 -1
- package/dist/api/design/query/geometry/index.d.ts +112 -0
- package/dist/api/design/query/geometry/index.d.ts.map +1 -1
- package/dist/api/design/query/index.d.ts +4 -0
- package/dist/api/design/query/index.d.ts.map +1 -1
- package/dist/api/design/query/referenceLines.d.ts +45 -0
- package/dist/api/design/query/referenceLines.d.ts.map +1 -0
- package/dist/api/design/query/spaces.d.ts +173 -0
- package/dist/api/design/query/spaces.d.ts.map +1 -1
- package/dist/api/design/transform/index.d.ts +12 -0
- package/dist/api/design/transform/index.d.ts.map +1 -1
- package/dist/api/design/update/index.d.ts +51 -1
- package/dist/api/design/update/index.d.ts.map +1 -1
- package/dist/api/entity/buildableEnvelope.d.ts +4 -0
- package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
- package/dist/api/entity/referenceLine.d.ts +8 -0
- package/dist/api/entity/referenceLine.d.ts.map +1 -1
- package/dist/api/entity/story.d.ts +20 -0
- package/dist/api/entity/story.d.ts.map +1 -1
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/presentation/annotate.d.ts +23 -4
- package/dist/api/presentation/annotate.d.ts.map +1 -1
- package/dist/api/presentation/diagrams.d.ts +64 -2
- package/dist/api/presentation/diagrams.d.ts.map +1 -1
- package/dist/api/presentation/export.d.ts +4 -0
- package/dist/api/presentation/export.d.ts.map +1 -1
- package/dist/api/presentation/import.d.ts +6 -0
- package/dist/api/presentation/import.d.ts.map +1 -1
- package/dist/api/presentation/index.d.ts +20 -1
- package/dist/api/presentation/index.d.ts.map +1 -1
- package/dist/api/presentation/placedViews.d.ts +1139 -0
- package/dist/api/presentation/placedViews.d.ts.map +1 -0
- package/dist/api/presentation/shapes.d.ts +481 -0
- package/dist/api/presentation/shapes.d.ts.map +1 -0
- package/dist/api/presentation/sheets.d.ts +42 -0
- package/dist/api/presentation/sheets.d.ts.map +1 -1
- package/dist/api/presentation/slideshow.d.ts +125 -0
- package/dist/api/presentation/slideshow.d.ts.map +1 -0
- package/dist/api/presentation/tables.d.ts +81 -0
- package/dist/api/presentation/tables.d.ts.map +1 -0
- package/dist/api/program/site.d.ts +260 -2
- package/dist/api/program/site.d.ts.map +1 -1
- package/dist/api/program/spreadsheet.d.ts +260 -28
- package/dist/api/program/spreadsheet.d.ts.map +1 -1
- package/dist/api/workspace/index.d.ts +505 -0
- package/dist/api/workspace/index.d.ts.map +1 -0
- package/dist/index.cjs +2904 -1761
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2762 -1761
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/scripts/generate-manifest.mjs +45 -0
- package/src/api/analysis/daylight.ts +470 -0
- package/src/api/analysis/heatmaps.ts +444 -17
- package/src/api/analysis/index.ts +15 -0
- package/src/api/analysis/solar.ts +237 -0
- package/src/api/analysis/weather.ts +179 -0
- package/src/api/core/camera/index.ts +39 -0
- package/src/api/core/geom/create/index.ts +344 -1
- package/src/api/core/index.ts +9 -0
- package/src/api/core/io/export/index.ts +3 -1
- package/src/api/core/io/import/index.ts +64 -0
- package/src/api/core/io/terrain/index.ts +143 -0
- package/src/api/core/mode/index.ts +96 -0
- package/src/api/core/storeys/index.ts +279 -0
- package/src/api/core/tags.ts +27 -0
- package/src/api/core/zoom/index.ts +4 -0
- package/src/api/design/create/index.ts +138 -1
- package/src/api/design/delete/index.ts +3 -0
- package/src/api/design/query/geometry/index.ts +125 -3
- package/src/api/design/query/index.ts +4 -0
- package/src/api/design/query/referenceLines.ts +52 -0
- package/src/api/design/query/spaces.ts +143 -0
- package/src/api/design/transform/index.ts +12 -0
- package/src/api/design/update/index.ts +66 -1
- package/src/api/entity/buildableEnvelope.ts +4 -0
- package/src/api/entity/referenceLine.ts +8 -0
- package/src/api/entity/story.ts +20 -0
- package/src/api/index.ts +5 -0
- package/src/api/presentation/annotate.ts +27 -2
- package/src/api/presentation/diagrams.ts +67 -2
- package/src/api/presentation/export.ts +4 -0
- package/src/api/presentation/import.ts +6 -0
- package/src/api/presentation/index.ts +20 -1
- package/src/api/presentation/placedViews.ts +1120 -0
- package/src/api/presentation/shapes.ts +274 -0
- package/src/api/presentation/sheets.ts +54 -0
- package/src/api/presentation/slideshow.ts +134 -0
- package/src/api/presentation/tables.ts +84 -0
- package/src/api/program/site.ts +205 -2
- package/src/api/program/spreadsheet.ts +251 -6
- package/src/api/workspace/index.ts +563 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { PluginApiReturn } from "../../types";
|
|
3
|
+
/**
|
|
4
|
+
* Presentation slideshow — run the Present-mode slideshow programmatically.
|
|
5
|
+
*
|
|
6
|
+
* The scriptable counterpart of the Present toolbar's slideshow: the
|
|
7
|
+
* slideshow plays **all** layout sheets in sheet order (hidden sheets are
|
|
8
|
+
* excluded) — `start` options only pick the slide it opens on. Slide
|
|
9
|
+
* navigation stays with the user (arrow keys / on-screen controls); there is
|
|
10
|
+
* intentionally no `next`/`prev`/`goTo`.
|
|
11
|
+
*
|
|
12
|
+
* **Fullscreen caveat:** browsers only grant fullscreen on a user gesture. A
|
|
13
|
+
* plugin-triggered `start` usually fails that check, in which case the
|
|
14
|
+
* slideshow catches the rejection and runs non-fullscreen (same slides, same
|
|
15
|
+
* controls, windowed).
|
|
16
|
+
*
|
|
17
|
+
* `start`/`stop` are write-gated; `getState` is a never-throw read. Requires
|
|
18
|
+
* Present mode to be open (except `getState`, which reports not-running).
|
|
19
|
+
*
|
|
20
|
+
* Accessed via `snaptrude.presentation.slideshow`.
|
|
21
|
+
*/
|
|
22
|
+
export declare abstract class PluginPresentationSlideshowApi {
|
|
23
|
+
constructor();
|
|
24
|
+
/**
|
|
25
|
+
* Start the slideshow.
|
|
26
|
+
*
|
|
27
|
+
* Launches the Present-mode slideshow over all layout sheets in sheet
|
|
28
|
+
* order. `options.startIndex` opens on that slide (clamped into range);
|
|
29
|
+
* otherwise `options.sheetIds` naming exactly one sheet opens on that
|
|
30
|
+
* sheet; otherwise it opens on the first slide. May run non-fullscreen —
|
|
31
|
+
* see the fullscreen caveat on
|
|
32
|
+
* {@linkcode PluginPresentationSlideshowApi}. Requires Present mode to be
|
|
33
|
+
* open with at least one sheet.
|
|
34
|
+
*
|
|
35
|
+
* @param options - Optional `sheetIds` (open on this sheet when exactly one
|
|
36
|
+
* id is given) and `startIndex` (0-based slide to open on; wins over
|
|
37
|
+
* `sheetIds`; clamped into range).
|
|
38
|
+
* @returns The {@linkcode PluginPresentationSlideshowState} after the
|
|
39
|
+
* launch (`running: true` and the opening `index`).
|
|
40
|
+
* @throws If Present mode is not open or there are no sheets to present.
|
|
41
|
+
*
|
|
42
|
+
* @examplePrompt Start the slideshow
|
|
43
|
+
* @examplePrompt Present the sheets from the beginning
|
|
44
|
+
* @examplePrompt Start the slideshow on sheet 3
|
|
45
|
+
* @examplePrompt Play the presentation starting at the cover sheet
|
|
46
|
+
*
|
|
47
|
+
* # Example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const state = await snaptrude.presentation.slideshow.start({ startIndex: 2 })
|
|
50
|
+
* console.log(state.running, state.index) // true, 2
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
abstract start(options?: {
|
|
54
|
+
sheetIds?: string[];
|
|
55
|
+
startIndex?: number;
|
|
56
|
+
}): PluginApiReturn<PluginPresentationSlideshowState>;
|
|
57
|
+
/**
|
|
58
|
+
* Stop the slideshow.
|
|
59
|
+
*
|
|
60
|
+
* Closes the running slideshow (exiting fullscreen if it entered it) and
|
|
61
|
+
* returns to the Present canvas. A no-op when no slideshow is running.
|
|
62
|
+
*
|
|
63
|
+
* @returns The {@linkcode PluginPresentationSlideshowState} after the stop
|
|
64
|
+
* (`running: false`).
|
|
65
|
+
* @throws If Present mode is not open.
|
|
66
|
+
*
|
|
67
|
+
* @examplePrompt Stop the slideshow
|
|
68
|
+
* @examplePrompt Exit the presentation
|
|
69
|
+
* @examplePrompt Close the slideshow and go back to the sheets
|
|
70
|
+
*
|
|
71
|
+
* # Example
|
|
72
|
+
* ```ts
|
|
73
|
+
* await snaptrude.presentation.slideshow.stop()
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
abstract stop(): PluginApiReturn<PluginPresentationSlideshowState>;
|
|
77
|
+
/**
|
|
78
|
+
* Read the slideshow state.
|
|
79
|
+
*
|
|
80
|
+
* A never-throw read: reports whether a slideshow is running and, when it
|
|
81
|
+
* is, the current 0-based slide index (`index` is `null` when not
|
|
82
|
+
* running — including when Present mode is closed).
|
|
83
|
+
*
|
|
84
|
+
* @returns The current {@linkcode PluginPresentationSlideshowState}.
|
|
85
|
+
*
|
|
86
|
+
* @examplePrompt Is the slideshow running?
|
|
87
|
+
* @examplePrompt Which slide is the presentation on?
|
|
88
|
+
* @examplePrompt Check the slideshow state
|
|
89
|
+
*
|
|
90
|
+
* # Example
|
|
91
|
+
* ```ts
|
|
92
|
+
* const { running, index } = await snaptrude.presentation.slideshow.getState()
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
abstract getState(): PluginApiReturn<PluginPresentationSlideshowState>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Arguments for {@linkcode PluginPresentationSlideshowApi.start}.
|
|
99
|
+
*
|
|
100
|
+
* | Property | Type | Description |
|
|
101
|
+
* |---|---|---|
|
|
102
|
+
* | `sheetIds` | `string[] \| undefined` | Open on this sheet when exactly one id is given |
|
|
103
|
+
* | `startIndex` | `number \| undefined` | 0-based slide to open on (wins over `sheetIds`; clamped) |
|
|
104
|
+
*/
|
|
105
|
+
export declare const PluginPresentationSlideshowStartArgs: z.ZodObject<{
|
|
106
|
+
sheetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
107
|
+
startIndex: z.ZodOptional<z.ZodNumber>;
|
|
108
|
+
}, z.core.$strip>;
|
|
109
|
+
export type PluginPresentationSlideshowStartArgs = z.infer<typeof PluginPresentationSlideshowStartArgs>;
|
|
110
|
+
/**
|
|
111
|
+
* The slideshow state — result of {@linkcode PluginPresentationSlideshowApi.start},
|
|
112
|
+
* {@linkcode PluginPresentationSlideshowApi.stop}, and
|
|
113
|
+
* {@linkcode PluginPresentationSlideshowApi.getState}.
|
|
114
|
+
*
|
|
115
|
+
* | Property | Type | Description |
|
|
116
|
+
* |---|---|---|
|
|
117
|
+
* | `running` | `boolean` | Whether a slideshow is currently running |
|
|
118
|
+
* | `index` | `number \| null` | Current 0-based slide index (`null` when not running) |
|
|
119
|
+
*/
|
|
120
|
+
export declare const PluginPresentationSlideshowState: z.ZodObject<{
|
|
121
|
+
running: z.ZodBoolean;
|
|
122
|
+
index: z.ZodNullable<z.ZodNumber>;
|
|
123
|
+
}, z.core.$strip>;
|
|
124
|
+
export type PluginPresentationSlideshowState = z.infer<typeof PluginPresentationSlideshowState>;
|
|
125
|
+
//# sourceMappingURL=slideshow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slideshow.d.ts","sourceRoot":"","sources":["../../../src/api/presentation/slideshow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAAsB,8BAA8B;;IAGlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;aACa,KAAK,CAAC,OAAO,CAAC,EAAE;QAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,GAAG,eAAe,CAAC,gCAAgC,CAAC;IAErD;;;;;;;;;;;;;;;;;;OAkBG;aACa,IAAI,IAAI,eAAe,CAAC,gCAAgC,CAAC;IAEzE;;;;;;;;;;;;;;;;;OAiBG;aACa,QAAQ,IAAI,eAAe,CAAC,gCAAgC,CAAC;CAC9E;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oCAAoC;;;iBAG/C,CAAA;AACF,MAAM,MAAM,oCAAoC,GAAG,CAAC,CAAC,KAAK,CACxD,OAAO,oCAAoC,CAC5C,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC;;;iBAG3C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,gCAAgC,CACxC,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
import { PluginApiReturn } from "../../types";
|
|
3
|
+
import type { PluginCanvasShape } from "./placedViews";
|
|
4
|
+
/**
|
|
5
|
+
* Presentation tables — place data tables on Present-mode sheets.
|
|
6
|
+
*
|
|
7
|
+
* The scriptable counterpart of the Present canvas's table paste (the flow
|
|
8
|
+
* that turns a Program-mode / Google Sheets / Excel paste into a table
|
|
9
|
+
* shape): {@linkcode PluginPresentationTablesApi.place} takes plain string
|
|
10
|
+
* rows and creates one table shape on a sheet. Requires Present mode to be
|
|
11
|
+
* open.
|
|
12
|
+
*
|
|
13
|
+
* Accessed via `snaptrude.presentation.tables`.
|
|
14
|
+
*/
|
|
15
|
+
export declare abstract class PluginPresentationTablesApi {
|
|
16
|
+
constructor();
|
|
17
|
+
/**
|
|
18
|
+
* Place a table on a sheet.
|
|
19
|
+
*
|
|
20
|
+
* Creates one table shape from `table.rows` — the same shape the Present
|
|
21
|
+
* canvas creates when a spreadsheet table is pasted — and returns the
|
|
22
|
+
* created shape as a canvas-shape record. Cells are plain strings; rows may
|
|
23
|
+
* be ragged (each row needs at least one cell), capped at 10000 cells
|
|
24
|
+
* total. `options.position` is sheet-local (relative to the sheet's
|
|
25
|
+
* top-left, in canvas units — the same convention as `annotate.*`); when
|
|
26
|
+
* omitted the table lands where the paste flow would auto-place it (the
|
|
27
|
+
* center of the current viewport). One undo step. Requires Present mode to
|
|
28
|
+
* be open.
|
|
29
|
+
*
|
|
30
|
+
* @param sheetId - The sheet to place the table on.
|
|
31
|
+
* @param table - The table content: `rows`, an array of string-cell rows.
|
|
32
|
+
* @param options - Optional `position` (`{ x, y }`, relative to the sheet's
|
|
33
|
+
* top-left — defaults to the paste flow's auto-placement).
|
|
34
|
+
* @returns The created table shape as a {@linkcode PluginCanvasShape}.
|
|
35
|
+
* @throws If Present mode is not open, the sheet id is invalid, or the
|
|
36
|
+
* table is empty / exceeds the 10000-cell cap.
|
|
37
|
+
*
|
|
38
|
+
* @examplePrompt Put the area schedule as a table on Sheet 1
|
|
39
|
+
* @examplePrompt Add a table of the room programs to the cover sheet
|
|
40
|
+
* @examplePrompt Paste this data as a table on the sheet
|
|
41
|
+
* @examplePrompt Place a two-column table of space names and areas
|
|
42
|
+
*
|
|
43
|
+
* # Example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const shape = await snaptrude.presentation.tables.place("sheet_1", {
|
|
46
|
+
* rows: [
|
|
47
|
+
* ["Room", "Area"],
|
|
48
|
+
* ["Kitchen", "12.4 m²"],
|
|
49
|
+
* ["Living", "28.0 m²"],
|
|
50
|
+
* ],
|
|
51
|
+
* }, { position: { x: 40, y: 40 } })
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
abstract place(sheetId: string, table: {
|
|
55
|
+
rows: string[][];
|
|
56
|
+
}, options?: {
|
|
57
|
+
position?: {
|
|
58
|
+
x: number;
|
|
59
|
+
y: number;
|
|
60
|
+
};
|
|
61
|
+
}): PluginApiReturn<PluginCanvasShape>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Arguments for {@linkcode PluginPresentationTablesApi.place}.
|
|
65
|
+
*
|
|
66
|
+
* | Property | Type | Description |
|
|
67
|
+
* |---|---|---|
|
|
68
|
+
* | `sheetId` | `string` | The sheet to place the table on |
|
|
69
|
+
* | `rows` | `string[][]` | Table cells as string rows (non-empty; ≤ 10000 cells total) |
|
|
70
|
+
* | `position` | `{ x: number; y: number } \| undefined` | Sheet-local position (default: paste auto-placement) |
|
|
71
|
+
*/
|
|
72
|
+
export declare const PluginPresentationTablesPlaceArgs: z.ZodObject<{
|
|
73
|
+
sheetId: z.ZodString;
|
|
74
|
+
rows: z.ZodArray<z.ZodArray<z.ZodString>>;
|
|
75
|
+
position: z.ZodOptional<z.ZodObject<{
|
|
76
|
+
x: z.ZodNumber;
|
|
77
|
+
y: z.ZodNumber;
|
|
78
|
+
}, z.core.$strip>>;
|
|
79
|
+
}, z.core.$strip>;
|
|
80
|
+
export type PluginPresentationTablesPlaceArgs = z.infer<typeof PluginPresentationTablesPlaceArgs>;
|
|
81
|
+
//# sourceMappingURL=tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../src/api/presentation/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,8BAAsB,2BAA2B;;IAG/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;aACa,KAAK,CACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;KAAE,EAC3B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAChD,eAAe,CAAC,iBAAiB,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iCAAiC;;;;;;;iBAS5C,CAAA;AACF,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CACrD,OAAO,iCAAiC,CACzC,CAAA"}
|
|
@@ -8,8 +8,10 @@ import { PluginApiReturn } from "../../types";
|
|
|
8
8
|
* in Snaptrude units — the same plan space as a space's `planPoints`), and —
|
|
9
9
|
* when the project is geo-located on terrain — their geographic
|
|
10
10
|
* (latitude/longitude) rings. This is the program-planning view of the site;
|
|
11
|
-
* zoning numbers (
|
|
12
|
-
*
|
|
11
|
+
* zoning numbers (FAR/FSI, height limits) live in the site-analysis sheet and
|
|
12
|
+
* are not read here — with one exception: `listEdges` reads each parcel's
|
|
13
|
+
* per-edge front/side/rear classification and effective base setbacks, the
|
|
14
|
+
* same resolution the buildable-envelope setback pills show on canvas.
|
|
13
15
|
*
|
|
14
16
|
* All methods are reads: they return plain records and never throw — `get`
|
|
15
17
|
* returns an empty snapshot (zero totals) when there is no site, and the `list`
|
|
@@ -79,6 +81,46 @@ export declare abstract class PluginProgramSiteApi {
|
|
|
79
81
|
* ```
|
|
80
82
|
*/
|
|
81
83
|
abstract listPolygons(): PluginApiReturn<PluginProgramSiteListPolygonsResult>;
|
|
84
|
+
/**
|
|
85
|
+
* List each site parcel's boundary edges with their front / side / rear
|
|
86
|
+
* classification — the same per-edge roles the buildable-envelope setback
|
|
87
|
+
* pills show on canvas, so a plugin can pick up the user's edge tagging
|
|
88
|
+
* without asking them to set it up again.
|
|
89
|
+
*
|
|
90
|
+
* Role resolution mirrors the canvas exactly: the user's per-edge overrides
|
|
91
|
+
* (set via the setback pills) win over the tangent heuristic
|
|
92
|
+
* (`roleSource: "override"` vs `"heuristic"`). `"street"` never appears — it
|
|
93
|
+
* resolves to `front`. When a parcel has a linked zoning buildable envelope,
|
|
94
|
+
* `setbackMeters` is the effective base setback of the edge (a per-edge
|
|
95
|
+
* exception when one exists, else the role's value); parcels without a
|
|
96
|
+
* zoning envelope classify by heuristic alone and report
|
|
97
|
+
* `setbackMeters: null`.
|
|
98
|
+
*
|
|
99
|
+
* Coordinates are **world meters** (`lengthUnit: "m"`) — unlike
|
|
100
|
+
* {@linkcode PluginProgramSiteApi.listPolygons} footprints, which are
|
|
101
|
+
* Snaptrude units. `edgeIndex` is keyed to the canonicalized (sanitized,
|
|
102
|
+
* CCW) boundary, the same index space the envelope's `edgeOverrides` use.
|
|
103
|
+
* `staleOverridesDropped: true` means the site was edited after the
|
|
104
|
+
* envelope was configured and the persisted overrides no longer align with
|
|
105
|
+
* the live boundary — the heuristic classification is reported instead.
|
|
106
|
+
*
|
|
107
|
+
* @returns A {@linkcode PluginProgramSiteListEdgesResult} with one entry per
|
|
108
|
+
* parcel. Empty when the project has no site.
|
|
109
|
+
*
|
|
110
|
+
* @examplePrompt Which edge of my site is the front?
|
|
111
|
+
* @examplePrompt Read the front / side / rear edges of the plot
|
|
112
|
+
* @examplePrompt What setback applies to each site edge?
|
|
113
|
+
* @examplePrompt Get the site edges the way the setback pills show them
|
|
114
|
+
*
|
|
115
|
+
* # Example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const { sites } = await snaptrude.program.site.listEdges()
|
|
118
|
+
* for (const site of sites)
|
|
119
|
+
* for (const e of site.edges)
|
|
120
|
+
* console.log(e.edgeIndex, e.role, e.roleSource, e.setbackMeters)
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
abstract listEdges(): PluginApiReturn<PluginProgramSiteListEdgesResult>;
|
|
82
124
|
/**
|
|
83
125
|
* List the site parcels as geographic latitude/longitude rings.
|
|
84
126
|
*
|
|
@@ -177,6 +219,54 @@ export declare abstract class PluginProgramSiteApi {
|
|
|
177
219
|
* ```
|
|
178
220
|
*/
|
|
179
221
|
abstract getNorthAngle(): PluginApiReturn<PluginProgramSiteNorthAngleResult>;
|
|
222
|
+
/**
|
|
223
|
+
* Get the IANA timezone of the project's geographic location.
|
|
224
|
+
*
|
|
225
|
+
* The timezone identifier (e.g. `"America/New_York"`, `"Asia/Kolkata"`)
|
|
226
|
+
* looked up from the same geo-location
|
|
227
|
+
* {@linkcode PluginProgramSiteApi.getLocation} returns. Returns `null` when
|
|
228
|
+
* the project is not geo-located on terrain.
|
|
229
|
+
*
|
|
230
|
+
* @returns A {@linkcode PluginProgramSiteTimezoneResult} — the IANA timezone
|
|
231
|
+
* id string, or `null` when the project has no geo-located site.
|
|
232
|
+
*
|
|
233
|
+
* @examplePrompt What timezone is this project in?
|
|
234
|
+
* @examplePrompt Get the site's IANA timezone
|
|
235
|
+
* @examplePrompt What's the local time zone at the project location?
|
|
236
|
+
* @examplePrompt Which timezone should I use for the sun study schedule?
|
|
237
|
+
*
|
|
238
|
+
* # Example
|
|
239
|
+
* ```ts
|
|
240
|
+
* const timezone = await snaptrude.program.site.getTimezone()
|
|
241
|
+
* if (timezone) console.log(`Project timezone: ${timezone}`)
|
|
242
|
+
* ```
|
|
243
|
+
*/
|
|
244
|
+
abstract getTimezone(): PluginApiReturn<PluginProgramSiteTimezoneResult>;
|
|
245
|
+
/**
|
|
246
|
+
* Get the weather file resolved for the project site.
|
|
247
|
+
*
|
|
248
|
+
* A lightweight read of the EPW weather file the `analysis.*` sun and
|
|
249
|
+
* daylight studies compute against — its catalog id, station name, content
|
|
250
|
+
* checksum, and how it was selected. This is the same file (same
|
|
251
|
+
* `weatherFileId`) that {@linkcode PluginAnalysisWeatherApi.getSeries} reads
|
|
252
|
+
* rows from and that a daylight run echoes in its provenance. Returns `null`
|
|
253
|
+
* when the project has no geo-located site (no weather file to resolve).
|
|
254
|
+
*
|
|
255
|
+
* @returns A {@linkcode PluginProgramSiteWeatherResult} —
|
|
256
|
+
* `{ weatherFileId, station, checksum, selectionMethod }`, or `null` when
|
|
257
|
+
* the project has no geo-located site.
|
|
258
|
+
*
|
|
259
|
+
* @examplePrompt Which weather file is my project using?
|
|
260
|
+
* @examplePrompt What EPW station was resolved for this site?
|
|
261
|
+
* @examplePrompt Get the weather file id for the daylight analysis
|
|
262
|
+
*
|
|
263
|
+
* # Example
|
|
264
|
+
* ```ts
|
|
265
|
+
* const weather = await snaptrude.program.site.getWeather()
|
|
266
|
+
* if (weather) console.log(weather.station, weather.selectionMethod)
|
|
267
|
+
* ```
|
|
268
|
+
*/
|
|
269
|
+
abstract getWeather(): PluginApiReturn<PluginProgramSiteWeatherResult>;
|
|
180
270
|
}
|
|
181
271
|
/**
|
|
182
272
|
* A 2D ground-plane point of a site parcel footprint, in world XZ plan
|
|
@@ -451,4 +541,172 @@ export type PluginProgramSiteLocationResult = z.infer<typeof PluginProgramSiteLo
|
|
|
451
541
|
*/
|
|
452
542
|
export declare const PluginProgramSiteNorthAngleResult: z.ZodNullable<z.ZodNumber>;
|
|
453
543
|
export type PluginProgramSiteNorthAngleResult = z.infer<typeof PluginProgramSiteNorthAngleResult>;
|
|
544
|
+
/**
|
|
545
|
+
* Result of {@linkcode PluginProgramSiteApi.getTimezone} — the IANA timezone
|
|
546
|
+
* id of the project's geo-location (e.g. `"Europe/London"`), or `null` when
|
|
547
|
+
* the project is not geo-located.
|
|
548
|
+
*/
|
|
549
|
+
export declare const PluginProgramSiteTimezoneResult: z.ZodNullable<z.ZodString>;
|
|
550
|
+
export type PluginProgramSiteTimezoneResult = z.infer<typeof PluginProgramSiteTimezoneResult>;
|
|
551
|
+
/**
|
|
552
|
+
* A summary of the weather file resolved for the project site. Matches the
|
|
553
|
+
* relevant fields of `analysis.weather`'s `PluginWeatherSourceMeta`;
|
|
554
|
+
* `selectionMethod` is one of `"nearest-station"`, `"user-upload"`, or
|
|
555
|
+
* `"project-override"`.
|
|
556
|
+
*
|
|
557
|
+
* | Property | Type | Description |
|
|
558
|
+
* |---|---|---|
|
|
559
|
+
* | `weatherFileId` | `string` | Catalog id (same key as `core.io.import.epw`) |
|
|
560
|
+
* | `station` | `string` | Station/file name |
|
|
561
|
+
* | `checksum` | `string` | sha256 of the EPW file |
|
|
562
|
+
* | `selectionMethod` | `"nearest-station" \| "user-upload" \| "project-override"` | How the file was matched |
|
|
563
|
+
*/
|
|
564
|
+
export declare const PluginProgramSiteWeather: z.ZodObject<{
|
|
565
|
+
weatherFileId: z.ZodString;
|
|
566
|
+
station: z.ZodString;
|
|
567
|
+
checksum: z.ZodString;
|
|
568
|
+
selectionMethod: z.ZodEnum<{
|
|
569
|
+
"nearest-station": "nearest-station";
|
|
570
|
+
"user-upload": "user-upload";
|
|
571
|
+
"project-override": "project-override";
|
|
572
|
+
}>;
|
|
573
|
+
}, z.core.$strip>;
|
|
574
|
+
export type PluginProgramSiteWeather = z.infer<typeof PluginProgramSiteWeather>;
|
|
575
|
+
/**
|
|
576
|
+
* Result of {@linkcode PluginProgramSiteApi.getWeather} — the resolved weather
|
|
577
|
+
* file summary, or `null` when the project has no geo-located site.
|
|
578
|
+
*/
|
|
579
|
+
export declare const PluginProgramSiteWeatherResult: z.ZodNullable<z.ZodObject<{
|
|
580
|
+
weatherFileId: z.ZodString;
|
|
581
|
+
station: z.ZodString;
|
|
582
|
+
checksum: z.ZodString;
|
|
583
|
+
selectionMethod: z.ZodEnum<{
|
|
584
|
+
"nearest-station": "nearest-station";
|
|
585
|
+
"user-upload": "user-upload";
|
|
586
|
+
"project-override": "project-override";
|
|
587
|
+
}>;
|
|
588
|
+
}, z.core.$strip>>;
|
|
589
|
+
export type PluginProgramSiteWeatherResult = z.infer<typeof PluginProgramSiteWeatherResult>;
|
|
590
|
+
/**
|
|
591
|
+
* Front / side / rear classification of one site-boundary edge. `"street"`
|
|
592
|
+
* never appears — the backend synonym resolves to `front`.
|
|
593
|
+
*/
|
|
594
|
+
export declare const PluginProgramSiteEdgeRole: z.ZodEnum<{
|
|
595
|
+
front: "front";
|
|
596
|
+
side: "side";
|
|
597
|
+
rear: "rear";
|
|
598
|
+
}>;
|
|
599
|
+
export type PluginProgramSiteEdgeRole = z.infer<typeof PluginProgramSiteEdgeRole>;
|
|
600
|
+
/**
|
|
601
|
+
* One boundary edge of a site parcel, as {@linkcode PluginProgramSiteApi.listEdges}
|
|
602
|
+
* returns it. Coordinates and lengths are world meters.
|
|
603
|
+
*
|
|
604
|
+
* | Property | Type | Description |
|
|
605
|
+
* |---|---|---|
|
|
606
|
+
* | `edgeIndex` | `number` | Index in the canonicalized (sanitized, CCW) boundary — the same index space the envelope's `edgeOverrides` use |
|
|
607
|
+
* | `start` / `end` | `{ x, z }` | Edge endpoints, world XZ meters |
|
|
608
|
+
* | `lengthMeters` | `number` | Edge length in meters |
|
|
609
|
+
* | `role` | `"front" \| "side" \| "rear"` | Resolved classification (user override wins over the heuristic) |
|
|
610
|
+
* | `roleSource` | `"override" \| "heuristic"` | Whether the user reassigned this edge's role or the tangent heuristic classified it |
|
|
611
|
+
* | `setbackMeters` | `number \| null` | Effective base setback (per-edge exception ?? role value); `null` when the parcel has no zoning envelope |
|
|
612
|
+
*/
|
|
613
|
+
export declare const PluginProgramSiteEdge: z.ZodObject<{
|
|
614
|
+
edgeIndex: z.ZodNumber;
|
|
615
|
+
start: z.ZodObject<{
|
|
616
|
+
x: z.ZodNumber;
|
|
617
|
+
z: z.ZodNumber;
|
|
618
|
+
}, z.core.$strip>;
|
|
619
|
+
end: z.ZodObject<{
|
|
620
|
+
x: z.ZodNumber;
|
|
621
|
+
z: z.ZodNumber;
|
|
622
|
+
}, z.core.$strip>;
|
|
623
|
+
lengthMeters: z.ZodNumber;
|
|
624
|
+
role: z.ZodEnum<{
|
|
625
|
+
front: "front";
|
|
626
|
+
side: "side";
|
|
627
|
+
rear: "rear";
|
|
628
|
+
}>;
|
|
629
|
+
roleSource: z.ZodEnum<{
|
|
630
|
+
override: "override";
|
|
631
|
+
heuristic: "heuristic";
|
|
632
|
+
}>;
|
|
633
|
+
setbackMeters: z.ZodNullable<z.ZodNumber>;
|
|
634
|
+
}, z.core.$strip>;
|
|
635
|
+
export type PluginProgramSiteEdge = z.infer<typeof PluginProgramSiteEdge>;
|
|
636
|
+
/**
|
|
637
|
+
* Per-parcel entry of {@linkcode PluginProgramSiteApi.listEdges}.
|
|
638
|
+
*
|
|
639
|
+
* | Property | Type | Description |
|
|
640
|
+
* |---|---|---|
|
|
641
|
+
* | `siteId` | `string` | The parcel's component id (same id space as `listPolygons`) |
|
|
642
|
+
* | `buildableEnvelopeId` | `string \| null` | Linked zoning envelope, when one exists |
|
|
643
|
+
* | `usingLiveSiteBoundary` | `boolean` | `true` when edges come from the live site boundary; `false` when only the envelope's persisted source polygon was resolvable |
|
|
644
|
+
* | `staleOverridesDropped` | `boolean` | `true` when persisted edge overrides no longer index-align with the live boundary and were ignored |
|
|
645
|
+
* | `edges` | `PluginProgramSiteEdge[]` | The classified boundary edges |
|
|
646
|
+
*/
|
|
647
|
+
export declare const PluginProgramSiteEdgesEntry: z.ZodObject<{
|
|
648
|
+
siteId: z.ZodString;
|
|
649
|
+
buildableEnvelopeId: z.ZodNullable<z.ZodString>;
|
|
650
|
+
usingLiveSiteBoundary: z.ZodBoolean;
|
|
651
|
+
staleOverridesDropped: z.ZodBoolean;
|
|
652
|
+
edges: z.ZodArray<z.ZodObject<{
|
|
653
|
+
edgeIndex: z.ZodNumber;
|
|
654
|
+
start: z.ZodObject<{
|
|
655
|
+
x: z.ZodNumber;
|
|
656
|
+
z: z.ZodNumber;
|
|
657
|
+
}, z.core.$strip>;
|
|
658
|
+
end: z.ZodObject<{
|
|
659
|
+
x: z.ZodNumber;
|
|
660
|
+
z: z.ZodNumber;
|
|
661
|
+
}, z.core.$strip>;
|
|
662
|
+
lengthMeters: z.ZodNumber;
|
|
663
|
+
role: z.ZodEnum<{
|
|
664
|
+
front: "front";
|
|
665
|
+
side: "side";
|
|
666
|
+
rear: "rear";
|
|
667
|
+
}>;
|
|
668
|
+
roleSource: z.ZodEnum<{
|
|
669
|
+
override: "override";
|
|
670
|
+
heuristic: "heuristic";
|
|
671
|
+
}>;
|
|
672
|
+
setbackMeters: z.ZodNullable<z.ZodNumber>;
|
|
673
|
+
}, z.core.$strip>>;
|
|
674
|
+
}, z.core.$strip>;
|
|
675
|
+
export type PluginProgramSiteEdgesEntry = z.infer<typeof PluginProgramSiteEdgesEntry>;
|
|
676
|
+
/**
|
|
677
|
+
* Result of {@linkcode PluginProgramSiteApi.listEdges} — one entry per site
|
|
678
|
+
* parcel; empty when the project has no site. `lengthUnit` is always `"m"`.
|
|
679
|
+
*/
|
|
680
|
+
export declare const PluginProgramSiteListEdgesResult: z.ZodObject<{
|
|
681
|
+
lengthUnit: z.ZodLiteral<"m">;
|
|
682
|
+
sites: z.ZodArray<z.ZodObject<{
|
|
683
|
+
siteId: z.ZodString;
|
|
684
|
+
buildableEnvelopeId: z.ZodNullable<z.ZodString>;
|
|
685
|
+
usingLiveSiteBoundary: z.ZodBoolean;
|
|
686
|
+
staleOverridesDropped: z.ZodBoolean;
|
|
687
|
+
edges: z.ZodArray<z.ZodObject<{
|
|
688
|
+
edgeIndex: z.ZodNumber;
|
|
689
|
+
start: z.ZodObject<{
|
|
690
|
+
x: z.ZodNumber;
|
|
691
|
+
z: z.ZodNumber;
|
|
692
|
+
}, z.core.$strip>;
|
|
693
|
+
end: z.ZodObject<{
|
|
694
|
+
x: z.ZodNumber;
|
|
695
|
+
z: z.ZodNumber;
|
|
696
|
+
}, z.core.$strip>;
|
|
697
|
+
lengthMeters: z.ZodNumber;
|
|
698
|
+
role: z.ZodEnum<{
|
|
699
|
+
front: "front";
|
|
700
|
+
side: "side";
|
|
701
|
+
rear: "rear";
|
|
702
|
+
}>;
|
|
703
|
+
roleSource: z.ZodEnum<{
|
|
704
|
+
override: "override";
|
|
705
|
+
heuristic: "heuristic";
|
|
706
|
+
}>;
|
|
707
|
+
setbackMeters: z.ZodNullable<z.ZodNumber>;
|
|
708
|
+
}, z.core.$strip>>;
|
|
709
|
+
}, z.core.$strip>>;
|
|
710
|
+
}, z.core.$strip>;
|
|
711
|
+
export type PluginProgramSiteListEdgesResult = z.infer<typeof PluginProgramSiteListEdgesResult>;
|
|
454
712
|
//# sourceMappingURL=site.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/api/program/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/api/program/site.ts"],"names":[],"mappings":"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"}
|