nirs4all-ui 0.1.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/README.md +42 -0
- package/dist/components/RuntimeEngineBadge.d.ts +15 -0
- package/dist/components/RuntimeEngineBadge.d.ts.map +1 -0
- package/dist/components/RuntimeEngineBadge.js +12 -0
- package/dist/components/RuntimeEngineBadge.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/index.d.ts +18 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +20 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/resultMetadata.d.ts +64 -0
- package/dist/runtime/resultMetadata.d.ts.map +1 -0
- package/dist/runtime/resultMetadata.js +310 -0
- package/dist/runtime/resultMetadata.js.map +1 -0
- package/dist/runtime/statusDisplay.d.ts +38 -0
- package/dist/runtime/statusDisplay.d.ts.map +1 -0
- package/dist/runtime/statusDisplay.js +89 -0
- package/dist/runtime/statusDisplay.js.map +1 -0
- package/dist/score/index.d.ts +19 -0
- package/dist/score/index.d.ts.map +1 -0
- package/dist/score/index.js +19 -0
- package/dist/score/index.js.map +1 -0
- package/dist/score/metricKeys.d.ts +18 -0
- package/dist/score/metricKeys.d.ts.map +1 -0
- package/dist/score/metricKeys.js +63 -0
- package/dist/score/metricKeys.js.map +1 -0
- package/dist/score/scoreMetricCatalog.d.ts +59 -0
- package/dist/score/scoreMetricCatalog.d.ts.map +1 -0
- package/dist/score/scoreMetricCatalog.js +324 -0
- package/dist/score/scoreMetricCatalog.js.map +1 -0
- package/dist/score/scoreValues.d.ts +28 -0
- package/dist/score/scoreValues.d.ts.map +1 -0
- package/dist/score/scoreValues.js +92 -0
- package/dist/score/scoreValues.js.map +1 -0
- package/package.json +58 -0
package/README.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# nirs4all-ui
|
|
2
|
+
|
|
3
|
+
Shared React UI components and pure TypeScript view-model helpers used by
|
|
4
|
+
nirs4all Studio and the standalone web/WASM client.
|
|
5
|
+
|
|
6
|
+
This package intentionally keeps components presentational and keeps the
|
|
7
|
+
framework-free helpers free of hooks, API clients, filesystem access, browser
|
|
8
|
+
globals, or backend/runtime execution. Hosts own app state, routing, data
|
|
9
|
+
fetching, and icons; this package owns shared display contracts and reusable
|
|
10
|
+
UI surfaces.
|
|
11
|
+
|
|
12
|
+
## Domains
|
|
13
|
+
|
|
14
|
+
| Domain | Export | What it owns |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| `score` | `nirs4all-ui/score` | Metric-key normalization, metric catalog helpers, direction-aware score parsing, comparison, and formatting. |
|
|
17
|
+
| `runtime` | `nirs4all-ui/runtime` | Runtime/result status display tokens, busy-state predicates, progress projection, engine metadata summaries, diagnostics, and native-result affordances. |
|
|
18
|
+
| `components` | `nirs4all-ui/components` | Stateless React components that render shared runtime and result UI affordances. |
|
|
19
|
+
|
|
20
|
+
The root export also exposes namespace barrels:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { runtime, score } from "nirs4all-ui";
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Prefer domain imports when a consumer only needs one area:
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { canonicalMetricKey, formatMetricValue } from "nirs4all-ui/score";
|
|
30
|
+
import { buildRuntimeResultStatusView } from "nirs4all-ui/runtime";
|
|
31
|
+
import { RuntimeEngineBadge } from "nirs4all-ui/components";
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Development
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install
|
|
38
|
+
npm run typecheck
|
|
39
|
+
npm test
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`npm run build` emits ESM JavaScript and declaration files under `dist/`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type RuntimeEngineLineage, type RuntimeEngineStatusView } from "../runtime/index.js";
|
|
3
|
+
export interface RuntimeEngineBadgeProps {
|
|
4
|
+
lineage?: RuntimeEngineLineage | null;
|
|
5
|
+
source?: unknown;
|
|
6
|
+
status?: RuntimeEngineStatusView | null;
|
|
7
|
+
label?: string | null;
|
|
8
|
+
icon?: ReactNode;
|
|
9
|
+
defaultIcon?: ReactNode;
|
|
10
|
+
fallbackIcon?: ReactNode;
|
|
11
|
+
className?: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function RuntimeEngineBadge({ lineage, source, status, label, icon, defaultIcon, fallbackIcon, className, title, }: RuntimeEngineBadgeProps): import("react").JSX.Element | null;
|
|
15
|
+
//# sourceMappingURL=RuntimeEngineBadge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeEngineBadge.d.ts","sourceRoot":"","sources":["../../src/components/RuntimeEngineBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,KAAK,GACN,EAAE,uBAAuB,sCAazB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { buildRuntimeEngineStatus, formatRuntimeEngineTitle, runtimeEngineLabel, } from "../runtime/index.js";
|
|
3
|
+
export function RuntimeEngineBadge({ lineage, source, status, label, icon, defaultIcon, fallbackIcon, className, title, }) {
|
|
4
|
+
const engineStatus = status ?? buildRuntimeEngineStatus(source);
|
|
5
|
+
const text = label ?? engineStatus?.badgeLabel ?? runtimeEngineLabel(lineage);
|
|
6
|
+
if (!text)
|
|
7
|
+
return null;
|
|
8
|
+
const resolvedIcon = icon ?? (engineStatus?.isFallback ? fallbackIcon : defaultIcon);
|
|
9
|
+
const resolvedTitle = title ?? formatRuntimeEngineTitle(engineStatus) ?? undefined;
|
|
10
|
+
return (_jsxs("span", { className: className, title: resolvedTitle, children: [resolvedIcon, text] }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=RuntimeEngineBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeEngineBadge.js","sourceRoot":"","sources":["../../src/components/RuntimeEngineBadge.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAc7B,MAAM,UAAU,kBAAkB,CAAC,EACjC,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,KAAK,GACmB;IACxB,MAAM,YAAY,GAAG,MAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,IAAI,YAAY,EAAE,UAAU,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG,KAAK,IAAI,wBAAwB,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;IAEnF,OAAO,CACL,gBAAM,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,aAC7C,YAAY,EACZ,IAAI,IACA,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nirs4all-ui public package surface.
|
|
3
|
+
*
|
|
4
|
+
* Pure TypeScript only: no React, no network/IO, no app state, and no backend
|
|
5
|
+
* runtime execution. Hosts can use the namespace barrels from the root export
|
|
6
|
+
* or import narrower domain barrels such as `nirs4all-ui/score`.
|
|
7
|
+
*/
|
|
8
|
+
export * as score from "./score/index.js";
|
|
9
|
+
export * as runtime from "./runtime/index.js";
|
|
10
|
+
export * as components from "./components/index.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nirs4all-ui public package surface.
|
|
3
|
+
*
|
|
4
|
+
* Pure TypeScript only: no React, no network/IO, no app state, and no backend
|
|
5
|
+
* runtime execution. Hosts can use the namespace barrels from the root export
|
|
6
|
+
* or import narrower domain barrels such as `nirs4all-ui/score`.
|
|
7
|
+
*/
|
|
8
|
+
export * as score from "./score/index.js";
|
|
9
|
+
export * as runtime from "./runtime/index.js";
|
|
10
|
+
export * as components from "./components/index.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime/result status view-model foundation — public surface.
|
|
3
|
+
*
|
|
4
|
+
* Pure, dependency-free helpers for rendering run and pipeline result statuses:
|
|
5
|
+
* status normalization, display tokens/classes, badge variants, busy-state
|
|
6
|
+
* detection, progress projection, and status-aware empty-state copy.
|
|
7
|
+
*
|
|
8
|
+
* React components keep ownership of icon libraries and markup. Import this
|
|
9
|
+
* foundation from `nirs4all-ui/runtime`.
|
|
10
|
+
*/
|
|
11
|
+
export * from "./statusDisplay.js";
|
|
12
|
+
export * from "./resultMetadata.js";
|
|
13
|
+
export interface RuntimeEngineLineage {
|
|
14
|
+
compiled?: boolean | null;
|
|
15
|
+
executed?: boolean | null;
|
|
16
|
+
}
|
|
17
|
+
export declare function runtimeEngineLabel(lineage: RuntimeEngineLineage | null | undefined): string | null;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AAEpC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIlG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime/result status view-model foundation — public surface.
|
|
3
|
+
*
|
|
4
|
+
* Pure, dependency-free helpers for rendering run and pipeline result statuses:
|
|
5
|
+
* status normalization, display tokens/classes, badge variants, busy-state
|
|
6
|
+
* detection, progress projection, and status-aware empty-state copy.
|
|
7
|
+
*
|
|
8
|
+
* React components keep ownership of icon libraries and markup. Import this
|
|
9
|
+
* foundation from `nirs4all-ui/runtime`.
|
|
10
|
+
*/
|
|
11
|
+
export * from "./statusDisplay.js";
|
|
12
|
+
export * from "./resultMetadata.js";
|
|
13
|
+
export function runtimeEngineLabel(lineage) {
|
|
14
|
+
if (lineage?.executed)
|
|
15
|
+
return "executed by dag-ml";
|
|
16
|
+
if (lineage?.compiled)
|
|
17
|
+
return "compiled by dag-ml";
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AAOpC,MAAM,UAAU,kBAAkB,CAAC,OAAgD;IACjF,IAAI,OAAO,EAAE,QAAQ;QAAE,OAAO,oBAAoB,CAAC;IACnD,IAAI,OAAO,EAAE,QAAQ;QAAE,OAAO,oBAAoB,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type RuntimeDiagnosticTone = "error" | "warning" | "info";
|
|
2
|
+
/**
|
|
3
|
+
* One normalized runtime diagnostic. Mirrors the rt_error.v1 wire envelope
|
|
4
|
+
* (`nirs4all-ecosystem/docs/contracts/runtime/rt_error.v1.schema.json`):
|
|
5
|
+
* `verb` / `cause` / `message` / `mitigation` / `unsupported_capability` are
|
|
6
|
+
* carried; `portable_level` is opaque (CAP-002) and never interpreted here.
|
|
7
|
+
*/
|
|
8
|
+
export interface RuntimeDiagnosticItem {
|
|
9
|
+
id: string;
|
|
10
|
+
verb: string | null;
|
|
11
|
+
cause: string | null;
|
|
12
|
+
message: string;
|
|
13
|
+
mitigation: string | null;
|
|
14
|
+
unsupportedCapability: string | null;
|
|
15
|
+
tone: RuntimeDiagnosticTone;
|
|
16
|
+
}
|
|
17
|
+
export type RuntimeEngineTone = "default" | "success" | "warning" | "muted";
|
|
18
|
+
export interface RuntimeEngineStatusView {
|
|
19
|
+
engine: string | null;
|
|
20
|
+
engineLabel: string | null;
|
|
21
|
+
requestedEngine: string | null;
|
|
22
|
+
requestedEngineLabel: string | null;
|
|
23
|
+
badgeLabel: string;
|
|
24
|
+
detailLabel: string | null;
|
|
25
|
+
isFallback: boolean;
|
|
26
|
+
tone: RuntimeEngineTone;
|
|
27
|
+
diagnostics: RuntimeDiagnosticItem[];
|
|
28
|
+
}
|
|
29
|
+
export interface RuntimeNativeResultsAffordanceInput {
|
|
30
|
+
hasNativeResults?: boolean | null;
|
|
31
|
+
artifactCount?: number | null;
|
|
32
|
+
nativeArtifactCount?: number | null;
|
|
33
|
+
hasRefit?: boolean | null;
|
|
34
|
+
exportLabel?: string | null;
|
|
35
|
+
exportDescription?: string | null;
|
|
36
|
+
disabled?: boolean;
|
|
37
|
+
disabledReason?: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface RuntimeNativeResultsAffordanceView {
|
|
40
|
+
hasNativeResults: boolean;
|
|
41
|
+
artifactCount: number | null;
|
|
42
|
+
nativeResultsLabel: string;
|
|
43
|
+
exportLabel: string;
|
|
44
|
+
exportDescription: string | null;
|
|
45
|
+
disabled: boolean;
|
|
46
|
+
disabledReason: string | null;
|
|
47
|
+
}
|
|
48
|
+
export declare function normalizeRuntimeDiagnostics(source: unknown): RuntimeDiagnosticItem[];
|
|
49
|
+
export declare function formatRuntimeTokenLabel(value: string | null | undefined): string;
|
|
50
|
+
/**
|
|
51
|
+
* Format a runtime refusal (an rt_error.v1 envelope normalized to a
|
|
52
|
+
* `RuntimeDiagnosticItem`) as the shared multi-line message hosts show when a
|
|
53
|
+
* strict-mode run is refused (banner, execution log, toast):
|
|
54
|
+
*
|
|
55
|
+
* `<Verb> refused: <Cause>`
|
|
56
|
+
* `<message>`
|
|
57
|
+
* `Mitigation: <mitigation>` (when present)
|
|
58
|
+
* `Missing capability: <Capability>` (when present)
|
|
59
|
+
*/
|
|
60
|
+
export declare function formatRuntimeRefusalText(item: Pick<RuntimeDiagnosticItem, "verb" | "cause" | "message" | "mitigation" | "unsupportedCapability">): string;
|
|
61
|
+
export declare function buildRuntimeEngineStatus(source: unknown): RuntimeEngineStatusView | null;
|
|
62
|
+
export declare function formatRuntimeEngineTitle(status: RuntimeEngineStatusView | null | undefined): string | null;
|
|
63
|
+
export declare function buildRuntimeNativeResultsAffordance(input?: RuntimeNativeResultsAffordanceInput): RuntimeNativeResultsAffordanceView;
|
|
64
|
+
//# sourceMappingURL=resultMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resultMetadata.d.ts","sourceRoot":"","sources":["../../src/runtime/resultMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,mCAAmC;IAClD,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,kCAAkC;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAiKD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,qBAAqB,EAAE,CAIpF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAqBhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,uBAAuB,CAAC,GACvG,MAAM,CAQR;AAgBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAiExF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAY1G;AAOD,wBAAgB,mCAAmC,CACjD,KAAK,GAAE,mCAAwC,GAC9C,kCAAkC,CAwBpC"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
function asRecord(value) {
|
|
2
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
3
|
+
? value
|
|
4
|
+
: null;
|
|
5
|
+
}
|
|
6
|
+
function readStringField(source, keys) {
|
|
7
|
+
if (!source)
|
|
8
|
+
return null;
|
|
9
|
+
for (const key of keys) {
|
|
10
|
+
const value = source[key];
|
|
11
|
+
if (typeof value !== "string")
|
|
12
|
+
continue;
|
|
13
|
+
const trimmed = value.trim();
|
|
14
|
+
if (trimmed.length > 0)
|
|
15
|
+
return trimmed;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
function readRecordField(source, keys) {
|
|
20
|
+
if (!source)
|
|
21
|
+
return null;
|
|
22
|
+
for (const key of keys) {
|
|
23
|
+
const record = asRecord(source[key]);
|
|
24
|
+
if (record)
|
|
25
|
+
return record;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function readArrayField(source, keys) {
|
|
30
|
+
if (!source)
|
|
31
|
+
return null;
|
|
32
|
+
for (const key of keys) {
|
|
33
|
+
const value = source[key];
|
|
34
|
+
if (Array.isArray(value))
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function uniqueRecords(records) {
|
|
40
|
+
const seen = new Set();
|
|
41
|
+
const result = [];
|
|
42
|
+
for (const record of records) {
|
|
43
|
+
if (!record || seen.has(record))
|
|
44
|
+
continue;
|
|
45
|
+
seen.add(record);
|
|
46
|
+
result.push(record);
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
function runtimeRecordCandidates(source) {
|
|
51
|
+
const root = asRecord(source);
|
|
52
|
+
if (!root)
|
|
53
|
+
return [];
|
|
54
|
+
const metadata = readRecordField(root, ["execution_metadata", "executionMetadata", "metadata"]);
|
|
55
|
+
const runtime = readRecordField(root, ["rt_result", "rtResult", "runtime_result", "runtimeResult", "runtime"]);
|
|
56
|
+
const result = readRecordField(runtime, ["result"]);
|
|
57
|
+
return uniqueRecords([root, metadata, runtime, result]);
|
|
58
|
+
}
|
|
59
|
+
function runtimeManifestCandidates(records) {
|
|
60
|
+
return uniqueRecords(records.map(record => readRecordField(record, ["manifest"])));
|
|
61
|
+
}
|
|
62
|
+
function runtimeConfigCandidates(records) {
|
|
63
|
+
return uniqueRecords(records.map(record => readRecordField(record, ["config"])));
|
|
64
|
+
}
|
|
65
|
+
function runtimeFallbackPolicyCandidates(records) {
|
|
66
|
+
return uniqueRecords(records.map(record => readRecordField(record, ["fallback_policy", "fallbackPolicy"])));
|
|
67
|
+
}
|
|
68
|
+
function readStringFromCandidates(candidates, keys) {
|
|
69
|
+
for (const candidate of candidates) {
|
|
70
|
+
const value = readStringField(candidate, keys);
|
|
71
|
+
if (value)
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
function normalizeDiagnosticMessage(raw, record) {
|
|
77
|
+
if (typeof raw === "string")
|
|
78
|
+
return raw.trim() || null;
|
|
79
|
+
const message = readStringField(record, ["message", "detail", "error", "reason"]);
|
|
80
|
+
if (message)
|
|
81
|
+
return message;
|
|
82
|
+
const cause = readStringField(record, ["cause", "code"]);
|
|
83
|
+
return cause ? formatRuntimeTokenLabel(cause) : null;
|
|
84
|
+
}
|
|
85
|
+
function resolveDiagnosticTone(record) {
|
|
86
|
+
const level = readStringField(record, ["severity", "level"])?.toLowerCase();
|
|
87
|
+
if (level === "error" || level === "fatal")
|
|
88
|
+
return "error";
|
|
89
|
+
if (level === "warning" || level === "warn")
|
|
90
|
+
return "warning";
|
|
91
|
+
const cause = readStringField(record, ["cause", "code"])?.toLowerCase() ?? "";
|
|
92
|
+
if (cause.includes("unsupported")
|
|
93
|
+
|| cause.includes("unavailable")
|
|
94
|
+
|| cause.includes("fallback")) {
|
|
95
|
+
return "warning";
|
|
96
|
+
}
|
|
97
|
+
return "info";
|
|
98
|
+
}
|
|
99
|
+
function normalizeRuntimeDiagnostic(raw, index) {
|
|
100
|
+
const record = asRecord(raw);
|
|
101
|
+
const message = normalizeDiagnosticMessage(raw, record);
|
|
102
|
+
if (!message)
|
|
103
|
+
return null;
|
|
104
|
+
const cause = readStringField(record, ["cause", "code"]);
|
|
105
|
+
const verb = readStringField(record, ["verb", "operation"]);
|
|
106
|
+
const mitigation = readStringField(record, ["mitigation", "hint", "suggestion"]);
|
|
107
|
+
const unsupportedCapability = readStringField(record, ["unsupported_capability", "unsupportedCapability"]);
|
|
108
|
+
return {
|
|
109
|
+
id: `${index}-${cause ?? "diagnostic"}-${message.slice(0, 32)}`,
|
|
110
|
+
verb,
|
|
111
|
+
cause,
|
|
112
|
+
message,
|
|
113
|
+
mitigation,
|
|
114
|
+
unsupportedCapability,
|
|
115
|
+
tone: resolveDiagnosticTone(record),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function collectRuntimeDiagnostics(source) {
|
|
119
|
+
if (Array.isArray(source))
|
|
120
|
+
return source;
|
|
121
|
+
const candidates = runtimeRecordCandidates(source);
|
|
122
|
+
for (const candidate of candidates) {
|
|
123
|
+
const diagnostics = readArrayField(candidate, [
|
|
124
|
+
"engine_diagnostics",
|
|
125
|
+
"engineDiagnostics",
|
|
126
|
+
"diagnostics",
|
|
127
|
+
"rt_errors",
|
|
128
|
+
"rtErrors",
|
|
129
|
+
]);
|
|
130
|
+
if (diagnostics && diagnostics.length > 0)
|
|
131
|
+
return diagnostics;
|
|
132
|
+
const singleDiagnostic = readRecordField(candidate, ["rt_error", "rtError", "diagnostic"]);
|
|
133
|
+
if (singleDiagnostic)
|
|
134
|
+
return [singleDiagnostic];
|
|
135
|
+
}
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
export function normalizeRuntimeDiagnostics(source) {
|
|
139
|
+
return collectRuntimeDiagnostics(source)
|
|
140
|
+
.map(normalizeRuntimeDiagnostic)
|
|
141
|
+
.filter((item) => item != null);
|
|
142
|
+
}
|
|
143
|
+
export function formatRuntimeTokenLabel(value) {
|
|
144
|
+
if (!value)
|
|
145
|
+
return "";
|
|
146
|
+
const normalized = value.trim();
|
|
147
|
+
const lower = normalized.toLowerCase();
|
|
148
|
+
if (lower === "dag-ml" || lower === "dag_ml" || lower === "dagml")
|
|
149
|
+
return "DAG-ML";
|
|
150
|
+
if (lower === "wasm" || lower === "wasm-local" || lower === "wasm_local")
|
|
151
|
+
return lower.includes("local") ? "Local WASM" : "WASM";
|
|
152
|
+
if (lower === "n4a")
|
|
153
|
+
return "N4A";
|
|
154
|
+
return normalized
|
|
155
|
+
.split(/[-_\s]+/)
|
|
156
|
+
.filter(Boolean)
|
|
157
|
+
.map(part => {
|
|
158
|
+
const partLower = part.toLowerCase();
|
|
159
|
+
if (partLower === "ml")
|
|
160
|
+
return "ML";
|
|
161
|
+
if (partLower === "api")
|
|
162
|
+
return "API";
|
|
163
|
+
if (partLower === "gpu")
|
|
164
|
+
return "GPU";
|
|
165
|
+
if (partLower === "cpu")
|
|
166
|
+
return "CPU";
|
|
167
|
+
return partLower.charAt(0).toUpperCase() + partLower.slice(1);
|
|
168
|
+
})
|
|
169
|
+
.join(" ");
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Format a runtime refusal (an rt_error.v1 envelope normalized to a
|
|
173
|
+
* `RuntimeDiagnosticItem`) as the shared multi-line message hosts show when a
|
|
174
|
+
* strict-mode run is refused (banner, execution log, toast):
|
|
175
|
+
*
|
|
176
|
+
* `<Verb> refused: <Cause>`
|
|
177
|
+
* `<message>`
|
|
178
|
+
* `Mitigation: <mitigation>` (when present)
|
|
179
|
+
* `Missing capability: <Capability>` (when present)
|
|
180
|
+
*/
|
|
181
|
+
export function formatRuntimeRefusalText(item) {
|
|
182
|
+
const lines = [
|
|
183
|
+
`${formatRuntimeTokenLabel(item.verb)} refused: ${formatRuntimeTokenLabel(item.cause)}`,
|
|
184
|
+
item.message,
|
|
185
|
+
];
|
|
186
|
+
if (item.mitigation)
|
|
187
|
+
lines.push(`Mitigation: ${item.mitigation}`);
|
|
188
|
+
if (item.unsupportedCapability)
|
|
189
|
+
lines.push(`Missing capability: ${formatRuntimeTokenLabel(item.unsupportedCapability)}`);
|
|
190
|
+
return lines.join("\n");
|
|
191
|
+
}
|
|
192
|
+
function resolveRuntimeEngineTone(engine, isFallback) {
|
|
193
|
+
if (isFallback)
|
|
194
|
+
return "warning";
|
|
195
|
+
if (!engine)
|
|
196
|
+
return "default";
|
|
197
|
+
const normalized = engine.toLowerCase();
|
|
198
|
+
if (normalized === "dag-ml" || normalized === "dag_ml" || normalized === "dagml")
|
|
199
|
+
return "success";
|
|
200
|
+
if (normalized === "legacy")
|
|
201
|
+
return "muted";
|
|
202
|
+
return "default";
|
|
203
|
+
}
|
|
204
|
+
function normalizeRuntimeEngineToken(value) {
|
|
205
|
+
return value.trim().toLowerCase().replace(/_/g, "-");
|
|
206
|
+
}
|
|
207
|
+
export function buildRuntimeEngineStatus(source) {
|
|
208
|
+
const candidates = runtimeRecordCandidates(source);
|
|
209
|
+
if (candidates.length === 0)
|
|
210
|
+
return null;
|
|
211
|
+
const manifests = runtimeManifestCandidates(candidates);
|
|
212
|
+
const configs = runtimeConfigCandidates(candidates);
|
|
213
|
+
const fallbackPolicies = runtimeFallbackPolicyCandidates([...candidates, ...configs]);
|
|
214
|
+
const actualEngine = readStringFromCandidates(candidates, [
|
|
215
|
+
"engine_actual",
|
|
216
|
+
"actual_engine",
|
|
217
|
+
"engineActual",
|
|
218
|
+
"actualEngine",
|
|
219
|
+
]);
|
|
220
|
+
const envelopeEngine = readStringFromCandidates(manifests, ["engine"])
|
|
221
|
+
?? readStringFromCandidates(candidates.slice(1), ["engine"]);
|
|
222
|
+
const directEngine = readStringFromCandidates(candidates, ["engine"]);
|
|
223
|
+
const requestedEngine = readStringFromCandidates(candidates, [
|
|
224
|
+
"engine_requested",
|
|
225
|
+
"requested_engine",
|
|
226
|
+
"engineRequested",
|
|
227
|
+
"requestedEngine",
|
|
228
|
+
]) ?? readStringFromCandidates(configs, [
|
|
229
|
+
"engine_requested",
|
|
230
|
+
"requested_engine",
|
|
231
|
+
"engineRequested",
|
|
232
|
+
"requestedEngine",
|
|
233
|
+
"engine",
|
|
234
|
+
]) ?? readStringFromCandidates(fallbackPolicies, [
|
|
235
|
+
"engine_requested",
|
|
236
|
+
"requested_engine",
|
|
237
|
+
"engineRequested",
|
|
238
|
+
"requestedEngine",
|
|
239
|
+
]);
|
|
240
|
+
const engine = actualEngine ?? envelopeEngine ?? directEngine;
|
|
241
|
+
if (!engine && !requestedEngine)
|
|
242
|
+
return null;
|
|
243
|
+
const diagnostics = normalizeRuntimeDiagnostics(source);
|
|
244
|
+
const isFallback = Boolean(engine
|
|
245
|
+
&& requestedEngine
|
|
246
|
+
&& normalizeRuntimeEngineToken(engine) !== normalizeRuntimeEngineToken(requestedEngine));
|
|
247
|
+
const engineLabel = engine ? formatRuntimeTokenLabel(engine) : null;
|
|
248
|
+
const requestedEngineLabel = requestedEngine ? formatRuntimeTokenLabel(requestedEngine) : null;
|
|
249
|
+
const badgeLabel = isFallback
|
|
250
|
+
? `${engineLabel} fallback`
|
|
251
|
+
: engineLabel ?? `Requested ${requestedEngineLabel}`;
|
|
252
|
+
const detailLabel = isFallback
|
|
253
|
+
? `Requested ${requestedEngineLabel}`
|
|
254
|
+
: requestedEngineLabel && requestedEngine !== engine
|
|
255
|
+
? `Requested ${requestedEngineLabel}`
|
|
256
|
+
: null;
|
|
257
|
+
return {
|
|
258
|
+
engine,
|
|
259
|
+
engineLabel,
|
|
260
|
+
requestedEngine,
|
|
261
|
+
requestedEngineLabel,
|
|
262
|
+
badgeLabel,
|
|
263
|
+
detailLabel,
|
|
264
|
+
isFallback,
|
|
265
|
+
tone: resolveRuntimeEngineTone(engine, isFallback),
|
|
266
|
+
diagnostics,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
export function formatRuntimeEngineTitle(status) {
|
|
270
|
+
if (!status)
|
|
271
|
+
return null;
|
|
272
|
+
const lines = [
|
|
273
|
+
status.engineLabel ? `Engine: ${status.engineLabel}` : null,
|
|
274
|
+
status.detailLabel,
|
|
275
|
+
status.diagnostics.length > 0
|
|
276
|
+
? `${status.diagnostics.length} diagnostic${status.diagnostics.length === 1 ? "" : "s"}`
|
|
277
|
+
: null,
|
|
278
|
+
].filter((line) => Boolean(line));
|
|
279
|
+
return lines.length > 0 ? lines.join("\n") : null;
|
|
280
|
+
}
|
|
281
|
+
function formatNativeArtifactCount(count) {
|
|
282
|
+
if (count == null)
|
|
283
|
+
return "Native results";
|
|
284
|
+
return `${count} native ${count === 1 ? "artifact" : "artifacts"}`;
|
|
285
|
+
}
|
|
286
|
+
export function buildRuntimeNativeResultsAffordance(input = {}) {
|
|
287
|
+
const rawCount = input.nativeArtifactCount ?? input.artifactCount ?? null;
|
|
288
|
+
const artifactCount = typeof rawCount === "number" && Number.isFinite(rawCount)
|
|
289
|
+
? Math.max(0, Math.floor(rawCount))
|
|
290
|
+
: null;
|
|
291
|
+
const hasNativeResults = input.hasNativeResults === true || (artifactCount != null && artifactCount > 0);
|
|
292
|
+
const exportLabel = input.exportLabel
|
|
293
|
+
?? (input.hasRefit ? "Export Final Model (.n4a)" : "Export Model (.n4a)");
|
|
294
|
+
const exportDescription = input.exportDescription
|
|
295
|
+
?? (input.hasRefit ? "Exports the refit model trained on the full dataset" : null);
|
|
296
|
+
const disabledReason = input.disabledReason
|
|
297
|
+
?? (hasNativeResults ? null : "Native result artifacts are not attached for this run.");
|
|
298
|
+
return {
|
|
299
|
+
hasNativeResults,
|
|
300
|
+
artifactCount,
|
|
301
|
+
nativeResultsLabel: hasNativeResults
|
|
302
|
+
? formatNativeArtifactCount(artifactCount)
|
|
303
|
+
: "Native results not attached",
|
|
304
|
+
exportLabel,
|
|
305
|
+
exportDescription,
|
|
306
|
+
disabled: input.disabled === true || !hasNativeResults || disabledReason != null,
|
|
307
|
+
disabledReason,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=resultMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resultMetadata.js","sourceRoot":"","sources":["../../src/runtime/resultMetadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure runtime/result status display helpers.
|
|
3
|
+
*
|
|
4
|
+
* This module owns the reusable view-model tokens for run and pipeline result
|
|
5
|
+
* status rendering. React components map `icon` onto host-specific icon
|
|
6
|
+
* components; the foundation stays framework-free.
|
|
7
|
+
*/
|
|
8
|
+
export declare const RUNTIME_RESULT_STATUSES: readonly ["queued", "running", "completed", "failed", "partial"];
|
|
9
|
+
export type RuntimeResultStatus = typeof RUNTIME_RESULT_STATUSES[number];
|
|
10
|
+
export type RuntimeResultStatusIcon = "clock" | "refresh" | "check" | "alert" | "partial";
|
|
11
|
+
export type RuntimeResultBadgeVariant = "default" | "secondary";
|
|
12
|
+
export interface RuntimeResultStatusDisplay {
|
|
13
|
+
status: RuntimeResultStatus;
|
|
14
|
+
label: string;
|
|
15
|
+
colorClass: string;
|
|
16
|
+
bgClass: string;
|
|
17
|
+
iconClass: string;
|
|
18
|
+
icon: RuntimeResultStatusIcon;
|
|
19
|
+
badgeVariant: RuntimeResultBadgeVariant;
|
|
20
|
+
isBusy: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface RuntimeResultStatusView extends RuntimeResultStatusDisplay {
|
|
23
|
+
progress: number | null;
|
|
24
|
+
}
|
|
25
|
+
export interface RuntimeResultEmptyMessages {
|
|
26
|
+
queued: string;
|
|
27
|
+
running: string;
|
|
28
|
+
fallback: string;
|
|
29
|
+
}
|
|
30
|
+
export declare const RUNTIME_RESULT_STATUS_DISPLAY: Record<RuntimeResultStatus, RuntimeResultStatusDisplay>;
|
|
31
|
+
export declare function isRuntimeResultStatus(status: string | null | undefined): status is RuntimeResultStatus;
|
|
32
|
+
export declare function resolveRuntimeResultStatus(status: string | null | undefined, fallback?: RuntimeResultStatus): RuntimeResultStatus;
|
|
33
|
+
export declare function getRuntimeResultStatusDisplay(status: string | null | undefined): RuntimeResultStatusDisplay;
|
|
34
|
+
export declare function isBusyRuntimeResultStatus(status: string | null | undefined): boolean;
|
|
35
|
+
export declare function getRuntimeResultStatusProgress(status: string | null | undefined, progress: number | null | undefined): number | null;
|
|
36
|
+
export declare function buildRuntimeResultStatusView(status: string | null | undefined, progress?: number | null): RuntimeResultStatusView;
|
|
37
|
+
export declare function getRuntimeResultEmptyMessage(status: string | null | undefined, messages: RuntimeResultEmptyMessages): string;
|
|
38
|
+
//# sourceMappingURL=statusDisplay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusDisplay.d.ts","sourceRoot":"","sources":["../../src/runtime/statusDisplay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,uBAAuB,kEAAmE,CAAC;AAExG,MAAM,MAAM,mBAAmB,GAAG,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1F,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,WAAW,CAAC;AAEhE,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,YAAY,EAAE,yBAAyB,CAAC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,uBAAwB,SAAQ,0BAA0B;IACzE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAmDxF,CAAC;AAEX,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,IAAI,mBAAmB,CAEtG;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,GAAE,mBAAiC,GAC1C,mBAAmB,CAErB;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,0BAA0B,CAE3G;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpF;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,MAAM,GAAG,IAAI,CAEf;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,uBAAuB,CAKzB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,EAAE,0BAA0B,GACnC,MAAM,CAIR"}
|