@ngis/plugin-ui 0.4.0
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/LICENSE +13 -0
- package/README.md +25 -0
- package/dist/index.cjs +71 -0
- package/dist/index.d.ts +114 -0
- package/dist/index.mjs +69 -0
- package/dist/src/api/analysis.d.ts +140 -0
- package/dist/src/api/resources.d.ts +530 -0
- package/dist/src/api/scenes.d.ts +251 -0
- package/dist/src/api/users.d.ts +22 -0
- package/dist/src/api/workflows.d.ts +191 -0
- package/dist/src/components/plugin-ui/AttributeTable.d.ts +26 -0
- package/dist/src/components/plugin-ui/BatchTable.d.ts +47 -0
- package/dist/src/components/plugin-ui/ChartCanvas.d.ts +14 -0
- package/dist/src/components/plugin-ui/ExtentPicker.d.ts +22 -0
- package/dist/src/components/plugin-ui/FieldSelect.d.ts +23 -0
- package/dist/src/components/plugin-ui/Flow.d.ts +256 -0
- package/dist/src/components/plugin-ui/ModelSelect.d.ts +36 -0
- package/dist/src/components/plugin-ui/ParamForm.d.ts +63 -0
- package/dist/src/components/plugin-ui/PickerField.d.ts +52 -0
- package/dist/src/components/plugin-ui/ResourceSelect.d.ts +37 -0
- package/dist/src/components/plugin-ui/ResultActions.d.ts +48 -0
- package/dist/src/components/plugin-ui/RunButton.d.ts +49 -0
- package/dist/src/components/plugin-ui/StatChart.d.ts +66 -0
- package/dist/src/components/plugin-ui/TaskChrome.d.ts +35 -0
- package/dist/src/components/plugin-ui/TaskList.d.ts +29 -0
- package/dist/src/components/plugin-ui/TaskStatus.d.ts +55 -0
- package/dist/src/components/plugin-ui/batch-model.d.ts +442 -0
- package/dist/src/components/plugin-ui/flow-inputs.d.ts +61 -0
- package/dist/src/components/plugin-ui/flow-model.d.ts +303 -0
- package/dist/src/components/plugin-ui/flow-ports.d.ts +155 -0
- package/dist/src/components/plugin-ui/param-form-data.d.ts +122 -0
- package/dist/src/components/plugin-ui/param-form-model.d.ts +187 -0
- package/dist/src/components/plugin-ui/param-widgets.d.ts +88 -0
- package/dist/src/components/plugin-ui/picker-data.d.ts +141 -0
- package/dist/src/components/plugin-ui/picker-model.d.ts +150 -0
- package/dist/src/components/plugin-ui/recipe-model.d.ts +320 -0
- package/dist/src/components/plugin-ui/result-data.d.ts +112 -0
- package/dist/src/components/plugin-ui/result-model.d.ts +96 -0
- package/dist/src/components/plugin-ui/run-data.d.ts +118 -0
- package/dist/src/components/plugin-ui/run-model.d.ts +179 -0
- package/dist/src/components/plugin-ui/stat-chart-model.d.ts +168 -0
- package/dist/src/components/plugin-ui/validation-messages.d.ts +18 -0
- package/dist/src/components/plugin-ui/w2-contracts.d.ts +151 -0
- package/dist/src/components/plugin-ui/w3-contracts.d.ts +328 -0
- package/dist/src/components/plugin-ui/w4-contracts.d.ts +510 -0
- package/dist/src/components/ui/button.d.ts +12 -0
- package/dist/src/components/ui/checkbox.d.ts +4 -0
- package/dist/src/components/ui/column-resize-handle.d.ts +23 -0
- package/dist/src/components/ui/dropdown-menu.d.ts +25 -0
- package/dist/src/components/ui/input.d.ts +3 -0
- package/dist/src/components/ui/label.d.ts +4 -0
- package/dist/src/components/ui/popover.d.ts +10 -0
- package/dist/src/components/ui/select.d.ts +15 -0
- package/dist/src/components/ui/switch.d.ts +6 -0
- package/dist/src/domain/map/types.d.ts +128 -0
- package/dist/src/features/gis/components/GisAttributeTable.d.ts +56 -0
- package/dist/src/features/gis/hooks/useDatasetFeatureWindow.d.ts +51 -0
- package/dist/src/lib/api-error.d.ts +81 -0
- package/dist/src/lib/api.d.ts +82 -0
- package/dist/src/lib/auth-session.d.ts +22 -0
- package/dist/src/lib/hooks/useColumnResize.d.ts +57 -0
- package/dist/src/lib/raster-color-layer/RasterColorLayer.d.ts +48 -0
- package/dist/src/lib/raster-color-layer/TileGrid.d.ts +31 -0
- package/dist/src/lib/raster-color-layer/colorRamp.d.ts +18 -0
- package/dist/src/lib/raster-color-layer/shaders/raster-color.frag.d.ts +2 -0
- package/dist/src/lib/raster-color-layer/shaders/raster-color.vert.d.ts +2 -0
- package/dist/src/lib/raster-color-layer/zoomInterpolate.d.ts +2 -0
- package/dist/src/lib/utils.d.ts +2 -0
- package/dist/src/sdk/facets/types.d.ts +370 -0
- package/dist/src/sdk/host-api.d.ts +256 -0
- package/dist/src/sdk/map-api.d.ts +288 -0
- package/dist/src/sdk/panels.d.ts +130 -0
- package/dist/src/types/analysis.d.ts +205 -0
- package/dist/src/types/common.d.ts +17 -0
- package/dist/src/types/extensions.d.ts +560 -0
- package/dist/src/types/gis.d.ts +242 -0
- package/dist/src/types/market-social.d.ts +378 -0
- package/dist/src/types/workflow.d.ts +83 -0
- package/package.json +59 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Flow>` — the typed-port scope (Stage 14 Y5b, **F14.4 / F14.5 / F14.10**).
|
|
3
|
+
*
|
|
4
|
+
* A React context holding one registry of nodes and their out-port values,
|
|
5
|
+
* re-resolving whenever either changes, and rendering `data-slot="ngis-flow"`.
|
|
6
|
+
* `useFlowScope()` reads the scope; `useFlowPort()` is how each of the eleven
|
|
7
|
+
* smart components declares its ports, publishes its outputs and reads back its
|
|
8
|
+
* resolved inputs and its derived enablement.
|
|
9
|
+
*
|
|
10
|
+
* ## Flow state is component-local, and exactly one value leaves (F14.10)
|
|
11
|
+
*
|
|
12
|
+
* The registry is plain React state in this provider. Nothing here calls
|
|
13
|
+
* `host.context.set`, and the rationale is from source rather than taste: every
|
|
14
|
+
* `set` notifies the dependency index and re-evaluates every compiled expression
|
|
15
|
+
* whose read-set intersects, so publishing each port value would put
|
|
16
|
+
* per-keystroke traffic through the global index — the "enablement performance"
|
|
17
|
+
* risk design-v2 §8 names. The **one** sanctioned publication is the task id,
|
|
18
|
+
* written by `RunButton` through `publishTaskId` as the bare key `taskId`, and
|
|
19
|
+
* there must never be a second.
|
|
20
|
+
*
|
|
21
|
+
* ## Why the scope holds no React state in its *contract*
|
|
22
|
+
*
|
|
23
|
+
* Everything the resolver reads is declarative data — `NgisFlowNode[]` plus an
|
|
24
|
+
* out-port value map — which is what keeps every component **host-renderable
|
|
25
|
+
* from declarative data** and therefore survivable into Stage 15's worker tier.
|
|
26
|
+
* A scope whose contract included a setter or an element would quietly destroy
|
|
27
|
+
* that property. The pure core lives in `flow-model.ts` (Y5a); on this branch it
|
|
28
|
+
* is stubbed in `flow-core-stub.ts`, which the merge deletes.
|
|
29
|
+
*
|
|
30
|
+
* ## Not a reactive system, and not an editor
|
|
31
|
+
*
|
|
32
|
+
* DAG data flow plus derived enablement, per the stage's binding cuts: no
|
|
33
|
+
* signals, no observables, no effect graph. The escape hatch stays plain React
|
|
34
|
+
* plus facets. The inspector inspects; it does not edit.
|
|
35
|
+
*/
|
|
36
|
+
import { type ReactNode } from "react";
|
|
37
|
+
import type { NgisBounds } from "../../sdk/map-api";
|
|
38
|
+
import type { NgisPickerNotice } from "./PickerField";
|
|
39
|
+
import { type NgisFlowDefect, type NgisFlowState } from "./flow-model";
|
|
40
|
+
import { type NgisFlowNode, type NgisFlowNodeConfig, type NgisFlowRef, type NgisFlowSnapshot, type NgisInputBinding, type NgisNodeEnablement, type NgisPortResolution, type NgisPortSpec, type NgisResolvedValue } from "./w3-contracts";
|
|
41
|
+
/**
|
|
42
|
+
* What a `<Flow>` scope offers its children. Data plus three registry calls;
|
|
43
|
+
* deliberately no way to *edit* the graph from outside a node's own declaration,
|
|
44
|
+
* because the graph is the JSX.
|
|
45
|
+
*/
|
|
46
|
+
export interface NgisFlowScope {
|
|
47
|
+
readonly nodes: readonly NgisFlowNode[];
|
|
48
|
+
readonly outputs: NgisFlowState["outputs"];
|
|
49
|
+
/** Keyed by {@link ngisPortRef}, over in-ports and spread directives alike. */
|
|
50
|
+
readonly resolved: Readonly<Record<string, NgisPortResolution>>;
|
|
51
|
+
readonly enablement: Readonly<Record<string, NgisNodeEnablement>>;
|
|
52
|
+
/** Last-wins on `id`; a second live claim on one id is a dev-mode error. */
|
|
53
|
+
register(node: NgisFlowNode, token: object): void;
|
|
54
|
+
unregister(nodeId: string, token: object): void;
|
|
55
|
+
/** An out port's current value. Scope-local state — never `host.context`. */
|
|
56
|
+
publish(nodeId: string, portId: string, value: NgisResolvedValue | null): void;
|
|
57
|
+
snapshot(): NgisFlowSnapshot;
|
|
58
|
+
}
|
|
59
|
+
/** The enclosing scope, or `null` when a component is rendered outside one. */
|
|
60
|
+
export declare function useFlowScope(): NgisFlowScope | null;
|
|
61
|
+
export interface FlowProps {
|
|
62
|
+
children: ReactNode;
|
|
63
|
+
className?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Render the dev flow-graph inspector beneath the children.
|
|
66
|
+
*
|
|
67
|
+
* **Not a production-stripping gate.** `NODE_ENV` folds away but a
|
|
68
|
+
* `NEXT_PUBLIC_*` read is a runtime property read, so a dev-gated branch
|
|
69
|
+
* survives minification either way; this is an author-facing switch that is
|
|
70
|
+
* simply off by default, and the inspector is inert — it reads the registry
|
|
71
|
+
* and writes nothing.
|
|
72
|
+
*/
|
|
73
|
+
inspect?: boolean;
|
|
74
|
+
/** Called with a fresh snapshot whenever the graph or a resolution changes.
|
|
75
|
+
* Y6's recipe serializer is the consumer this exists for (F14.6). */
|
|
76
|
+
onSnapshot?: (snapshot: NgisFlowSnapshot) => void;
|
|
77
|
+
}
|
|
78
|
+
export declare function Flow({ children, className, inspect, onSnapshot }: FlowProps): import("react/jsx-runtime").JSX.Element;
|
|
79
|
+
export interface NgisFlowPortDeclaration {
|
|
80
|
+
/** The component's `id` prop — the **node** id (YD41). */
|
|
81
|
+
readonly id?: string;
|
|
82
|
+
/** The `data-slot` this component renders. See `flow-ports.ts`' correction. */
|
|
83
|
+
readonly slot: string;
|
|
84
|
+
readonly ports: readonly NgisPortSpec[];
|
|
85
|
+
/** In-port bindings plus spread directives, exactly as F14.4 spells them. */
|
|
86
|
+
readonly inputs?: Readonly<Record<string, NgisInputBinding>>;
|
|
87
|
+
/** This node's out-port values right now, keyed by member name. */
|
|
88
|
+
readonly outputs?: Readonly<Record<string, NgisResolvedValue | null>>;
|
|
89
|
+
/**
|
|
90
|
+
* **W4 KICKOFF ADDITION (YD49).** The tool this node runs, when it runs one.
|
|
91
|
+
* Rides the registry into the snapshot for Y6's serializer and Y7's batch
|
|
92
|
+
* config; the engine never reads it.
|
|
93
|
+
*/
|
|
94
|
+
readonly config?: NgisFlowNodeConfig;
|
|
95
|
+
}
|
|
96
|
+
export interface NgisFlowPortState {
|
|
97
|
+
readonly nodeId: string;
|
|
98
|
+
/** `false` when the component is rendered outside any `<Flow>`. */
|
|
99
|
+
readonly inScope: boolean;
|
|
100
|
+
readonly enablement: NgisNodeEnablement;
|
|
101
|
+
/** By member name (and by spread key), for this node only. */
|
|
102
|
+
readonly resolutions: Readonly<Record<string, NgisPortResolution>>;
|
|
103
|
+
/** The satisfied subset of {@link NgisFlowPortState.resolutions}. */
|
|
104
|
+
readonly values: Readonly<Record<string, NgisResolvedValue>>;
|
|
105
|
+
/** `data-flow-node` / `data-port-in` / `data-port-out`, ready to spread. */
|
|
106
|
+
readonly nodeAttributes: Readonly<Record<string, string>>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Declare this component's node, publish its outputs, read back its inputs.
|
|
110
|
+
*
|
|
111
|
+
* Called unconditionally by all eleven components, in or out of a scope: the
|
|
112
|
+
* ports are a static property of the component, so they are declared either way
|
|
113
|
+
* and `data-port-*` renders either way. Outside a scope nothing resolves and the
|
|
114
|
+
* node is trivially `ready`, which is precisely W2's behaviour — a component that
|
|
115
|
+
* took its values from props keeps working exactly as it did.
|
|
116
|
+
*/
|
|
117
|
+
export declare function useFlowPort(declaration: NgisFlowPortDeclaration): NgisFlowPortState;
|
|
118
|
+
/**
|
|
119
|
+
* The DOM attributes one node renders.
|
|
120
|
+
*
|
|
121
|
+
* **CORRECTION.** `NGIS_PORT_ATTRIBUTES` gives one attribute per direction, and
|
|
122
|
+
* W2's three `data-port-*` sites each happen to have exactly one port, so the
|
|
123
|
+
* question never arose — but F14.5 gives `ParamForm` and `RunButton` **many** in
|
|
124
|
+
* ports. The value is therefore a space-separated member list, which is how every
|
|
125
|
+
* other multi-valued HTML attribute (`class`, `headers`, `aria-labelledby`) reads
|
|
126
|
+
* and what an e2e `[data-port-in~="ELEV"]` selector already understands.
|
|
127
|
+
* `data-flow-node` is present only inside a scope, because outside one there is
|
|
128
|
+
* no node to address.
|
|
129
|
+
*/
|
|
130
|
+
export declare function flowNodeAttributes(nodeId: string, ports: readonly NgisPortSpec[], inScope: boolean): Readonly<Record<string, string>>;
|
|
131
|
+
/**
|
|
132
|
+
* F14.10's three states, rendered.
|
|
133
|
+
*
|
|
134
|
+
* `pending` is the only one that **dims**; `blocked` renders normally with its
|
|
135
|
+
* action disabled and its reason shown. Opacity and nothing else — no colour, so
|
|
136
|
+
* this is safe outside `.gis-theme` where `bg-warning` resolves to nothing at
|
|
137
|
+
* all, and `motion-safe:` because a state change should not animate for a reader
|
|
138
|
+
* who asked it not to.
|
|
139
|
+
*/
|
|
140
|
+
export declare function flowDimClass(enablement: NgisNodeEnablement): string | undefined;
|
|
141
|
+
/**
|
|
142
|
+
* The generated reason as a notice line.
|
|
143
|
+
*
|
|
144
|
+
* The reason arrives as **data** — a message key plus its placeholders — because
|
|
145
|
+
* a pure model cannot hold a `useTranslations` and F14.10 requires the reason
|
|
146
|
+
* generated rather than authored. This is the only place it becomes a sentence,
|
|
147
|
+
* and `GIS.flow.reason.more` is appended rather than nested so the two locales
|
|
148
|
+
* can punctuate the join differently.
|
|
149
|
+
*/
|
|
150
|
+
export declare function useFlowReason(enablement: NgisNodeEnablement): NgisPickerNotice | null;
|
|
151
|
+
/** The generated reason first: it is why the control cannot be used yet. */
|
|
152
|
+
export declare function withFlowReason(notices: readonly NgisPickerNotice[] | undefined, reason: NgisPickerNotice | null): readonly NgisPickerNotice[];
|
|
153
|
+
/**
|
|
154
|
+
* Splits a prop that may be a **binding reference** from one that is a value.
|
|
155
|
+
*
|
|
156
|
+
* F14.22 writes `<TaskStatus taskId="@run.taskId" />`, and `taskId` is typed
|
|
157
|
+
* `string | null` — so today that string is used as a literal task id and the
|
|
158
|
+
* component watches a task that does not exist. There is no type that can tell
|
|
159
|
+
* the two apart (F14.4 form 1 is any JSON literal, so `string` is already in the
|
|
160
|
+
* union), which is why the `@` sigil is a **runtime** discrimination and why
|
|
161
|
+
* `"@@"` opens a literal. This is the one place that decision is made, so no
|
|
162
|
+
* component makes it differently.
|
|
163
|
+
*/
|
|
164
|
+
export interface NgisFlowPropBinding {
|
|
165
|
+
/** Present when the prop named an upstream output. */
|
|
166
|
+
readonly binding?: NgisFlowRef;
|
|
167
|
+
/**
|
|
168
|
+
* The prop **verbatim** — what the in port's binding carries. A plain id is
|
|
169
|
+
* F14.4's form 1, a static JSON literal, so an author who passes a real task id
|
|
170
|
+
* has *bound* that port and the node is satisfied; only an absent value leaves
|
|
171
|
+
* it unbound. Verbatim and not unescaped, because `unescapeNgisStatic` runs at
|
|
172
|
+
* resolution and doing it twice would turn `"@@dem"` into the reference
|
|
173
|
+
* `"@dem"`.
|
|
174
|
+
*/
|
|
175
|
+
readonly raw: string | null;
|
|
176
|
+
/** The value to use when there is no scope, with `"@@"` already unescaped. */
|
|
177
|
+
readonly literal: string | null;
|
|
178
|
+
}
|
|
179
|
+
export declare function flowPropBinding(value: string | null | undefined): NgisFlowPropBinding;
|
|
180
|
+
/**
|
|
181
|
+
* The same split for a prop that is a **list** of ids, which is `TaskList`'s.
|
|
182
|
+
*
|
|
183
|
+
* F14.5 gives `TaskList` one in port and notes that "a single bound port
|
|
184
|
+
* contributes a one-element list", so at most one entry may be a reference — a
|
|
185
|
+
* node's port ids are member names unique within the node, so there is exactly
|
|
186
|
+
* one `taskId` member to bind. Any further reference in the list is ignored
|
|
187
|
+
* rather than silently watched as a task id, and the caller surfaces that.
|
|
188
|
+
*/
|
|
189
|
+
export interface NgisFlowListBinding extends NgisFlowPropBinding {
|
|
190
|
+
/** Every non-reference entry, `"@@"` unescaped — watched directly. */
|
|
191
|
+
readonly literals: readonly string[];
|
|
192
|
+
/** References beyond the first — an author error worth showing. */
|
|
193
|
+
readonly extraRefs: readonly string[];
|
|
194
|
+
}
|
|
195
|
+
export declare function flowListBinding(values: readonly string[]): NgisFlowListBinding;
|
|
196
|
+
/** The in port's binding: the prop verbatim, or nothing when there is no value. */
|
|
197
|
+
export declare function flowPropInputs(portId: string, binding: NgisFlowPropBinding): Readonly<Record<string, NgisInputBinding>>;
|
|
198
|
+
/**
|
|
199
|
+
* A resolved port value read as a string, or the prop's literal.
|
|
200
|
+
*
|
|
201
|
+
* A `task` port carries the whole `NgisTaskRefValue`, so `taskId="@run"` — the
|
|
202
|
+
* default output port, bare — arrives as the handle rather than as an id. Reading
|
|
203
|
+
* the `taskId` member off it here is what makes the bare and the
|
|
204
|
+
* `"@run.taskId"` spellings agree, and it is a *rendering* concern rather than a
|
|
205
|
+
* resolution one: the resolver's answer is correct either way.
|
|
206
|
+
*/
|
|
207
|
+
export declare function flowString(values: Readonly<Record<string, NgisResolvedValue>>, portId: string, fallback: string | null): string | null;
|
|
208
|
+
/** A resolved `resources` port read as a list, or the prop's own array. */
|
|
209
|
+
export declare function flowStrings(values: Readonly<Record<string, NgisResolvedValue>>, portId: string, fallback: readonly string[]): readonly string[];
|
|
210
|
+
/** A resolved `extent` port read as `NgisBounds`. */
|
|
211
|
+
export declare function flowBounds(values: Readonly<Record<string, NgisResolvedValue>>, portId: string, fallback: NgisBounds | null): NgisBounds | null;
|
|
212
|
+
/**
|
|
213
|
+
* The flow-graph dev inspector.
|
|
214
|
+
*
|
|
215
|
+
* It shows every node, its ports, the binding on each in port, what that binding
|
|
216
|
+
* resolved to, and the node's disclosure state and reason. **It inspects and does
|
|
217
|
+
* not edit** — a visual drag-and-drop pipeline editor is a binding cut for v1, so
|
|
218
|
+
* there is nothing here that writes to the registry.
|
|
219
|
+
*
|
|
220
|
+
* Not on `@ngis/plugin-ui`'s export table and not in either barrel: `<Flow
|
|
221
|
+
* inspect>` is how it is reached, because a name not on the ownership table is
|
|
222
|
+
* not this session's to publish.
|
|
223
|
+
*
|
|
224
|
+
* ## Stage 15 W4 (Z7) — the polish pass, and the one thing it deliberately did
|
|
225
|
+
* not do
|
|
226
|
+
*
|
|
227
|
+
* Three additions, each showing something the resolver already computed and the
|
|
228
|
+
* panel threw away:
|
|
229
|
+
*
|
|
230
|
+
* - **A state tally.** "4 nodes" does not answer the question an author has,
|
|
231
|
+
* which is whether anything is blocked. The tally counts F14.10's three
|
|
232
|
+
* disclosure states.
|
|
233
|
+
* - **Defects, verbatim.** `NgisFlowDefect.message` is by contract *"a
|
|
234
|
+
* developer-facing English sentence, never a message key and never rendered to
|
|
235
|
+
* an end user"* — F13.11 keeps plugin strings literal and F14.10 requires
|
|
236
|
+
* user-facing reasons to be **generated**, so the two channels stay apart. Until
|
|
237
|
+
* now the developer channel went only to `console.error`. A dev inspector,
|
|
238
|
+
* reached by an explicit `<Flow inspect>`, is exactly the surface it belongs on,
|
|
239
|
+
* and rendering it raw is *correct* rather than a missing translation.
|
|
240
|
+
* - **The node's tool.** `NgisFlowNode.config` (`{toolId, toolVersion}`, YD49)
|
|
241
|
+
* rides the registry into the snapshot and the engine never reads it, so a
|
|
242
|
+
* wrong or stale pin is invisible everywhere else. Shown as `toolId@version`.
|
|
243
|
+
* Note the pin is **advisory once published**: `pinToolVersions` re-resolves
|
|
244
|
+
* and overwrites every node's version at publish time.
|
|
245
|
+
*
|
|
246
|
+
* **No new message keys.** A "problems only" toggle wanted one, and
|
|
247
|
+
* `GIS.flow.*`'s closed-set gate lives in `flowMessages.test.ts`, which is not
|
|
248
|
+
* this session's file. Everything above renders from keys that already exist, a
|
|
249
|
+
* numeral, or a developer-channel string that must not be translated. The toggle
|
|
250
|
+
* is recorded as `V15-347` rather than smuggled in.
|
|
251
|
+
*/
|
|
252
|
+
export declare function FlowInspector({ scope, defects, }: {
|
|
253
|
+
scope: NgisFlowScope;
|
|
254
|
+
/** `resolveFlow`'s own findings. Developer-channel English — never translated. */
|
|
255
|
+
defects?: readonly NgisFlowDefect[];
|
|
256
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { NgisModelSearchRequest } from "../../sdk/facets/types";
|
|
2
|
+
import type { NgisHostAPI } from "../../sdk/host-api";
|
|
3
|
+
export interface ModelSelectBaseProps {
|
|
4
|
+
host: NgisHostAPI;
|
|
5
|
+
/** The flow port id (F14.5). Also seeds the control's DOM id. */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Plugin-authored; rendered **literally** (F13.11). */
|
|
8
|
+
label?: string;
|
|
9
|
+
/** The tool id, or `null`. */
|
|
10
|
+
value: string | null;
|
|
11
|
+
onChange: (value: string | null) => void;
|
|
12
|
+
className?: string;
|
|
13
|
+
/** Class for the portalled `<Select>` content — see `ResourceSelect`. */
|
|
14
|
+
contentClassName?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The two legs, as a union (YD54). `search` and the three `list` filters exclude
|
|
18
|
+
* each other with `never`, because `search` cannot express `category` or
|
|
19
|
+
* `modelboxId` and a component that accepted both would have to drop one in
|
|
20
|
+
* silence. `ResourceSelectProps`' single/multiple split is the same shape.
|
|
21
|
+
*/
|
|
22
|
+
export type ModelSelectProps = ModelSelectBaseProps & ({
|
|
23
|
+
/** F14.3's server-side facet query. `inputTypes`/`outputTypes` are the
|
|
24
|
+
* whole reason the leg exists — client-side filtering cannot express them. */
|
|
25
|
+
search: NgisModelSearchRequest;
|
|
26
|
+
provider?: never;
|
|
27
|
+
category?: never;
|
|
28
|
+
modelboxId?: never;
|
|
29
|
+
} | {
|
|
30
|
+
search?: undefined;
|
|
31
|
+
/** Server-side narrowing, straight through to `host.models.list` (F13.2). */
|
|
32
|
+
provider?: string;
|
|
33
|
+
category?: string;
|
|
34
|
+
modelboxId?: string;
|
|
35
|
+
});
|
|
36
|
+
export declare function ModelSelect({ host, id, label, value, onChange, search, provider, category, modelboxId, className, contentClassName, }: ModelSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { NgisHostAPI } from "../../sdk/host-api";
|
|
2
|
+
import type { NgisWidgetKey } from "../../types/analysis";
|
|
3
|
+
import type { NgisInputBinding } from "./w3-contracts";
|
|
4
|
+
import { type NgisRunSubmission } from "./w2-contracts";
|
|
5
|
+
/** What the form publishes on every pass. The `record` out port's payload (F14.5). */
|
|
6
|
+
export interface NgisParamFormChange {
|
|
7
|
+
/** `null` until the schema has loaded. */
|
|
8
|
+
readonly submission: NgisRunSubmission | null;
|
|
9
|
+
/** Client rules (F14.9) refuse the submit. */
|
|
10
|
+
readonly blockedByClient: boolean;
|
|
11
|
+
/** The server's blocking messages, if it has answered. */
|
|
12
|
+
readonly blockingMessages: readonly string[];
|
|
13
|
+
/** `warnings` — never blocks (F14.9). */
|
|
14
|
+
readonly advisoryMessages: readonly string[];
|
|
15
|
+
/**
|
|
16
|
+
* F14.9: server validation **always runs once before submit**. Resolves
|
|
17
|
+
* `false` when either half refuses. Stable across renders, so a caller may
|
|
18
|
+
* hold it.
|
|
19
|
+
*/
|
|
20
|
+
readonly validateBeforeSubmit: () => Promise<boolean>;
|
|
21
|
+
}
|
|
22
|
+
export interface ParamFormProps {
|
|
23
|
+
/** The 0.4 facade — always the one `createGisPluginHostFactory` minted. */
|
|
24
|
+
host: NgisHostAPI;
|
|
25
|
+
/** The flow port id (F14.5, `record` out port). Also seeds the field DOM ids. */
|
|
26
|
+
id?: string;
|
|
27
|
+
/** Plugin-authored; rendered **literally** (F13.11). */
|
|
28
|
+
label?: string;
|
|
29
|
+
/** The tool whose UI schema this form is generated from. */
|
|
30
|
+
toolId: string;
|
|
31
|
+
/**
|
|
32
|
+
* Param names the form does not render — already bound by a flow port
|
|
33
|
+
* (F14.22's `hide={["ELEV"]}`). **An unknown name survives and is surfaced**,
|
|
34
|
+
* never dropped (F14.9, the `ExtensionSettingsForm` rule).
|
|
35
|
+
*/
|
|
36
|
+
hide?: readonly string[];
|
|
37
|
+
/**
|
|
38
|
+
* Flow bindings for params hidden because another node supplies them. The
|
|
39
|
+
* values are resolved for this node's required in-ports; the form's record
|
|
40
|
+
* output still contains only the fields it owns, so a RunButton should keep
|
|
41
|
+
* its explicit binding for the same param.
|
|
42
|
+
*/
|
|
43
|
+
inputs?: Readonly<Record<string, NgisInputBinding>>;
|
|
44
|
+
/**
|
|
45
|
+
* Param name → widget key. The only way to reach `textarea`, `extent` and
|
|
46
|
+
* `field-select`, which YB1 never emits. **Unknown names are surfaced.**
|
|
47
|
+
*/
|
|
48
|
+
widgets?: Readonly<Record<string, NgisWidgetKey>>;
|
|
49
|
+
/**
|
|
50
|
+
* Wire-shaped seed values, applied over `default_value` — F14.8's preset
|
|
51
|
+
* `params` with `$context:` already resolved, or a saved recipe's bindings.
|
|
52
|
+
*/
|
|
53
|
+
values?: Readonly<Record<string, string>>;
|
|
54
|
+
onChange?: (change: NgisParamFormChange) => void;
|
|
55
|
+
/** Forwarded to `host.models.validate` (F14.3). */
|
|
56
|
+
sceneId?: string;
|
|
57
|
+
className?: string;
|
|
58
|
+
/** Class for every portalled `<Select>` content — see `ResourceSelect`. */
|
|
59
|
+
contentClassName?: string;
|
|
60
|
+
/** Reports the exact layer chosen from a duplicate-named resource option. */
|
|
61
|
+
onSameNamedLayerSelect?: (layerId: string) => void;
|
|
62
|
+
}
|
|
63
|
+
export declare function ParamForm({ host, id, label, toolId, hide, inputs, widgets, values: seed, onChange, sceneId, className, contentClassName, onSameNamedLayerSelect, }: ParamFormProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared chrome of the four W1 pickers (Stage 14 Y2): a label, a control,
|
|
3
|
+
* and the notice lines beneath it.
|
|
4
|
+
*
|
|
5
|
+
* The notice slot is not decoration — it is where F14's "surfaced, never
|
|
6
|
+
* masked" rule is actually implemented. Type widening (F14.1), a field the new
|
|
7
|
+
* parent does not carry (F14.9), a parent that left the scene, a mode with no
|
|
8
|
+
* map bound: every one of those renders here rather than collapsing into an
|
|
9
|
+
* empty control. Factored out so all four say it the same way and no component
|
|
10
|
+
* can quietly choose not to.
|
|
11
|
+
*
|
|
12
|
+
* `label` is **plugin-authored and rendered literally** (F13.11). Everything in
|
|
13
|
+
* `notices` is a host string the caller has already translated under
|
|
14
|
+
* `GIS.pluginUi.pick` — this component holds no `useTranslations` of its own,
|
|
15
|
+
* so it cannot invent copy the caller did not ask for.
|
|
16
|
+
*/
|
|
17
|
+
import type { ReactNode } from "react";
|
|
18
|
+
export type NgisPickerNoticeTone = "info" | "warn";
|
|
19
|
+
export interface NgisPickerNotice {
|
|
20
|
+
/** Stable within one field — used as the React key. */
|
|
21
|
+
id: string;
|
|
22
|
+
/** Already-translated host text. */
|
|
23
|
+
text: string;
|
|
24
|
+
tone: NgisPickerNoticeTone;
|
|
25
|
+
}
|
|
26
|
+
export interface PickerFieldProps {
|
|
27
|
+
/** Control id; also `<label for>`. */
|
|
28
|
+
controlId?: string;
|
|
29
|
+
/** Plugin string, literal (F13.11). Omitted when the author gave none. */
|
|
30
|
+
label?: string;
|
|
31
|
+
/** Visual required marker for a schema-defined mandatory field. */
|
|
32
|
+
required?: boolean;
|
|
33
|
+
/** Lets a context such as ParamForm promote its field label without changing
|
|
34
|
+
* the compact, muted label language of every other picker. */
|
|
35
|
+
labelClassName?: string;
|
|
36
|
+
notices?: readonly NgisPickerNotice[];
|
|
37
|
+
className?: string;
|
|
38
|
+
/**
|
|
39
|
+
* `data-flow-node` / `data-port-in` / `data-port-out` for this component's node
|
|
40
|
+
* (Stage 14 Y5b, W3), from `flowNodeAttributes`. Spread onto the root because
|
|
41
|
+
* all eleven components render through this chrome, so every node's ports become
|
|
42
|
+
* visible in the DOM from one hunk rather than eleven — and because they are the
|
|
43
|
+
* only way an e2e spec can see a port at all.
|
|
44
|
+
*/
|
|
45
|
+
flowAttributes?: Readonly<Record<string, string>>;
|
|
46
|
+
children: ReactNode;
|
|
47
|
+
}
|
|
48
|
+
export declare function PickerField({ controlId, label, required, labelClassName, notices, className, flowAttributes, children, }: PickerFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
/** Terse, token-only placeholder for "there is nothing to choose from". */
|
|
50
|
+
export declare function PickerEmpty({ text }: {
|
|
51
|
+
text: string;
|
|
52
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { NgisDataType } from "../../sdk/facets/types";
|
|
2
|
+
import type { NgisHostAPI } from "../../sdk/host-api";
|
|
3
|
+
export interface ResourceSelectBaseProps {
|
|
4
|
+
/** The 0.4 facade — always the one `createGisPluginHostFactory` minted. */
|
|
5
|
+
host: NgisHostAPI;
|
|
6
|
+
/** The flow port id (F14.5). Also seeds the control's DOM id. */
|
|
7
|
+
id?: string;
|
|
8
|
+
/** Plugin-authored; rendered **literally** (F13.11). */
|
|
9
|
+
label?: string;
|
|
10
|
+
/** Canonical `NgisDataType` (F14.1). Omit for "any resource". */
|
|
11
|
+
types?: readonly NgisDataType[];
|
|
12
|
+
className?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Class for the portalled `<Select>` content. Radix portals to
|
|
15
|
+
* `document.body`, **outside** `.gis-theme` — pass `"gis-theme"` when this is
|
|
16
|
+
* mounted inside the GIS workspace, or the listbox picks up the app-level
|
|
17
|
+
* palette. The `VersionPolicyControl` / `ExtensionSettingsForm` precedent.
|
|
18
|
+
* Unused in `multiple` mode, which renders in-tree.
|
|
19
|
+
*/
|
|
20
|
+
contentClassName?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Reports an exact scene layer when a duplicate-named layer is chosen. The
|
|
23
|
+
* bound value remains the file id; hosts may use this only for transient UI
|
|
24
|
+
* feedback such as locating the matching row in a layer list.
|
|
25
|
+
*/
|
|
26
|
+
onSameNamedLayerSelect?: (layerId: string) => void;
|
|
27
|
+
}
|
|
28
|
+
export type ResourceSelectProps = (ResourceSelectBaseProps & {
|
|
29
|
+
multiple?: false;
|
|
30
|
+
value: string | null;
|
|
31
|
+
onChange: (value: string | null) => void;
|
|
32
|
+
}) | (ResourceSelectBaseProps & {
|
|
33
|
+
multiple: true;
|
|
34
|
+
value: readonly string[];
|
|
35
|
+
onChange: (value: readonly string[]) => void;
|
|
36
|
+
});
|
|
37
|
+
export declare function ResourceSelect(props: ResourceSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { NgisChartSpec, NgisHostAPI } from "../../sdk/host-api";
|
|
2
|
+
export interface ResultActionsProps {
|
|
3
|
+
/** The 0.4 facade — always the one `createGisPluginHostFactory` minted. */
|
|
4
|
+
host: NgisHostAPI;
|
|
5
|
+
/** The flow port id (F14.5). Also seeds the control's DOM id. */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Plugin-authored; rendered **literally** (F13.11). */
|
|
8
|
+
label?: string;
|
|
9
|
+
/** The `taskId` in port's current value (`task` kind). */
|
|
10
|
+
taskId: string | null;
|
|
11
|
+
/** Offer the post-hoc `host.viz.addResultLayer` path (`viz:write`). */
|
|
12
|
+
addLayer?: boolean;
|
|
13
|
+
/** Offer `host.viz.openTable` over the output's scene resource (ungated). */
|
|
14
|
+
table?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Offer `host.viz.chart` (ungated). A fixed `chartSpec` supports task-level
|
|
17
|
+
* summaries. Without one, ResultActions reads field frequencies through
|
|
18
|
+
* `host.resources` and builds a public default bar chart.
|
|
19
|
+
*/
|
|
20
|
+
chart?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Fixed task-level summary. Without it the component owns output/field
|
|
23
|
+
* selection and uses the host-backed default field-frequency chart.
|
|
24
|
+
*/
|
|
25
|
+
chartSpec?: NgisChartSpec;
|
|
26
|
+
/**
|
|
27
|
+
* Optional custom chart builder for the selected output and field. Omit it to
|
|
28
|
+
* use the public field-frequency bar chart; supply it only for a different
|
|
29
|
+
* statistical interpretation.
|
|
30
|
+
*/
|
|
31
|
+
buildChartSpec?: (request: NgisResultChartRequest) => NgisChartSpec | Promise<NgisChartSpec>;
|
|
32
|
+
className?: string;
|
|
33
|
+
/** Class for the portalled field selector content. */
|
|
34
|
+
contentClassName?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface NgisResultChartRequest {
|
|
37
|
+
output: NgisResultChartOutput;
|
|
38
|
+
field: string;
|
|
39
|
+
}
|
|
40
|
+
/** Stable public chart target; deliberately excludes ResultActions' internal
|
|
41
|
+
* scene-join projection beyond the fields a chart adapter can rely on. */
|
|
42
|
+
export interface NgisResultChartOutput {
|
|
43
|
+
readonly fileId: string;
|
|
44
|
+
readonly name: string | null;
|
|
45
|
+
readonly primary: boolean;
|
|
46
|
+
readonly resourceId: string | null;
|
|
47
|
+
}
|
|
48
|
+
export declare function ResultActions({ host, id, label, taskId: taskIdProp, addLayer, table, chart, chartSpec, buildChartSpec, className, contentClassName, }: ResultActionsProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { NgisHostAPI } from "../../sdk/host-api";
|
|
2
|
+
import type { NgisTaskHandle } from "../../sdk/facets/types";
|
|
3
|
+
import type { NgisExecutionValidation } from "../../types/analysis";
|
|
4
|
+
import { type NgisRunOptions } from "./run-data";
|
|
5
|
+
import { type NgisRunSubmission } from "./w2-contracts";
|
|
6
|
+
import type { NgisInputBinding } from "./w3-contracts";
|
|
7
|
+
export interface RunButtonBaseProps extends NgisRunOptions {
|
|
8
|
+
host: NgisHostAPI;
|
|
9
|
+
/** The **node** id within the `<Flow>` scope (YD41). Also seeds the DOM id. */
|
|
10
|
+
id?: string;
|
|
11
|
+
/** Plugin-authored; rendered **literally** (F13.11). */
|
|
12
|
+
label?: string;
|
|
13
|
+
/** Plugin-authored action text, literal. Defaults to the host string. */
|
|
14
|
+
actionLabel?: string;
|
|
15
|
+
/**
|
|
16
|
+
* F14.10's single sanctioned publication: the task id, written as the **bare**
|
|
17
|
+
* key `taskId` and namespaced by the host. Opt out when the plugin declares no
|
|
18
|
+
* status item that reads it — nothing else about flow state leaves the scope.
|
|
19
|
+
*/
|
|
20
|
+
publishTaskId?: boolean;
|
|
21
|
+
onSubmitted?: (handle: NgisTaskHandle) => void;
|
|
22
|
+
onValidated?: (validation: NgisExecutionValidation) => void;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The two shapes, as a union rather than two optional props, so that "`inputs`
|
|
27
|
+
* without a `toolId`" and "both at once" are compile errors instead of runtime
|
|
28
|
+
* surprises. The `ResourceSelectProps` precedent, in this same package.
|
|
29
|
+
*/
|
|
30
|
+
export type RunButtonProps = (RunButtonBaseProps & {
|
|
31
|
+
/**
|
|
32
|
+
* What a generated form produced. `null` while there is nothing runnable —
|
|
33
|
+
* rendered as a reason, never as an unexplained inert button (F14.10).
|
|
34
|
+
*/
|
|
35
|
+
submission: NgisRunSubmission | null;
|
|
36
|
+
toolId?: never;
|
|
37
|
+
inputs?: never;
|
|
38
|
+
}) | (RunButtonBaseProps & {
|
|
39
|
+
submission?: never;
|
|
40
|
+
/** The tool to run; its UI schema supplies each bound input's role,
|
|
41
|
+
* requiredness and label — F14.10's provenance chain, unaltered. */
|
|
42
|
+
toolId: string;
|
|
43
|
+
/**
|
|
44
|
+
* F14.4's bindings, keyed by tool parameter name, plus any number of
|
|
45
|
+
* `...ngisFlowSpread("@ref")` directives. Needs an enclosing `<Flow>`.
|
|
46
|
+
*/
|
|
47
|
+
inputs: Readonly<Record<string, NgisInputBinding>>;
|
|
48
|
+
});
|
|
49
|
+
export declare function RunButton(props: RunButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { NgisChartSpec, NgisHostAPI } from "../../sdk/host-api";
|
|
2
|
+
import { type NgisChartTheme } from "./stat-chart-model";
|
|
3
|
+
/**
|
|
4
|
+
* Why there is nothing to draw. `"ready"` is the only arm that renders a chart;
|
|
5
|
+
* every other arm renders a reason, never a dead or empty plot (F14.10).
|
|
6
|
+
*/
|
|
7
|
+
export type NgisStatChartGate = {
|
|
8
|
+
readonly kind: "ready";
|
|
9
|
+
}
|
|
10
|
+
/** No spec at all — the author has not computed one yet. */
|
|
11
|
+
| {
|
|
12
|
+
readonly kind: "no-spec";
|
|
13
|
+
}
|
|
14
|
+
/** A `taskId` in port was declared and is unsatisfied. */
|
|
15
|
+
| {
|
|
16
|
+
readonly kind: "no-task";
|
|
17
|
+
}
|
|
18
|
+
/** A `resource` in port was declared and is unsatisfied. */
|
|
19
|
+
| {
|
|
20
|
+
readonly kind: "no-resource";
|
|
21
|
+
}
|
|
22
|
+
/** A spec with no plottable numbers — distinct from having no spec at all. */
|
|
23
|
+
| {
|
|
24
|
+
readonly kind: "empty";
|
|
25
|
+
};
|
|
26
|
+
export interface NgisStatChartPorts {
|
|
27
|
+
/** `undefined` = this component declares no `taskId` port. `null` = declared
|
|
28
|
+
* and unsatisfied. F14.5's table says `taskId` **or** `resource`. */
|
|
29
|
+
readonly taskId?: string | null;
|
|
30
|
+
readonly resource?: string | null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The gate, in declaration order: an unsatisfied *port* outranks a missing spec,
|
|
34
|
+
* because "the upstream has not produced anything" is the more useful answer than
|
|
35
|
+
* "you gave me no numbers" when both are true and one causes the other.
|
|
36
|
+
*/
|
|
37
|
+
export declare function statChartGate(spec: NgisChartSpec | null | undefined, ports: NgisStatChartPorts): NgisStatChartGate;
|
|
38
|
+
export interface StatChartProps {
|
|
39
|
+
/** The 0.4 facade — always the one `createGisPluginHostFactory` minted.
|
|
40
|
+
* `StatChart` reads nothing through it: the spec is the data, and that is the
|
|
41
|
+
* point (see the header). It is prop #1 because every `@ngis/plugin-ui`
|
|
42
|
+
* component takes it there, and because a component that quietly did not need
|
|
43
|
+
* a host would be the first place a plugin stopped being host-renderable. */
|
|
44
|
+
host: NgisHostAPI;
|
|
45
|
+
/** The flow port id (F14.5). Also seeds the control's DOM id. */
|
|
46
|
+
id?: string;
|
|
47
|
+
/** Plugin-authored; rendered **literally** (F13.11). */
|
|
48
|
+
label?: string;
|
|
49
|
+
spec: NgisChartSpec | null;
|
|
50
|
+
/** The `taskId` in port's value. Omit the prop entirely to declare no such port. */
|
|
51
|
+
taskId?: string | null;
|
|
52
|
+
/** The `resource` in port's value. Omit the prop entirely to declare no such port. */
|
|
53
|
+
resource?: string | null;
|
|
54
|
+
/** Plot height in px; the container includes the axis band. Default 220. */
|
|
55
|
+
height?: number;
|
|
56
|
+
className?: string;
|
|
57
|
+
}
|
|
58
|
+
export declare function StatChart({ host, id, label, spec, taskId: taskIdProp, resource: resourceProp, height, className, }: StatChartProps): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
/**
|
|
60
|
+
* The Tenon dark palette lives under `.dark .gis-theme`, so `resolvedTheme` is
|
|
61
|
+
* the right signal and not a media query. ECharts paints to a canvas and cannot
|
|
62
|
+
* resolve a CSS custom property, which is why the palette is hex in
|
|
63
|
+
* `stat-chart-model.ts` rather than `var(--…)` — and why the theme has to be
|
|
64
|
+
* read in JS at all.
|
|
65
|
+
*/
|
|
66
|
+
export declare function useChartTheme(): NgisChartTheme;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { NgisTaskStage, NgisTaskStatus } from "../../sdk/facets/types";
|
|
2
|
+
import type { NgisTaskLifecycle } from "./run-model";
|
|
3
|
+
export type NgisTaskChipTone = "idle" | "active" | "done" | "failed";
|
|
4
|
+
/**
|
|
5
|
+
* `status` alone decides the tone. The *stage* is the rail's job, and folding a
|
|
6
|
+
* pending integration into the chip would collapse the very distinction the pair
|
|
7
|
+
* exists to show.
|
|
8
|
+
*/
|
|
9
|
+
export declare function taskChipTone(status: NgisTaskStatus): NgisTaskChipTone;
|
|
10
|
+
export interface TaskStatusChipProps {
|
|
11
|
+
status: NgisTaskStatus;
|
|
12
|
+
/** Already-translated `GIS.pluginUi.run.task.status.*`. */
|
|
13
|
+
label: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function TaskStatusChip({ status, label, className }: TaskStatusChipProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export interface TaskStageRailProps {
|
|
18
|
+
lifecycle: NgisTaskLifecycle;
|
|
19
|
+
/** Already-translated `GIS.pluginUi.run.task.stage.*`, per stage. */
|
|
20
|
+
stageLabel: (stage: NgisTaskStage) => string;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Decorative by construction: `aria-hidden`, because the stage it encodes is
|
|
25
|
+
* rendered as text beside it. A rail that were the *only* carrier of the stage
|
|
26
|
+
* would be a screen-reader dead end.
|
|
27
|
+
*/
|
|
28
|
+
export declare function TaskStageRail({ lifecycle, stageLabel, className }: TaskStageRailProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
/** One `label: value` line, mono-set on the value. Ids and stage names are
|
|
30
|
+
* machine facts and are spelled in the machine's own type. */
|
|
31
|
+
export declare function TaskFactLine({ label, value, className, }: {
|
|
32
|
+
label: string;
|
|
33
|
+
value: string;
|
|
34
|
+
className?: string;
|
|
35
|
+
}): import("react/jsx-runtime").JSX.Element;
|