@calibrate-ds/generator-react 0.1.5 → 0.1.7

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.
Files changed (30) hide show
  1. package/dist/components/generate-component-css.d.ts +8 -1
  2. package/dist/components/generate-component-css.d.ts.map +1 -1
  3. package/dist/components/generate-component-css.js +36 -5
  4. package/dist/components/generate-component-css.js.map +1 -1
  5. package/dist/components/generate-component-file.d.ts.map +1 -1
  6. package/dist/components/generate-component-file.js +71 -12
  7. package/dist/components/generate-component-file.js.map +1 -1
  8. package/dist/components/generate-composite-types.d.ts.map +1 -1
  9. package/dist/components/generate-composite-types.js +53 -15
  10. package/dist/components/generate-composite-types.js.map +1 -1
  11. package/dist/components/generate-types-file.d.ts.map +1 -1
  12. package/dist/components/generate-types-file.js +47 -15
  13. package/dist/components/generate-types-file.js.map +1 -1
  14. package/dist/components/icon-svg.d.ts +30 -0
  15. package/dist/components/icon-svg.d.ts.map +1 -0
  16. package/dist/components/icon-svg.js +111 -0
  17. package/dist/components/icon-svg.js.map +1 -0
  18. package/dist/components/layout-jsx.js +41 -1
  19. package/dist/components/layout-jsx.js.map +1 -1
  20. package/dist/components/token-reverse-lookup.d.ts +31 -0
  21. package/dist/components/token-reverse-lookup.d.ts.map +1 -0
  22. package/dist/components/token-reverse-lookup.js +109 -0
  23. package/dist/components/token-reverse-lookup.js.map +1 -0
  24. package/dist/components/write-components.d.ts.map +1 -1
  25. package/dist/components/write-components.js +142 -21
  26. package/dist/components/write-components.js.map +1 -1
  27. package/dist/tokens/generate-token-file-content.d.ts.map +1 -1
  28. package/dist/tokens/generate-token-file-content.js +6 -2
  29. package/dist/tokens/generate-token-file-content.js.map +1 -1
  30. package/package.json +3 -3
@@ -0,0 +1,111 @@
1
+ /**
2
+ * The scan pipeline stores `iconSvg` as a JSON string of `{ viewBox, innerContent }`.
3
+ * Returns null when the field is absent, malformed, or marked as font-based.
4
+ */
5
+ export function parseIconSvg(component) {
6
+ if (component.iconKind === "font-symbol")
7
+ return null;
8
+ if (!component.iconSvg)
9
+ return null;
10
+ try {
11
+ const obj = JSON.parse(component.iconSvg);
12
+ if (!obj || typeof obj.innerContent !== "string")
13
+ return null;
14
+ return {
15
+ viewBox: typeof obj.viewBox === "string" && obj.viewBox.length > 0 ? obj.viewBox : "0 0 24 24",
16
+ innerContent: obj.innerContent,
17
+ };
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ // SVG attributes that React expects in camelCase. The scan-time cleaner already
24
+ // rewrites `class=` and color literals; this list covers the remaining hyphenated
25
+ // attributes Figma exports commonly. Missing entries will still render — React 17+
26
+ // accepts kebab-case SVG attrs — but it will warn in dev mode.
27
+ const HYPHEN_TO_CAMEL = {
28
+ "fill-rule": "fillRule",
29
+ "clip-rule": "clipRule",
30
+ "clip-path": "clipPath",
31
+ "stroke-width": "strokeWidth",
32
+ "stroke-linecap": "strokeLinecap",
33
+ "stroke-linejoin": "strokeLinejoin",
34
+ "stroke-dasharray": "strokeDasharray",
35
+ "stroke-dashoffset": "strokeDashoffset",
36
+ "stroke-miterlimit": "strokeMiterlimit",
37
+ "stop-color": "stopColor",
38
+ "stop-opacity": "stopOpacity",
39
+ "fill-opacity": "fillOpacity",
40
+ "stroke-opacity": "strokeOpacity",
41
+ "text-anchor": "textAnchor",
42
+ "alignment-baseline": "alignmentBaseline",
43
+ "dominant-baseline": "dominantBaseline",
44
+ "font-family": "fontFamily",
45
+ "font-size": "fontSize",
46
+ "font-weight": "fontWeight",
47
+ "letter-spacing": "letterSpacing",
48
+ "xlink:href": "xlinkHref",
49
+ };
50
+ /**
51
+ * Rewrites hyphenated SVG attribute names inside a raw SVG inner-content string to
52
+ * the camelCase forms React expects in JSX. Operates on attribute names only (the
53
+ * left side of `=`), so attribute values are preserved verbatim.
54
+ */
55
+ export function toReactSvgAttributes(raw) {
56
+ let out = raw;
57
+ for (const [from, to] of Object.entries(HYPHEN_TO_CAMEL)) {
58
+ // Match the attribute name only when it sits in an attribute position:
59
+ // preceded by whitespace and followed by `=`. This avoids accidental
60
+ // hits inside path data or text content.
61
+ const re = new RegExp(`(\\s)${escapeRegex(from)}(=)`, "g");
62
+ out = out.replace(re, `$1${to}$2`);
63
+ }
64
+ return out;
65
+ }
66
+ function escapeRegex(s) {
67
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
68
+ }
69
+ /**
70
+ * Derives a sensible default size for the icon component's `size` prop from its
71
+ * viewBox. Square viewBoxes ("0 0 16 16" → 16) drive a single numeric default;
72
+ * non-square or unparseable viewBoxes fall back to 24, which matches Figma's
73
+ * most common icon canvas.
74
+ */
75
+ export function defaultIconSize(viewBox) {
76
+ const parts = viewBox.trim().split(/\s+/).map(Number);
77
+ if (parts.length === 4 && parts.every(n => Number.isFinite(n))) {
78
+ const width = parts[2];
79
+ const height = parts[3];
80
+ if (width > 0 && width === height)
81
+ return width;
82
+ if (width > 0)
83
+ return width;
84
+ }
85
+ return 24;
86
+ }
87
+ /**
88
+ * Produces the JSX body for an icon component: a single `<svg>` with the cleaned
89
+ * inner content embedded directly. Indentation is two spaces per level, with the
90
+ * caller-supplied `baseIndent` applied to the opening tag.
91
+ */
92
+ export function renderIconJsx(parsed, baseIndent = " ") {
93
+ const inner = toReactSvgAttributes(parsed.innerContent).trim();
94
+ const indentedInner = inner
95
+ .split("\n")
96
+ .map(line => (line.length === 0 ? line : `${baseIndent} ${line}`))
97
+ .join("\n");
98
+ return `${baseIndent}<svg
99
+ ${baseIndent} width={size}
100
+ ${baseIndent} height={size}
101
+ ${baseIndent} viewBox="${parsed.viewBox}"
102
+ ${baseIndent} fill="none"
103
+ ${baseIndent} xmlns="http://www.w3.org/2000/svg"
104
+ ${baseIndent} className={className}
105
+ ${baseIndent} aria-hidden={props["aria-label"] ? undefined : true}
106
+ ${baseIndent} {...props}
107
+ ${baseIndent}>
108
+ ${indentedInner}
109
+ ${baseIndent}</svg>`;
110
+ }
111
+ //# sourceMappingURL=icon-svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-svg.js","sourceRoot":"","sources":["../../src/components/icon-svg.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { normalizeFigmaName } from "@calibrate-ds/core";
2
- import { resolveRelativeImportTarget, resolveRelativeLayoutImport } from "./helpers.js";
2
+ import { resolveRelativeImportTarget, resolveRelativeLayoutImport, normalizePropName } from "./helpers.js";
3
3
  /**
4
4
  * Generates recursive Flexbox JSX structure from a normalized LayoutTreeNode.
5
5
  *
@@ -244,7 +244,25 @@ function tryResolveInstance(node, sourceComponent, model, namingStrategy) {
244
244
  */
245
245
  function renderLeafNode(node, sourceComponent, model, namingStrategy, indent) {
246
246
  const dependencies = new Map();
247
+ // Nodes with an exported bitmap (audit Gap #6) render as <img>. The src
248
+ // is a workspace-relative path the scan layer wrote next to the assets
249
+ // dir. Consumers wire this up to their bundler the same way they would
250
+ // any static asset import; we don't auto-import at generator time
251
+ // because that requires guessing the import alias / public path strategy.
252
+ const imageAssetPath = node.imageAssetPath;
253
+ if (typeof imageAssetPath === "string" && imageAssetPath.length > 0) {
254
+ const alt = escapeJsxString(node.name ?? "");
255
+ return { jsx: `${indent}<img src="${imageAssetPath}" alt="${alt}" />`, dependencies };
256
+ }
257
+ // The scan layer attaches propBinding / contentContract to leaf nodes that
258
+ // resolve to a typed prop on the parent component. When present, render the
259
+ // prop reference instead of the static literal — this is what turns the
260
+ // generated <span>Button</span> into <span>{btnText}</span>.
261
+ const propRef = resolvePropRef(node);
247
262
  if (node.role === "instance") {
263
+ if (propRef) {
264
+ return { jsx: `${indent}{${propRef}}`, dependencies };
265
+ }
248
266
  // Instance couldn't be resolved to a known component — emit a placeholder.
249
267
  // Use the naming strategy so the identifier is valid and matches any future resolution.
250
268
  const { baseName } = normalizeFigmaName(node.name || "Unknown");
@@ -252,14 +270,36 @@ function renderLeafNode(node, sourceComponent, model, namingStrategy, indent) {
252
270
  return { jsx: `${indent}{/* ptb: unresolved instance — ${instanceName} */}`, dependencies };
253
271
  }
254
272
  if (node.role === "text") {
273
+ if (propRef) {
274
+ return { jsx: `${indent}<span>{${propRef}}</span>`, dependencies };
275
+ }
255
276
  // Fallback explicit text placeholders organically matching HTML structural primitives
256
277
  return { jsx: `${indent}<span>${node.name || "Text"}</span>`, dependencies };
257
278
  }
258
279
  if (node.role === "icon") {
280
+ if (propRef) {
281
+ return { jsx: `${indent}{${propRef}}`, dependencies };
282
+ }
259
283
  // Fallback explicit abstract vector placeholders organically
260
284
  return { jsx: `${indent}<svg aria-label="${node.name || "icon"}" />`, dependencies };
261
285
  }
262
286
  // Generic fallback visually preserving space safely
263
287
  return { jsx: `${indent}<div data-role="${node.role || "unknown"}" />`, dependencies };
264
288
  }
289
+ /**
290
+ * Returns the camelCased prop identifier this leaf should render, or null when
291
+ * the scanner did not bind it to a typed prop. propBinding is preferred — it is
292
+ * the explicit slot-to-prop mapping. contentContract is the fallback for text
293
+ * nodes whose content is driven by a prop without an explicit binding entry.
294
+ */
295
+ function resolvePropRef(node) {
296
+ const raw = node.propBinding?.propName ?? node.contentContract?.propName;
297
+ if (!raw)
298
+ return null;
299
+ return normalizePropName(raw);
300
+ }
301
+ /** Escapes a string for safe embedding inside a JSX double-quoted attribute. */
302
+ function escapeJsxString(s) {
303
+ return s.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
304
+ }
265
305
  //# sourceMappingURL=layout-jsx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-jsx.js","sourceRoot":"","sources":["../../src/components/layout-jsx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout-jsx.js","sourceRoot":"","sources":["../../src/components/layout-jsx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { DesignSystemModel, DesignToken, TokenCollection } from "@calibrate-ds/shared-types";
2
+ /**
3
+ * Token kinds that this reverse-lookup considers — numeric scalars only. Colors,
4
+ * typography, and shadows are excluded here because:
5
+ * - Figma already attaches an explicit token binding for color usage in 99% of
6
+ * cases, so reverse-lookup would be redundant.
7
+ * - Color values commonly collide across collections (multiple semantic aliases
8
+ * resolve to the same hex), making reverse-lookup unsafe without a slot hint.
9
+ * Numeric tokens (spacing, radius, dimension) are where the audit's "hardcoded
10
+ * 867px" complaint lives — those are the values worth recovering.
11
+ */
12
+ type LookupTokenType = "spacing" | "radius" | "dimension";
13
+ declare const LOOKUP_TYPES: ReadonlySet<DesignToken["type"]>;
14
+ /**
15
+ * A scoped value lookup. The scope key groups tokens by their semantic category
16
+ * (spacing vs radius vs dimension) so a spacing token that happens to share a
17
+ * numeric value with a radius token is never substituted into the wrong slot.
18
+ */
19
+ export type TokenReverseLookup = {
20
+ /** Try to map a numeric value to a `var(--ptb-…)` reference under a scope. Returns null when no unambiguous match. */
21
+ lookup(scope: LookupTokenType | LookupTokenType[], value: number): string | null;
22
+ };
23
+ /**
24
+ * Builds a value→css-var map for unambiguous numeric tokens. When a value
25
+ * resolves to multiple distinct tokens within the same type bucket the value
26
+ * is dropped — substituting one would silently pick a wrong semantic name.
27
+ */
28
+ export declare function buildTokenReverseLookup(model: DesignSystemModel): TokenReverseLookup;
29
+ export { LOOKUP_TYPES };
30
+ export type { TokenCollection };
31
+ //# sourceMappingURL=token-reverse-lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-reverse-lookup.d.ts","sourceRoot":"","sources":["../../src/components/token-reverse-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlG;;;;;;;;;GASG;AACH,KAAK,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC1D,QAAA,MAAM,YAAY,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAIjD,CAAC;AAEH;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B,sHAAsH;IACtH,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACpF,CAAC;AA+CF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAqDpF;AAID,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { getPTBTokenVariableName } from "@calibrate-ds/core";
2
+ const LOOKUP_TYPES = new Set([
3
+ "spacing",
4
+ "radius",
5
+ "dimension",
6
+ ]);
7
+ /**
8
+ * Resolves a single token to its final numeric value by following aliases.
9
+ * Returns null for color/typography/shadow tokens, cycles, or unresolved refs.
10
+ * Self-contained so it can be used outside the css-emitter file without
11
+ * pulling in its `getActiveValue`/font helpers.
12
+ */
13
+ function resolveNumeric(token, byId, visited = new Set()) {
14
+ if (visited.has(token.id))
15
+ return null;
16
+ visited.add(token.id);
17
+ if (token.aliasTargetId) {
18
+ const target = byId.get(token.aliasTargetId);
19
+ return target ? resolveNumeric(target, byId, visited) : null;
20
+ }
21
+ const raw = token.value;
22
+ if (typeof raw === "number" && Number.isFinite(raw))
23
+ return raw;
24
+ if (typeof raw === "string") {
25
+ if (raw.startsWith("VariableID:")) {
26
+ const id = raw.replace(/^VariableID:/i, "");
27
+ const target = byId.get(id) || byId.get(raw);
28
+ return target ? resolveNumeric(target, byId, visited) : null;
29
+ }
30
+ const parsed = parseFloat(raw);
31
+ return Number.isFinite(parsed) ? parsed : null;
32
+ }
33
+ if (raw && typeof raw === "object") {
34
+ if ("id" in raw && typeof raw.id === "string") {
35
+ const id = raw.id.replace(/^VariableID:/i, "");
36
+ const target = byId.get(id) || byId.get(raw.id);
37
+ return target ? resolveNumeric(target, byId, visited) : null;
38
+ }
39
+ if ("value" in raw) {
40
+ return resolveNumeric({ ...token, value: raw.value }, byId, visited);
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Builds a value→css-var map for unambiguous numeric tokens. When a value
47
+ * resolves to multiple distinct tokens within the same type bucket the value
48
+ * is dropped — substituting one would silently pick a wrong semantic name.
49
+ */
50
+ export function buildTokenReverseLookup(model) {
51
+ const byId = new Map();
52
+ const byStripped = new Map();
53
+ for (const col of model.tokens || []) {
54
+ for (const tok of col.tokens) {
55
+ byId.set(tok.id, tok);
56
+ const stripped = tok.id.replace(/^VariableID:/i, "");
57
+ if (stripped !== tok.id)
58
+ byStripped.set(stripped, tok);
59
+ }
60
+ }
61
+ // Merge stripped lookups in so alias resolution succeeds either way.
62
+ for (const [k, v] of byStripped) {
63
+ if (!byId.has(k))
64
+ byId.set(k, v);
65
+ }
66
+ // type → value → [varName, varName, ...]
67
+ const tally = new Map();
68
+ for (const t of LOOKUP_TYPES)
69
+ tally.set(t, new Map());
70
+ for (const col of model.tokens || []) {
71
+ for (const tok of col.tokens) {
72
+ if (!LOOKUP_TYPES.has(tok.type))
73
+ continue;
74
+ const value = resolveNumeric(tok, byId);
75
+ if (value === null)
76
+ continue;
77
+ const varName = getPTBTokenVariableName(col.name, tok.name);
78
+ const scope = tok.type;
79
+ const valueMap = tally.get(scope);
80
+ const names = valueMap.get(value) ?? new Set();
81
+ names.add(varName);
82
+ valueMap.set(value, names);
83
+ }
84
+ }
85
+ const resolved = new Map();
86
+ for (const [scope, valueMap] of tally) {
87
+ const out = new Map();
88
+ for (const [value, names] of valueMap) {
89
+ if (names.size === 1)
90
+ out.set(value, [...names][0]);
91
+ }
92
+ resolved.set(scope, out);
93
+ }
94
+ return {
95
+ lookup(scope, value) {
96
+ const scopes = Array.isArray(scope) ? scope : [scope];
97
+ for (const s of scopes) {
98
+ const match = resolved.get(s)?.get(value);
99
+ if (match)
100
+ return `var(${match})`;
101
+ }
102
+ return null;
103
+ },
104
+ };
105
+ }
106
+ // Re-export for callers that want to compute a one-off lookup without
107
+ // constructing the full map (e.g. unit tests, future inspector commands).
108
+ export { LOOKUP_TYPES };
109
+ //# sourceMappingURL=token-reverse-lookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-reverse-lookup.js","sourceRoot":"","sources":["../../src/components/token-reverse-lookup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"write-components.d.ts","sourceRoot":"","sources":["../../src/components/write-components.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAQ/E,MAAM,MAAM,wBAAwB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,wBAAwB,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACvC,CAAC;AAEF,wBAAsB,eAAe,CACjC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,qBAAqB,CAAC,CA4LhC"}
1
+ {"version":3,"file":"write-components.d.ts","sourceRoot":"","sources":["../../src/components/write-components.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAS/E,MAAM,MAAM,wBAAwB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,wBAAwB,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACvC,CAAC;AAEF,wBAAsB,eAAe,CACjC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,qBAAqB,CAAC,CAmNhC"}
@@ -5,6 +5,7 @@ import { generateComponentFile } from "./generate-component-file.js";
5
5
  import { generateCompositeTypesFile } from "./generate-composite-types.js";
6
6
  import { generateCompositeFile } from "./generate-composite-file.js";
7
7
  import { generateComponentCss } from "./generate-component-css.js";
8
+ import { buildTokenReverseLookup } from "./token-reverse-lookup.js";
8
9
  import { resolveDSPaths, createNamingStrategy, normalizeIconDisplayName, isIconComponent } from "@calibrate-ds/core";
9
10
  export async function writeComponents(model, config, options) {
10
11
  const report = {
@@ -17,6 +18,10 @@ export async function writeComponents(model, config, options) {
17
18
  const useTypescript = config.framework.typescript;
18
19
  // Ensure output directories exist universally
19
20
  await fs.mkdir(componentsDir, { recursive: true });
21
+ // Build the value→token reverse-lookup once per writeComponents run so the
22
+ // CSS emitter can substitute var(--ptb-…) for unambiguous numeric values
23
+ // even when the Figma scan didn't attach an explicit resolvedToken binding.
24
+ const tokenLookup = buildTokenReverseLookup(model);
20
25
  const components = model.components || [];
21
26
  // Track for index Generation natively safely
22
27
  const indexExports = [];
@@ -107,7 +112,7 @@ export async function writeComponents(model, config, options) {
107
112
  report.skippedFiles.push(`${folderName}/${cssFileName}`);
108
113
  }
109
114
  catch {
110
- const cssContent = generateComponentCss(component);
115
+ const cssContent = generateComponentCss(component, tokenLookup);
111
116
  await fs.writeFile(cssFilePath, cssContent, "utf-8");
112
117
  report.createdFiles.push(`${folderName}/${cssFileName}`);
113
118
  }
@@ -141,47 +146,163 @@ export async function writeComponents(model, config, options) {
141
146
  ]
142
147
  });
143
148
  }
149
+ // Audit Bugs C + D: a component folder that has an index.ts on disk but
150
+ // isn't in model.components (hand-crafted, manifest-only, or generated by
151
+ // a previous run and then removed from Figma) was invisible to the root
152
+ // barrel. Walk the filesystem and merge any orphan exports before writing
153
+ // so the barrel reflects the actual shape of components/.
154
+ const indexExt = useTypescript ? "ts" : "js";
155
+ await mergeFilesystemBarrelExports(componentsDir, indexExt, indexExports, categoryIndexMap);
144
156
  // Pushing root components index.ts abstractly matching token pipeline cleanly
145
157
  // Since this acts as the dynamic CLI barrel, overwrite it safely on generate
146
- const rootIndexPath = path.join(componentsDir, `index.${useTypescript ? "ts" : "js"}`);
158
+ const rootIndexPath = path.join(componentsDir, `index.${indexExt}`);
147
159
  const indexContent = `/**
148
160
  * Generated Design System Components Root Index
149
161
  * Calibrate native safe mappings.
150
162
  */\n\n${indexExports.join("\n")}\n`;
151
163
  await fs.writeFile(rootIndexPath, indexContent, "utf-8");
152
164
  report.createdFiles.push("index.ts (root components barrel)");
153
- // Write internal category barrels natively to guarantee clean structures
165
+ // Write category barrels always rebuild (never append) so stale entries from
166
+ // renamed or deleted component folders are pruned automatically. Each export is
167
+ // validated against the filesystem before being included.
154
168
  for (const [category, exports] of categoryIndexMap.entries()) {
155
169
  if (category === "__root_category_unassigned")
156
170
  continue;
157
- const categoryIndexPath = path.join(componentsDir, category, `index.${useTypescript ? "ts" : "js"}`);
158
- try {
159
- const existingStat = await fs.stat(categoryIndexPath);
160
- if (existingStat.isFile()) {
161
- const existingContent = await fs.readFile(categoryIndexPath, "utf-8");
162
- const newExports = exports.filter(exp => !existingContent.includes(exp));
163
- if (newExports.length > 0) {
164
- await fs.appendFile(categoryIndexPath, `\n// Generated Category Exports\n${newExports.join("\n")}\n`);
165
- report.createdFiles.push(`${category}/index.ts (appended)`);
166
- }
167
- else {
168
- report.skippedFiles.push(`${category}/index.ts (barrel tracked)`);
171
+ const categoryDir = path.join(componentsDir, category);
172
+ const categoryIndexPath = path.join(categoryDir, `index.${indexExt}`);
173
+ // Deduplicate and validate: drop any export whose target folder is gone.
174
+ const seen = new Set();
175
+ const validExports = [];
176
+ for (const exp of exports) {
177
+ if (seen.has(exp))
178
+ continue;
179
+ seen.add(exp);
180
+ const match = exp.match(/from "\.\/([\w-]+)\/index\./);
181
+ if (match) {
182
+ const targetDir = path.join(categoryDir, match[1]);
183
+ try {
184
+ if ((await fs.stat(targetDir)).isDirectory())
185
+ validExports.push(exp);
186
+ // else: folder gone — silently prune the stale export
169
187
  }
188
+ catch { /* folder doesn't exist — prune */ }
189
+ }
190
+ else {
191
+ validExports.push(exp); // non-standard pattern — keep as-is
170
192
  }
171
193
  }
172
- catch {
173
- const indexContent = `/**
194
+ if (validExports.length === 0)
195
+ continue;
196
+ const indexContent = `/**
174
197
  * Generated Design System Category Barrel
175
198
  * Calibrate native safe mappings.
176
- */\n\n${exports.join("\n")}\n`;
177
- await fs.writeFile(categoryIndexPath, indexContent, "utf-8");
178
- report.createdFiles.push(`${category}/index.ts (category barrel)`);
179
- }
199
+ */\n\n${validExports.join("\n")}\n`;
200
+ await fs.writeFile(categoryIndexPath, indexContent, "utf-8");
201
+ report.createdFiles.push(`${category}/index.${indexExt} (rebuilt)`);
180
202
  }
181
203
  // 4. Finally generate our foundational generics
182
204
  await writeLayoutPrimitives(componentsDir, useTypescript, report);
183
205
  return report;
184
206
  }
207
+ /**
208
+ * Scans the components directory for folders that contain an index.{ts,js,tsx,jsx}
209
+ * but are not already represented in the in-model exports/category map. Mutates
210
+ * `rootExports` and `categoryMap` to add the missing entries so the barrel
211
+ * reflects the actual filesystem (audit Bugs C + D: hand-crafted components
212
+ * and manifest-only entries were previously orphaned at the root).
213
+ *
214
+ * Layout assumptions match writeComponents above:
215
+ * components/<folder>/index.* → root export
216
+ * components/<category>/<folder>/index.* → category barrel + root export
217
+ */
218
+ async function mergeFilesystemBarrelExports(componentsDir, indexExt, rootExports, categoryMap) {
219
+ const seenRoot = new Set(rootExports);
220
+ const ensureRoot = (line) => {
221
+ if (!seenRoot.has(line)) {
222
+ seenRoot.add(line);
223
+ rootExports.push(line);
224
+ }
225
+ };
226
+ // Detects a component folder by the presence of index.ts/index.js/etc. A
227
+ // generated component always has one; hand-crafted components that follow
228
+ // the PTB folder convention will too. Folders without an index are
229
+ // ignored — they're scaffolding, not exportable surface.
230
+ const hasIndexFile = async (dir) => {
231
+ for (const candidate of ["index.ts", "index.js", "index.tsx", "index.jsx"]) {
232
+ try {
233
+ const stat = await fs.stat(path.join(dir, candidate));
234
+ if (stat.isFile())
235
+ return true;
236
+ }
237
+ catch { /* not found — try next */ }
238
+ }
239
+ return false;
240
+ };
241
+ let firstLevel;
242
+ try {
243
+ firstLevel = await fs.readdir(componentsDir);
244
+ }
245
+ catch {
246
+ return; // components dir doesn't exist yet — nothing to merge
247
+ }
248
+ for (const entry of firstLevel) {
249
+ // Skip dotfiles, the barrel itself, and the workspace's own index file
250
+ if (entry.startsWith(".") || entry.startsWith("index."))
251
+ continue;
252
+ const entryPath = path.join(componentsDir, entry);
253
+ let stat;
254
+ try {
255
+ stat = await fs.stat(entryPath);
256
+ }
257
+ catch {
258
+ continue;
259
+ }
260
+ if (!stat.isDirectory())
261
+ continue;
262
+ // Case A: component sits directly under componentsDir (no category)
263
+ if (await hasIndexFile(entryPath)) {
264
+ ensureRoot(`export * from "./${entry}/index.${indexExt === "ts" ? "js" : indexExt}";`);
265
+ continue;
266
+ }
267
+ // Case B: this folder is a category — descend one level
268
+ let inner;
269
+ try {
270
+ inner = await fs.readdir(entryPath);
271
+ }
272
+ catch {
273
+ continue;
274
+ }
275
+ const category = entry;
276
+ const categoryExports = categoryMap.get(category) ?? (() => {
277
+ const fresh = [];
278
+ categoryMap.set(category, fresh);
279
+ return fresh;
280
+ })();
281
+ const seenCategory = new Set(categoryExports);
282
+ for (const childEntry of inner) {
283
+ if (childEntry.startsWith(".") || childEntry.startsWith("index."))
284
+ continue;
285
+ const childPath = path.join(entryPath, childEntry);
286
+ let childStat;
287
+ try {
288
+ childStat = await fs.stat(childPath);
289
+ }
290
+ catch {
291
+ continue;
292
+ }
293
+ if (!childStat.isDirectory())
294
+ continue;
295
+ if (!(await hasIndexFile(childPath)))
296
+ continue;
297
+ const childLine = `export * from "./${childEntry}/index.${indexExt === "ts" ? "js" : indexExt}";`;
298
+ if (!seenCategory.has(childLine)) {
299
+ seenCategory.add(childLine);
300
+ categoryExports.push(childLine);
301
+ }
302
+ ensureRoot(`export * from "./${category}/${childEntry}/index.${indexExt === "ts" ? "js" : indexExt}";`);
303
+ }
304
+ }
305
+ }
185
306
  /**
186
307
  * Ensures structural placeholder primitives `<Row>`, `<Stack>`, and `<Grid>` natively exist inside projects dynamically modifying structural generic flexbox mappings.
187
308
  */