@twentyfirstmedia/ui 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +30 -0
- package/README.md +43 -2
- package/dist/add.d.ts +10 -0
- package/dist/add.d.ts.map +1 -0
- package/dist/add.js +28 -0
- package/dist/add.js.map +1 -0
- package/dist/diff.d.ts +6 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +57 -0
- package/dist/diff.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +160 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +12 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +79 -0
- package/dist/init.js.map +1 -0
- package/dist/knowledge.d.ts +124 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +494 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/knowledge.json +1 -0
- package/dist/list.d.ts +3 -0
- package/dist/list.d.ts.map +1 -0
- package/dist/list.js +21 -0
- package/dist/list.js.map +1 -0
- package/dist/mcp-init.d.ts +21 -0
- package/dist/mcp-init.d.ts.map +1 -0
- package/dist/mcp-init.js +114 -0
- package/dist/mcp-init.js.map +1 -0
- package/dist/mcp.d.ts +72 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +768 -0
- package/dist/mcp.js.map +1 -0
- package/dist/project.d.ts +14 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +31 -0
- package/dist/project.js.map +1 -0
- package/dist/shared/theme.d.ts +61 -0
- package/dist/shared/theme.d.ts.map +1 -0
- package/dist/shared/theme.js +200 -0
- package/dist/shared/theme.js.map +1 -0
- package/dist/source.d.ts +35 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +229 -0
- package/dist/source.js.map +1 -0
- package/dist/theme.d.ts +18 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +65 -0
- package/dist/theme.js.map +1 -0
- package/dist/util.d.ts +21 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +29 -0
- package/dist/util.js.map +1 -0
- package/package.json +47 -3
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The docs as data: guides, components, patterns, props, tokens and icons of both kits.
|
|
3
|
+
*
|
|
4
|
+
* One source for three readers: the docs site (Markdown version of every page, llms.txt,
|
|
5
|
+
* llms-full.txt), the MCP server (`twentyfirst-ui mcp`) and agents reading either. The data is
|
|
6
|
+
* collected at build time by scripts/knowledge.ts; this module only renders and searches it.
|
|
7
|
+
* It has no imports, so node can also load it straight from scripts/.
|
|
8
|
+
*/
|
|
9
|
+
export const PRODUCT = "Twentyfirst UI";
|
|
10
|
+
export const TOKEN_GROUPS = [
|
|
11
|
+
{ group: "color", title: "Colour" },
|
|
12
|
+
{ group: "shadow", title: "Shadow" },
|
|
13
|
+
{ group: "component", title: "Component knobs" },
|
|
14
|
+
{ group: "space", title: "Spacing" },
|
|
15
|
+
{ group: "radius", title: "Radius" },
|
|
16
|
+
{ group: "motion", title: "Motion" },
|
|
17
|
+
{ group: "size", title: "Sizes" },
|
|
18
|
+
];
|
|
19
|
+
// ── small helpers ──
|
|
20
|
+
export function summaryOf(markdown) {
|
|
21
|
+
const text = markdown
|
|
22
|
+
.replace(/```[\s\S]*?```/g, "")
|
|
23
|
+
.replace(/^#.*$/gm, "")
|
|
24
|
+
.replace(/^\s*[-*] .*$/gm, "")
|
|
25
|
+
.replace(/\s+/g, " ")
|
|
26
|
+
.trim();
|
|
27
|
+
const m = /^(.+?[.!?])(\s|$)/.exec(text);
|
|
28
|
+
return plain((m ? m[1] : text) ?? "").slice(0, 240);
|
|
29
|
+
}
|
|
30
|
+
/** Markdown inline syntax removed, for meta descriptions and one-line summaries. */
|
|
31
|
+
export function plain(s) {
|
|
32
|
+
return s
|
|
33
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
|
|
34
|
+
.replace(/[*_`]/g, "")
|
|
35
|
+
.trim();
|
|
36
|
+
}
|
|
37
|
+
export function kitInfo(k, kit) {
|
|
38
|
+
return (k.kits.find((x) => x.name === kit) ?? k.kits[0]);
|
|
39
|
+
}
|
|
40
|
+
export function forKit(k, text, kit) {
|
|
41
|
+
const info = kitInfo(k, kit);
|
|
42
|
+
const other = kitInfo(k, kit === "halo" ? "pro" : "halo");
|
|
43
|
+
return text
|
|
44
|
+
.replace(/\{\{kit\}\}/g, info.name)
|
|
45
|
+
.replace(/\{\{Kit\}\}/g, info.label)
|
|
46
|
+
.replace(/\{\{other\}\}/g, other.name)
|
|
47
|
+
.replace(/\{\{Other\}\}/g, other.label)
|
|
48
|
+
.replace(/\{\{site\}\}/g, k.site)
|
|
49
|
+
.replace(/\{\{componentCount\}\}/g, String(Object.values(k.exports).flat().length))
|
|
50
|
+
.replace(/\{\{componentPages\}\}/g, String(k.components.length))
|
|
51
|
+
.replace(/\{\{patternCount\}\}/g, String(k.patterns.length))
|
|
52
|
+
.replace(/\{\{rules\}\}/g, () => agentRules(kit));
|
|
53
|
+
}
|
|
54
|
+
/** Example code as an app writes it: imports from the kit package. */
|
|
55
|
+
export function appCode(code, kit) {
|
|
56
|
+
return code.replace(/(["'])@twentyfirstmedia\/ui-core\1/g, `$1@twentyfirstmedia/${kit}$1`);
|
|
57
|
+
}
|
|
58
|
+
export function pageUrl(k, kit, path) {
|
|
59
|
+
return `${k.site}/${kit}/${path ? `${path}/` : ""}`;
|
|
60
|
+
}
|
|
61
|
+
/** The Markdown twin of a page: /halo/components/Button/ → /halo/components/Button.md */
|
|
62
|
+
export function mdPath(kit, path) {
|
|
63
|
+
return `/${kit}/${path || "index"}.md`;
|
|
64
|
+
}
|
|
65
|
+
export function mdUrl(k, kit, path) {
|
|
66
|
+
return k.site + mdPath(kit, path);
|
|
67
|
+
}
|
|
68
|
+
const cell = (s) => s.replace(/\|/g, "\\|").replace(/\n/g, " ");
|
|
69
|
+
const showValue = (v) => v == null
|
|
70
|
+
? "–"
|
|
71
|
+
: typeof v === "string"
|
|
72
|
+
? v
|
|
73
|
+
: v.light === v.dark
|
|
74
|
+
? v.light
|
|
75
|
+
: `${v.light} / ${v.dark}`;
|
|
76
|
+
/** Absolute links in Markdown that leaves the site. */
|
|
77
|
+
function absolute(k, md) {
|
|
78
|
+
return md.replace(/\]\((\/[^)]*)\)/g, (_m, href) => `](${k.site}${href})`);
|
|
79
|
+
}
|
|
80
|
+
// ── lookups ──
|
|
81
|
+
const norm = (s) => s.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
82
|
+
export function allEntries(k) {
|
|
83
|
+
return [...k.components, ...k.patterns];
|
|
84
|
+
}
|
|
85
|
+
/** An entry by page name, title or any component it documents ("tabpanel" finds Tabs). */
|
|
86
|
+
export function findEntry(k, name) {
|
|
87
|
+
const n = norm(name);
|
|
88
|
+
const all = allEntries(k);
|
|
89
|
+
return (all.find((e) => norm(e.name) === n || norm(e.title) === n) ??
|
|
90
|
+
all.find((e) => norm(e.name) === `${n}screen`) ??
|
|
91
|
+
all.find((e) => e.components.some((c) => norm(c) === n)) ??
|
|
92
|
+
all.find((e) => norm(e.name).startsWith(n)));
|
|
93
|
+
}
|
|
94
|
+
export function findGuide(k, slug) {
|
|
95
|
+
const n = norm(slug);
|
|
96
|
+
return k.guides.find((g) => norm(g.slug) === n || norm(g.title) === n || norm(g.title).startsWith(n));
|
|
97
|
+
}
|
|
98
|
+
export function exportedNames(k) {
|
|
99
|
+
return new Set([...Object.values(k.exports).flat(), ...k.utilities]);
|
|
100
|
+
}
|
|
101
|
+
// ── Markdown renderers ──
|
|
102
|
+
export function propsMarkdown(k, component) {
|
|
103
|
+
const list = k.props[component];
|
|
104
|
+
if (!list?.length)
|
|
105
|
+
return "";
|
|
106
|
+
const rows = list.map((p) => `| \`${p.name}${p.optional ? "?" : ""}\` | \`${cell(p.type)}\` | ${cell(p.doc || (p.optional ? "" : "Required"))} |`);
|
|
107
|
+
return [`### ${component}`, "", "| Prop | Type | Notes |", "| --- | --- | --- |", ...rows].join("\n");
|
|
108
|
+
}
|
|
109
|
+
export function entryMarkdown(k, e, kit) {
|
|
110
|
+
const info = kitInfo(k, kit);
|
|
111
|
+
const documented = e.components.filter((c) => k.props[c]);
|
|
112
|
+
const isPattern = e.path.startsWith("patterns/");
|
|
113
|
+
const out = [
|
|
114
|
+
`# ${e.title}`,
|
|
115
|
+
"",
|
|
116
|
+
`> ${e.summary || `${e.group} in ${PRODUCT}.`}`,
|
|
117
|
+
"",
|
|
118
|
+
`${isPattern ? "Pattern" : `Component · ${e.group}`} · ${info.label} kit · [Live page](${pageUrl(k, kit, e.path)})`,
|
|
119
|
+
"",
|
|
120
|
+
];
|
|
121
|
+
if (e.description)
|
|
122
|
+
out.push(absolute(k, e.description.trim()), "");
|
|
123
|
+
out.push(isPattern ? "## Code" : "## Example", "", "```tsx", appCode(e.code, kit).trim(), "```", "");
|
|
124
|
+
if (documented.length) {
|
|
125
|
+
out.push("## Props", "");
|
|
126
|
+
for (const c of documented)
|
|
127
|
+
out.push(propsMarkdown(k, c), "");
|
|
128
|
+
}
|
|
129
|
+
return out.join("\n").trim() + "\n";
|
|
130
|
+
}
|
|
131
|
+
export function tokensMarkdown(k, group) {
|
|
132
|
+
const halo = kitInfo(k, "halo");
|
|
133
|
+
const pro = kitInfo(k, "pro");
|
|
134
|
+
const groups = TOKEN_GROUPS.filter((g) => !group || g.group === group);
|
|
135
|
+
const out = [];
|
|
136
|
+
for (const g of groups) {
|
|
137
|
+
const proMap = new Map((pro.tokens[g.group] ?? []).map((t) => [t.name, t]));
|
|
138
|
+
out.push(`## ${g.title}`, "", "| Token | Halo | Pro | Use |", "| --- | --- | --- | --- |");
|
|
139
|
+
for (const t of halo.tokens[g.group] ?? []) {
|
|
140
|
+
const p = proMap.get(t.name);
|
|
141
|
+
out.push(`| \`--${t.name}\` | \`${cell(showValue(t.value))}\` | \`${cell(showValue(p?.value))}\` | ${cell(p?.usage || t.usage || "")} |`);
|
|
142
|
+
}
|
|
143
|
+
out.push("");
|
|
144
|
+
}
|
|
145
|
+
return out.join("\n");
|
|
146
|
+
}
|
|
147
|
+
export function guideMarkdown(k, g, kit) {
|
|
148
|
+
let body = forKit(k, g.markdown, kit).trim();
|
|
149
|
+
if (g.slug === "theming")
|
|
150
|
+
body += "\n\n" + tokensMarkdown(k);
|
|
151
|
+
return `# ${g.title}\n\n> ${forKit(k, g.description, kit)}\n\n${absolute(k, body)}\n`;
|
|
152
|
+
}
|
|
153
|
+
/** /halo/components.md: every component by group with its one-line summary. */
|
|
154
|
+
export function componentsIndexMarkdown(k, kit) {
|
|
155
|
+
const out = [
|
|
156
|
+
`# All components`,
|
|
157
|
+
"",
|
|
158
|
+
`> ${k.components.length} component pages and ${k.patterns.length} patterns of the ${kitInfo(k, kit).label} kit. Every page has a live example, its code and the props.`,
|
|
159
|
+
"",
|
|
160
|
+
];
|
|
161
|
+
const groups = [...new Set(k.components.map((c) => c.group))];
|
|
162
|
+
for (const g of groups) {
|
|
163
|
+
out.push(`## ${g}`, "");
|
|
164
|
+
for (const e of k.components.filter((c) => c.group === g))
|
|
165
|
+
out.push(`- [${e.title}](${mdUrl(k, kit, e.path)}): ${e.summary}${e.components.length > 1 ? ` (${e.components.join(", ")})` : ""}`);
|
|
166
|
+
out.push("");
|
|
167
|
+
}
|
|
168
|
+
out.push("## Patterns", "");
|
|
169
|
+
for (const e of k.patterns)
|
|
170
|
+
out.push(`- [${e.title}](${mdUrl(k, kit, e.path)}): ${e.summary}`);
|
|
171
|
+
out.push("", "## Icons", "", `\`Icon name\` and every \`icon\` prop take one of: ${k.icons.map((i) => `\`${i}\``).join(", ")}.`, "");
|
|
172
|
+
return out.join("\n");
|
|
173
|
+
}
|
|
174
|
+
/** Rules an agent should follow when it writes code with the kits. */
|
|
175
|
+
export function agentRules(kit = "halo") {
|
|
176
|
+
const pkg = kit === "both"
|
|
177
|
+
? "@twentyfirstmedia/halo` or `@twentyfirstmedia/pro"
|
|
178
|
+
: `@twentyfirstmedia/${kit}`;
|
|
179
|
+
return [
|
|
180
|
+
`- Build UI from ${PRODUCT} components first; import them from \`${pkg}\`. Check names, props and examples with the \`twentyfirst-ui\` MCP server (\`get_component\`, \`search_docs\`) instead of guessing.`,
|
|
181
|
+
"- Halo and Pro have the same components, props and markup. Never branch on the kit in code; switch looks with `data-kit` or `<UIProvider kit>`.",
|
|
182
|
+
"- No colour literals or arbitrary Tailwind values: use the shadcn-style theme variables (`var(--primary)`, `bg-card`, `text-muted-foreground`, `border-border`) so both kits, light and dark, and the app's theme keep working.",
|
|
183
|
+
"- Wrap the app once in `UIProvider` and import the kit's `styles.css` once (or `@twentyfirstmedia/ui-core/themes.css` for both kits).",
|
|
184
|
+
"- Format numbers, money, percentages and dates with `formatNumber`, `formatMoney`, `formatPercent`, `formatDate`.",
|
|
185
|
+
"- Icons: only names from `list_icons`; icon-only buttons need a `label`.",
|
|
186
|
+
"- Before finishing, run `check_usage` from the MCP server on new code.",
|
|
187
|
+
].join("\n");
|
|
188
|
+
}
|
|
189
|
+
export function overviewMarkdown(k, kit) {
|
|
190
|
+
const g = k.guides.find((x) => x.slug === "introduction");
|
|
191
|
+
return g ? guideMarkdown(k, g, kit) : `# ${PRODUCT}\n`;
|
|
192
|
+
}
|
|
193
|
+
/** llms.txt (llmstxt.org): what the kits are, then a link list of every page's Markdown. */
|
|
194
|
+
export function llmsTxt(k) {
|
|
195
|
+
const kit = "halo";
|
|
196
|
+
const out = [
|
|
197
|
+
`# ${PRODUCT}`,
|
|
198
|
+
"",
|
|
199
|
+
"> Two React UI kits with one component API: Halo (soft, rounded, light-first) and Pro (sharp, dense, hairline grid, dark-first). Same components, props and markup; only tokens and CSS differ, so an app can switch kits at runtime. MIT-licensed npm packages: `@twentyfirstmedia/halo`, `@twentyfirstmedia/pro`, CLI and MCP server `@twentyfirstmedia/ui`.",
|
|
200
|
+
"",
|
|
201
|
+
"Every page of the docs has a Markdown twin: append `.md` to the page path (`/halo/components/Tabs/` → `/halo/components/Tabs.md`). Halo and Pro pages differ only in the package name; the links below use Halo, replace `/halo/` with `/pro/` for Pro.",
|
|
202
|
+
"",
|
|
203
|
+
"Rules for code that uses the kits:",
|
|
204
|
+
"",
|
|
205
|
+
agentRules("both"),
|
|
206
|
+
"",
|
|
207
|
+
"## Docs",
|
|
208
|
+
"",
|
|
209
|
+
];
|
|
210
|
+
for (const g of k.guides)
|
|
211
|
+
out.push(`- [${g.title}](${mdUrl(k, kit, g.slug === "introduction" ? "" : g.slug)}): ${plain(forKit(k, g.description, kit))}`);
|
|
212
|
+
out.push(`- [All components](${mdUrl(k, kit, "components")}): every component by group, and all icon names`);
|
|
213
|
+
out.push("", "## Components", "");
|
|
214
|
+
for (const e of k.components)
|
|
215
|
+
out.push(`- [${e.title}](${mdUrl(k, kit, e.path)}): ${e.summary}`);
|
|
216
|
+
out.push("", "## Patterns", "");
|
|
217
|
+
for (const e of k.patterns)
|
|
218
|
+
out.push(`- [${e.title}](${mdUrl(k, kit, e.path)}): ${e.summary}`);
|
|
219
|
+
out.push("", "## Optional", "", `- [Everything in one file](${k.site}/llms-full.txt): all guides, components with examples and props, tokens`, `- [Pro docs](${k.site}/pro/): the same pages in the Pro look`, `- [Source](https://github.com/twentyfirstmedia/ui)`, "");
|
|
220
|
+
return out.join("\n");
|
|
221
|
+
}
|
|
222
|
+
/** llms-full.txt: every guide and every component page in one file (patterns are linked). */
|
|
223
|
+
export function llmsFull(k) {
|
|
224
|
+
const kit = "halo";
|
|
225
|
+
const parts = [
|
|
226
|
+
`# ${PRODUCT}: complete docs`,
|
|
227
|
+
"",
|
|
228
|
+
`> Version ${k.version}. Examples import from \`@twentyfirstmedia/halo\`; for Pro import the same names from \`@twentyfirstmedia/pro\`. Patterns (full screens) are linked at the end; their code is in each linked Markdown page.`,
|
|
229
|
+
"",
|
|
230
|
+
];
|
|
231
|
+
for (const g of k.guides)
|
|
232
|
+
parts.push(demote(guideMarkdown(k, g, kit)), "");
|
|
233
|
+
parts.push("# Components", "");
|
|
234
|
+
for (const e of k.components)
|
|
235
|
+
parts.push(demote(entryMarkdown(k, e, kit)), "");
|
|
236
|
+
parts.push("# Patterns", "");
|
|
237
|
+
for (const e of k.patterns)
|
|
238
|
+
parts.push(`- [${e.title}](${mdUrl(k, kit, e.path)}): ${e.summary}`);
|
|
239
|
+
parts.push("", "# Icons", "", k.icons.join(", "), "");
|
|
240
|
+
return parts.join("\n");
|
|
241
|
+
}
|
|
242
|
+
/** One heading level down, so pages nest under the file's sections. */
|
|
243
|
+
function demote(md) {
|
|
244
|
+
let fence = false;
|
|
245
|
+
return md
|
|
246
|
+
.split("\n")
|
|
247
|
+
.map((l) => {
|
|
248
|
+
if (l.startsWith("```"))
|
|
249
|
+
fence = !fence;
|
|
250
|
+
return !fence && /^#{1,5} /.test(l) ? `#${l}` : l;
|
|
251
|
+
})
|
|
252
|
+
.join("\n");
|
|
253
|
+
}
|
|
254
|
+
const words = (q) => q
|
|
255
|
+
.toLowerCase()
|
|
256
|
+
.split(/[^a-z0-9-]+/)
|
|
257
|
+
.filter((w) => w.length > 1);
|
|
258
|
+
function score(terms, fields) {
|
|
259
|
+
let total = 0;
|
|
260
|
+
for (const t of terms) {
|
|
261
|
+
let best = 0;
|
|
262
|
+
for (const [text, weight] of fields) {
|
|
263
|
+
const s = text.toLowerCase();
|
|
264
|
+
if (!s.includes(t))
|
|
265
|
+
continue;
|
|
266
|
+
const exact = new RegExp(`(^|[^a-z0-9])${t.replace(/[-]/g, "\\-")}([^a-z0-9]|$)`).test(s);
|
|
267
|
+
best = Math.max(best, weight * (exact ? 1 : 0.5));
|
|
268
|
+
}
|
|
269
|
+
total += best;
|
|
270
|
+
}
|
|
271
|
+
return total;
|
|
272
|
+
}
|
|
273
|
+
export function search(k, query, limit = 10) {
|
|
274
|
+
const terms = words(query);
|
|
275
|
+
if (!terms.length)
|
|
276
|
+
return [];
|
|
277
|
+
const hits = [];
|
|
278
|
+
for (const e of allEntries(k)) {
|
|
279
|
+
const propNames = e.components.flatMap((c) => (k.props[c] ?? []).map((p) => p.name)).join(" ");
|
|
280
|
+
const s = score(terms, [
|
|
281
|
+
[e.name, 10],
|
|
282
|
+
[e.title, 8],
|
|
283
|
+
[e.components.join(" "), 6],
|
|
284
|
+
[e.summary, 4],
|
|
285
|
+
[e.group, 3],
|
|
286
|
+
[e.description, 2],
|
|
287
|
+
[propNames, 1],
|
|
288
|
+
]);
|
|
289
|
+
if (s > 0)
|
|
290
|
+
hits.push({
|
|
291
|
+
kind: e.path.startsWith("patterns/") ? "pattern" : "component",
|
|
292
|
+
name: e.name,
|
|
293
|
+
title: e.title,
|
|
294
|
+
summary: e.summary,
|
|
295
|
+
score: s,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
for (const g of k.guides) {
|
|
299
|
+
const s = score(terms, [
|
|
300
|
+
[g.title, 8],
|
|
301
|
+
[g.description, 4],
|
|
302
|
+
[g.markdown, 1.5],
|
|
303
|
+
]);
|
|
304
|
+
if (s > 0)
|
|
305
|
+
hits.push({
|
|
306
|
+
kind: "guide",
|
|
307
|
+
name: g.slug,
|
|
308
|
+
title: g.title,
|
|
309
|
+
summary: plain(g.description),
|
|
310
|
+
score: s,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
const halo = kitInfo(k, "halo");
|
|
314
|
+
for (const list of Object.values(halo.tokens))
|
|
315
|
+
for (const t of list) {
|
|
316
|
+
const s = score(terms, [
|
|
317
|
+
[t.name, 5],
|
|
318
|
+
[t.usage ?? "", 1.5],
|
|
319
|
+
]);
|
|
320
|
+
if (s > 0)
|
|
321
|
+
hits.push({
|
|
322
|
+
kind: "token",
|
|
323
|
+
name: `--${t.name}`,
|
|
324
|
+
title: `--${t.name}`,
|
|
325
|
+
summary: t.usage ?? "",
|
|
326
|
+
score: s * 0.8,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
for (const i of k.icons) {
|
|
330
|
+
const s = score(terms, [[i, 3]]);
|
|
331
|
+
if (s > 0)
|
|
332
|
+
hits.push({
|
|
333
|
+
kind: "icon",
|
|
334
|
+
name: i,
|
|
335
|
+
title: `Icon "${i}"`,
|
|
336
|
+
summary: `<Icon name="${i}" />`,
|
|
337
|
+
score: s * 0.5,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
return hits.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name)).slice(0, limit);
|
|
341
|
+
}
|
|
342
|
+
const PASSTHROUGH = /^(key|ref|children|id|role|tabIndex|title|aria-[\w-]+|data-[\w-]+)$/;
|
|
343
|
+
/** Reads `<Name a="…" b={…}>` attributes, braces and strings included. */
|
|
344
|
+
function readTag(src, start) {
|
|
345
|
+
const attrs = [];
|
|
346
|
+
let i = start;
|
|
347
|
+
let depth = 0;
|
|
348
|
+
let quote = "";
|
|
349
|
+
let cur = "";
|
|
350
|
+
let collecting = true;
|
|
351
|
+
for (; i < src.length; i++) {
|
|
352
|
+
const ch = src[i];
|
|
353
|
+
if (quote) {
|
|
354
|
+
if (ch === quote)
|
|
355
|
+
quote = "";
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
if (depth > 0) {
|
|
359
|
+
if (ch === "{")
|
|
360
|
+
depth++;
|
|
361
|
+
else if (ch === "}")
|
|
362
|
+
depth--;
|
|
363
|
+
else if (ch === '"' || ch === "'" || ch === "`")
|
|
364
|
+
quote = ch;
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (ch === "{") {
|
|
368
|
+
depth = 1;
|
|
369
|
+
collecting = false;
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
if (ch === '"' || ch === "'") {
|
|
373
|
+
quote = ch;
|
|
374
|
+
collecting = false;
|
|
375
|
+
continue;
|
|
376
|
+
}
|
|
377
|
+
if (ch === ">" || (ch === "/" && src[i + 1] === ">"))
|
|
378
|
+
break;
|
|
379
|
+
if (/[\w-]/.test(ch)) {
|
|
380
|
+
if (!collecting) {
|
|
381
|
+
collecting = true;
|
|
382
|
+
cur = "";
|
|
383
|
+
}
|
|
384
|
+
cur += ch;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
if (cur && collecting)
|
|
388
|
+
attrs.push(cur);
|
|
389
|
+
cur = "";
|
|
390
|
+
collecting = ch !== "=";
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
if (cur && collecting)
|
|
394
|
+
attrs.push(cur);
|
|
395
|
+
return { attrs: attrs.filter((a) => !/^\d/.test(a)), end: i };
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* A quick check of code that uses the kits: unknown components and props, missing required props,
|
|
399
|
+
* unknown icon names, colour literals and arbitrary Tailwind values. Heuristic, not a type checker.
|
|
400
|
+
*/
|
|
401
|
+
export function checkUsage(k, code) {
|
|
402
|
+
const findings = [];
|
|
403
|
+
const lineAt = (i) => code.slice(0, i).split("\n").length;
|
|
404
|
+
const exported = exportedNames(k);
|
|
405
|
+
const icons = new Set(k.icons);
|
|
406
|
+
const imported = new Map(); // local → exported name
|
|
407
|
+
for (const m of code.matchAll(/import\s+(?:type\s+)?\{([^}]*)\}\s+from\s+["']@twentyfirstmedia\/(halo|pro|ui-core)["']/g)) {
|
|
408
|
+
for (const spec of m[1]
|
|
409
|
+
.split(",")
|
|
410
|
+
.map((s) => s.trim())
|
|
411
|
+
.filter(Boolean)) {
|
|
412
|
+
if (spec.startsWith("type "))
|
|
413
|
+
continue;
|
|
414
|
+
const [name, local] = spec.split(/\s+as\s+/).map((s) => s.trim());
|
|
415
|
+
if (!exported.has(name) && !/^[A-Z]\w*Props$|^type$/.test(name)) {
|
|
416
|
+
const guess = findEntry(k, name);
|
|
417
|
+
findings.push({
|
|
418
|
+
line: lineAt(m.index ?? 0),
|
|
419
|
+
severity: "error",
|
|
420
|
+
message: `\`${name}\` is not exported by the kits.${guess
|
|
421
|
+
? ` Did you mean ${guess.components
|
|
422
|
+
.filter((c) => exported.has(c))
|
|
423
|
+
.slice(0, 3)
|
|
424
|
+
.join(", ") || guess.name}?`
|
|
425
|
+
: " Use search_docs to find the right component."}`,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
imported.set(local ?? name, name);
|
|
429
|
+
}
|
|
430
|
+
if (m[2] === "ui-core")
|
|
431
|
+
findings.push({
|
|
432
|
+
line: lineAt(m.index ?? 0),
|
|
433
|
+
severity: "warning",
|
|
434
|
+
message: "App code imports from `@twentyfirstmedia/halo` or `@twentyfirstmedia/pro`; `ui-core` is the shared internal package.",
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
for (const m of code.matchAll(/<([A-Z]\w*)(?=[\s/>])/g)) {
|
|
438
|
+
const local = m[1];
|
|
439
|
+
const name = imported.get(local);
|
|
440
|
+
if (!name)
|
|
441
|
+
continue;
|
|
442
|
+
const { attrs } = readTag(code, (m.index ?? 0) + m[0].length);
|
|
443
|
+
const line = lineAt(m.index ?? 0);
|
|
444
|
+
const list = k.props[name];
|
|
445
|
+
if (list) {
|
|
446
|
+
const known = new Set(list.map((p) => p.name));
|
|
447
|
+
for (const a of attrs)
|
|
448
|
+
if (!known.has(a) && !PASSTHROUGH.test(a))
|
|
449
|
+
findings.push({
|
|
450
|
+
line,
|
|
451
|
+
severity: "warning",
|
|
452
|
+
message: `\`${name}\` has no documented prop \`${a}\`. Props: ${list.map((p) => p.name).join(", ")}.`,
|
|
453
|
+
});
|
|
454
|
+
const spread = /\{\s*\.\.\./.test(code.slice(m.index ?? 0, (m.index ?? 0) + 400).split(">")[0] ?? "");
|
|
455
|
+
for (const p of list)
|
|
456
|
+
if (!p.optional && p.name !== "children" && !attrs.includes(p.name) && !spread)
|
|
457
|
+
findings.push({
|
|
458
|
+
line,
|
|
459
|
+
severity: "error",
|
|
460
|
+
message: `\`${name}\` needs the prop \`${p.name}\` (${p.type}).`,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
for (const m of code.matchAll(/\b(icon|iconRight|name)=["']([\w-]+)["']/g)) {
|
|
465
|
+
const tagStart = code.lastIndexOf("<", m.index ?? 0);
|
|
466
|
+
const tag = /^<(\w+)/.exec(code.slice(tagStart))?.[1] ?? "";
|
|
467
|
+
if (m[1] === "name" && imported.get(tag) !== "Icon")
|
|
468
|
+
continue;
|
|
469
|
+
if (!icons.has(m[2]))
|
|
470
|
+
findings.push({
|
|
471
|
+
line: lineAt(m.index ?? 0),
|
|
472
|
+
severity: "error",
|
|
473
|
+
message: `Unknown icon "${m[2]}". Use list_icons for the valid names.`,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
for (const m of code.matchAll(/#[0-9a-fA-F]{3,8}\b(?![\w-]*["']?\s*:)|\b(rgba?|hsla?|oklch)\(/g)) {
|
|
477
|
+
const before = code.slice(Math.max(0, (m.index ?? 0) - 2), m.index ?? 0);
|
|
478
|
+
if (/&$/.test(before))
|
|
479
|
+
continue; // HTML entity
|
|
480
|
+
findings.push({
|
|
481
|
+
line: lineAt(m.index ?? 0),
|
|
482
|
+
severity: "warning",
|
|
483
|
+
message: `Colour literal \`${m[0]}\`: use a theme variable such as var(--primary), var(--foreground) or var(--card) so both kits, dark mode and the app's theme work.`,
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
for (const m of code.matchAll(/\b[\w:-]+-\[[^\]\s]+\]/g))
|
|
487
|
+
findings.push({
|
|
488
|
+
line: lineAt(m.index ?? 0),
|
|
489
|
+
severity: "warning",
|
|
490
|
+
message: `Arbitrary Tailwind value \`${m[0]}\`: the kit preset maps every token, use those utilities instead.`,
|
|
491
|
+
});
|
|
492
|
+
return findings.sort((a, b) => a.line - b.line);
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../src/knowledge.ts"],"names":[],"mappings":"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"}
|