@peripheries/renderer 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/catalog.js +5 -4
- package/dist/catalog.js.map +1 -1
- package/dist/chunks/{load-6zEgvJ6I.js → load-CTAaQSl-.js} +3 -2
- package/dist/chunks/load-CTAaQSl-.js.map +1 -0
- package/dist/chunks/page-bundles-Eaw5mYKS.js +33 -0
- package/dist/chunks/page-bundles-Eaw5mYKS.js.map +1 -0
- package/dist/chunks/{projection-Cd0DxvWm.js → projection-BfojIUtA.js} +16 -4
- package/dist/chunks/projection-BfojIUtA.js.map +1 -0
- package/dist/chunks/{page-bundles-C4VW3dsK.js → refs-CiWBdUpZ.js} +10 -32
- package/dist/chunks/refs-CiWBdUpZ.js.map +1 -0
- package/dist/chunks/{validate-ADfCrhn-.js → validate-Cz2tUUdm.js} +12 -8
- package/dist/chunks/{validate-ADfCrhn-.js.map → validate-Cz2tUUdm.js.map} +1 -1
- package/dist/core.js +6 -5
- package/dist/core.js.map +1 -1
- package/dist/react.js +2 -1
- package/dist/react.js.map +1 -1
- package/dist/runtime.js +9 -3
- package/dist/runtime.js.map +1 -1
- package/dist/styles.css +50 -45
- package/dist/testing.js +4 -3
- package/dist/testing.js.map +1 -1
- package/dist/theme.js +609 -0
- package/dist/theme.js.map +1 -0
- package/dist/types/core/bundles/load.d.ts +7 -0
- package/dist/types/core/bundles/refs.d.ts +22 -1
- package/dist/types/core/bundles/resolve.d.ts +7 -6
- package/dist/types/core/index.d.ts +2 -2
- package/dist/types/core/layout.d.ts +7 -0
- package/dist/types/core/validate.d.ts +3 -0
- package/dist/types/runtime/boot.d.ts +12 -1
- package/dist/types/runtime/index.d.ts +1 -1
- package/dist/types/theme/check.d.ts +6 -0
- package/dist/types/theme/color.d.ts +29 -0
- package/dist/types/theme/derive.d.ts +18 -0
- package/dist/types/theme/index.d.ts +5 -0
- package/dist/types/theme/parse.d.ts +22 -0
- package/package.json +6 -2
- package/dist/chunks/load-6zEgvJ6I.js.map +0 -1
- package/dist/chunks/page-bundles-C4VW3dsK.js.map +0 -1
- package/dist/chunks/projection-Cd0DxvWm.js.map +0 -1
package/dist/theme.js
ADDED
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
import { SEMANTIC_TOKENS } from "@peripheries/runtime";
|
|
2
|
+
//#region packages/renderer/src/theme/color.ts
|
|
3
|
+
var NUMBER = /^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i;
|
|
4
|
+
var clamp01 = (n) => Math.min(1, Math.max(0, n));
|
|
5
|
+
function hexColor(value) {
|
|
6
|
+
const hex = value.slice(1);
|
|
7
|
+
if (!/^[0-9a-f]+$/i.test(hex) || ![
|
|
8
|
+
3,
|
|
9
|
+
4,
|
|
10
|
+
6,
|
|
11
|
+
8
|
|
12
|
+
].includes(hex.length)) return null;
|
|
13
|
+
const full = hex.length <= 4 ? [...hex].map((c) => c + c).join("") : hex;
|
|
14
|
+
const at = (i) => parseInt(full.slice(i, i + 2), 16) / 255;
|
|
15
|
+
return {
|
|
16
|
+
r: at(0),
|
|
17
|
+
g: at(2),
|
|
18
|
+
b: at(4),
|
|
19
|
+
alpha: full.length === 8 ? at(6) : 1
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function component(token, percent) {
|
|
23
|
+
if (token.toLowerCase() === "none") return 0;
|
|
24
|
+
if (token.endsWith("%")) return NUMBER.test(token.slice(0, -1)) ? Number(token.slice(0, -1)) / 100 * percent : null;
|
|
25
|
+
return NUMBER.test(token) ? Number(token) : null;
|
|
26
|
+
}
|
|
27
|
+
function hue(token) {
|
|
28
|
+
const match = /^(.*?)(deg|grad|rad|turn)?$/i.exec(token);
|
|
29
|
+
const n = match ? component(match[1], NaN) : null;
|
|
30
|
+
if (!match || n === null || Number.isNaN(n)) return null;
|
|
31
|
+
const unit = match[2]?.toLowerCase();
|
|
32
|
+
return ((unit === "rad" ? n * 180 / Math.PI : unit === "grad" ? n * .9 : unit === "turn" ? n * 360 : n) % 360 + 360) % 360;
|
|
33
|
+
}
|
|
34
|
+
function hslToRgb(h, s, l) {
|
|
35
|
+
const f = (n) => {
|
|
36
|
+
const k = (n + h / 30) % 12;
|
|
37
|
+
return l - s * Math.min(l, 1 - l) * Math.max(-1, Math.min(k - 3, 9 - k, 1));
|
|
38
|
+
};
|
|
39
|
+
return [
|
|
40
|
+
f(0),
|
|
41
|
+
f(8),
|
|
42
|
+
f(4)
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
function functionColor(value) {
|
|
46
|
+
const match = /^(rgba?|hsla?|oklch)\((.*)\)$/i.exec(value);
|
|
47
|
+
if (!match) return null;
|
|
48
|
+
const name = match[1].toLowerCase();
|
|
49
|
+
const inner = match[2].trim();
|
|
50
|
+
let channels;
|
|
51
|
+
let alphaToken;
|
|
52
|
+
if (inner.includes(",")) {
|
|
53
|
+
const parts = inner.split(",").map((p) => p.trim());
|
|
54
|
+
if (parts.length < 3 || parts.length > 4) return null;
|
|
55
|
+
channels = parts.slice(0, 3);
|
|
56
|
+
alphaToken = parts[3];
|
|
57
|
+
} else {
|
|
58
|
+
const [main, alpha, ...rest] = inner.split("/");
|
|
59
|
+
if (rest.length) return null;
|
|
60
|
+
channels = main.trim().split(/\s+/);
|
|
61
|
+
alphaToken = alpha?.trim();
|
|
62
|
+
if (channels.length !== 3) return null;
|
|
63
|
+
}
|
|
64
|
+
const alpha = alphaToken === void 0 ? 1 : component(alphaToken, 1);
|
|
65
|
+
if (alpha === null) return null;
|
|
66
|
+
if (name.startsWith("rgb")) {
|
|
67
|
+
const [r, g, b] = channels.map((c) => component(c, 255));
|
|
68
|
+
if (r === null || g === null || b === null) return null;
|
|
69
|
+
return {
|
|
70
|
+
r: clamp01(r / 255),
|
|
71
|
+
g: clamp01(g / 255),
|
|
72
|
+
b: clamp01(b / 255),
|
|
73
|
+
alpha: clamp01(alpha)
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (name.startsWith("hsl")) {
|
|
77
|
+
const h = hue(channels[0]);
|
|
78
|
+
const s = component(channels[1], 100);
|
|
79
|
+
const l = component(channels[2], 100);
|
|
80
|
+
if (h === null || s === null || l === null) return null;
|
|
81
|
+
const [r, g, b] = hslToRgb(h, clamp01(s / 100), clamp01(l / 100));
|
|
82
|
+
return {
|
|
83
|
+
r: clamp01(r),
|
|
84
|
+
g: clamp01(g),
|
|
85
|
+
b: clamp01(b),
|
|
86
|
+
alpha: clamp01(alpha)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const l = component(channels[0], 1);
|
|
90
|
+
const c = component(channels[1], .4);
|
|
91
|
+
const h = hue(channels[2]);
|
|
92
|
+
if (l === null || c === null || h === null) return null;
|
|
93
|
+
return {
|
|
94
|
+
...fromOklch({
|
|
95
|
+
l: clamp01(l),
|
|
96
|
+
c: Math.max(0, c),
|
|
97
|
+
h
|
|
98
|
+
}),
|
|
99
|
+
alpha: clamp01(alpha)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function parseColor(value) {
|
|
103
|
+
const v = value.trim();
|
|
104
|
+
if (!v) return null;
|
|
105
|
+
return v.startsWith("#") ? hexColor(v) : functionColor(v);
|
|
106
|
+
}
|
|
107
|
+
function toHex(color) {
|
|
108
|
+
const byte = (n) => Math.round(clamp01(n) * 255).toString(16).padStart(2, "0");
|
|
109
|
+
return `#${byte(color.r)}${byte(color.g)}${byte(color.b)}${color.alpha < 1 ? byte(color.alpha) : ""}`;
|
|
110
|
+
}
|
|
111
|
+
var toLinear = (c) => c <= .04045 ? c / 12.92 : ((c + .055) / 1.055) ** 2.4;
|
|
112
|
+
var fromLinear = (c) => c <= .0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - .055;
|
|
113
|
+
function toOklch(color) {
|
|
114
|
+
const r = toLinear(color.r);
|
|
115
|
+
const g = toLinear(color.g);
|
|
116
|
+
const b = toLinear(color.b);
|
|
117
|
+
const l_ = Math.cbrt(.4122214708 * r + .5363325363 * g + .0514459929 * b);
|
|
118
|
+
const m_ = Math.cbrt(.2119034982 * r + .6806995451 * g + .1073969566 * b);
|
|
119
|
+
const s_ = Math.cbrt(.0883024619 * r + .2817188376 * g + .6299787005 * b);
|
|
120
|
+
const L = .2104542553 * l_ + .793617785 * m_ - .0040720468 * s_;
|
|
121
|
+
const A = 1.9779984951 * l_ - 2.428592205 * m_ + .4505937099 * s_;
|
|
122
|
+
const B = .0259040371 * l_ + .7827717662 * m_ - .808675766 * s_;
|
|
123
|
+
const c = Math.hypot(A, B);
|
|
124
|
+
return {
|
|
125
|
+
l: L,
|
|
126
|
+
c: c < 1e-6 ? 0 : c,
|
|
127
|
+
h: c < 1e-6 ? 0 : (Math.atan2(B, A) * 180 / Math.PI + 360) % 360
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function oklchToLinear({ l, c, h }) {
|
|
131
|
+
const A = c * Math.cos(h * Math.PI / 180);
|
|
132
|
+
const B = c * Math.sin(h * Math.PI / 180);
|
|
133
|
+
const lc = (l + .3963377774 * A + .2158037573 * B) ** 3;
|
|
134
|
+
const mc = (l - .1055613458 * A - .0638541728 * B) ** 3;
|
|
135
|
+
const sc = (l - .0894841775 * A - 1.291485548 * B) ** 3;
|
|
136
|
+
return [
|
|
137
|
+
4.0767416621 * lc - 3.3077115913 * mc + .2309699292 * sc,
|
|
138
|
+
-1.2684380046 * lc + 2.6097574011 * mc - .3413193965 * sc,
|
|
139
|
+
-.0041960863 * lc - .7034186147 * mc + 1.707614701 * sc
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
var inGamut = (rgb) => rgb.every((c) => c >= -1e-4 && c <= 1.0001);
|
|
143
|
+
function fromOklch(color) {
|
|
144
|
+
const l = clamp01(color.l);
|
|
145
|
+
let linear = oklchToLinear({
|
|
146
|
+
...color,
|
|
147
|
+
l
|
|
148
|
+
});
|
|
149
|
+
if (!inGamut(linear)) {
|
|
150
|
+
let lo = 0;
|
|
151
|
+
let hi = Math.max(0, color.c);
|
|
152
|
+
for (let i = 0; i < 24; i++) {
|
|
153
|
+
const mid = (lo + hi) / 2;
|
|
154
|
+
if (inGamut(oklchToLinear({
|
|
155
|
+
l,
|
|
156
|
+
c: mid,
|
|
157
|
+
h: color.h
|
|
158
|
+
}))) lo = mid;
|
|
159
|
+
else hi = mid;
|
|
160
|
+
}
|
|
161
|
+
linear = oklchToLinear({
|
|
162
|
+
l,
|
|
163
|
+
c: lo,
|
|
164
|
+
h: color.h
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
const [r, g, b] = linear.map((c) => clamp01(fromLinear(clamp01(c))));
|
|
168
|
+
return {
|
|
169
|
+
r,
|
|
170
|
+
g,
|
|
171
|
+
b,
|
|
172
|
+
alpha: 1
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function relativeLuminance(color) {
|
|
176
|
+
return .2126 * toLinear(color.r) + .7152 * toLinear(color.g) + .0722 * toLinear(color.b);
|
|
177
|
+
}
|
|
178
|
+
var over = (top, under) => {
|
|
179
|
+
const mix = (a, b) => a * top.alpha + b * (1 - top.alpha);
|
|
180
|
+
return {
|
|
181
|
+
r: mix(top.r, under.r),
|
|
182
|
+
g: mix(top.g, under.g),
|
|
183
|
+
b: mix(top.b, under.b),
|
|
184
|
+
alpha: 1
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
var WHITE = {
|
|
188
|
+
r: 1,
|
|
189
|
+
g: 1,
|
|
190
|
+
b: 1,
|
|
191
|
+
alpha: 1
|
|
192
|
+
};
|
|
193
|
+
function contrastRatio(foreground, background) {
|
|
194
|
+
const fg = typeof foreground === "string" ? parseColor(foreground) : foreground;
|
|
195
|
+
const bgRaw = typeof background === "string" ? parseColor(background) : background;
|
|
196
|
+
if (!fg || !bgRaw) return null;
|
|
197
|
+
const bg = bgRaw.alpha < 1 ? over(bgRaw, WHITE) : bgRaw;
|
|
198
|
+
const a = relativeLuminance(fg.alpha < 1 ? over(fg, bg) : fg);
|
|
199
|
+
const b = relativeLuminance(bg);
|
|
200
|
+
return (Math.max(a, b) + .05) / (Math.min(a, b) + .05);
|
|
201
|
+
}
|
|
202
|
+
//#endregion
|
|
203
|
+
//#region packages/renderer/src/theme/parse.ts
|
|
204
|
+
var SEMANTIC = new Set(SEMANTIC_TOKENS);
|
|
205
|
+
var UNSAFE = /[<>{};\\]|\/\*|\*\/|[\u0000-\u001f\u007f]/;
|
|
206
|
+
var isSafeCssValue = (value) => value.trim() !== "" && !UNSAFE.test(value);
|
|
207
|
+
var LENGTH = /^(0|(\d+\.?\d*|\.\d+)(px|rem|em))$/;
|
|
208
|
+
var VAR_REF = /^var\(\s*--([a-z0-9-]+)\s*(?:,\s*(.*))?\)$/i;
|
|
209
|
+
var isColorToken = (name) => name.startsWith("color-") || name.startsWith("chart-");
|
|
210
|
+
var isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
211
|
+
function bad(read, path, message) {
|
|
212
|
+
read.diagnostics.push({
|
|
213
|
+
code: "THEME_BAD_VALUE",
|
|
214
|
+
path,
|
|
215
|
+
message,
|
|
216
|
+
severity: "error"
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
function unknownKey(read, path) {
|
|
220
|
+
read.diagnostics.push({
|
|
221
|
+
code: "THEME_UNKNOWN_KEY",
|
|
222
|
+
path,
|
|
223
|
+
message: `"${path}" is not a theme key; it is ignored`,
|
|
224
|
+
severity: "warning"
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
function readColor(read, path, value) {
|
|
228
|
+
if (typeof value === "string" && isSafeCssValue(value) && parseColor(value)) return value.trim();
|
|
229
|
+
bad(read, path, `${JSON.stringify(value)} is not a colour (hex, rgb(), hsl() or oklch())`);
|
|
230
|
+
}
|
|
231
|
+
function readFont(read, path, value) {
|
|
232
|
+
if (typeof value === "string" && isSafeCssValue(value) && value.length <= 300) return value.trim();
|
|
233
|
+
bad(read, path, `${JSON.stringify(value)} is not a font stack`);
|
|
234
|
+
}
|
|
235
|
+
function readLength(read, path, value) {
|
|
236
|
+
const v = typeof value === "number" && value === 0 ? "0" : typeof value === "string" ? value.trim() : null;
|
|
237
|
+
if (v !== null && LENGTH.test(v)) return v;
|
|
238
|
+
bad(read, path, `${JSON.stringify(value)} is not a length (px, rem, em or 0)`);
|
|
239
|
+
}
|
|
240
|
+
function readToken(read, name, value) {
|
|
241
|
+
const path = `tokens.${name}`;
|
|
242
|
+
const v = typeof value === "number" && Number.isFinite(value) ? String(value) : typeof value === "string" ? value.trim() : null;
|
|
243
|
+
if (v === null || !isSafeCssValue(v) || v.length > 300) return void bad(read, path, `${JSON.stringify(value)} is not a usable CSS value`);
|
|
244
|
+
if (isColorToken(name) && !VAR_REF.test(v) && !parseColor(v)) return void bad(read, path, `${JSON.stringify(value)} is not a colour or a var() reference`);
|
|
245
|
+
return v;
|
|
246
|
+
}
|
|
247
|
+
function readTokens(read, raw) {
|
|
248
|
+
if (!isObject(raw)) return bad(read, "tokens", "tokens must be an object of semantic token names to values");
|
|
249
|
+
const tokens = {};
|
|
250
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
251
|
+
const name = key.replace(/^--/, "");
|
|
252
|
+
if (!SEMANTIC.has(name)) {
|
|
253
|
+
read.diagnostics.push({
|
|
254
|
+
code: "THEME_UNKNOWN_TOKEN",
|
|
255
|
+
path: `tokens.${key}`,
|
|
256
|
+
message: `"${key}" is not a semantic token; it is ignored`,
|
|
257
|
+
severity: "warning"
|
|
258
|
+
});
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
const v = readToken(read, name, value);
|
|
262
|
+
if (v !== void 0) tokens[name] = v;
|
|
263
|
+
}
|
|
264
|
+
if (Object.keys(tokens).length) read.theme.tokens = {
|
|
265
|
+
...read.theme.tokens,
|
|
266
|
+
...tokens
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function readGroup(read, path, raw, keys, each) {
|
|
270
|
+
if (!isObject(raw)) return void bad(read, path, `${path} must be an object`);
|
|
271
|
+
const out = {};
|
|
272
|
+
for (const [key, value] of Object.entries(raw)) if (!keys.includes(key)) unknownKey(read, `${path}.${key}`);
|
|
273
|
+
else if (value !== void 0 && value !== null) {
|
|
274
|
+
const v = each(read, `${path}.${key}`, value);
|
|
275
|
+
if (v !== void 0) out[key] = v;
|
|
276
|
+
}
|
|
277
|
+
return Object.keys(out).length ? out : void 0;
|
|
278
|
+
}
|
|
279
|
+
function readV2(read, raw) {
|
|
280
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
281
|
+
if (value === void 0 || value === null || key === "version") continue;
|
|
282
|
+
switch (key) {
|
|
283
|
+
case "brand":
|
|
284
|
+
case "accent":
|
|
285
|
+
case "neutral": {
|
|
286
|
+
const v = readColor(read, key, value);
|
|
287
|
+
if (v) read.theme[key] = v;
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
case "fonts": {
|
|
291
|
+
const fonts = readGroup(read, key, value, [
|
|
292
|
+
"body",
|
|
293
|
+
"heading",
|
|
294
|
+
"mono"
|
|
295
|
+
], readFont);
|
|
296
|
+
if (fonts) read.theme.fonts = fonts;
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
case "size": {
|
|
300
|
+
const size = readGroup(read, key, value, [
|
|
301
|
+
"text",
|
|
302
|
+
"space",
|
|
303
|
+
"radius"
|
|
304
|
+
], readLength);
|
|
305
|
+
if (size) read.theme.size = size;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
case "scheme":
|
|
309
|
+
if (value === "light" || value === "auto") read.theme.scheme = value;
|
|
310
|
+
else bad(read, key, `${JSON.stringify(value)} is not a scheme ("light" or "auto")`);
|
|
311
|
+
break;
|
|
312
|
+
case "tokens":
|
|
313
|
+
readTokens(read, value);
|
|
314
|
+
break;
|
|
315
|
+
default: unknownKey(read, key);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
var V1_IGNORED = /^(sidebar_|header_|user_button_|secondary_color$|logo_url$)/;
|
|
320
|
+
var snake = (key) => key.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toLowerCase();
|
|
321
|
+
function readV1(read, raw) {
|
|
322
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
323
|
+
if (value === void 0 || value === null || key === "version") continue;
|
|
324
|
+
const name = snake(key);
|
|
325
|
+
switch (name) {
|
|
326
|
+
case "primary_color": {
|
|
327
|
+
const v = readColor(read, key, value);
|
|
328
|
+
if (v) read.theme.brand = v;
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
case "accent_color": {
|
|
332
|
+
const v = readColor(read, key, value);
|
|
333
|
+
if (v) read.theme.accent = v;
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
case "background_color": {
|
|
337
|
+
const v = readColor(read, key, value);
|
|
338
|
+
if (v) read.theme.neutral = v;
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
case "text_color": {
|
|
342
|
+
const v = readColor(read, key, value);
|
|
343
|
+
if (v) read.theme.tokens = {
|
|
344
|
+
...read.theme.tokens,
|
|
345
|
+
"color-text": v
|
|
346
|
+
};
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
case "font_family": {
|
|
350
|
+
const v = readFont(read, key, value);
|
|
351
|
+
if (v) read.theme.fonts = {
|
|
352
|
+
...read.theme.fonts,
|
|
353
|
+
body: v
|
|
354
|
+
};
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
default: if (!V1_IGNORED.test(name)) unknownKey(read, key);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
function parseTheme(raw) {
|
|
362
|
+
const read = {
|
|
363
|
+
theme: { version: 2 },
|
|
364
|
+
diagnostics: []
|
|
365
|
+
};
|
|
366
|
+
if (!isObject(raw)) {
|
|
367
|
+
read.diagnostics.push({
|
|
368
|
+
code: "THEME_NOT_OBJECT",
|
|
369
|
+
path: "",
|
|
370
|
+
message: `the theme must be an object, not ${raw === null ? "null" : Array.isArray(raw) ? "an array" : typeof raw}`,
|
|
371
|
+
severity: "error"
|
|
372
|
+
});
|
|
373
|
+
return read;
|
|
374
|
+
}
|
|
375
|
+
const version = raw.version;
|
|
376
|
+
if (version === 2) readV2(read, raw);
|
|
377
|
+
else if (version === void 0 || version === null || version === 1) readV1(read, raw);
|
|
378
|
+
else {
|
|
379
|
+
bad(read, "version", `${JSON.stringify(version)} is not a theme version (1 or 2); read as version 2`);
|
|
380
|
+
readV2(read, raw);
|
|
381
|
+
}
|
|
382
|
+
return read;
|
|
383
|
+
}
|
|
384
|
+
//#endregion
|
|
385
|
+
//#region packages/renderer/src/theme/derive.ts
|
|
386
|
+
var FALLBACK_BASE = {
|
|
387
|
+
"color-bg": "#ffffff",
|
|
388
|
+
"color-text": "#0a0a0a"
|
|
389
|
+
};
|
|
390
|
+
var TEXT_CONTRAST = 4.5;
|
|
391
|
+
var UI_CONTRAST = 3;
|
|
392
|
+
var hex = (lch) => toHex(fromOklch(lch));
|
|
393
|
+
var clampL = (l) => Math.min(1, Math.max(0, l));
|
|
394
|
+
function resolveColor(value, tokens, depth = 0) {
|
|
395
|
+
if (value === void 0 || depth > 8) return null;
|
|
396
|
+
const ref = VAR_REF.exec(value.trim());
|
|
397
|
+
if (!ref) return parseColor(value);
|
|
398
|
+
return resolveColor(tokens[ref[1]], tokens, depth + 1) ?? (ref[2] ? resolveColor(ref[2], tokens, depth + 1) : null);
|
|
399
|
+
}
|
|
400
|
+
function inkOn(color) {
|
|
401
|
+
const { c, h } = toOklch(color);
|
|
402
|
+
const [best, ratio] = [hex({
|
|
403
|
+
l: .97,
|
|
404
|
+
c: Math.min(c, .015),
|
|
405
|
+
h
|
|
406
|
+
}), hex({
|
|
407
|
+
l: .2,
|
|
408
|
+
c: Math.min(c, .03),
|
|
409
|
+
h
|
|
410
|
+
})].map((ink) => [ink, contrastRatio(ink, color) ?? 0]).reduce((a, b) => b[1] > a[1] ? b : a);
|
|
411
|
+
if (ratio >= TEXT_CONTRAST) return best;
|
|
412
|
+
return (contrastRatio("#ffffff", color) ?? 0) >= (contrastRatio("#000000", color) ?? 0) ? "#ffffff" : "#000000";
|
|
413
|
+
}
|
|
414
|
+
function readableOn(color, bg, min) {
|
|
415
|
+
const start = toHex(color);
|
|
416
|
+
if ((contrastRatio(start, bg) ?? 0) >= min) return start;
|
|
417
|
+
const lch = toOklch(color);
|
|
418
|
+
const step = toOklch(bg).l >= .5 ? -.01 : .01;
|
|
419
|
+
for (let l = lch.l + step; l >= 0 && l <= 1; l += step) {
|
|
420
|
+
const candidate = hex({
|
|
421
|
+
...lch,
|
|
422
|
+
l
|
|
423
|
+
});
|
|
424
|
+
if ((contrastRatio(candidate, bg) ?? 0) >= min) return candidate;
|
|
425
|
+
}
|
|
426
|
+
return step < 0 ? "#000000" : "#ffffff";
|
|
427
|
+
}
|
|
428
|
+
function themeTokens(theme, base = {}) {
|
|
429
|
+
const out = {};
|
|
430
|
+
const explicit = { ...theme.tokens };
|
|
431
|
+
const neutral = theme.neutral ? parseColor(theme.neutral) : null;
|
|
432
|
+
if (neutral) {
|
|
433
|
+
const { l, c, h } = toOklch(neutral);
|
|
434
|
+
out["color-bg"] = toHex({
|
|
435
|
+
...neutral,
|
|
436
|
+
alpha: 1
|
|
437
|
+
});
|
|
438
|
+
out["color-surface"] = hex({
|
|
439
|
+
l: clampL(l + .025),
|
|
440
|
+
c: c * .6,
|
|
441
|
+
h
|
|
442
|
+
});
|
|
443
|
+
out["color-surface-raised"] = hex({
|
|
444
|
+
l: clampL(l + .04),
|
|
445
|
+
c: c * .5,
|
|
446
|
+
h
|
|
447
|
+
});
|
|
448
|
+
out["color-surface-sunken"] = hex({
|
|
449
|
+
l: clampL(l - .04),
|
|
450
|
+
c: c * 1.2,
|
|
451
|
+
h
|
|
452
|
+
});
|
|
453
|
+
out["color-border"] = hex({
|
|
454
|
+
l: clampL(l - .11),
|
|
455
|
+
c: Math.min(c * 1.5, .05),
|
|
456
|
+
h
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
const merged = {
|
|
460
|
+
...FALLBACK_BASE,
|
|
461
|
+
...base,
|
|
462
|
+
...out,
|
|
463
|
+
...explicit
|
|
464
|
+
};
|
|
465
|
+
const bg = resolveColor(merged["color-bg"], merged) ?? parseColor(FALLBACK_BASE["color-bg"]);
|
|
466
|
+
const brand = theme.brand ? parseColor(theme.brand) : null;
|
|
467
|
+
if (brand) {
|
|
468
|
+
const solid = {
|
|
469
|
+
...brand,
|
|
470
|
+
alpha: 1
|
|
471
|
+
};
|
|
472
|
+
out["color-brand"] = toHex(solid);
|
|
473
|
+
out["color-on-brand"] = inkOn(solid);
|
|
474
|
+
}
|
|
475
|
+
const accent = theme.accent ? parseColor(theme.accent) : null;
|
|
476
|
+
if (accent) {
|
|
477
|
+
const solid = {
|
|
478
|
+
...accent,
|
|
479
|
+
alpha: 1
|
|
480
|
+
};
|
|
481
|
+
const { c, h } = toOklch(solid);
|
|
482
|
+
out["color-accent"] = toHex(solid);
|
|
483
|
+
out["color-on-accent"] = inkOn(solid);
|
|
484
|
+
out["color-accent-surface"] = hex({
|
|
485
|
+
l: .95,
|
|
486
|
+
c: Math.min(c * .25, .035),
|
|
487
|
+
h
|
|
488
|
+
});
|
|
489
|
+
out["color-link"] = readableOn(solid, bg, TEXT_CONTRAST);
|
|
490
|
+
out["color-focus"] = readableOn(solid, bg, UI_CONTRAST);
|
|
491
|
+
}
|
|
492
|
+
const { body, heading = body, mono } = theme.fonts ?? {};
|
|
493
|
+
if (body) out["font-body"] = body;
|
|
494
|
+
if (heading) out["font-heading"] = heading;
|
|
495
|
+
if (mono) out["font-mono"] = mono;
|
|
496
|
+
if (theme.size?.text) out["text-base"] = theme.size.text;
|
|
497
|
+
if (theme.size?.space) out["space-unit"] = theme.size.space;
|
|
498
|
+
if (theme.size?.radius) out["radius-base"] = theme.size.radius;
|
|
499
|
+
return {
|
|
500
|
+
...out,
|
|
501
|
+
...explicit
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
function themeCss(theme, base) {
|
|
505
|
+
const lines = Object.entries(themeTokens(theme, base)).filter(([name, value]) => /^[a-z0-9-]+$/.test(name) && typeof value === "string" && isSafeCssValue(value)).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([name, value]) => ` --${name}: ${value.trim()};`);
|
|
506
|
+
return lines.length ? `@layer theme {\n :root {\n${lines.join("\n")}\n }\n}\n` : "";
|
|
507
|
+
}
|
|
508
|
+
//#endregion
|
|
509
|
+
//#region packages/renderer/src/theme/check.ts
|
|
510
|
+
var CONTRAST_PAIRS = [
|
|
511
|
+
[
|
|
512
|
+
"color-text",
|
|
513
|
+
"color-bg",
|
|
514
|
+
4.5
|
|
515
|
+
],
|
|
516
|
+
[
|
|
517
|
+
"color-text",
|
|
518
|
+
"color-surface",
|
|
519
|
+
4.5
|
|
520
|
+
],
|
|
521
|
+
[
|
|
522
|
+
"color-text-muted",
|
|
523
|
+
"color-bg",
|
|
524
|
+
4.5
|
|
525
|
+
],
|
|
526
|
+
[
|
|
527
|
+
"color-text-muted",
|
|
528
|
+
"color-surface",
|
|
529
|
+
4.5
|
|
530
|
+
],
|
|
531
|
+
[
|
|
532
|
+
"color-text-subtle",
|
|
533
|
+
"color-bg",
|
|
534
|
+
4.5
|
|
535
|
+
],
|
|
536
|
+
[
|
|
537
|
+
"color-on-brand",
|
|
538
|
+
"color-brand",
|
|
539
|
+
4.5
|
|
540
|
+
],
|
|
541
|
+
[
|
|
542
|
+
"color-on-accent",
|
|
543
|
+
"color-accent",
|
|
544
|
+
4.5
|
|
545
|
+
],
|
|
546
|
+
[
|
|
547
|
+
"color-link",
|
|
548
|
+
"color-bg",
|
|
549
|
+
4.5
|
|
550
|
+
],
|
|
551
|
+
...[
|
|
552
|
+
"info",
|
|
553
|
+
"success",
|
|
554
|
+
"warning",
|
|
555
|
+
"danger"
|
|
556
|
+
].flatMap((status) => [[
|
|
557
|
+
`color-${status}`,
|
|
558
|
+
"color-bg",
|
|
559
|
+
3
|
|
560
|
+
], [
|
|
561
|
+
`color-on-${status}`,
|
|
562
|
+
`color-${status}`,
|
|
563
|
+
4.5
|
|
564
|
+
]]),
|
|
565
|
+
[
|
|
566
|
+
"color-focus",
|
|
567
|
+
"color-bg",
|
|
568
|
+
3
|
|
569
|
+
],
|
|
570
|
+
[
|
|
571
|
+
"color-border-strong",
|
|
572
|
+
"color-bg",
|
|
573
|
+
3
|
|
574
|
+
]
|
|
575
|
+
];
|
|
576
|
+
var DARK_NEUTRAL = .5;
|
|
577
|
+
function checkTheme(theme, base = {}) {
|
|
578
|
+
const tier = {
|
|
579
|
+
...FALLBACK_BASE,
|
|
580
|
+
...base,
|
|
581
|
+
...themeTokens(theme, base)
|
|
582
|
+
};
|
|
583
|
+
const diagnostics = [];
|
|
584
|
+
const neutral = theme.neutral ? parseColor(theme.neutral) : null;
|
|
585
|
+
if (neutral && toOklch(neutral).l < DARK_NEUTRAL) diagnostics.push({
|
|
586
|
+
code: "THEME_CONTRAST",
|
|
587
|
+
path: "neutral",
|
|
588
|
+
message: `neutral ${theme.neutral} is dark; the light scheme keeps dark ink on it (set the color-text tokens, or wait for the dark scheme)`,
|
|
589
|
+
severity: "warning"
|
|
590
|
+
});
|
|
591
|
+
for (const [fgName, bgName, min] of CONTRAST_PAIRS) {
|
|
592
|
+
const fg = resolveColor(tier[fgName], tier);
|
|
593
|
+
const bg = resolveColor(tier[bgName], tier);
|
|
594
|
+
if (!fg || !bg) continue;
|
|
595
|
+
const ratio = contrastRatio(fg, bg);
|
|
596
|
+
if (ratio >= min) continue;
|
|
597
|
+
diagnostics.push({
|
|
598
|
+
code: "THEME_CONTRAST",
|
|
599
|
+
path: `${fgName} on ${bgName}`,
|
|
600
|
+
message: `${fgName} (${toHex(fg)}) on ${bgName} (${toHex(bg)}) is ${ratio.toFixed(2)}:1; needs ${min}:1`,
|
|
601
|
+
severity: "warning"
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
return diagnostics;
|
|
605
|
+
}
|
|
606
|
+
//#endregion
|
|
607
|
+
export { CONTRAST_PAIRS, checkTheme, contrastRatio, fromOklch, parseColor, parseTheme, relativeLuminance, themeCss, themeTokens, toHex, toOklch };
|
|
608
|
+
|
|
609
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","names":[],"sources":["../src/theme/color.ts","../src/theme/parse.ts","../src/theme/derive.ts","../src/theme/check.ts"],"mappings":"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"}
|
|
@@ -13,10 +13,14 @@ export type BundleRow = {
|
|
|
13
13
|
component_name: string | null;
|
|
14
14
|
exposed_export: string | null;
|
|
15
15
|
}>;
|
|
16
|
+
/** A shared lineage's specifier: the loader imports it by this, never by URL. */
|
|
17
|
+
specifier?: string | null;
|
|
16
18
|
};
|
|
17
19
|
export type LoadedBundle = {
|
|
18
20
|
id: string;
|
|
19
21
|
label: string;
|
|
22
|
+
/** Set for a shared lineage (`@stack/core`). */
|
|
23
|
+
specifier?: string;
|
|
20
24
|
components: Record<string, ComponentType<Record<string, unknown>>>;
|
|
21
25
|
/** `contracts.json`: per-component @data / @action / @printPolicy / @size. */
|
|
22
26
|
contracts: Record<string, unknown>;
|
|
@@ -41,6 +45,9 @@ export declare function runtimeReady(g?: Record<string, unknown>): Promise<void>
|
|
|
41
45
|
/**
|
|
42
46
|
* Load one bundle, once per bundle id (ids are immutable). Waits for the
|
|
43
47
|
* shared runtime first, so the bundle's bare imports resolve to the host's.
|
|
48
|
+
* A shared lineage is imported by its specifier, which the page's import map
|
|
49
|
+
* points at its live version: dependents that import it get the same module
|
|
50
|
+
* instance, and so the same React contexts (design/core-and-tokens.md §4).
|
|
44
51
|
*/
|
|
45
52
|
export declare function loadBundle(row: BundleRow, files: BundleFiles): Promise<LoadedBundle>;
|
|
46
53
|
/** Load every bundle in scope in parallel; a failure drops that bundle, not the page. */
|
|
@@ -10,7 +10,22 @@ export type LineageRef = {
|
|
|
10
10
|
} | {
|
|
11
11
|
kind: 'pinned';
|
|
12
12
|
bundleId: string;
|
|
13
|
+
}
|
|
14
|
+
/** A shared lineage (design/core-and-tokens.md §4), imported by its specifier. */
|
|
15
|
+
| {
|
|
16
|
+
kind: 'shared';
|
|
17
|
+
specifier: string;
|
|
18
|
+
orgSlug: string;
|
|
19
|
+
bundle: string;
|
|
20
|
+
};
|
|
21
|
+
/** A row of `shared_lineage_live`, as the scope needs it. */
|
|
22
|
+
export type SharedLineage = {
|
|
23
|
+
specifier: string;
|
|
24
|
+
org_slug: string;
|
|
25
|
+
bundle_name: string;
|
|
13
26
|
};
|
|
27
|
+
/** The shared lineage `@core/Name` resolves from first. */
|
|
28
|
+
export declare const CORE_SPECIFIER = "@stack/core";
|
|
14
29
|
export declare const MAIN = "main";
|
|
15
30
|
export declare const PUBLIC = "public";
|
|
16
31
|
/**
|
|
@@ -36,6 +51,12 @@ export type BundleScopeInput = {
|
|
|
36
51
|
orgs?: Array<{
|
|
37
52
|
id: string;
|
|
38
53
|
}>;
|
|
54
|
+
/** `shared_lineage_live`: the shared lineages, after every org lineage. */
|
|
55
|
+
shared?: readonly SharedLineage[];
|
|
39
56
|
};
|
|
40
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* The ordered, de-duplicated lineage list for a page: page → project →
|
|
59
|
+
* section → org main → shared lineages (design/core-and-tokens.md §3), so an
|
|
60
|
+
* org lineage replaces a shared component by exporting the same name.
|
|
61
|
+
*/
|
|
41
62
|
export declare function bundleScope(input: BundleScopeInput): LineageRef[];
|