@mosaic-media/sdui-react 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/LICENSE +661 -0
- package/README.md +54 -0
- package/dist/components/controls.d.ts +34 -0
- package/dist/components/controls.d.ts.map +1 -0
- package/dist/components/controls.js +93 -0
- package/dist/components/controls.js.map +1 -0
- package/dist/components/definitions.d.ts +3 -0
- package/dist/components/definitions.d.ts.map +1 -0
- package/dist/components/definitions.js +494 -0
- package/dist/components/definitions.js.map +1 -0
- package/dist/components/definitions.layout.d.ts +3 -0
- package/dist/components/definitions.layout.d.ts.map +1 -0
- package/dist/components/definitions.layout.js +197 -0
- package/dist/components/definitions.layout.js.map +1 -0
- package/dist/components/feedback/Unknown.d.ts +4 -0
- package/dist/components/feedback/Unknown.d.ts.map +1 -0
- package/dist/components/feedback/Unknown.js +13 -0
- package/dist/components/feedback/Unknown.js.map +1 -0
- package/dist/components/feedback.d.ts +6 -0
- package/dist/components/feedback.d.ts.map +1 -0
- package/dist/components/feedback.js +10 -0
- package/dist/components/feedback.js.map +1 -0
- package/dist/components/host.d.ts +11 -0
- package/dist/components/host.d.ts.map +1 -0
- package/dist/components/host.js +15 -0
- package/dist/components/host.js.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +60 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layout.d.ts +9 -0
- package/dist/components/layout.d.ts.map +1 -0
- package/dist/components/layout.js +23 -0
- package/dist/components/layout.js.map +1 -0
- package/dist/components/media.d.ts +5 -0
- package/dist/components/media.d.ts.map +1 -0
- package/dist/components/media.js +15 -0
- package/dist/components/media.js.map +1 -0
- package/dist/components/primitives.d.ts +39 -0
- package/dist/components/primitives.d.ts.map +1 -0
- package/dist/components/primitives.js +75 -0
- package/dist/components/primitives.js.map +1 -0
- package/dist/components/shared.d.ts +13 -0
- package/dist/components/shared.d.ts.map +1 -0
- package/dist/components/shared.js +36 -0
- package/dist/components/shared.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/platform.d.ts +12 -0
- package/dist/lib/platform.d.ts.map +1 -0
- package/dist/lib/platform.js +74 -0
- package/dist/lib/platform.js.map +1 -0
- package/dist/sdui/Renderer.d.ts +16 -0
- package/dist/sdui/Renderer.d.ts.map +1 -0
- package/dist/sdui/Renderer.js +40 -0
- package/dist/sdui/Renderer.js.map +1 -0
- package/dist/sdui/ShellProvider.d.ts +24 -0
- package/dist/sdui/ShellProvider.d.ts.map +1 -0
- package/dist/sdui/ShellProvider.js +110 -0
- package/dist/sdui/ShellProvider.js.map +1 -0
- package/dist/sdui/context.d.ts +17 -0
- package/dist/sdui/context.d.ts.map +1 -0
- package/dist/sdui/context.js +18 -0
- package/dist/sdui/context.js.map +1 -0
- package/dist/sdui/registry.d.ts +13 -0
- package/dist/sdui/registry.d.ts.map +1 -0
- package/dist/sdui/registry.js +26 -0
- package/dist/sdui/registry.js.map +1 -0
- package/dist/sdui/style.d.ts +81 -0
- package/dist/sdui/style.d.ts.map +1 -0
- package/dist/sdui/style.js +149 -0
- package/dist/sdui/style.js.map +1 -0
- package/dist/sdui/template.d.ts +19 -0
- package/dist/sdui/template.d.ts.map +1 -0
- package/dist/sdui/template.js +111 -0
- package/dist/sdui/template.js.map +1 -0
- package/dist/sdui/types.d.ts +96 -0
- package/dist/sdui/types.d.ts.map +1 -0
- package/dist/sdui/types.js +4 -0
- package/dist/sdui/types.js.map +1 -0
- package/dist/styles/components.css +772 -0
- package/dist/styles/global.css +80 -0
- package/dist/styles/index.css +5 -0
- package/dist/styles/tokens.css +150 -0
- package/package.json +37 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRuntime } from "../sdui/context";
|
|
3
|
+
import { prop } from "../sdui/registry";
|
|
4
|
+
export function cx(...parts) {
|
|
5
|
+
return parts.filter(Boolean).join(" ");
|
|
6
|
+
}
|
|
7
|
+
/** Read an optional `action` prop off a node and return a click handler. */
|
|
8
|
+
export function useNodeAction(node) {
|
|
9
|
+
const { emit } = useRuntime();
|
|
10
|
+
const action = prop(node, "action", undefined);
|
|
11
|
+
return () => emit(action);
|
|
12
|
+
}
|
|
13
|
+
const PATHS = {
|
|
14
|
+
play: "M8 5v14l11-7z",
|
|
15
|
+
search: "M10 4a6 6 0 104.9 9.5l4.3 4.3 1.4-1.4-4.3-4.3A6 6 0 0010 4zm0 2a4 4 0 110 8 4 4 0 010-8z",
|
|
16
|
+
"chevron-right": "M9 6l6 6-6 6",
|
|
17
|
+
"chevron-down": "M6 9l6 6 6-6",
|
|
18
|
+
star: "M12 3.5l2.6 5.3 5.9.9-4.3 4.1 1 5.8-5.2-2.7-5.2 2.7 1-5.8L3.5 9.7l5.9-.9z",
|
|
19
|
+
plus: "M12 5v14M5 12h14",
|
|
20
|
+
check: "M5 13l4 4L19 7",
|
|
21
|
+
close: "M6 6l12 12M18 6L6 18",
|
|
22
|
+
dots: "M5 12h.01M12 12h.01M19 12h.01",
|
|
23
|
+
info: "M12 8h.01M11 12h1v4h1M12 3a9 9 0 100 18 9 9 0 000-18z",
|
|
24
|
+
warning: "M12 3l9 16H3zM12 10v4M12 17h.01",
|
|
25
|
+
error: "M12 3a9 9 0 100 18 9 9 0 000-18zM9 9l6 6M15 9l-6 6",
|
|
26
|
+
success: "M12 3a9 9 0 100 18 9 9 0 000-18zM8 12l3 3 5-5",
|
|
27
|
+
external: "M14 5h5v5M19 5l-8 8M12 5H6a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1v-6",
|
|
28
|
+
grid: "M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z",
|
|
29
|
+
list: "M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01",
|
|
30
|
+
};
|
|
31
|
+
const FILLED = { play: true, star: true };
|
|
32
|
+
export function Icon({ name, size = "1em", style, className, }) {
|
|
33
|
+
const filled = FILLED[name];
|
|
34
|
+
return (_jsx("svg", { className: cx("msc-icon", className), width: size, height: size, viewBox: "0 0 24 24", fill: filled ? "currentColor" : "none", stroke: filled ? "none" : "currentColor", strokeWidth: filled ? 0 : 1.8, strokeLinecap: "round", strokeLinejoin: "round", style: style, "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: PATHS[name] }) }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/components/shared.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,MAAM,UAAU,EAAE,CAAC,GAAG,KAA+C;IACnE,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAqB,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAoBD,MAAM,KAAK,GAA6B;IACtC,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,0FAA0F;IAClG,eAAe,EAAE,cAAc;IAC/B,cAAc,EAAE,cAAc;IAC9B,IAAI,EAAE,2EAA2E;IACjF,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,gBAAgB;IACvB,KAAK,EAAE,sBAAsB;IAC7B,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE,uDAAuD;IAC7D,OAAO,EAAE,iCAAiC;IAC1C,KAAK,EAAE,oDAAoD;IAC3D,OAAO,EAAE,+CAA+C;IACxD,QAAQ,EAAE,0EAA0E;IACpF,IAAI,EAAE,oDAAoD;IAC1D,IAAI,EAAE,mDAAmD;CAC1D,CAAC;AAEF,MAAM,MAAM,GAAuC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE9E,MAAM,UAAU,IAAI,CAAC,EACnB,IAAI,EACJ,IAAI,GAAG,KAAK,EACZ,KAAK,EACL,SAAS,GAMV;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EACpC,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EACtC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EACxC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAC7B,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,KAAK,EAAE,KAAK,iBACA,MAAM,EAClB,SAAS,EAAC,OAAO,YAEjB,eAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAI,GACpB,CACP,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type { UINode, Action, Tone, ActionResult, PlatformErrorCategory } from "./sdui/types";
|
|
2
|
+
export { register, registerAll, resolve, registeredTypes, prop } from "./sdui/registry";
|
|
3
|
+
export type { NodeComponent, NodeComponentProps } from "./sdui/registry";
|
|
4
|
+
export { RenderNode, Children, Slot, hasSlot } from "./sdui/Renderer";
|
|
5
|
+
export { defineComponent, defineComponents } from "./sdui/template";
|
|
6
|
+
export type { ComponentDefinition } from "./sdui/template";
|
|
7
|
+
export { ShellProvider } from "./sdui/ShellProvider";
|
|
8
|
+
export type { ToastItem } from "./sdui/ShellProvider";
|
|
9
|
+
export { useRuntime, ShellRuntimeContext } from "./sdui/context";
|
|
10
|
+
export type { ShellRuntime, OverlayHandle } from "./sdui/context";
|
|
11
|
+
export { boxToCss, textToCss } from "./sdui/style";
|
|
12
|
+
export type { BoxStyle, TextStyle, ColorToken, SpaceToken, RadiusToken } from "./sdui/style";
|
|
13
|
+
export { installComponents } from "./components";
|
|
14
|
+
export { OverlayHost, ToastHost } from "./components/host";
|
|
15
|
+
export { Icon, cx } from "./components/shared";
|
|
16
|
+
export type { IconName } from "./components/shared";
|
|
17
|
+
export { gql, PlatformError, setAuthToken } from "./lib/platform";
|
|
18
|
+
export type { GraphQLError } from "./lib/platform";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG9F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @mosaic-media/sdui-react — the React runtime for the Mosaic SDUI contract.
|
|
2
|
+
// The web binding: primitives, the registry, the recursive renderer, the
|
|
3
|
+
// definition expander, the runtime context/provider, the token-driven skin, and
|
|
4
|
+
// the built-in component vocabulary. Consumed by the Shell app and by
|
|
5
|
+
// mosaic-storybook. It is a *client implementation* (AGPL-3.0-only), distinct
|
|
6
|
+
// from the technology-agnostic contract in @mosaic-media/sdui.
|
|
7
|
+
//
|
|
8
|
+
// Styles ship separately: import "@mosaic-media/sdui-react/styles.css".
|
|
9
|
+
// Registry.
|
|
10
|
+
export { register, registerAll, resolve, registeredTypes, prop } from "./sdui/registry";
|
|
11
|
+
// Recursive renderer.
|
|
12
|
+
export { RenderNode, Children, Slot, hasSlot } from "./sdui/Renderer";
|
|
13
|
+
// Component definitions (data → components).
|
|
14
|
+
export { defineComponent, defineComponents } from "./sdui/template";
|
|
15
|
+
// Runtime context + provider.
|
|
16
|
+
export { ShellProvider } from "./sdui/ShellProvider";
|
|
17
|
+
export { useRuntime, ShellRuntimeContext } from "./sdui/context";
|
|
18
|
+
// Token-based style vocabulary.
|
|
19
|
+
export { boxToCss, textToCss } from "./sdui/style";
|
|
20
|
+
// The built-in component vocabulary (primitives + definitions).
|
|
21
|
+
export { installComponents } from "./components";
|
|
22
|
+
export { OverlayHost, ToastHost } from "./components/host";
|
|
23
|
+
export { Icon, cx } from "./components/shared";
|
|
24
|
+
// GraphQL client used by ShellProvider to run invoke/query actions.
|
|
25
|
+
export { gql, PlatformError, setAuthToken } from "./lib/platform";
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,yEAAyE;AACzE,gFAAgF;AAChF,sEAAsE;AACtE,8EAA8E;AAC9E,+DAA+D;AAC/D,EAAE;AACF,wEAAwE;AAKxE,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGxF,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEtE,6CAA6C;AAC7C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,8BAA8B;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGjE,gCAAgC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGnD,gEAAgE;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAG/C,oEAAoE;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PlatformErrorCategory } from "../sdui/types";
|
|
2
|
+
export interface GraphQLError {
|
|
3
|
+
category: PlatformErrorCategory;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class PlatformError extends Error {
|
|
7
|
+
category: PlatformErrorCategory;
|
|
8
|
+
constructor(category: PlatformErrorCategory, message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare function setAuthToken(token: string | null): void;
|
|
11
|
+
export declare function gql<T = unknown>(query: string, variables?: Record<string, unknown>): Promise<T>;
|
|
12
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/lib/platform.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,EAAE,qBAAqB,CAAC;gBACpB,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM;CAK7D;AASD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,QAEhD;AAED,wBAAsB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,CAAC,CAAC,CA4BZ"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// SPDX-FileCopyrightText: 2026 the Mosaic authors
|
|
3
|
+
const ENDPOINT = "/graphql";
|
|
4
|
+
export class PlatformError extends Error {
|
|
5
|
+
constructor(category, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.category = category;
|
|
8
|
+
this.name = "PlatformError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** Session token, if signed in. Kept in memory for the skeleton. */
|
|
12
|
+
let authToken = null;
|
|
13
|
+
export function setAuthToken(token) {
|
|
14
|
+
authToken = token;
|
|
15
|
+
}
|
|
16
|
+
export async function gql(query, variables) {
|
|
17
|
+
let res;
|
|
18
|
+
try {
|
|
19
|
+
res = await fetch(ENDPOINT, {
|
|
20
|
+
method: "POST",
|
|
21
|
+
headers: {
|
|
22
|
+
"content-type": "application/json",
|
|
23
|
+
...(authToken ? { authorization: `Bearer ${authToken}` } : {}),
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify({ query, variables }),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new PlatformError("Unavailable", "Could not reach the Platform.");
|
|
30
|
+
}
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
throw new PlatformError(httpToCategory(res.status), `Platform returned ${res.status}.`);
|
|
33
|
+
}
|
|
34
|
+
const body = (await res.json());
|
|
35
|
+
if (body.errors?.length) {
|
|
36
|
+
const first = body.errors[0];
|
|
37
|
+
throw new PlatformError(normaliseCategory(first.extensions?.category), first.message);
|
|
38
|
+
}
|
|
39
|
+
if (body.data === undefined) {
|
|
40
|
+
throw new PlatformError("Internal", "Platform returned no data.");
|
|
41
|
+
}
|
|
42
|
+
return body.data;
|
|
43
|
+
}
|
|
44
|
+
function httpToCategory(status) {
|
|
45
|
+
switch (status) {
|
|
46
|
+
case 400:
|
|
47
|
+
return "InvalidArgument";
|
|
48
|
+
case 401:
|
|
49
|
+
return "Unauthenticated";
|
|
50
|
+
case 403:
|
|
51
|
+
return "PermissionDenied";
|
|
52
|
+
case 404:
|
|
53
|
+
return "NotFound";
|
|
54
|
+
case 409:
|
|
55
|
+
return "Conflict";
|
|
56
|
+
case 503:
|
|
57
|
+
return "Unavailable";
|
|
58
|
+
default:
|
|
59
|
+
return "Internal";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function normaliseCategory(raw) {
|
|
63
|
+
const known = [
|
|
64
|
+
"InvalidArgument",
|
|
65
|
+
"Unauthenticated",
|
|
66
|
+
"PermissionDenied",
|
|
67
|
+
"NotFound",
|
|
68
|
+
"Conflict",
|
|
69
|
+
"Unavailable",
|
|
70
|
+
"Internal",
|
|
71
|
+
];
|
|
72
|
+
return known.find((c) => c === raw) ?? "Internal";
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/lib/platform.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,kDAAkD;AAclD,MAAM,QAAQ,GAAG,UAAU,CAAC;AAO5B,MAAM,OAAO,aAAc,SAAQ,KAAK;IAEtC,YAAY,QAA+B,EAAE,OAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAOD,oEAAoE;AACpE,IAAI,SAAS,GAAkB,IAAI,CAAC;AACpC,MAAM,UAAU,YAAY,CAAC,KAAoB;IAC/C,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,KAAa,EACb,SAAmC;IAEnC,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAC1B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,+BAA+B,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,iBAAiB,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,iBAAiB,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,kBAAkB,CAAC;QAC5B,KAAK,GAAG;YACN,OAAO,UAAU,CAAC;QACpB,KAAK,GAAG;YACN,OAAO,UAAU,CAAC;QACpB,KAAK,GAAG;YACN,OAAO,aAAa,CAAC;QACvB;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY;IACrC,MAAM,KAAK,GAA4B;QACrC,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;QAClB,UAAU;QACV,UAAU;QACV,aAAa;QACb,UAAU;KACX,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { UINode } from "./types";
|
|
2
|
+
export declare function RenderNode({ node }: {
|
|
3
|
+
node: UINode;
|
|
4
|
+
}): import("react").JSX.Element;
|
|
5
|
+
/** Render an ordered list of nodes (a component's `children`). */
|
|
6
|
+
export declare function Children({ nodes }: {
|
|
7
|
+
nodes?: UINode[];
|
|
8
|
+
}): import("react").JSX.Element | null;
|
|
9
|
+
/** Render a named slot, which may hold one node or a list. */
|
|
10
|
+
export declare function Slot({ node, name }: {
|
|
11
|
+
node: UINode;
|
|
12
|
+
name: string;
|
|
13
|
+
}): import("react").JSX.Element | null;
|
|
14
|
+
/** Convenience: does this node have content in a given slot? */
|
|
15
|
+
export declare function hasSlot(node: UINode, name: string): boolean;
|
|
16
|
+
//# sourceMappingURL=Renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../src/sdui/Renderer.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAItC,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAMpD;AAED,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,sCAWvD;AAED,8DAA8D;AAC9D,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,sCAKlE;AAED,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3D"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
// SPDX-FileCopyrightText: 2026 the Mosaic authors
|
|
4
|
+
/*
|
|
5
|
+
* The recursive renderer. Give it a UINode (or a list) and it walks the tree,
|
|
6
|
+
* resolving each node's `type` through the registry. Components pull their own
|
|
7
|
+
* children by calling <Slot> / <Children> so container components control
|
|
8
|
+
* layout, not the renderer.
|
|
9
|
+
*/
|
|
10
|
+
import { Fragment } from "react";
|
|
11
|
+
import { resolve } from "./registry";
|
|
12
|
+
import { Unknown } from "../components/feedback/Unknown";
|
|
13
|
+
export function RenderNode({ node }) {
|
|
14
|
+
const Component = resolve(node.type);
|
|
15
|
+
if (!Component) {
|
|
16
|
+
return _jsx(Unknown, { type: node.type });
|
|
17
|
+
}
|
|
18
|
+
return _jsx(Component, { node: node });
|
|
19
|
+
}
|
|
20
|
+
/** Render an ordered list of nodes (a component's `children`). */
|
|
21
|
+
export function Children({ nodes }) {
|
|
22
|
+
if (!nodes?.length)
|
|
23
|
+
return null;
|
|
24
|
+
return (_jsx(_Fragment, { children: nodes.map((child, i) => (_jsx(Fragment, { children: _jsx(RenderNode, { node: child }) }, child.id ?? i))) }));
|
|
25
|
+
}
|
|
26
|
+
/** Render a named slot, which may hold one node or a list. */
|
|
27
|
+
export function Slot({ node, name }) {
|
|
28
|
+
const slot = node.slots?.[name];
|
|
29
|
+
if (!slot)
|
|
30
|
+
return null;
|
|
31
|
+
if (Array.isArray(slot))
|
|
32
|
+
return _jsx(Children, { nodes: slot });
|
|
33
|
+
return _jsx(RenderNode, { node: slot });
|
|
34
|
+
}
|
|
35
|
+
/** Convenience: does this node have content in a given slot? */
|
|
36
|
+
export function hasSlot(node, name) {
|
|
37
|
+
const slot = node.slots?.[name];
|
|
38
|
+
return Array.isArray(slot) ? slot.length > 0 : Boolean(slot);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=Renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Renderer.js","sourceRoot":"","sources":["../../src/sdui/Renderer.tsx"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,kDAAkD;AAElD;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAoB;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,CAAC;IACtC,CAAC;IACD,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;AACnC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAwB;IACtD,IAAI,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,CACL,4BACG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACvB,KAAC,QAAQ,cACP,KAAC,UAAU,IAAC,IAAI,EAAE,KAAK,GAAI,IADd,KAAK,CAAC,EAAE,IAAI,CAAC,CAEjB,CACZ,CAAC,GACD,CACJ,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAkC;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,GAAI,CAAC;IAC1D,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;AACpC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,IAAY;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { Tone } from "./types";
|
|
3
|
+
import { type OverlayHandle } from "./context";
|
|
4
|
+
export interface ToastItem {
|
|
5
|
+
id: string;
|
|
6
|
+
message: string;
|
|
7
|
+
tone: Tone;
|
|
8
|
+
}
|
|
9
|
+
interface ShellProviderProps {
|
|
10
|
+
screen: string;
|
|
11
|
+
onNavigate: (screen: string, params?: Record<string, unknown>) => void;
|
|
12
|
+
onBack: () => void;
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
/** Render prop for overlays/toasts so the host controls where they mount. */
|
|
15
|
+
render: (ui: {
|
|
16
|
+
overlays: OverlayHandle[];
|
|
17
|
+
toasts: ToastItem[];
|
|
18
|
+
dismissOverlay: () => void;
|
|
19
|
+
dismissToast: (id: string) => void;
|
|
20
|
+
}) => ReactNode;
|
|
21
|
+
}
|
|
22
|
+
export declare function ShellProvider({ screen, onNavigate, onBack, children, render }: ShellProviderProps): import("react").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=ShellProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellProvider.d.ts","sourceRoot":"","sources":["../../src/sdui/ShellProvider.tsx"],"names":[],"mappings":"AASA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,KAAK,EAAwB,IAAI,EAAU,MAAM,SAAS,CAAC;AAClE,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAGpE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvE,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,6EAA6E;IAC7E,MAAM,EAAE,CAAC,EAAE,EAAE;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,IAAI,CAAC;QAAC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,KAAK,SAAS,CAAC;CAC/I;AAKD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB,+BAwHjG"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
// SPDX-FileCopyrightText: 2026 the Mosaic authors
|
|
4
|
+
/*
|
|
5
|
+
* ShellProvider wires the runtime: it owns overlay + toast state, forwards
|
|
6
|
+
* navigation to the host, and interprets every Action kind. It is the one place
|
|
7
|
+
* that talks to the network, so components stay declarative.
|
|
8
|
+
*/
|
|
9
|
+
import { useCallback, useMemo, useState } from "react";
|
|
10
|
+
import { ShellRuntimeContext } from "./context";
|
|
11
|
+
import { gql, PlatformError } from "../lib/platform";
|
|
12
|
+
let seq = 0;
|
|
13
|
+
const nextId = (p) => `${p}-${++seq}`;
|
|
14
|
+
export function ShellProvider({ screen, onNavigate, onBack, children, render }) {
|
|
15
|
+
const [overlays, setOverlays] = useState([]);
|
|
16
|
+
const [toasts, setToasts] = useState([]);
|
|
17
|
+
const pushToast = useCallback((message, tone = "neutral") => {
|
|
18
|
+
const id = nextId("toast");
|
|
19
|
+
setToasts((t) => [...t, { id, message, tone }]);
|
|
20
|
+
// Auto-dismiss; reduced-motion users still get the removal.
|
|
21
|
+
window.setTimeout(() => setToasts((t) => t.filter((x) => x.id !== id)), 4200);
|
|
22
|
+
}, []);
|
|
23
|
+
const dismissToast = useCallback((id) => {
|
|
24
|
+
setToasts((t) => t.filter((x) => x.id !== id));
|
|
25
|
+
}, []);
|
|
26
|
+
const dismissOverlay = useCallback(() => {
|
|
27
|
+
setOverlays((o) => o.slice(0, -1));
|
|
28
|
+
}, []);
|
|
29
|
+
const dispatch = useCallback(async (action) => {
|
|
30
|
+
switch (action.kind) {
|
|
31
|
+
case "navigate":
|
|
32
|
+
onNavigate(action.screen, action.params);
|
|
33
|
+
return { ok: true };
|
|
34
|
+
case "back":
|
|
35
|
+
onBack();
|
|
36
|
+
return { ok: true };
|
|
37
|
+
case "openUrl": {
|
|
38
|
+
// Only allow http(s) — never interpret server-supplied javascript: etc.
|
|
39
|
+
try {
|
|
40
|
+
const u = new URL(action.url);
|
|
41
|
+
if (u.protocol === "http:" || u.protocol === "https:") {
|
|
42
|
+
window.open(u.href, "_blank", "noopener,noreferrer");
|
|
43
|
+
return { ok: true };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
/* fall through */
|
|
48
|
+
}
|
|
49
|
+
pushToast("Blocked an unsafe link.", "warning");
|
|
50
|
+
return { ok: false, error: { category: "InvalidArgument", message: "Unsafe URL" } };
|
|
51
|
+
}
|
|
52
|
+
case "openOverlay": {
|
|
53
|
+
const handle = {
|
|
54
|
+
id: nextId("overlay"),
|
|
55
|
+
surface: action.surface ?? "modal",
|
|
56
|
+
node: action.node,
|
|
57
|
+
};
|
|
58
|
+
setOverlays((o) => [...o, handle]);
|
|
59
|
+
return { ok: true };
|
|
60
|
+
}
|
|
61
|
+
case "closeOverlay":
|
|
62
|
+
dismissOverlay();
|
|
63
|
+
return { ok: true };
|
|
64
|
+
case "toast":
|
|
65
|
+
pushToast(action.message, action.tone ?? "neutral");
|
|
66
|
+
return { ok: true };
|
|
67
|
+
case "playPart":
|
|
68
|
+
// Playback resolution is a future module (Remote Media). For the
|
|
69
|
+
// skeleton we acknowledge the intent.
|
|
70
|
+
pushToast(`Play requested for part ${action.partId}`, "accent");
|
|
71
|
+
return { ok: true };
|
|
72
|
+
case "invoke":
|
|
73
|
+
case "query": {
|
|
74
|
+
const document = action.kind === "invoke"
|
|
75
|
+
? `mutation Shell($input: JSON) { ${action.mutation}(input: $input) }`
|
|
76
|
+
: action.query;
|
|
77
|
+
const variables = action.kind === "invoke" ? { input: action.input } : action.variables;
|
|
78
|
+
try {
|
|
79
|
+
const data = await gql(document, variables);
|
|
80
|
+
return { ok: true, data };
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
const err = e instanceof PlatformError
|
|
84
|
+
? { category: e.category, message: e.message }
|
|
85
|
+
: { category: "Internal", message: "Unexpected error" };
|
|
86
|
+
pushToast(err.message, "danger");
|
|
87
|
+
return { ok: false, error: err };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
case "sequence": {
|
|
91
|
+
let last = { ok: true };
|
|
92
|
+
for (const a of action.actions) {
|
|
93
|
+
last = await dispatch(a);
|
|
94
|
+
if (!last.ok)
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
return last;
|
|
98
|
+
}
|
|
99
|
+
default:
|
|
100
|
+
return { ok: false, error: { category: "InvalidArgument", message: "Unknown action" } };
|
|
101
|
+
}
|
|
102
|
+
}, [onNavigate, onBack, dismissOverlay, pushToast]);
|
|
103
|
+
const emit = useCallback((action) => {
|
|
104
|
+
if (action)
|
|
105
|
+
void dispatch(action);
|
|
106
|
+
}, [dispatch]);
|
|
107
|
+
const runtime = useMemo(() => ({ dispatch, emit, screen }), [dispatch, emit, screen]);
|
|
108
|
+
return (_jsxs(ShellRuntimeContext.Provider, { value: runtime, children: [children, render({ overlays, toasts, dismissOverlay, dismissToast })] }));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=ShellProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellProvider.js","sourceRoot":"","sources":["../../src/sdui/ShellProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Action, ActionResult, UINode } from "./types";
|
|
2
|
+
export interface OverlayHandle {
|
|
3
|
+
id: string;
|
|
4
|
+
surface: "modal" | "sheet" | "drawer";
|
|
5
|
+
node: UINode;
|
|
6
|
+
}
|
|
7
|
+
export interface ShellRuntime {
|
|
8
|
+
/** Interpret an action envelope. Network kinds resolve asynchronously. */
|
|
9
|
+
dispatch: (action: Action) => Promise<ActionResult>;
|
|
10
|
+
/** Convenience for the very common onClick case. */
|
|
11
|
+
emit: (action?: Action) => void;
|
|
12
|
+
/** Current screen name, for highlighting nav. */
|
|
13
|
+
screen: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const ShellRuntimeContext: import("react").Context<ShellRuntime | null>;
|
|
16
|
+
export declare function useRuntime(): ShellRuntime;
|
|
17
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/sdui/context.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,oDAAoD;IACpD,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,8CAA2C,CAAC;AAE5E,wBAAgB,UAAU,IAAI,YAAY,CAMzC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// SPDX-FileCopyrightText: 2026 the Mosaic authors
|
|
3
|
+
/*
|
|
4
|
+
* Runtime context handed to every rendered component: how to dispatch actions,
|
|
5
|
+
* and access to whatever ambient services the Shell provides (navigation,
|
|
6
|
+
* overlays, toasts). Components stay pure — they emit Actions, they don't reach
|
|
7
|
+
* for the network themselves.
|
|
8
|
+
*/
|
|
9
|
+
import { createContext, useContext } from "react";
|
|
10
|
+
export const ShellRuntimeContext = createContext(null);
|
|
11
|
+
export function useRuntime() {
|
|
12
|
+
const ctx = useContext(ShellRuntimeContext);
|
|
13
|
+
if (!ctx) {
|
|
14
|
+
throw new Error("useRuntime must be used within a <ShellProvider>");
|
|
15
|
+
}
|
|
16
|
+
return ctx;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/sdui/context.tsx"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,kDAAkD;AAElD;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAkBlD,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAsB,IAAI,CAAC,CAAC;AAE5E,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ComponentType } from "react";
|
|
2
|
+
import type { UINode } from "./types";
|
|
3
|
+
export interface NodeComponentProps {
|
|
4
|
+
node: UINode;
|
|
5
|
+
}
|
|
6
|
+
export type NodeComponent = ComponentType<NodeComponentProps>;
|
|
7
|
+
export declare function register(type: string, component: NodeComponent): void;
|
|
8
|
+
export declare function registerAll(entries: Record<string, NodeComponent>): void;
|
|
9
|
+
export declare function resolve(type: string): NodeComponent | undefined;
|
|
10
|
+
export declare function registeredTypes(): string[];
|
|
11
|
+
/** Read a typed prop off a node with a fallback. Keeps components terse. */
|
|
12
|
+
export declare function prop<T>(node: UINode, key: string, fallback: T): T;
|
|
13
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/sdui/registry.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,CAKrE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAIxE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE/D;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED,4EAA4E;AAC5E,wBAAgB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAGjE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// SPDX-FileCopyrightText: 2026 the Mosaic authors
|
|
3
|
+
const registry = new Map();
|
|
4
|
+
export function register(type, component) {
|
|
5
|
+
if (registry.has(type)) {
|
|
6
|
+
console.warn(`[sdui] re-registering component type "${type}"`);
|
|
7
|
+
}
|
|
8
|
+
registry.set(type, component);
|
|
9
|
+
}
|
|
10
|
+
export function registerAll(entries) {
|
|
11
|
+
for (const [type, component] of Object.entries(entries)) {
|
|
12
|
+
register(type, component);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function resolve(type) {
|
|
16
|
+
return registry.get(type);
|
|
17
|
+
}
|
|
18
|
+
export function registeredTypes() {
|
|
19
|
+
return [...registry.keys()].sort();
|
|
20
|
+
}
|
|
21
|
+
/** Read a typed prop off a node with a fallback. Keeps components terse. */
|
|
22
|
+
export function prop(node, key, fallback) {
|
|
23
|
+
const v = node.props?.[key];
|
|
24
|
+
return (v === undefined ? fallback : v);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sdui/registry.tsx"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,kDAAkD;AAsBlD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;AAElD,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,SAAwB;IAC7D,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,yCAAyC,IAAI,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAsC;IAChE,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,IAAI,CAAI,IAAY,EAAE,GAAW,EAAE,QAAW;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAO,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
export type SpaceToken = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
|
3
|
+
export type RadiusToken = "sm" | "md" | "lg" | "xl" | "pill";
|
|
4
|
+
export type ShadowToken = "1" | "2" | "3";
|
|
5
|
+
export type TextVariant = "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
|
|
6
|
+
export type Weight = "regular" | "medium" | "bold";
|
|
7
|
+
export type ColorToken = "bg" | "surface" | "surface-raised" | "surface-overlay" | "text" | "text-muted" | "text-faint" | "text-on-accent" | "accent" | "accent-hover" | "accent-quiet" | "success" | "warning" | "danger" | "info" | "success-quiet" | "warning-quiet" | "danger-quiet" | "info-quiet" | "rating" | "border" | "border-strong";
|
|
8
|
+
export type Align = "start" | "center" | "end" | "stretch" | "baseline";
|
|
9
|
+
export type Justify = "start" | "center" | "end" | "between" | "around";
|
|
10
|
+
export type Dimension = number | "full" | "auto" | `${number}%`;
|
|
11
|
+
export type GradientStop = ColorToken | "transparent";
|
|
12
|
+
/** Layout + box styling for the Box primitive. All values are tokens/enums. */
|
|
13
|
+
export interface BoxStyle {
|
|
14
|
+
/** Layout mode. "grid" enables the grid-* fields (Flutter: GridView). */
|
|
15
|
+
layout?: "flex" | "grid";
|
|
16
|
+
direction?: "row" | "column";
|
|
17
|
+
gap?: SpaceToken;
|
|
18
|
+
align?: Align;
|
|
19
|
+
justify?: Justify;
|
|
20
|
+
wrap?: boolean;
|
|
21
|
+
/** grid: responsive auto-fill columns of at least this width (px). */
|
|
22
|
+
gridMin?: number;
|
|
23
|
+
/** grid: flow direction — "column" makes a horizontal rail. */
|
|
24
|
+
gridFlow?: "row" | "column";
|
|
25
|
+
/** grid: fixed track size for a rail (px). */
|
|
26
|
+
gridAutoColumns?: number;
|
|
27
|
+
/** Horizontal scroll + snap, for carousels. */
|
|
28
|
+
overflowX?: "auto" | "hidden" | "visible";
|
|
29
|
+
snap?: "x" | "y";
|
|
30
|
+
snapAlign?: "start" | "center";
|
|
31
|
+
p?: SpaceToken;
|
|
32
|
+
px?: SpaceToken;
|
|
33
|
+
py?: SpaceToken;
|
|
34
|
+
pt?: SpaceToken;
|
|
35
|
+
pr?: SpaceToken;
|
|
36
|
+
pb?: SpaceToken;
|
|
37
|
+
pl?: SpaceToken;
|
|
38
|
+
bg?: ColorToken;
|
|
39
|
+
/** Linear gradient background (Flutter-portable). Overrides `bg` if both set. */
|
|
40
|
+
bgGradient?: {
|
|
41
|
+
from: GradientStop;
|
|
42
|
+
to: GradientStop;
|
|
43
|
+
angle?: number;
|
|
44
|
+
};
|
|
45
|
+
color?: ColorToken;
|
|
46
|
+
radius?: RadiusToken;
|
|
47
|
+
border?: boolean;
|
|
48
|
+
borderColor?: ColorToken;
|
|
49
|
+
width?: Dimension;
|
|
50
|
+
height?: Dimension;
|
|
51
|
+
minWidth?: Dimension;
|
|
52
|
+
maxWidth?: Dimension;
|
|
53
|
+
minHeight?: Dimension;
|
|
54
|
+
aspectRatio?: string;
|
|
55
|
+
flex?: number;
|
|
56
|
+
grow?: boolean;
|
|
57
|
+
position?: "relative" | "absolute";
|
|
58
|
+
top?: SpaceToken;
|
|
59
|
+
right?: SpaceToken;
|
|
60
|
+
bottom?: SpaceToken;
|
|
61
|
+
left?: SpaceToken;
|
|
62
|
+
overflow?: "hidden" | "auto" | "visible";
|
|
63
|
+
shadow?: ShadowToken;
|
|
64
|
+
opacity?: number;
|
|
65
|
+
}
|
|
66
|
+
export interface TextStyle {
|
|
67
|
+
variant?: TextVariant;
|
|
68
|
+
weight?: Weight;
|
|
69
|
+
color?: ColorToken;
|
|
70
|
+
align?: "start" | "center" | "end";
|
|
71
|
+
transform?: "uppercase" | "capitalize" | "none";
|
|
72
|
+
italic?: boolean;
|
|
73
|
+
mono?: boolean;
|
|
74
|
+
tabular?: boolean;
|
|
75
|
+
lineClamp?: number;
|
|
76
|
+
}
|
|
77
|
+
/** Translate a token-based BoxStyle into concrete web CSS. */
|
|
78
|
+
export declare function boxToCss(s: BoxStyle): CSSProperties;
|
|
79
|
+
/** Translate a token-based TextStyle into concrete web CSS. */
|
|
80
|
+
export declare function textToCss(s: TextStyle): CSSProperties;
|
|
81
|
+
//# sourceMappingURL=style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/sdui/style.ts"],"names":[],"mappings":"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"}
|