@lumencast/runtime 0.6.0 → 0.8.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/dist/.tsbuildinfo +1 -1
- package/dist/broadcast-Gcd-dmC7.js +12 -0
- package/dist/broadcast-Gcd-dmC7.js.map +1 -0
- package/dist/control-C5TfClga.js +17 -0
- package/dist/control-C5TfClga.js.map +1 -0
- package/dist/{index-Crkij3C4.js → index-N-VqrIxN.js} +305 -210
- package/dist/index-N-VqrIxN.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.html +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/lumencast.js +14 -9
- package/dist/modes/broadcast.d.ts.map +1 -1
- package/dist/modes/broadcast.js +6 -1
- package/dist/modes/broadcast.js.map +1 -1
- package/dist/modes/control.d.ts.map +1 -1
- package/dist/modes/control.js +6 -1
- package/dist/modes/control.js.map +1 -1
- package/dist/modes/test.d.ts.map +1 -1
- package/dist/modes/test.js +2 -1
- package/dist/modes/test.js.map +1 -1
- package/dist/render/allowed-hosts.d.ts +41 -0
- package/dist/render/allowed-hosts.d.ts.map +1 -0
- package/dist/render/allowed-hosts.js +88 -0
- package/dist/render/allowed-hosts.js.map +1 -0
- package/dist/render/asset-resolve.d.ts +27 -0
- package/dist/render/asset-resolve.d.ts.map +1 -0
- package/dist/render/asset-resolve.js +86 -0
- package/dist/render/asset-resolve.js.map +1 -0
- package/dist/render/blend-mode.d.ts +7 -0
- package/dist/render/blend-mode.d.ts.map +1 -0
- package/dist/render/blend-mode.js +49 -0
- package/dist/render/blend-mode.js.map +1 -0
- package/dist/render/bundle.d.ts +9 -1
- package/dist/render/bundle.d.ts.map +1 -1
- package/dist/render/bundle.js.map +1 -1
- package/dist/render/fill.d.ts +36 -3
- package/dist/render/fill.d.ts.map +1 -1
- package/dist/render/fill.js +222 -23
- package/dist/render/fill.js.map +1 -1
- package/dist/render/headless.d.ts +39 -0
- package/dist/render/headless.d.ts.map +1 -0
- package/dist/render/headless.js +83 -0
- package/dist/render/headless.js.map +1 -0
- package/dist/render/mask.d.ts +87 -0
- package/dist/render/mask.d.ts.map +1 -0
- package/dist/render/mask.js +243 -0
- package/dist/render/mask.js.map +1 -0
- package/dist/render/primitives/frame.d.ts.map +1 -1
- package/dist/render/primitives/frame.js +91 -5
- package/dist/render/primitives/frame.js.map +1 -1
- package/dist/render/primitives/grid.d.ts +1 -1
- package/dist/render/primitives/grid.d.ts.map +1 -1
- package/dist/render/primitives/grid.js +4 -1
- package/dist/render/primitives/grid.js.map +1 -1
- package/dist/render/primitives/image.d.ts +8 -1
- package/dist/render/primitives/image.d.ts.map +1 -1
- package/dist/render/primitives/image.js +17 -3
- package/dist/render/primitives/image.js.map +1 -1
- package/dist/render/primitives/index.d.ts +7 -0
- package/dist/render/primitives/index.d.ts.map +1 -1
- package/dist/render/primitives/index.js.map +1 -1
- package/dist/render/primitives/media.d.ts +11 -2
- package/dist/render/primitives/media.d.ts.map +1 -1
- package/dist/render/primitives/media.js +14 -3
- package/dist/render/primitives/media.js.map +1 -1
- package/dist/render/primitives/shape.d.ts.map +1 -1
- package/dist/render/primitives/shape.js +29 -26
- package/dist/render/primitives/shape.js.map +1 -1
- package/dist/render/primitives/stack.d.ts +1 -1
- package/dist/render/primitives/stack.d.ts.map +1 -1
- package/dist/render/primitives/stack.js +5 -1
- package/dist/render/primitives/stack.js.map +1 -1
- package/dist/render/primitives/text.d.ts.map +1 -1
- package/dist/render/primitives/text.js +0 -1
- package/dist/render/primitives/text.js.map +1 -1
- package/dist/render/prop-allowlist.d.ts.map +1 -1
- package/dist/render/prop-allowlist.js +25 -2
- package/dist/render/prop-allowlist.js.map +1 -1
- package/dist/render/shape-geometry.d.ts +81 -0
- package/dist/render/shape-geometry.d.ts.map +1 -0
- package/dist/render/shape-geometry.js +199 -0
- package/dist/render/shape-geometry.js.map +1 -0
- package/dist/render/shape-index.d.ts +28 -0
- package/dist/render/shape-index.d.ts.map +1 -0
- package/dist/render/shape-index.js +77 -0
- package/dist/render/shape-index.js.map +1 -0
- package/dist/render/tree.d.ts.map +1 -1
- package/dist/render/tree.js +175 -3
- package/dist/render/tree.js.map +1 -1
- package/dist/render/universal-wrapper.d.ts +27 -1
- package/dist/render/universal-wrapper.d.ts.map +1 -1
- package/dist/render/universal-wrapper.js +98 -22
- package/dist/render/universal-wrapper.js.map +1 -1
- package/dist/{status-pill-BT5b-yET.js → status-pill-BaLQoIDl.js} +2 -2
- package/dist/{status-pill-BT5b-yET.js.map → status-pill-BaLQoIDl.js.map} +1 -1
- package/dist/{test-_hh1JvAd.js → test-CA30C2By.js} +51 -51
- package/dist/{test-_hh1JvAd.js.map → test-CA30C2By.js.map} +1 -1
- package/dist/tree-1coZ32nd.js +1777 -0
- package/dist/tree-1coZ32nd.js.map +1 -0
- package/package.json +6 -5
- package/src/index.ts +24 -0
- package/src/modes/broadcast.tsx +12 -1
- package/src/modes/control.tsx +10 -1
- package/src/modes/test.tsx +4 -1
- package/src/render/allowed-hosts.tsx +100 -0
- package/src/render/asset-resolve.ts +97 -0
- package/src/render/blend-mode.ts +50 -0
- package/src/render/bundle.ts +6 -1
- package/src/render/fill.tsx +266 -24
- package/src/render/headless.tsx +129 -0
- package/src/render/mask.tsx +389 -0
- package/src/render/primitives/frame.tsx +101 -5
- package/src/render/primitives/grid.tsx +4 -1
- package/src/render/primitives/image.tsx +17 -3
- package/src/render/primitives/index.ts +7 -0
- package/src/render/primitives/media.tsx +14 -3
- package/src/render/primitives/shape.tsx +39 -75
- package/src/render/primitives/stack.tsx +5 -1
- package/src/render/primitives/text.tsx +0 -1
- package/src/render/prop-allowlist.ts +25 -2
- package/src/render/shape-geometry.tsx +315 -0
- package/src/render/shape-index.tsx +90 -0
- package/src/render/tree.tsx +214 -12
- package/src/render/universal-wrapper.tsx +128 -21
- package/dist/broadcast-DO7jEkix.js +0 -11
- package/dist/broadcast-DO7jEkix.js.map +0 -1
- package/dist/control-BSfl4_cO.js +0 -16
- package/dist/control-BSfl4_cO.js.map +0 -1
- package/dist/index-Crkij3C4.js.map +0 -1
- package/dist/tree-DBj9SJgs.js +0 -1230
- package/dist/tree-DBj9SJgs.js.map +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** A table mapping a bundle `src` reference to its resolved `data:` URI.
|
|
2
|
+
* Keys may be either the full `assets/<hash>.ext` path or a bare `<hash>`. */
|
|
3
|
+
export type AssetTable = Readonly<Record<string, string>>;
|
|
4
|
+
/** Resolve a single `src` value against a table. Non-string or unmatched values
|
|
5
|
+
* pass through unchanged. Matches both `assets/<hash>.ext` and bare `<hash>`. */
|
|
6
|
+
export declare function resolveSrc(src: unknown, table: AssetTable): unknown;
|
|
7
|
+
/** Deep-rewrite every `src` (image-fill, mask source) in a layout subtree,
|
|
8
|
+
* in place, against the supplied asset table. */
|
|
9
|
+
export declare function rewriteLayoutSrcs(node: unknown, table: AssetTable): void;
|
|
10
|
+
/** Rewrite the `__lit.image.*` defaults (image-primitive `bind.src` targets)
|
|
11
|
+
* against the asset table, returning a new defaults object. */
|
|
12
|
+
export declare function rewriteDefaultsSrcs(defaults: Record<string, unknown>, table: AssetTable): Record<string, unknown>;
|
|
13
|
+
/** A brand `@font-face` to inject before render. `src` is a `data:` URI (or any
|
|
14
|
+
* same-document URL) so no network/host-allow surface is involved. */
|
|
15
|
+
export interface FontFaceSpec {
|
|
16
|
+
family: string;
|
|
17
|
+
weight: number | string;
|
|
18
|
+
style?: string;
|
|
19
|
+
/** `url(data:font/woff2;base64,…)` content (the value inside `src:`). */
|
|
20
|
+
src: string;
|
|
21
|
+
}
|
|
22
|
+
/** Inject `@font-face` rules and block until the faces are loaded, so the very
|
|
23
|
+
* first painted frame already uses the brand glyphs (no fallback-font flash).
|
|
24
|
+
* Returns the families that successfully loaded. Loads only from the supplied
|
|
25
|
+
* `src` (expected `data:`); never fetches a remote host on its own behalf. */
|
|
26
|
+
export declare function injectFonts(faces: readonly FontFaceSpec[]): Promise<string[]>;
|
|
27
|
+
//# sourceMappingURL=asset-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-resolve.d.ts","sourceRoot":"","sources":["../../src/render/asset-resolve.ts"],"names":[],"mappings":"AAoBA;+EAC+E;AAC/E,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D;kFACkF;AAClF,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAMnE;AAED;kDACkD;AAClD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAWxE;AAED;gEACgE;AAChE,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,UAAU,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;uEACuE;AACvE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;+EAG+E;AAC/E,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Public asset + font resolution helpers for headless / host render (ADR 003 §3.2).
|
|
2
|
+
//
|
|
3
|
+
// These utilities let a HOST (Solar headless entry, a ZabCanvas render worker,
|
|
4
|
+
// the zero-loss harness) resolve a bundle's content-addressed asset references
|
|
5
|
+
// to concrete `data:` URIs and inject brand `@font-face`s BEFORE the first
|
|
6
|
+
// frame — exactly as the zero-loss harness has always done (ADR 002 #J). They
|
|
7
|
+
// are promoted here verbatim so every host resolves identically and exercises
|
|
8
|
+
// the SAME host-allow gate the runtime applies internally.
|
|
9
|
+
//
|
|
10
|
+
// ── No-fetch contract (ADR 003 §3.2, D3, Bastion R2) ────────────────────────
|
|
11
|
+
// NONE of these helpers performs a network fetch. They only rewrite a bundle's
|
|
12
|
+
// `src` values against a caller-supplied table (`resolveSrc` /
|
|
13
|
+
// `rewriteLayoutSrcs` / `rewriteDefaultsSrcs`) and load `@font-face`s from
|
|
14
|
+
// caller-supplied `data:`/same-document URLs (`injectFonts`). The runtime never
|
|
15
|
+
// reaches the network; the host owns where bytes come from. Both the input
|
|
16
|
+
// table values and the font `src`s are expected to be `data:` (or otherwise
|
|
17
|
+
// already host-allowed) URIs — substituting one already-admitted scheme for
|
|
18
|
+
// another, so the deny-by-default `allowedHosts` gate stays the sole authority.
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
/** Resolve a single `src` value against a table. Non-string or unmatched values
|
|
21
|
+
* pass through unchanged. Matches both `assets/<hash>.ext` and bare `<hash>`. */
|
|
22
|
+
export function resolveSrc(src, table) {
|
|
23
|
+
if (typeof src !== "string")
|
|
24
|
+
return src;
|
|
25
|
+
if (table[src])
|
|
26
|
+
return table[src];
|
|
27
|
+
const m = /^assets\/([A-Za-z0-9]+)\.[A-Za-z0-9]+$/.exec(src);
|
|
28
|
+
if (m && m[1] !== undefined && table[m[1]])
|
|
29
|
+
return table[m[1]];
|
|
30
|
+
return src;
|
|
31
|
+
}
|
|
32
|
+
/** Deep-rewrite every `src` (image-fill, mask source) in a layout subtree,
|
|
33
|
+
* in place, against the supplied asset table. */
|
|
34
|
+
export function rewriteLayoutSrcs(node, table) {
|
|
35
|
+
if (node === null || typeof node !== "object")
|
|
36
|
+
return;
|
|
37
|
+
if (Array.isArray(node)) {
|
|
38
|
+
for (const n of node)
|
|
39
|
+
rewriteLayoutSrcs(n, table);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const obj = node;
|
|
43
|
+
if ("src" in obj)
|
|
44
|
+
obj["src"] = resolveSrc(obj["src"], table);
|
|
45
|
+
for (const v of Object.values(obj)) {
|
|
46
|
+
if (v && typeof v === "object")
|
|
47
|
+
rewriteLayoutSrcs(v, table);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Rewrite the `__lit.image.*` defaults (image-primitive `bind.src` targets)
|
|
51
|
+
* against the asset table, returning a new defaults object. */
|
|
52
|
+
export function rewriteDefaultsSrcs(defaults, table) {
|
|
53
|
+
const out = { ...defaults };
|
|
54
|
+
for (const [k, v] of Object.entries(out)) {
|
|
55
|
+
if (k.startsWith("__lit.image."))
|
|
56
|
+
out[k] = resolveSrc(v, table);
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
/** Inject `@font-face` rules and block until the faces are loaded, so the very
|
|
61
|
+
* first painted frame already uses the brand glyphs (no fallback-font flash).
|
|
62
|
+
* Returns the families that successfully loaded. Loads only from the supplied
|
|
63
|
+
* `src` (expected `data:`); never fetches a remote host on its own behalf. */
|
|
64
|
+
export async function injectFonts(faces) {
|
|
65
|
+
const loaded = [];
|
|
66
|
+
for (const f of faces) {
|
|
67
|
+
try {
|
|
68
|
+
const face = new FontFace(f.family, f.src, {
|
|
69
|
+
weight: String(f.weight),
|
|
70
|
+
style: f.style ?? "normal",
|
|
71
|
+
});
|
|
72
|
+
await face.load();
|
|
73
|
+
document.fonts.add(face);
|
|
74
|
+
loaded.push(f.family);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// A font that fails to load is a documented gap, not a render-breaker:
|
|
78
|
+
// the fallback glyphs paint and the host can detect the missing family
|
|
79
|
+
// in the returned list. Never throw (would abort an otherwise-good
|
|
80
|
+
// render) and never log the value (R9) — the absent family name is in
|
|
81
|
+
// `f.family`, which the caller already holds.
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return loaded;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=asset-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-resolve.js","sourceRoot":"","sources":["../../src/render/asset-resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-validate a resolved `blendMode` against the closed enum. Returns the
|
|
3
|
+
* CSS `mix-blend-mode` keyword when recognised, else `undefined` (caller
|
|
4
|
+
* omits — the value never reaches the style). Never passthrough.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseBlendMode(value: unknown): string | undefined;
|
|
7
|
+
//# sourceMappingURL=blend-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blend-mode.d.ts","sourceRoot":"","sources":["../../src/render/blend-mode.ts"],"names":[],"mappings":"AA0CA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEjE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Strict `mix-blend-mode` gate — the runtime half of the T4 double-gate
|
|
2
|
+
// (Bastion conditions 1.2, ADR 002 §3.2 / #D).
|
|
3
|
+
//
|
|
4
|
+
// The compiler already validates `blendMode` against its closed enum
|
|
5
|
+
// (`parseBlendMode`, @lumencast/compiler) before emitting the universal
|
|
6
|
+
// prop. This module is the INDEPENDENT runtime gate : a bundle prop OR a
|
|
7
|
+
// live LSDP delta value reaching the wrapper is re-validated here against
|
|
8
|
+
// the same closed allowlist before it may touch an inline CSS style.
|
|
9
|
+
// Anything outside the enum is omitted (never passthrough) — mirroring
|
|
10
|
+
// the `css-color.ts` discipline (self-contained second gate, no untrusted
|
|
11
|
+
// string ever interpolated into CSS).
|
|
12
|
+
//
|
|
13
|
+
// The allowlist is intentionally duplicated rather than imported from the
|
|
14
|
+
// compiler : the runtime does not depend on @lumencast/compiler, and the
|
|
15
|
+
// gate must hold even if a hand-rolled / tampered bundle bypasses the
|
|
16
|
+
// compiler entirely. It is a fixed, finite set of CSS keywords (Figma
|
|
17
|
+
// blend modes minus PASS_THROUGH) — the single source of truth for the
|
|
18
|
+
// CSS value is this closed set.
|
|
19
|
+
/** Closed `mix-blend-mode` allowlist (ADR 002 §3.2 — Figma minus
|
|
20
|
+
* `PASS_THROUGH`). Mirrors the compiler's `BLEND_MODES`. */
|
|
21
|
+
const BLEND_MODES = new Set([
|
|
22
|
+
"normal",
|
|
23
|
+
"multiply",
|
|
24
|
+
"screen",
|
|
25
|
+
"overlay",
|
|
26
|
+
"darken",
|
|
27
|
+
"lighten",
|
|
28
|
+
"color-dodge",
|
|
29
|
+
"color-burn",
|
|
30
|
+
"hard-light",
|
|
31
|
+
"soft-light",
|
|
32
|
+
"difference",
|
|
33
|
+
"exclusion",
|
|
34
|
+
"hue",
|
|
35
|
+
"saturation",
|
|
36
|
+
"color",
|
|
37
|
+
"luminosity",
|
|
38
|
+
// Figma LINEAR_DODGE (add) — exact additive blend, gentler than color-dodge.
|
|
39
|
+
"plus-lighter",
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* Re-validate a resolved `blendMode` against the closed enum. Returns the
|
|
43
|
+
* CSS `mix-blend-mode` keyword when recognised, else `undefined` (caller
|
|
44
|
+
* omits — the value never reaches the style). Never passthrough.
|
|
45
|
+
*/
|
|
46
|
+
export function parseBlendMode(value) {
|
|
47
|
+
return typeof value === "string" && BLEND_MODES.has(value) ? value : undefined;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=blend-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blend-mode.js","sourceRoot":"","sources":["../../src/render/blend-mode.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,+CAA+C;AAC/C,EAAE;AACF,qEAAqE;AACrE,wEAAwE;AACxE,yEAAyE;AACzE,0EAA0E;AAC1E,qEAAqE;AACrE,uEAAuE;AACvE,0EAA0E;AAC1E,sCAAsC;AACtC,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,gCAAgC;AAEhC;6DAC6D;AAC7D,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC;IAC/C,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,KAAK;IACL,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,6EAA6E;IAC7E,cAAc;CACf,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC"}
|
package/dist/render/bundle.d.ts
CHANGED
|
@@ -72,7 +72,15 @@ export interface RenderBundle {
|
|
|
72
72
|
root: RenderNode;
|
|
73
73
|
operator_inputs?: OperatorInput[];
|
|
74
74
|
external_adapters?: ExternalAdapter[];
|
|
75
|
-
|
|
75
|
+
/** Bundle-level asset declarations. `allowedHosts` is the host
|
|
76
|
+
* allowlist (LSML 1.2 §3.2, Bastion T1) every image / image-fill `src`
|
|
77
|
+
* is gated against at render BEFORE reaching the DOM. Absent / empty =
|
|
78
|
+
* deny every remote host (deny-by-default). Other keys (`fonts`,
|
|
79
|
+
* `preload`) are forwarded opaquely by the compiler. */
|
|
80
|
+
assets?: {
|
|
81
|
+
allowedHosts?: string[];
|
|
82
|
+
[key: string]: unknown;
|
|
83
|
+
};
|
|
76
84
|
/** LSML 1.1 §17.3 — capability profiles required for correct rendering.
|
|
77
85
|
* Each entry is an `x-<vendor>.<name>/<version>` string. The runtime
|
|
78
86
|
* checks every behavioural entry against its supported list ; an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/render/bundle.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,kDAAkD;IAClD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;kEAC8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;kCAE8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzC;;;;;;iDAM6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAClD;;;;;;;;;0BASsB;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;mDAG+C;IAC/C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;mEAC+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,GACN,UAAU,GACV,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAClC,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/render/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/render/bundle.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,oEAAoE;AACpE,0EAA0E;AAC1E,8EAA8E;AAC9E,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,8EAA8E;AAC9E,0EAA0E;AAC1E,yEAAyE;AACzE,mDAAmD;
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/render/bundle.ts"],"names":[],"mappings":"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"}
|
package/dist/render/fill.d.ts
CHANGED
|
@@ -4,15 +4,22 @@ export interface FillStop {
|
|
|
4
4
|
color: string;
|
|
5
5
|
opacity?: number;
|
|
6
6
|
}
|
|
7
|
+
export type ObjectFit = "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
8
|
+
/** Validate an `objectFit` against the closed enum at render. Returns the
|
|
9
|
+
* value or `undefined` (caller falls back to the default + diagnoses).
|
|
10
|
+
* Never passthrough. */
|
|
11
|
+
export declare function parseObjectFitRuntime(value: unknown): ObjectFit | undefined;
|
|
7
12
|
export type Fill = {
|
|
8
13
|
kind: "solid";
|
|
9
14
|
color: string;
|
|
10
15
|
opacity?: number;
|
|
16
|
+
blendMode?: string;
|
|
11
17
|
} | {
|
|
12
18
|
kind: "linear-gradient";
|
|
13
19
|
angle_deg?: number;
|
|
14
20
|
stops: FillStop[];
|
|
15
21
|
opacity?: number;
|
|
22
|
+
blendMode?: string;
|
|
16
23
|
} | {
|
|
17
24
|
kind: "radial-gradient";
|
|
18
25
|
center?: {
|
|
@@ -22,19 +29,36 @@ export type Fill = {
|
|
|
22
29
|
radius?: number;
|
|
23
30
|
stops: FillStop[];
|
|
24
31
|
opacity?: number;
|
|
32
|
+
blendMode?: string;
|
|
33
|
+
} | {
|
|
34
|
+
kind: "image";
|
|
35
|
+
src: string;
|
|
36
|
+
objectFit?: ObjectFit;
|
|
37
|
+
opacity?: number;
|
|
38
|
+
blendMode?: string;
|
|
25
39
|
};
|
|
26
40
|
export interface FillRenderResult {
|
|
27
41
|
/** SVG <defs> contributions (gradient definitions). */
|
|
28
42
|
defs: ReactElement[];
|
|
29
43
|
/** Reference to use as the `fill` attribute on the shape. */
|
|
30
44
|
ref: string;
|
|
45
|
+
/** #L — the per-fill-layer `mix-blend-mode` keyword, re-validated against
|
|
46
|
+
* the closed enum at the runtime (T4) ; `undefined` when absent or
|
|
47
|
+
* out-of-enum (caller omits — never reaches the style). Applied on the
|
|
48
|
+
* fill layer element, independent of the node-level blend (#D). */
|
|
49
|
+
mixBlendMode?: string;
|
|
31
50
|
}
|
|
32
51
|
/** Compile a Fill into an SVG `<defs>` entry + a `fill="url(#…)"` ref.
|
|
33
52
|
* Solid fills produce no defs and return the colour directly. */
|
|
34
53
|
export declare function renderFill(fill: Fill): FillRenderResult;
|
|
35
|
-
/** Compile an array of Fill into
|
|
36
|
-
*
|
|
37
|
-
*
|
|
54
|
+
/** Compile an array of Fill into background CSS usable on a `<div>` (frame
|
|
55
|
+
* backgrounds — non-SVG context). Returns `backgroundImage` plus, when an
|
|
56
|
+
* image-fill is present, the matching `backgroundSize`/`backgroundPosition`/
|
|
57
|
+
* `backgroundRepeat`. Stops use percentages in CSS gradient syntax.
|
|
58
|
+
*
|
|
59
|
+
* Image-fill `src` MUST already be host/scheme-gated (`gateImageFills`) —
|
|
60
|
+
* `backgroundsToCss` assumes the URL is trusted at this point and only
|
|
61
|
+
* CSS-escapes it for safe interpolation into `url("…")`. */
|
|
38
62
|
export declare function backgroundsToCss(fills: Fill[], nodeId?: string): CSSProperties;
|
|
39
63
|
/** Validate every colour carried by a Fill array through the strict
|
|
40
64
|
* parser (RC#11 — issue #30 contractual comment : SVG `fill`/`stroke`
|
|
@@ -50,4 +74,13 @@ export declare function sanitizeFills(fills: Fill[], field: string, nodeId?: str
|
|
|
50
74
|
* to core by the LSML 1.2 RFC) is dropped WITH a diagnostic — never
|
|
51
75
|
* silently (ADR 001 §3.4, issue #34). */
|
|
52
76
|
export declare function parseFills(value: unknown, field?: string, nodeId?: string): Fill[];
|
|
77
|
+
/**
|
|
78
|
+
* Drop every image-fill whose `src` fails the host/scheme allowlist
|
|
79
|
+
* (Bastion T1/T2), BEFORE any image-fill reaches the DOM. A rejected
|
|
80
|
+
* image-fill is omitted entirely (never a passthrough URL) with an
|
|
81
|
+
* R9-clean diagnostic emitted by `gateSrc`. Non-image fills pass through
|
|
82
|
+
* untouched. Call this once, after `parseFills`, with the active
|
|
83
|
+
* `allowedHosts` from `useAllowedHosts()`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function gateImageFills(fills: Fill[], allowedHosts: readonly string[] | undefined, field: string, nodeId?: string): Fill[];
|
|
53
86
|
//# sourceMappingURL=fill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../src/render/fill.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../src/render/fill.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAMzD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAE7E;;yBAEyB;AACzB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAE3E;AAOD,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACD;IAKE,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAQN,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ;;;wEAGoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;iEACiE;AACjE,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,CA2FvD;AAwCD;;;;;;;4DAO4D;AAC5D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAsC9E;AAgFD;;;;;;sEAMsE;AACtE,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAkCnF;AAED;;;;yCAIyC;AACzC,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CA+ClF;AAWD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC3C,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,EAAE,CAKR"}
|