@adonis-agora/agent 0.74.1 → 0.75.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/CHANGELOG.md +29 -0
- package/dist/src/channels/handler.d.ts.map +1 -1
- package/dist/src/channels/handler.js +10 -0
- package/dist/src/channels/handler.js.map +1 -1
- package/dist/src/channels/texts.d.ts +2 -0
- package/dist/src/channels/texts.d.ts.map +1 -1
- package/dist/src/channels/texts.js.map +1 -1
- package/dist/src/genui/catalog.d.ts.map +1 -1
- package/dist/src/genui/catalog.js +3 -1
- package/dist/src/genui/catalog.js.map +1 -1
- package/dist/src/genui/channels.d.ts +32 -5
- package/dist/src/genui/channels.d.ts.map +1 -1
- package/dist/src/genui/channels.js +20 -9
- package/dist/src/genui/channels.js.map +1 -1
- package/dist/src/genui/index.d.ts.map +1 -1
- package/dist/src/genui/index.js +7 -7
- package/dist/src/genui/index.js.map +1 -1
- package/dist/src/genui/kit/bundle.d.ts +12 -0
- package/dist/src/genui/kit/bundle.d.ts.map +1 -1
- package/dist/src/genui/kit/bundle.js +124 -133
- package/dist/src/genui/kit/bundle.js.map +1 -1
- package/dist/src/genui/kit/discover.d.ts +8 -5
- package/dist/src/genui/kit/discover.d.ts.map +1 -1
- package/dist/src/genui/kit/discover.js +45 -18
- package/dist/src/genui/kit/discover.js.map +1 -1
- package/dist/src/genui/kit/docs.d.ts +3 -1
- package/dist/src/genui/kit/docs.d.ts.map +1 -1
- package/dist/src/genui/kit/docs.js +22 -5
- package/dist/src/genui/kit/docs.js.map +1 -1
- package/dist/src/genui/kit/files.d.ts +22 -10
- package/dist/src/genui/kit/files.d.ts.map +1 -1
- package/dist/src/genui/kit/files.js +117 -19
- package/dist/src/genui/kit/files.js.map +1 -1
- package/dist/src/genui/kit/index.d.ts +5 -3
- package/dist/src/genui/kit/index.d.ts.map +1 -1
- package/dist/src/genui/kit/index.js +4 -2
- package/dist/src/genui/kit/index.js.map +1 -1
- package/dist/src/genui/kit/plugin.d.ts +17 -9
- package/dist/src/genui/kit/plugin.d.ts.map +1 -1
- package/dist/src/genui/kit/plugin.js +196 -129
- package/dist/src/genui/kit/plugin.js.map +1 -1
- package/dist/src/genui/kit/styles.d.ts +83 -0
- package/dist/src/genui/kit/styles.d.ts.map +1 -0
- package/dist/src/genui/kit/styles.js +406 -0
- package/dist/src/genui/kit/styles.js.map +1 -0
- package/dist/src/genui/kit/vite-build.d.ts +33 -0
- package/dist/src/genui/kit/vite-build.d.ts.map +1 -0
- package/dist/src/genui/kit/vite-build.js +195 -0
- package/dist/src/genui/kit/vite-build.js.map +1 -0
- package/dist/src/genui/kit/write.d.ts +20 -8
- package/dist/src/genui/kit/write.d.ts.map +1 -1
- package/dist/src/genui/kit/write.js +54 -16
- package/dist/src/genui/kit/write.js.map +1 -1
- package/dist/src/genui/public.d.ts +5 -4
- package/dist/src/genui/public.d.ts.map +1 -1
- package/dist/src/genui/public.js +4 -3
- package/dist/src/genui/public.js.map +1 -1
- package/dist/src/genui/sandbox-jsx-frame-generated.d.ts +2 -0
- package/dist/src/genui/sandbox-jsx-frame-generated.d.ts.map +1 -0
- package/dist/src/genui/sandbox-jsx-frame-generated.js +4 -0
- package/dist/src/genui/sandbox-jsx-frame-generated.js.map +1 -0
- package/dist/src/genui/sandbox-kit.d.ts +50 -17
- package/dist/src/genui/sandbox-kit.d.ts.map +1 -1
- package/dist/src/genui/sandbox-kit.js +20 -10
- package/dist/src/genui/sandbox-kit.js.map +1 -1
- package/dist/src/genui/sandbox-styles.d.ts +113 -0
- package/dist/src/genui/sandbox-styles.d.ts.map +1 -0
- package/dist/src/genui/sandbox-styles.js +487 -0
- package/dist/src/genui/sandbox-styles.js.map +1 -0
- package/dist/src/genui/sandbox-theme.d.ts +13 -9
- package/dist/src/genui/sandbox-theme.d.ts.map +1 -1
- package/dist/src/genui/sandbox-theme.js +52 -60
- package/dist/src/genui/sandbox-theme.js.map +1 -1
- package/dist/src/genui/sandbox.d.ts +14 -15
- package/dist/src/genui/sandbox.d.ts.map +1 -1
- package/dist/src/genui/sandbox.js +55 -13
- package/dist/src/genui/sandbox.js.map +1 -1
- package/dist/src/genui/tools.d.ts +20 -0
- package/dist/src/genui/tools.d.ts.map +1 -1
- package/dist/src/genui/tools.js +19 -4
- package/dist/src/genui/tools.js.map +1 -1
- package/dist/src/hooks/genui_kit.d.ts +6 -2
- package/dist/src/hooks/genui_kit.d.ts.map +1 -1
- package/dist/src/hooks/genui_kit.js +21 -9
- package/dist/src/hooks/genui_kit.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/negotiated-tool-ui.d.ts.map +1 -1
- package/dist/src/negotiated-tool-ui.js +4 -0
- package/dist/src/negotiated-tool-ui.js.map +1 -1
- package/dist/src/react/core/genui/sandbox-assets.d.ts +4 -1
- package/dist/src/react/core/genui/sandbox-assets.d.ts.map +1 -1
- package/dist/src/react/core/genui/sandbox-assets.js +17 -5
- package/dist/src/react/core/genui/sandbox-assets.js.map +1 -1
- package/dist/src/react/core/genui/sandbox.d.ts +1 -1
- package/dist/src/react/core/genui/sandbox.d.ts.map +1 -1
- package/dist/src/react/core/genui/sandbox.js +20 -4
- package/dist/src/react/core/genui/sandbox.js.map +1 -1
- package/dist/src/vite/index.d.ts +10 -7
- package/dist/src/vite/index.d.ts.map +1 -1
- package/dist/src/vite/index.js +10 -7
- package/dist/src/vite/index.js.map +1 -1
- package/package.json +13 -2
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The app's stylesheet as the model learns it — the isomorphic half of `genuiSandboxKit({ styles })`:
|
|
3
|
+
*
|
|
4
|
+
* - Tailwind: the theme tokens, utilities and variants the app's Tailwind directives declare
|
|
5
|
+
* (`@theme`, `@utility`, `@custom-variant`), and a Tailwind v3 config's theme as a v4 `@theme`
|
|
6
|
+
* (the frame runs the v4 browser runtime);
|
|
7
|
+
* - any other CSS (plain, Sass, Less, Bootstrap…): its vocabulary — the class names it defines,
|
|
8
|
+
* grouped and deduplicated, the most used first, and the custom properties on its root;
|
|
9
|
+
* - `url()`s turned into `data:` URIs (the frame has no network), within a size budget.
|
|
10
|
+
*
|
|
11
|
+
* Everything here is pure: the Node side (`genui/kit/styles.ts`) reads and compiles the files.
|
|
12
|
+
*/
|
|
13
|
+
import { themeVarsFromCss } from './sandbox-theme.js';
|
|
14
|
+
// ---------------------------------------------------------------------------------------------
|
|
15
|
+
// A small CSS walker: the style rules' selectors, and the at-rules they sit in.
|
|
16
|
+
// ---------------------------------------------------------------------------------------------
|
|
17
|
+
/** At-rules whose block holds more rules (their selectors count); the others' blocks are skipped. */
|
|
18
|
+
const GROUPING_AT_RULES = /^@(media|supports|layer|container|scope|document|starting-style)\b/i;
|
|
19
|
+
function stripComments(css) {
|
|
20
|
+
return css.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
21
|
+
}
|
|
22
|
+
/** The index of the `}` closing the block opened at `open` (strings skipped). */
|
|
23
|
+
function blockEnd(css, open) {
|
|
24
|
+
let depth = 0;
|
|
25
|
+
for (let index = open; index < css.length; index++) {
|
|
26
|
+
const c = css[index];
|
|
27
|
+
if (c === '"' || c === "'") {
|
|
28
|
+
const close = css.indexOf(c, index + 1);
|
|
29
|
+
index = close < 0 ? css.length : close;
|
|
30
|
+
}
|
|
31
|
+
else if (c === '{')
|
|
32
|
+
depth++;
|
|
33
|
+
else if (c === '}') {
|
|
34
|
+
depth--;
|
|
35
|
+
if (depth === 0)
|
|
36
|
+
return index;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return css.length;
|
|
40
|
+
}
|
|
41
|
+
/** Every style rule's selector text, at any depth of grouping at-rules. */
|
|
42
|
+
function forEachSelector(css, visit) {
|
|
43
|
+
const walk = (text) => {
|
|
44
|
+
let start = 0;
|
|
45
|
+
for (let index = 0; index < text.length; index++) {
|
|
46
|
+
const c = text[index];
|
|
47
|
+
if (c === '"' || c === "'") {
|
|
48
|
+
const close = text.indexOf(c, index + 1);
|
|
49
|
+
index = close < 0 ? text.length : close;
|
|
50
|
+
}
|
|
51
|
+
else if (c === ';' || c === '}') {
|
|
52
|
+
start = index + 1;
|
|
53
|
+
}
|
|
54
|
+
else if (c === '{') {
|
|
55
|
+
const prelude = text.slice(start, index).trim();
|
|
56
|
+
const end = blockEnd(text, index);
|
|
57
|
+
const body = text.slice(index + 1, end);
|
|
58
|
+
if (prelude.startsWith('@')) {
|
|
59
|
+
if (GROUPING_AT_RULES.test(prelude))
|
|
60
|
+
walk(body);
|
|
61
|
+
}
|
|
62
|
+
else if (prelude !== '')
|
|
63
|
+
visit(prelude, body);
|
|
64
|
+
index = end;
|
|
65
|
+
start = end + 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
walk(stripComments(css));
|
|
70
|
+
}
|
|
71
|
+
/** A generated (CSS-modules) name: `_button_x1y2z_3`, `Button_root__a1B2c`. */
|
|
72
|
+
const HASHED_CLASS = /(^_[\w-]+_[a-zA-Z0-9]{5,}(_\d+)?$)|(__[a-zA-Z0-9_-]{5}$)/;
|
|
73
|
+
/** The class names a selector names (escaped ones — `md\:flex` — and those in attribute values left out). */
|
|
74
|
+
function selectorClasses(selector) {
|
|
75
|
+
const clean = selector.replace(/\[[^\]]*\]/g, '[]').replace(/"[^"]*"|'[^']*'/g, '""');
|
|
76
|
+
const out = [];
|
|
77
|
+
for (const match of clean.matchAll(/\.((?:-?[_a-zA-Z]|--)[_a-zA-Z0-9-]*)(\\?)/g)) {
|
|
78
|
+
if (match[2] === '\\')
|
|
79
|
+
continue;
|
|
80
|
+
out.push(match[1]);
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* What a stylesheet gives the model to write with: its class names, grouped into families
|
|
86
|
+
* (`btn`, `card`, `form`…) and compressed (`btn-{primary,secondary,danger}`), the most used first —
|
|
87
|
+
* a class counts once per selector it appears in, and twice more where it stands alone (`.btn {`,
|
|
88
|
+
* a component's root) — plus the custom properties on its root. Generated CSS-modules names are
|
|
89
|
+
* left out (nobody can write them).
|
|
90
|
+
*/
|
|
91
|
+
export function extractCssVocabulary(css, options = {}) {
|
|
92
|
+
const maxClasses = options.maxClasses ?? 600;
|
|
93
|
+
const maxPerFamily = options.maxPerFamily ?? 30;
|
|
94
|
+
const maxVars = options.maxVars ?? 80;
|
|
95
|
+
const score = new Map();
|
|
96
|
+
forEachSelector(css, (selectorList) => {
|
|
97
|
+
for (const selector of selectorList.split(',')) {
|
|
98
|
+
const trimmed = selector.trim();
|
|
99
|
+
const classes = selectorClasses(trimmed);
|
|
100
|
+
const alone = classes.length === 1 && /^\.[_a-zA-Z0-9-]+$/.test(trimmed);
|
|
101
|
+
for (const name of new Set(classes)) {
|
|
102
|
+
if (HASHED_CLASS.test(name))
|
|
103
|
+
continue;
|
|
104
|
+
score.set(name, (score.get(name) ?? 0) + 1 + (alone ? 2 : 0));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
const family = (name) => name.replace(/^[-_]+/, '').split(/-|__/)[0] || name;
|
|
109
|
+
const families = new Map();
|
|
110
|
+
const ranked = [...score.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));
|
|
111
|
+
for (const [name, value] of ranked) {
|
|
112
|
+
const key = family(name);
|
|
113
|
+
const entry = families.get(key) ?? { score: 0, names: [] };
|
|
114
|
+
// A family ranks by its most used member (a component's root, `.btn`), not by its size — a
|
|
115
|
+
// utility family with a class per breakpoint and step is large, not important.
|
|
116
|
+
entry.score = Math.max(entry.score, value);
|
|
117
|
+
entry.names.push(name);
|
|
118
|
+
families.set(key, entry);
|
|
119
|
+
}
|
|
120
|
+
const groups = [];
|
|
121
|
+
let listed = 0;
|
|
122
|
+
const orderedFamilies = [...families.entries()].sort((a, b) => b[1].score - a[1].score || a[0].localeCompare(b[0]));
|
|
123
|
+
for (const [name, entry] of orderedFamilies) {
|
|
124
|
+
if (listed >= maxClasses)
|
|
125
|
+
break;
|
|
126
|
+
const names = entry.names.slice(0, Math.min(maxPerFamily, maxClasses - listed));
|
|
127
|
+
listed += names.length;
|
|
128
|
+
groups.push({ name, classes: compressClassNames(names) });
|
|
129
|
+
}
|
|
130
|
+
const vars = Object.keys(themeVarsFromCss(css, { rootOnly: true })).slice(0, maxVars);
|
|
131
|
+
return { groups, total: score.size, listed, vars };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Class names sharing everything but their last `-segment`, written once: `btn-primary`,
|
|
135
|
+
* `btn-secondary` → `btn-{primary,secondary}`. Order kept (the first member's place).
|
|
136
|
+
*/
|
|
137
|
+
export function compressClassNames(names) {
|
|
138
|
+
const stemOf = (name) => {
|
|
139
|
+
const cut = name.lastIndexOf('-');
|
|
140
|
+
return cut > 0 && cut < name.length - 1 ? name.slice(0, cut) : undefined;
|
|
141
|
+
};
|
|
142
|
+
const byStem = new Map();
|
|
143
|
+
for (const name of names) {
|
|
144
|
+
const stem = stemOf(name);
|
|
145
|
+
if (stem === undefined)
|
|
146
|
+
continue;
|
|
147
|
+
byStem.set(stem, [...(byStem.get(stem) ?? []), name]);
|
|
148
|
+
}
|
|
149
|
+
const out = [];
|
|
150
|
+
const done = new Set();
|
|
151
|
+
for (const name of names) {
|
|
152
|
+
const stem = stemOf(name);
|
|
153
|
+
const siblings = stem === undefined ? undefined : byStem.get(stem);
|
|
154
|
+
if (stem === undefined || siblings === undefined || siblings.length < 2) {
|
|
155
|
+
out.push(name);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (done.has(stem))
|
|
159
|
+
continue;
|
|
160
|
+
done.add(stem);
|
|
161
|
+
out.push(`${stem}-{${siblings.map((each) => each.slice(stem.length + 1)).join(',')}}`);
|
|
162
|
+
}
|
|
163
|
+
return out;
|
|
164
|
+
}
|
|
165
|
+
/** The vocabulary as the model reads it (inside the sandbox description). */
|
|
166
|
+
export function vocabularyToModelText(vocabulary, options = {}) {
|
|
167
|
+
const attribute = options.jsx === true ? 'className (in JSX) or class (in html)' : 'class="…"';
|
|
168
|
+
const lines = [
|
|
169
|
+
`The app's stylesheet is loaded in the frame. Style the view with ITS classes (${attribute}) instead of writing your own CSS — write css only for layout it does not cover. The classes it defines, by family, most used first (a{b,c} means ab and ac):`,
|
|
170
|
+
];
|
|
171
|
+
for (const group of vocabulary.groups)
|
|
172
|
+
lines.push(`- ${group.name}: ${group.classes.join(' ')}`);
|
|
173
|
+
if (vocabulary.total > vocabulary.listed)
|
|
174
|
+
lines.push(`(${vocabulary.total - vocabulary.listed} rarer classes not listed.)`);
|
|
175
|
+
if (vocabulary.vars.length > 0)
|
|
176
|
+
lines.push(`Its custom properties, for your own css: ${vocabulary.vars.map((name) => `var(${name})`).join(', ')}.`);
|
|
177
|
+
return lines.join('\n');
|
|
178
|
+
}
|
|
179
|
+
// ---------------------------------------------------------------------------------------------
|
|
180
|
+
// Tailwind
|
|
181
|
+
// ---------------------------------------------------------------------------------------------
|
|
182
|
+
/** Whether a stylesheet's source uses Tailwind, and which major version it reads as. */
|
|
183
|
+
export function tailwindVersionOf(source) {
|
|
184
|
+
const text = stripComments(source);
|
|
185
|
+
if (/@import\s+(url\()?\s*["']tailwindcss(\/[^"']*)?["']/.test(text))
|
|
186
|
+
return 4;
|
|
187
|
+
if (/@(theme|custom-variant|utility|plugin|source)\b/.test(text))
|
|
188
|
+
return 4;
|
|
189
|
+
if (/\/\*!\s*tailwindcss v4/.test(source))
|
|
190
|
+
return 4;
|
|
191
|
+
if (/@tailwind\s+(base|components|utilities|variants|screens)\b/.test(text))
|
|
192
|
+
return 3;
|
|
193
|
+
if (/\/\*!\s*tailwindcss v3/.test(source))
|
|
194
|
+
return 3;
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* The Tailwind directives of an app stylesheet the frame's Tailwind runtime gets too: its
|
|
199
|
+
* `@custom-variant`s, `@utility`s, `@variant`s and `@theme` blocks (`@keyframes` inside them
|
|
200
|
+
* included) — not its `@import`s, `@source`s, `@plugin`s or base styles (those reach the frame
|
|
201
|
+
* compiled).
|
|
202
|
+
*/
|
|
203
|
+
export function tailwindDirectivesFromCss(css) {
|
|
204
|
+
const text = stripComments(css);
|
|
205
|
+
const out = [];
|
|
206
|
+
const directive = /@(custom-variant|utility|theme)\b/g;
|
|
207
|
+
let depth = 0;
|
|
208
|
+
for (let index = 0; index < text.length; index++) {
|
|
209
|
+
const c = text[index];
|
|
210
|
+
if (c === '{')
|
|
211
|
+
depth++;
|
|
212
|
+
else if (c === '}')
|
|
213
|
+
depth = Math.max(0, depth - 1);
|
|
214
|
+
else if (c === '@' && depth === 0) {
|
|
215
|
+
directive.lastIndex = index;
|
|
216
|
+
const match = directive.exec(text);
|
|
217
|
+
if (match === null || match.index !== index)
|
|
218
|
+
continue;
|
|
219
|
+
// One statement (`@custom-variant dark (&:where(.dark *));`) or one balanced block.
|
|
220
|
+
let end = index;
|
|
221
|
+
let inner = 0;
|
|
222
|
+
for (; end < text.length; end++) {
|
|
223
|
+
const ch = text[end];
|
|
224
|
+
if (ch === ';' && inner === 0)
|
|
225
|
+
break;
|
|
226
|
+
if (ch === '{')
|
|
227
|
+
inner++;
|
|
228
|
+
else if (ch === '}') {
|
|
229
|
+
inner--;
|
|
230
|
+
if (inner === 0)
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
out.push(text.slice(index, end + 1).trim());
|
|
235
|
+
index = end;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return out.join('\n');
|
|
239
|
+
}
|
|
240
|
+
/** The tokens a Tailwind stylesheet's directives declare (see {@link tailwindDirectivesFromCss}). */
|
|
241
|
+
export function tailwindTokensFromCss(css) {
|
|
242
|
+
const tokens = {
|
|
243
|
+
colors: [],
|
|
244
|
+
radius: [],
|
|
245
|
+
fonts: [],
|
|
246
|
+
shadows: [],
|
|
247
|
+
text: [],
|
|
248
|
+
animations: [],
|
|
249
|
+
utilities: [],
|
|
250
|
+
variants: [],
|
|
251
|
+
};
|
|
252
|
+
const text = stripComments(css);
|
|
253
|
+
const add = (list, name) => {
|
|
254
|
+
if (name !== '' && name !== '*' && !list.includes(name))
|
|
255
|
+
list.push(name);
|
|
256
|
+
};
|
|
257
|
+
for (const block of text.matchAll(/@theme\b[^{]*\{/g)) {
|
|
258
|
+
const open = (block.index ?? 0) + block[0].length - 1;
|
|
259
|
+
const body = text.slice(open + 1, blockEnd(text, open));
|
|
260
|
+
for (const match of body.matchAll(/(?:^|[;{\s])--([A-Za-z0-9_-]+)\s*:\s*([^;]*)/g)) {
|
|
261
|
+
const name = match[1];
|
|
262
|
+
if ((match[2] ?? '').trim() === 'initial')
|
|
263
|
+
continue;
|
|
264
|
+
const pick = (prefix, list) => {
|
|
265
|
+
if (!name.startsWith(prefix))
|
|
266
|
+
return false;
|
|
267
|
+
const rest = name.slice(prefix.length);
|
|
268
|
+
if (!rest.includes('--'))
|
|
269
|
+
add(list, rest);
|
|
270
|
+
return true;
|
|
271
|
+
};
|
|
272
|
+
if (pick('color-', tokens.colors))
|
|
273
|
+
continue;
|
|
274
|
+
if (pick('radius-', tokens.radius))
|
|
275
|
+
continue;
|
|
276
|
+
if (pick('font-', tokens.fonts))
|
|
277
|
+
continue;
|
|
278
|
+
if (pick('shadow-', tokens.shadows))
|
|
279
|
+
continue;
|
|
280
|
+
if (pick('text-', tokens.text))
|
|
281
|
+
continue;
|
|
282
|
+
pick('animate-', tokens.animations);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
for (const match of text.matchAll(/@utility\s+([A-Za-z0-9_*-]+)/g))
|
|
286
|
+
add(tokens.utilities, match[1]);
|
|
287
|
+
for (const match of text.matchAll(/@custom-variant\s+([A-Za-z0-9_-]+)/g))
|
|
288
|
+
add(tokens.variants, match[1]);
|
|
289
|
+
return tokens;
|
|
290
|
+
}
|
|
291
|
+
/** What the model is told about Tailwind in the frame. `colors` may add the host theme's names. */
|
|
292
|
+
export function tailwindToModelText(tokens, options = {}) {
|
|
293
|
+
const colors = [...new Set([...tokens.colors, ...(options.colors ?? [])])];
|
|
294
|
+
const list = (names, max) => names.slice(0, max).join(', ') + (names.length > max ? ', …' : '');
|
|
295
|
+
const parts = [
|
|
296
|
+
'Tailwind CSS utility classes work in the frame, offline — the app\'s own Tailwind theme, compiled live for whatever classes you write (className="flex gap-2 p-4 rounded-lg bg-card text-card-foreground"). Prefer them to custom CSS.',
|
|
297
|
+
];
|
|
298
|
+
if (options.version === 3)
|
|
299
|
+
parts.push('The app is on Tailwind v3, the frame runs v4 with its theme mapped: write v4 names (shadow-xs, rounded-xs, outline-hidden where v3 had shadow-sm, rounded-sm, outline-none).');
|
|
300
|
+
const theme = [];
|
|
301
|
+
if (colors.length > 0)
|
|
302
|
+
theme.push(`colors ${list(colors, 40)} (bg-*, text-*, border-*, ring-*)`);
|
|
303
|
+
if (tokens.radius.length > 0)
|
|
304
|
+
theme.push(`radius rounded-{${list(tokens.radius, 12)}}`);
|
|
305
|
+
if (tokens.fonts.length > 0)
|
|
306
|
+
theme.push(`fonts font-{${list(tokens.fonts, 8)}}`);
|
|
307
|
+
if (tokens.shadows.length > 0)
|
|
308
|
+
theme.push(`shadows shadow-{${list(tokens.shadows, 10)}}`);
|
|
309
|
+
if (tokens.text.length > 0)
|
|
310
|
+
theme.push(`text sizes text-{${list(tokens.text, 14)}}`);
|
|
311
|
+
if (tokens.animations.length > 0)
|
|
312
|
+
theme.push(`animations animate-{${list(tokens.animations, 10)}}`);
|
|
313
|
+
if (theme.length > 0)
|
|
314
|
+
parts.push(`The app's theme: ${theme.join('; ')}.`);
|
|
315
|
+
if (tokens.utilities.length > 0)
|
|
316
|
+
parts.push(`Its own utilities: ${list(tokens.utilities, 30)}.`);
|
|
317
|
+
if (tokens.variants.length > 0)
|
|
318
|
+
parts.push(`Its variants: ${tokens.variants
|
|
319
|
+
.slice(0, 20)
|
|
320
|
+
.map((name) => `${name}:`)
|
|
321
|
+
.join(', ')}.`);
|
|
322
|
+
return parts.join(' ');
|
|
323
|
+
}
|
|
324
|
+
/** `{ primary: { DEFAULT: x, foreground: y } }` → `[['primary', x], ['primary-foreground', y]]`. */
|
|
325
|
+
function flattenThemeObject(value, prefix = '') {
|
|
326
|
+
if (typeof value === 'string' || typeof value === 'number')
|
|
327
|
+
return prefix === '' ? [] : [[prefix, String(value)]];
|
|
328
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
329
|
+
return [];
|
|
330
|
+
const out = [];
|
|
331
|
+
for (const [key, inner] of Object.entries(value)) {
|
|
332
|
+
const name = key === 'DEFAULT' ? prefix : prefix === '' ? key : `${prefix}-${key}`;
|
|
333
|
+
if (name === '')
|
|
334
|
+
continue;
|
|
335
|
+
out.push(...flattenThemeObject(inner, name));
|
|
336
|
+
}
|
|
337
|
+
return out;
|
|
338
|
+
}
|
|
339
|
+
function cssName(key) {
|
|
340
|
+
return key.replace(/\./g, '_').replace(/[^A-Za-z0-9_-]/g, '-');
|
|
341
|
+
}
|
|
342
|
+
function fontStack(value) {
|
|
343
|
+
const list = Array.isArray(value) ? (Array.isArray(value[0]) ? value[0] : value) : [value];
|
|
344
|
+
const names = list.filter((each) => typeof each === 'string');
|
|
345
|
+
if (names.length === 0)
|
|
346
|
+
return undefined;
|
|
347
|
+
return names
|
|
348
|
+
.map((name) => /\s/.test(name) && !/^["']/.test(name) && !name.includes('(') ? `"${name}"` : name)
|
|
349
|
+
.join(', ');
|
|
350
|
+
}
|
|
351
|
+
function keyframesCss(name, frames) {
|
|
352
|
+
if (typeof frames !== 'object' || frames === null)
|
|
353
|
+
return undefined;
|
|
354
|
+
const steps = Object.entries(frames).map(([step, decls]) => {
|
|
355
|
+
const body = Object.entries((decls ?? {}))
|
|
356
|
+
.filter(([, value]) => typeof value === 'string' || typeof value === 'number')
|
|
357
|
+
.map(([prop, value]) => `${prop.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`)}: ${String(value)}`)
|
|
358
|
+
.join('; ');
|
|
359
|
+
return `${step} { ${body} }`;
|
|
360
|
+
});
|
|
361
|
+
return `@keyframes ${cssName(name)} { ${steps.join(' ')} }`;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* A Tailwind v3 config's theme as the v4 directives the frame's runtime reads: colors →
|
|
365
|
+
* `--color-*` (nested shades flattened, `DEFAULT` dropped, `<alpha-value>` → 1), `borderRadius` →
|
|
366
|
+
* `--radius-*`, `fontFamily` → `--font-*`, `fontSize` → `--text-*`, `boxShadow` → `--shadow-*`,
|
|
367
|
+
* `screens` → `--breakpoint-*`, `keyframes`/`animation` → `@keyframes` + `--animate-*` — the
|
|
368
|
+
* `theme` and its `extend` together, function values skipped. `darkMode: 'class'` / `'selector'` /
|
|
369
|
+
* `['class', '<selector>']` becomes a `dark` variant.
|
|
370
|
+
*/
|
|
371
|
+
export function tailwindV3ConfigToCss(config) {
|
|
372
|
+
const cfg = (config ?? {});
|
|
373
|
+
const theme = {};
|
|
374
|
+
for (const [key, value] of Object.entries(cfg.theme ?? {}))
|
|
375
|
+
if (key !== 'extend')
|
|
376
|
+
theme[key] = value;
|
|
377
|
+
for (const [key, value] of Object.entries(cfg.theme?.extend ?? {})) {
|
|
378
|
+
const base = theme[key];
|
|
379
|
+
theme[key] =
|
|
380
|
+
typeof base === 'object' && base !== null && typeof value === 'object' && value !== null
|
|
381
|
+
? { ...base, ...value }
|
|
382
|
+
: value;
|
|
383
|
+
}
|
|
384
|
+
const lines = [];
|
|
385
|
+
const extra = [];
|
|
386
|
+
const scale = (key, prefix) => {
|
|
387
|
+
for (const [name, value] of flattenThemeObject(theme[key]))
|
|
388
|
+
lines.push(`--${prefix}-${cssName(name)}: ${value.replace(/<alpha-value>/g, '1')}`);
|
|
389
|
+
};
|
|
390
|
+
scale('colors', 'color');
|
|
391
|
+
scale('borderRadius', 'radius');
|
|
392
|
+
scale('boxShadow', 'shadow');
|
|
393
|
+
scale('screens', 'breakpoint');
|
|
394
|
+
scale('spacing', 'spacing');
|
|
395
|
+
for (const [name, value] of Object.entries((theme.fontFamily ?? {}))) {
|
|
396
|
+
const stack = fontStack(value);
|
|
397
|
+
if (stack !== undefined)
|
|
398
|
+
lines.push(`--font-${cssName(name)}: ${stack}`);
|
|
399
|
+
}
|
|
400
|
+
for (const [name, value] of Object.entries((theme.fontSize ?? {}))) {
|
|
401
|
+
const [size, rest] = Array.isArray(value) ? value : [value];
|
|
402
|
+
if (typeof size !== 'string')
|
|
403
|
+
continue;
|
|
404
|
+
lines.push(`--text-${cssName(name)}: ${size}`);
|
|
405
|
+
const lineHeight = typeof rest === 'string' ? rest : rest?.lineHeight;
|
|
406
|
+
if (typeof lineHeight === 'string')
|
|
407
|
+
lines.push(`--text-${cssName(name)}--line-height: ${lineHeight}`);
|
|
408
|
+
}
|
|
409
|
+
for (const [name, value] of Object.entries((theme.animation ?? {})))
|
|
410
|
+
if (typeof value === 'string')
|
|
411
|
+
lines.push(`--animate-${cssName(name)}: ${value}`);
|
|
412
|
+
for (const [name, frames] of Object.entries((theme.keyframes ?? {}))) {
|
|
413
|
+
const css = keyframesCss(name, frames);
|
|
414
|
+
if (css !== undefined)
|
|
415
|
+
extra.push(css);
|
|
416
|
+
}
|
|
417
|
+
const dark = cfg.darkMode;
|
|
418
|
+
let variant;
|
|
419
|
+
if (dark === 'class' || dark === 'selector')
|
|
420
|
+
variant = '.dark';
|
|
421
|
+
else if (Array.isArray(dark) &&
|
|
422
|
+
(dark[0] === 'class' || dark[0] === 'selector') &&
|
|
423
|
+
typeof dark[1] === 'string')
|
|
424
|
+
variant = dark[1];
|
|
425
|
+
const out = [];
|
|
426
|
+
if (variant !== undefined)
|
|
427
|
+
out.push(`@custom-variant dark (&:where(${variant}, ${variant} *));`);
|
|
428
|
+
if (lines.length > 0 || extra.length > 0)
|
|
429
|
+
out.push(`@theme {\n${lines.map((line) => ` ${line};`).join('\n')}${extra.length > 0 ? `\n ${extra.join('\n ')}` : ''}\n}`);
|
|
430
|
+
return out.join('\n');
|
|
431
|
+
}
|
|
432
|
+
export const INLINE_ASSET_DEFAULTS = { limit: 128 * 1024, budget: 1024 * 1024 };
|
|
433
|
+
/** `data:` URI payload size in bytes (base64 decoded). */
|
|
434
|
+
function dataUriBytes(uri) {
|
|
435
|
+
const comma = uri.indexOf(',');
|
|
436
|
+
const payload = comma < 0 ? '' : uri.slice(comma + 1);
|
|
437
|
+
return /;base64/i.test(uri.slice(0, comma))
|
|
438
|
+
? Math.floor((payload.length * 3) / 4)
|
|
439
|
+
: payload.length;
|
|
440
|
+
}
|
|
441
|
+
const EMPTY_URL = 'url("data:,")';
|
|
442
|
+
/**
|
|
443
|
+
* Every `url()` of a stylesheet made network-less: `data:` URIs kept (within the budget), files
|
|
444
|
+
* inlined as `data:` URIs when `resolve` finds them and they fit `limit` and `budget`, everything
|
|
445
|
+
* else — remote urls, files too big, files not found — replaced by an empty `data:,` (the browser
|
|
446
|
+
* falls back: the next font in the stack, no background image), each with a warning.
|
|
447
|
+
*/
|
|
448
|
+
export function inlineCssUrls(css, options) {
|
|
449
|
+
const limit = options.limit ?? INLINE_ASSET_DEFAULTS.limit;
|
|
450
|
+
const budget = options.budget ?? INLINE_ASSET_DEFAULTS.budget;
|
|
451
|
+
let used = 0;
|
|
452
|
+
const drop = (url, why) => {
|
|
453
|
+
options.warn?.(`dropped url(${url.length > 80 ? `${url.slice(0, 77)}…` : url}): ${why}`);
|
|
454
|
+
return EMPTY_URL;
|
|
455
|
+
};
|
|
456
|
+
return css.replace(/url\(\s*(?:"([^"]*)"|'([^']*)'|([^)'"\s]*))\s*\)/g, (whole, a, b, c) => {
|
|
457
|
+
const url = (a ?? b ?? c ?? '').trim();
|
|
458
|
+
if (url === '' || url.startsWith('#'))
|
|
459
|
+
return whole;
|
|
460
|
+
if (/^data:/i.test(url)) {
|
|
461
|
+
const bytes = dataUriBytes(url);
|
|
462
|
+
if (bytes > limit)
|
|
463
|
+
return drop(url.slice(0, 40), `inlined asset of ${kb(bytes)} is over the ${kb(limit)} limit`);
|
|
464
|
+
if (used + bytes > budget)
|
|
465
|
+
return drop(url.slice(0, 40), `over the ${kb(budget)} budget for inlined assets`);
|
|
466
|
+
used += bytes;
|
|
467
|
+
return whole;
|
|
468
|
+
}
|
|
469
|
+
if (/^blob:/i.test(url))
|
|
470
|
+
return whole;
|
|
471
|
+
const found = options.resolve(url);
|
|
472
|
+
if (found === null)
|
|
473
|
+
return drop(url, /^(https?:)?\/\//i.test(url) ? 'the sandbox has no network' : 'not found');
|
|
474
|
+
if ('dropped' in found)
|
|
475
|
+
return drop(url, found.dropped);
|
|
476
|
+
if (found.bytes > limit)
|
|
477
|
+
return drop(url, `${kb(found.bytes)} is over the ${kb(limit)} limit`);
|
|
478
|
+
if (used + found.bytes > budget)
|
|
479
|
+
return drop(url, `over the ${kb(budget)} budget for inlined assets`);
|
|
480
|
+
used += found.bytes;
|
|
481
|
+
return `url("data:${found.mime};base64,${found.data}")`;
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
function kb(bytes) {
|
|
485
|
+
return `${Math.round(bytes / 1024)} KB`;
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=sandbox-styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-styles.js","sourceRoot":"","sources":["../../../src/genui/sandbox-styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,14 @@
|
|
|
6
6
|
* Isomorphic: the browser renderer collects and pushes the values, the server and the Vite plugin
|
|
7
7
|
* only need the names (what the model is told it may use).
|
|
8
8
|
*/
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* `--name: value` declarations in a stylesheet's text (what the Vite plugin scans). `rootOnly`:
|
|
11
|
+
* only those on the root (`:root`, `html`, `[data-theme]`, `.dark`…) — a theme's, not a
|
|
12
|
+
* component's own (`.btn { --bs-btn-color }`).
|
|
13
|
+
*/
|
|
14
|
+
export declare function themeVarsFromCss(css: string, options?: {
|
|
15
|
+
rootOnly?: boolean;
|
|
16
|
+
}): Record<string, string>;
|
|
11
17
|
/** A value that is a color — a function, a hex, a named color, or shadcn's bare `H S% L%` channels. */
|
|
12
18
|
export declare function isColorValue(value: string): boolean;
|
|
13
19
|
/** shadcn v3's `222.2 84% 4.9%`: hue saturation lightness, to be wrapped in `hsl(…)`. */
|
|
@@ -43,13 +49,11 @@ export declare function hostThemeCss(vars: Record<string, string>, options?: {
|
|
|
43
49
|
* `dark` variant that follows the `dark` class and `data-theme` the frame mirrors from the host.
|
|
44
50
|
*/
|
|
45
51
|
export declare function tailwindThemeCss(vars: Record<string, string>): string;
|
|
46
|
-
/**
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
*/
|
|
51
|
-
export declare function tailwindDirectivesFromCss(css: string): string;
|
|
52
|
-
/** Light or dark: the host's `dark` class / `data-theme`, else the system preference. */
|
|
52
|
+
/** The root attributes a light/dark switch lives in: `data-theme`, `data-mode`, `data-bs-theme`, `data-color-scheme`… */
|
|
53
|
+
export declare const MODE_ATTRIBUTE: RegExp;
|
|
54
|
+
/** The host root's light/dark attributes (see {@link MODE_ATTRIBUTE}), to mirror on the frame's. */
|
|
55
|
+
export declare function hostModeAttributes(doc: Document): Record<string, string>;
|
|
56
|
+
/** Light or dark: the host's `dark`/`light` class, a `data-*theme|mode|scheme` attribute, else the system preference. */
|
|
53
57
|
export declare function isHostDark(doc: Document): boolean;
|
|
54
58
|
/** The host's theme as it is NOW: each declared variable's computed value on `:root`. */
|
|
55
59
|
export declare function collectHostThemeVars(doc: Document): Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-theme.d.ts","sourceRoot":"","sources":["../../../src/genui/sandbox-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"sandbox-theme.d.ts","sourceRoot":"","sources":["../../../src/genui/sandbox-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBxB;AAED,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,sGAAsG;IACtG,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mEAAmE;IACnE,MAAM,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gCAAgC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,WAAW,CAsBzF;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,EAC5D,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CAyBR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,MAAM,CAOR;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA2BrE;AAED,yHAAyH;AACzH,eAAO,MAAM,cAAc,QAAyC,CAAC;AAErE,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxE;AAED,yHAAyH;AACzH,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAiBjD;AAkCD,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAkB9E"}
|