@mosaic-media/sdui-react 0.1.0 → 0.1.4
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 +75 -1
- package/dist/components/controls.d.ts +5 -0
- package/dist/components/controls.d.ts.map +1 -1
- package/dist/components/controls.js +28 -4
- package/dist/components/controls.js.map +1 -1
- package/dist/components/definitions.d.ts.map +1 -1
- package/dist/components/definitions.js +60 -18
- package/dist/components/definitions.js.map +1 -1
- package/dist/components/definitions.layout.d.ts.map +1 -1
- package/dist/components/definitions.layout.js +8 -6
- package/dist/components/definitions.layout.js.map +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +6 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/media.d.ts.map +1 -1
- package/dist/components/media.js +3 -1
- package/dist/components/media.js.map +1 -1
- package/dist/components/primitives.d.ts +7 -1
- package/dist/components/primitives.d.ts.map +1 -1
- package/dist/components/primitives.js +98 -4
- package/dist/components/primitives.js.map +1 -1
- package/dist/components/shared.d.ts +1 -1
- package/dist/components/shared.d.ts.map +1 -1
- package/dist/components/shared.js +5 -0
- package/dist/components/shared.js.map +1 -1
- package/dist/components/shell.d.ts +12 -0
- package/dist/components/shell.d.ts.map +1 -0
- package/dist/components/shell.js +34 -0
- package/dist/components/shell.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/sdui/ShellProvider.d.ts +6 -1
- package/dist/sdui/ShellProvider.d.ts.map +1 -1
- package/dist/sdui/ShellProvider.js +24 -9
- package/dist/sdui/ShellProvider.js.map +1 -1
- package/dist/sdui/artlight.d.ts +18 -0
- package/dist/sdui/artlight.d.ts.map +1 -0
- package/dist/sdui/artlight.js +196 -0
- package/dist/sdui/artlight.js.map +1 -0
- package/dist/sdui/context.d.ts +4 -0
- package/dist/sdui/context.d.ts.map +1 -1
- package/dist/sdui/context.js.map +1 -1
- package/dist/sdui/style.d.ts +3 -0
- package/dist/sdui/style.d.ts.map +1 -1
- package/dist/sdui/style.js +4 -0
- package/dist/sdui/style.js.map +1 -1
- package/dist/styles/components.css +168 -30
- package/dist/styles/global.css +7 -1
- package/dist/styles/tokens.css +135 -45
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/components/media.tsx"],"names":[],"mappings":";AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAoB;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAwD,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACjG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/components/media.tsx"],"names":[],"mappings":";AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAoB;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAwD,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACjG,2EAA2E;IAC3E,6EAA6E;IAC7E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAqB,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9G,OAAO,CACL,cAAK,SAAS,EAAC,aAAa,EAAC,IAAI,EAAC,SAAS,YACxC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,iBAEE,IAAI,EAAC,KAAK,mBACK,MAAM,KAAK,CAAC,CAAC,EAAE,EAC9B,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,MAAM,KAAK,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC,EAClE,OAAO,EAAE,GAAG,EAAE;gBACZ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACjB,CAAC,YAEA,CAAC,CAAC,KAAK,IATH,CAAC,CAAC,EAAE,CAUF,CACV,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -7,7 +7,13 @@ export declare function Box({ node }: {
|
|
|
7
7
|
export declare function Text({ node }: {
|
|
8
8
|
node: UINode;
|
|
9
9
|
}): import("react").JSX.Element;
|
|
10
|
-
/** Image — falls back to a typed placeholder when `src` is absent.
|
|
10
|
+
/** Image — falls back to a typed placeholder when `src` is absent.
|
|
11
|
+
*
|
|
12
|
+
* Opt-in `artLight` makes the image a source for the ambient "refraction"
|
|
13
|
+
* wash (sdui/artlight.ts): "ambient" installs its palette as the screen's
|
|
14
|
+
* standing light (the hero backdrop); "focus" lends its palette while hovered
|
|
15
|
+
* (a poster), reverting on leave. Sampling is web-only and best-effort — if the
|
|
16
|
+
* canvas is unreadable it does nothing and the fallback duo stays. */
|
|
11
17
|
export declare function Image({ node }: {
|
|
12
18
|
node: UINode;
|
|
13
19
|
}): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AAQpD,sEAAsE;AACtE,wBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAO7C;AAED,iFAAiF;AACjF,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAS9C;AAED;;;;;;uEAMuE;AACvE,wBAAgB,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAoG/C;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAMvD;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAmBnD;AAED,8CAA8C;AAC9C,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAUhD;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAElD;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAEhD"}
|
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
// SPDX-FileCopyrightText: 2026 the Mosaic authors
|
|
4
|
+
/*
|
|
5
|
+
* The primitive layer — the irreducible building blocks from which every
|
|
6
|
+
* presentational component (and every module-defined component) is composed.
|
|
7
|
+
* They take the token-based style vocabulary from sdui/style.ts and nothing
|
|
8
|
+
* else, so the same node tree renders on any client.
|
|
9
|
+
*
|
|
10
|
+
* Box / Text / Image / Icon / Spacer are pure presentation. Pressable is the
|
|
11
|
+
* one interactive primitive here: it carries an Action and a built-in hover
|
|
12
|
+
* affordance, because interaction feedback (not arbitrary :hover styling) is a
|
|
13
|
+
* primitive's job. Fragment / Outlet exist for the template mechanism.
|
|
14
|
+
*/
|
|
15
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
16
|
import { prop } from "../sdui/registry";
|
|
3
17
|
import { Children } from "../sdui/Renderer";
|
|
4
18
|
import { useRuntime } from "../sdui/context";
|
|
5
19
|
import { boxToCss, textToCss } from "../sdui/style";
|
|
20
|
+
import { sampleArtColors, setAmbientArt, focusArt, releaseArt, clearAmbientArt } from "../sdui/artlight";
|
|
6
21
|
import { cx, Icon } from "./shared";
|
|
7
22
|
/** Box — the workhorse container: flex layout + token box styling. */
|
|
8
23
|
export function Box({ node }) {
|
|
@@ -15,18 +30,97 @@ export function Text({ node }) {
|
|
|
15
30
|
const style = prop(node, "style", {});
|
|
16
31
|
return (_jsxs("span", { style: textToCss(style), children: [value, node.children ? _jsx(Children, { nodes: node.children }) : null] }));
|
|
17
32
|
}
|
|
18
|
-
/** Image — falls back to a typed placeholder when `src` is absent.
|
|
33
|
+
/** Image — falls back to a typed placeholder when `src` is absent.
|
|
34
|
+
*
|
|
35
|
+
* Opt-in `artLight` makes the image a source for the ambient "refraction"
|
|
36
|
+
* wash (sdui/artlight.ts): "ambient" installs its palette as the screen's
|
|
37
|
+
* standing light (the hero backdrop); "focus" lends its palette while hovered
|
|
38
|
+
* (a poster), reverting on leave. Sampling is web-only and best-effort — if the
|
|
39
|
+
* canvas is unreadable it does nothing and the fallback duo stays. */
|
|
19
40
|
export function Image({ node }) {
|
|
20
41
|
const src = prop(node, "src", undefined);
|
|
21
42
|
const alt = prop(node, "alt", "");
|
|
22
43
|
const fit = prop(node, "fit", "cover");
|
|
23
44
|
const placeholder = prop(node, "placeholder", undefined);
|
|
45
|
+
const placeholderMode = prop(node, "placeholderMode", "label");
|
|
46
|
+
const artLight = prop(node, "artLight", undefined);
|
|
24
47
|
const style = prop(node, "style", {});
|
|
25
48
|
const css = boxToCss(style);
|
|
26
|
-
|
|
27
|
-
|
|
49
|
+
const imgRef = useRef(null);
|
|
50
|
+
const palette = useRef(null);
|
|
51
|
+
// artLight needs a CORS-anonymous request so the canvas is readable, but a CDN
|
|
52
|
+
// that sends no CORS headers then fails the request and the image never shows.
|
|
53
|
+
// On such a failure we retry once without crossOrigin: the image displays, and
|
|
54
|
+
// only its ambient sampling is lost.
|
|
55
|
+
const [corsBlocked, setCorsBlocked] = useState(false);
|
|
56
|
+
// A src that fails even without crossOrigin (a genuine 404 / missing art)
|
|
57
|
+
// falls through to the typed placeholder rather than a broken-image icon.
|
|
58
|
+
const [failed, setFailed] = useState(false);
|
|
59
|
+
const sample = () => {
|
|
60
|
+
const el = imgRef.current;
|
|
61
|
+
if (!el || !el.complete || el.naturalWidth === 0)
|
|
62
|
+
return null;
|
|
63
|
+
if (!palette.current)
|
|
64
|
+
palette.current = sampleArtColors(el);
|
|
65
|
+
return palette.current;
|
|
66
|
+
};
|
|
67
|
+
// The ambient source owns the standing light for as long as it's mounted.
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (artLight !== "ambient")
|
|
70
|
+
return;
|
|
71
|
+
const el = imgRef.current;
|
|
72
|
+
if (el?.complete)
|
|
73
|
+
setAmbientArt(sample());
|
|
74
|
+
return () => clearAmbientArt();
|
|
75
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
|
+
}, [artLight, src]);
|
|
77
|
+
if (!src || failed) {
|
|
78
|
+
// "label" shows a truncated type label (poster placeholders); "initials"
|
|
79
|
+
// condenses a name to 1–2 letters (avatar-sized placeholders).
|
|
80
|
+
const text = placeholder === undefined
|
|
81
|
+
? undefined
|
|
82
|
+
: placeholderMode === "initials"
|
|
83
|
+
? placeholder
|
|
84
|
+
.split(/\s+/)
|
|
85
|
+
.filter(Boolean)
|
|
86
|
+
.slice(0, 2)
|
|
87
|
+
.map((w) => w[0])
|
|
88
|
+
.join("")
|
|
89
|
+
.toUpperCase()
|
|
90
|
+
: placeholder.slice(0, 14);
|
|
91
|
+
return (_jsx("div", { className: "msc-prim-placeholder", style: { ...css, alignItems: "center", justifyContent: "center" }, children: text && _jsx("span", { children: text }) }));
|
|
28
92
|
}
|
|
29
|
-
|
|
93
|
+
const useCors = artLight !== undefined && !corsBlocked;
|
|
94
|
+
const artProps = artLight
|
|
95
|
+
? {
|
|
96
|
+
...(useCors ? { crossOrigin: "anonymous" } : {}),
|
|
97
|
+
onLoad: () => {
|
|
98
|
+
palette.current = null;
|
|
99
|
+
if (artLight === "ambient")
|
|
100
|
+
setAmbientArt(sample());
|
|
101
|
+
},
|
|
102
|
+
...(artLight === "focus"
|
|
103
|
+
? {
|
|
104
|
+
onMouseEnter: () => {
|
|
105
|
+
const c = sample();
|
|
106
|
+
if (c)
|
|
107
|
+
focusArt(c);
|
|
108
|
+
},
|
|
109
|
+
onMouseLeave: () => releaseArt(),
|
|
110
|
+
}
|
|
111
|
+
: {}),
|
|
112
|
+
}
|
|
113
|
+
: {};
|
|
114
|
+
// On load failure: first drop crossOrigin (a CORS-less CDN blocks the
|
|
115
|
+
// anonymous request — the image is fine, the request isn't), then, if a plain
|
|
116
|
+
// load still fails, give up to the placeholder.
|
|
117
|
+
const onError = () => {
|
|
118
|
+
if (useCors)
|
|
119
|
+
setCorsBlocked(true);
|
|
120
|
+
else
|
|
121
|
+
setFailed(true);
|
|
122
|
+
};
|
|
123
|
+
return (_jsx("img", { ref: imgRef, src: src, alt: alt, loading: artLight === "ambient" ? "eager" : "lazy", style: { ...css, display: "block", objectFit: fit }, onError: onError, ...artProps }, useCors ? "cors" : "plain"));
|
|
30
124
|
}
|
|
31
125
|
/** Icon — a glyph from the built-in set, tokenised colour + size. */
|
|
32
126
|
export function IconPrimitive({ node }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/components/primitives.tsx"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,kDAAkD;AAElD;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAmE,MAAM,eAAe,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAY,MAAM,kBAAkB,CAAC;AACnH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAiB,MAAM,UAAU,CAAC;AAEnD,sEAAsE;AACtE,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAoB;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAW,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,CACL,cAAK,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,YACzB,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAI,GAC9B,CACP,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAoB;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAS,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAY,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,CACL,gBAAM,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,aAC1B,KAAK,EACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAI,CAAC,CAAC,CAAC,IAAI,IACrD,CACR,CAAC;AACJ,CAAC;AAED;;;;;;uEAMuE;AACvE,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,EAAoB;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAqB,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAS,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAsB,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAqB,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,IAAI,CAAuB,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,IAAI,CAAkC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,CAAW,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAe,IAAI,CAAC,CAAC;IAC3C,+EAA+E;IAC/E,+EAA+E;IAC/E,+EAA+E;IAC/E,qCAAqC;IACrC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAC1B,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC,CAAC;IAEF,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO;QACnC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,EAAE,QAAQ;YAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;QAC/B,uDAAuD;IACzD,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAEpB,IAAI,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;QACnB,yEAAyE;QACzE,+DAA+D;QAC/D,MAAM,IAAI,GACR,WAAW,KAAK,SAAS;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,eAAe,KAAK,UAAU;gBAC9B,CAAC,CAAC,WAAW;qBACR,KAAK,CAAC,KAAK,CAAC;qBACZ,MAAM,CAAC,OAAO,CAAC;qBACf,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;qBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAChB,IAAI,CAAC,EAAE,CAAC;qBACR,WAAW,EAAE;gBAClB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,YACpG,IAAI,IAAI,yBAAO,IAAI,GAAQ,GACxB,CACP,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC;IACvD,MAAM,QAAQ,GAAG,QAAQ;QACvB,CAAC,CAAC;YACE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,EAAE,GAAG,EAAE;gBACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvB,IAAI,QAAQ,KAAK,SAAS;oBAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,GAAG,CAAC,QAAQ,KAAK,OAAO;gBACtB,CAAC,CAAC;oBACE,YAAY,EAAE,GAAG,EAAE;wBACjB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;wBACnB,IAAI,CAAC;4BAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC;oBACD,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;iBACjC;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,sEAAsE;IACtE,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,OAAO;YAAE,cAAc,CAAC,IAAI,CAAC,CAAC;;YAC7B,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CACL,cAGE,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAClD,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,EACnD,OAAO,EAAE,OAAO,KACZ,QAAQ,IAPP,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAQ/B,CACH,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAoB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAW,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAkB,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAyB,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1E,MAAM,KAAK,GAA8B,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,OAAO,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AACxD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAoB;IAClD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAW,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAqB,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAU,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAU,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAqB,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACjE,OAAO,CACL,iBACE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,IAAI,IAAI,qBAAqB,CAAC,EAC7D,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EACtB,QAAQ,EAAE,QAAQ,gBACN,KAAK,EACjB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAE3B,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAI,GAC3B,CACV,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,MAAM,CAAC,EAAE,IAAI,EAAoB;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAyB,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAU,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,GAAG,CAAC;QACxD,KAAK,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,GAAG,CAAC;IAC3D,CAAC;IACD,OAAO,cAAK,KAAK,EAAE,KAAK,wBAAgB,CAAC;AAC3C,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAoB;IACjD,OAAO,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAI,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,EAAE,IAAI,EAAoB;IAC/C,OAAO,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAI,CAAC;AAC5C,CAAC"}
|
|
@@ -3,7 +3,7 @@ import type { UINode } from "../sdui/types";
|
|
|
3
3
|
export declare function cx(...parts: Array<string | false | null | undefined>): string;
|
|
4
4
|
/** Read an optional `action` prop off a node and return a click handler. */
|
|
5
5
|
export declare function useNodeAction(node: UINode): () => void;
|
|
6
|
-
export type IconName = "play" | "search" | "chevron-right" | "chevron-down" | "star" | "plus" | "check" | "close" | "dots" | "info" | "warning" | "error" | "success" | "external" | "grid" | "list";
|
|
6
|
+
export type IconName = "play" | "search" | "chevron-right" | "chevron-left" | "chevron-down" | "star" | "plus" | "check" | "close" | "dots" | "info" | "warning" | "error" | "success" | "external" | "grid" | "list" | "home" | "settings" | "sun" | "moon";
|
|
7
7
|
export declare function Icon({ name, size, style, className, }: {
|
|
8
8
|
name: IconName;
|
|
9
9
|
size?: number | string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/components/shared.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAE7E;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,CAItD;AAED,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,QAAQ,GACR,eAAe,GACf,cAAc,GACd,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,GACV,MAAM,GACN,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/components/shared.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAE7E;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,CAItD;AAED,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,QAAQ,GACR,eAAe,GACf,cAAc,GACd,cAAc,GACd,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,GACV,MAAM,GACN,MAAM,GACN,MAAM,GACN,UAAU,GACV,KAAK,GACL,MAAM,CAAC;AA4BX,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,IAAY,EACZ,KAAK,EACL,SAAS,GACV,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAoBA"}
|
|
@@ -14,6 +14,7 @@ const PATHS = {
|
|
|
14
14
|
play: "M8 5v14l11-7z",
|
|
15
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
16
|
"chevron-right": "M9 6l6 6-6 6",
|
|
17
|
+
"chevron-left": "M15 6l-6 6 6 6",
|
|
17
18
|
"chevron-down": "M6 9l6 6 6-6",
|
|
18
19
|
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
20
|
plus: "M12 5v14M5 12h14",
|
|
@@ -27,6 +28,10 @@ const PATHS = {
|
|
|
27
28
|
external: "M14 5h5v5M19 5l-8 8M12 5H6a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1v-6",
|
|
28
29
|
grid: "M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z",
|
|
29
30
|
list: "M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01",
|
|
31
|
+
home: "M3 11l9-8 9 8M5 10v10h5v-6h4v6h5V10",
|
|
32
|
+
settings: "M3 6h11M18 6h3M16.5 4.5v3M3 12h5M12 12h9M9.5 10.5v3M3 18h11M18 18h3M16.5 16.5v3",
|
|
33
|
+
sun: "M12 8a4 4 0 100 8 4 4 0 000-8zM12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4",
|
|
34
|
+
moon: "M20 14.5A8 8 0 019.5 4 8 8 0 1020 14.5z",
|
|
30
35
|
};
|
|
31
36
|
const FILLED = { play: true, star: true };
|
|
32
37
|
export function Icon({ name, size = "1em", style, className, }) {
|
|
@@ -1 +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;
|
|
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;AAyBD,MAAM,KAAK,GAA6B;IACtC,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,0FAA0F;IAClG,eAAe,EAAE,cAAc;IAC/B,cAAc,EAAE,gBAAgB;IAChC,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;IACzD,IAAI,EAAE,qCAAqC;IAC3C,QAAQ,EAAE,iFAAiF;IAC3F,GAAG,EAAE,oIAAoI;IACzI,IAAI,EAAE,yCAAyC;CAChD,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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UINode } from "../sdui/types";
|
|
2
|
+
/** AppShell — the frame: a sidebar (brand, a "nav" slot, an optional "foot"
|
|
3
|
+
* slot), a "topbar" slot, and a "content" region the current screen fills. */
|
|
4
|
+
export declare function AppShell({ node }: {
|
|
5
|
+
node: UINode;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
/** NavItem — a sidebar navigation button. It emits its action and highlights
|
|
8
|
+
* when the runtime's current screen matches its target. */
|
|
9
|
+
export declare function NavItem({ node }: {
|
|
10
|
+
node: UINode;
|
|
11
|
+
}): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/components/shell.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AAKpD;+EAC+E;AAC/E,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BA2BlD;AAED;4DAC4D;AAC5D,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAkBjD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
// SPDX-FileCopyrightText: 2026 the Mosaic authors
|
|
4
|
+
/*
|
|
5
|
+
* The application frame, server-emitted (ADR 0031). The Shell app owns no
|
|
6
|
+
* layout — it renders whatever AppShell the Platform pushes. These are
|
|
7
|
+
* structural primitives (like Box/Outlet): a named-slot frame the token style
|
|
8
|
+
* system does not express, reusing the chrome CSS in styles/components.css.
|
|
9
|
+
*/
|
|
10
|
+
import { prop } from "../sdui/registry";
|
|
11
|
+
import { Slot, hasSlot } from "../sdui/Renderer";
|
|
12
|
+
import { useRuntime } from "../sdui/context";
|
|
13
|
+
import { Icon } from "./shared";
|
|
14
|
+
/** AppShell — the frame: a sidebar (brand, a "nav" slot, an optional "foot"
|
|
15
|
+
* slot), a "topbar" slot, and a "content" region the current screen fills. */
|
|
16
|
+
export function AppShell({ node }) {
|
|
17
|
+
const title = prop(node, "title", "Mosaic");
|
|
18
|
+
return (_jsxs("div", { className: "msc-app", children: [_jsxs("aside", { className: "msc-sidebar", children: [_jsx("div", { className: "msc-sidebar__brand", children: _jsx("span", { className: "msc-sidebar__name", children: title }) }), _jsx("nav", { className: "msc-sidebar__nav", children: _jsx(Slot, { node: node, name: "nav" }) }), hasSlot(node, "foot") && (_jsx("div", { className: "msc-sidebar__foot", children: _jsx(Slot, { node: node, name: "foot" }) }))] }), _jsxs("div", { className: "msc-main", children: [_jsx("header", { className: "msc-topbar", children: _jsx(Slot, { node: node, name: "topbar" }) }), _jsx("main", { className: "msc-content", children: _jsx(Slot, { node: node, name: "content" }) })] })] }));
|
|
19
|
+
}
|
|
20
|
+
/** NavItem — a sidebar navigation button. It emits its action and highlights
|
|
21
|
+
* when the runtime's current screen matches its target. */
|
|
22
|
+
export function NavItem({ node }) {
|
|
23
|
+
const label = prop(node, "label", "");
|
|
24
|
+
const icon = prop(node, "icon", "info");
|
|
25
|
+
const target = prop(node, "screen", undefined);
|
|
26
|
+
const action = prop(node, "action", undefined);
|
|
27
|
+
const { emit, screen } = useRuntime();
|
|
28
|
+
const active = target !== undefined && screen === target;
|
|
29
|
+
return (_jsxs("button", { className: `msc-navitem${active ? " is-active" : ""}`, onClick: () => {
|
|
30
|
+
if (action)
|
|
31
|
+
emit(action);
|
|
32
|
+
}, children: [_jsx(Icon, { name: icon }), _jsx("span", { children: label })] }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/components/shell.tsx"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,kDAAkD;AAElD;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAiB,MAAM,UAAU,CAAC;AAE/C;+EAC+E;AAC/E,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAoB;IACjD,MAAM,KAAK,GAAG,IAAI,CAAS,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpD,OAAO,CACL,eAAK,SAAS,EAAC,SAAS,aACtB,iBAAO,SAAS,EAAC,aAAa,aAC5B,cAAK,SAAS,EAAC,oBAAoB,YACjC,eAAM,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAQ,GAC9C,EACN,cAAK,SAAS,EAAC,kBAAkB,YAC/B,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,KAAK,GAAG,GAC3B,EACL,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CACxB,cAAK,SAAS,EAAC,mBAAmB,YAChC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,GAAG,GAC5B,CACP,IACK,EACR,eAAK,SAAS,EAAC,UAAU,aACvB,iBAAQ,SAAS,EAAC,YAAY,YAC5B,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,QAAQ,GAAG,GAC3B,EACT,eAAM,SAAS,EAAC,aAAa,YAC3B,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,SAAS,GAAG,GAC9B,IACH,IACF,CACP,CAAC;AACJ,CAAC;AAED;4DAC4D;AAC5D,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAoB;IAChD,MAAM,KAAK,GAAG,IAAI,CAAS,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAW,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAqB,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAqB,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,CAAC;IACzD,OAAO,CACL,kBACE,SAAS,EAAE,cAAc,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EACrD,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,aAED,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,EACpB,yBAAO,KAAK,GAAQ,IACb,CACV,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export { useRuntime, ShellRuntimeContext } from "./sdui/context";
|
|
|
10
10
|
export type { ShellRuntime, OverlayHandle } from "./sdui/context";
|
|
11
11
|
export { boxToCss, textToCss } from "./sdui/style";
|
|
12
12
|
export type { BoxStyle, TextStyle, ColorToken, SpaceToken, RadiusToken } from "./sdui/style";
|
|
13
|
+
export { sampleArtColors, setAmbientArt, focusArt, releaseArt, clearAmbientArt, refreshArtLight } from "./sdui/artlight";
|
|
14
|
+
export type { Rgb } from "./sdui/artlight";
|
|
13
15
|
export { installComponents } from "./components";
|
|
14
16
|
export { OverlayHost, ToastHost } from "./components/host";
|
|
15
17
|
export { Icon, cx } from "./components/shared";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AAI7F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzH,YAAY,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAG3C,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
CHANGED
|
@@ -17,6 +17,9 @@ export { ShellProvider } from "./sdui/ShellProvider";
|
|
|
17
17
|
export { useRuntime, ShellRuntimeContext } from "./sdui/context";
|
|
18
18
|
// Token-based style vocabulary.
|
|
19
19
|
export { boxToCss, textToCss } from "./sdui/style";
|
|
20
|
+
// Art-light: the artwork-driven ambient "refraction" wash. The Image primitive
|
|
21
|
+
// drives it via `artLight`; consumers only need refreshArtLight() on theme change.
|
|
22
|
+
export { sampleArtColors, setAmbientArt, focusArt, releaseArt, clearAmbientArt, refreshArtLight } from "./sdui/artlight";
|
|
20
23
|
// The built-in component vocabulary (primitives + definitions).
|
|
21
24
|
export { installComponents } from "./components";
|
|
22
25
|
export { OverlayHost, ToastHost } from "./components/host";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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"}
|
|
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,+EAA+E;AAC/E,mFAAmF;AACnF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGzH,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"}
|
|
@@ -18,7 +18,12 @@ interface ShellProviderProps {
|
|
|
18
18
|
dismissOverlay: () => void;
|
|
19
19
|
dismissToast: (id: string) => void;
|
|
20
20
|
}) => ReactNode;
|
|
21
|
+
/** Live session (ADR 0032): when present, an Invoke action is sent up the
|
|
22
|
+
* socket instead of run as a one-shot GraphQL mutation, and onInput streams a
|
|
23
|
+
* field value for search-as-you-type. Absent → the request/response path. */
|
|
24
|
+
onInvoke?: (mutation: string, input?: Record<string, unknown>) => void;
|
|
25
|
+
onInput?: (value: string) => void;
|
|
21
26
|
}
|
|
22
|
-
export declare function ShellProvider({ screen, onNavigate, onBack, children, render }: ShellProviderProps): import("react").JSX.Element;
|
|
27
|
+
export declare function ShellProvider({ screen, onNavigate, onBack, children, render, onInvoke, onInput }: ShellProviderProps): import("react").JSX.Element;
|
|
23
28
|
export {};
|
|
24
29
|
//# sourceMappingURL=ShellProvider.d.ts.map
|
|
@@ -1 +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;
|
|
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;IAC9I;;kFAE8E;IAC9E,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAKD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,kBAAkB,+BAuIpH"}
|
|
@@ -11,7 +11,7 @@ import { ShellRuntimeContext } from "./context";
|
|
|
11
11
|
import { gql, PlatformError } from "../lib/platform";
|
|
12
12
|
let seq = 0;
|
|
13
13
|
const nextId = (p) => `${p}-${++seq}`;
|
|
14
|
-
export function ShellProvider({ screen, onNavigate, onBack, children, render }) {
|
|
14
|
+
export function ShellProvider({ screen, onNavigate, onBack, children, render, onInvoke, onInput }) {
|
|
15
15
|
const [overlays, setOverlays] = useState([]);
|
|
16
16
|
const [toasts, setToasts] = useState([]);
|
|
17
17
|
const pushToast = useCallback((message, tone = "neutral") => {
|
|
@@ -69,14 +69,29 @@ export function ShellProvider({ screen, onNavigate, onBack, children, render })
|
|
|
69
69
|
// skeleton we acknowledge the intent.
|
|
70
70
|
pushToast(`Play requested for part ${action.partId}`, "accent");
|
|
71
71
|
return { ok: true };
|
|
72
|
-
case "invoke":
|
|
72
|
+
case "invoke": {
|
|
73
|
+
// In a live session, hand the mutation to the socket; the server runs
|
|
74
|
+
// it and pushes the result (a toast, a re-render).
|
|
75
|
+
if (onInvoke) {
|
|
76
|
+
onInvoke(action.mutation, action.input);
|
|
77
|
+
return { ok: true };
|
|
78
|
+
}
|
|
79
|
+
const document = `mutation Shell($input: JSON) { ${action.mutation}(input: $input) }`;
|
|
80
|
+
try {
|
|
81
|
+
const data = await gql(document, { input: action.input });
|
|
82
|
+
return { ok: true, data };
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
const err = e instanceof PlatformError
|
|
86
|
+
? { category: e.category, message: e.message }
|
|
87
|
+
: { category: "Internal", message: "Unexpected error" };
|
|
88
|
+
pushToast(err.message, "danger");
|
|
89
|
+
return { ok: false, error: err };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
73
92
|
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
93
|
try {
|
|
79
|
-
const data = await gql(
|
|
94
|
+
const data = await gql(action.query, action.variables);
|
|
80
95
|
return { ok: true, data };
|
|
81
96
|
}
|
|
82
97
|
catch (e) {
|
|
@@ -99,12 +114,12 @@ export function ShellProvider({ screen, onNavigate, onBack, children, render })
|
|
|
99
114
|
default:
|
|
100
115
|
return { ok: false, error: { category: "InvalidArgument", message: "Unknown action" } };
|
|
101
116
|
}
|
|
102
|
-
}, [onNavigate, onBack, dismissOverlay, pushToast]);
|
|
117
|
+
}, [onNavigate, onBack, dismissOverlay, pushToast, onInvoke]);
|
|
103
118
|
const emit = useCallback((action) => {
|
|
104
119
|
if (action)
|
|
105
120
|
void dispatch(action);
|
|
106
121
|
}, [dispatch]);
|
|
107
|
-
const runtime = useMemo(() => ({ dispatch, emit, screen }), [dispatch, emit, screen]);
|
|
122
|
+
const runtime = useMemo(() => ({ dispatch, emit, screen, input: onInput }), [dispatch, emit, screen, onInput]);
|
|
108
123
|
return (_jsxs(ShellRuntimeContext.Provider, { value: runtime, children: [children, render({ overlays, toasts, dismissOverlay, dismissToast })] }));
|
|
109
124
|
}
|
|
110
125
|
//# sourceMappingURL=ShellProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellProvider.js","sourceRoot":"","sources":["../../src/sdui/ShellProvider.tsx"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,kDAAkD;AAElD;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ShellProvider.js","sourceRoot":"","sources":["../../src/sdui/ShellProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type Rgb = [number, number, number];
|
|
2
|
+
/**
|
|
3
|
+
* Sample up to `max` vibrant, hue-distinct colours from a loaded, origin-clean
|
|
4
|
+
* image. Returns null if the canvas is unreadable (tainted / not ready) or the
|
|
5
|
+
* image has no colour worth reflecting — the caller then keeps the duo.
|
|
6
|
+
*/
|
|
7
|
+
export declare function sampleArtColors(img: HTMLImageElement, max?: number): Rgb[] | null;
|
|
8
|
+
/** Make `colors` the standing ambient light (the screen's focused artwork). */
|
|
9
|
+
export declare function setAmbientArt(colors: Rgb[] | null): void;
|
|
10
|
+
/** Temporarily override the wash — e.g. while a poster is hovered. */
|
|
11
|
+
export declare function focusArt(colors: Rgb[]): void;
|
|
12
|
+
/** Release a transient focus, falling back to the standing ambient (or duo). */
|
|
13
|
+
export declare function releaseArt(): void;
|
|
14
|
+
/** Drop the standing ambient entirely (e.g. leaving a screen) → back to the duo. */
|
|
15
|
+
export declare function clearAmbientArt(): void;
|
|
16
|
+
/** Repaint the standing ambient — call after a theme change so alpha follows. */
|
|
17
|
+
export declare function refreshArtLight(): void;
|
|
18
|
+
//# sourceMappingURL=artlight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artlight.d.ts","sourceRoot":"","sources":["../../src/sdui/artlight.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAgH3C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,SAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAuC5E;AAeD,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAGxD;AAED,sEAAsE;AACtE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAE5C;AAED,gFAAgF;AAChF,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,oFAAoF;AACpF,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAED,iFAAiF;AACjF,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
|