@calibrate-ds/generator-react 0.1.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.
Files changed (85) hide show
  1. package/dist/components/generate-component-css.d.ts +6 -0
  2. package/dist/components/generate-component-css.d.ts.map +1 -0
  3. package/dist/components/generate-component-css.js +97 -0
  4. package/dist/components/generate-component-css.js.map +1 -0
  5. package/dist/components/generate-component-file.d.ts +8 -0
  6. package/dist/components/generate-component-file.d.ts.map +1 -0
  7. package/dist/components/generate-component-file.js +216 -0
  8. package/dist/components/generate-component-file.js.map +1 -0
  9. package/dist/components/generate-composite-file.d.ts +3 -0
  10. package/dist/components/generate-composite-file.d.ts.map +1 -0
  11. package/dist/components/generate-composite-file.js +78 -0
  12. package/dist/components/generate-composite-file.js.map +1 -0
  13. package/dist/components/generate-composite-types.d.ts +7 -0
  14. package/dist/components/generate-composite-types.d.ts.map +1 -0
  15. package/dist/components/generate-composite-types.js +44 -0
  16. package/dist/components/generate-composite-types.js.map +1 -0
  17. package/dist/components/generate-types-file.d.ts +8 -0
  18. package/dist/components/generate-types-file.d.ts.map +1 -0
  19. package/dist/components/generate-types-file.js +65 -0
  20. package/dist/components/generate-types-file.js.map +1 -0
  21. package/dist/components/helpers.d.ts +33 -0
  22. package/dist/components/helpers.d.ts.map +1 -0
  23. package/dist/components/helpers.js +124 -0
  24. package/dist/components/helpers.js.map +1 -0
  25. package/dist/components/index.d.ts +9 -0
  26. package/dist/components/index.d.ts.map +1 -0
  27. package/dist/components/index.js +10 -0
  28. package/dist/components/index.js.map +1 -0
  29. package/dist/components/layout-jsx.d.ts +14 -0
  30. package/dist/components/layout-jsx.d.ts.map +1 -0
  31. package/dist/components/layout-jsx.js +265 -0
  32. package/dist/components/layout-jsx.js.map +1 -0
  33. package/dist/components/prune-components.d.ts +10 -0
  34. package/dist/components/prune-components.d.ts.map +1 -0
  35. package/dist/components/prune-components.js +69 -0
  36. package/dist/components/prune-components.js.map +1 -0
  37. package/dist/components/token-helpers.d.ts +32 -0
  38. package/dist/components/token-helpers.d.ts.map +1 -0
  39. package/dist/components/token-helpers.js +188 -0
  40. package/dist/components/token-helpers.js.map +1 -0
  41. package/dist/components/write-components.d.ts +17 -0
  42. package/dist/components/write-components.d.ts.map +1 -0
  43. package/dist/components/write-components.js +218 -0
  44. package/dist/components/write-components.js.map +1 -0
  45. package/dist/index.d.ts +6 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +14 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/scaffold/generate-placeholder-component-content.d.ts +9 -0
  50. package/dist/scaffold/generate-placeholder-component-content.d.ts.map +1 -0
  51. package/dist/scaffold/generate-placeholder-component-content.js +68 -0
  52. package/dist/scaffold/generate-placeholder-component-content.js.map +1 -0
  53. package/dist/scaffold/index.d.ts +3 -0
  54. package/dist/scaffold/index.d.ts.map +1 -0
  55. package/dist/scaffold/index.js +3 -0
  56. package/dist/scaffold/index.js.map +1 -0
  57. package/dist/scaffold/write-scaffold.d.ts +14 -0
  58. package/dist/scaffold/write-scaffold.d.ts.map +1 -0
  59. package/dist/scaffold/write-scaffold.js +93 -0
  60. package/dist/scaffold/write-scaffold.js.map +1 -0
  61. package/dist/test-css-tokens.d.ts +2 -0
  62. package/dist/test-css-tokens.d.ts.map +1 -0
  63. package/dist/test-css-tokens.js +39 -0
  64. package/dist/test-css-tokens.js.map +1 -0
  65. package/dist/tokens/generate-token-css.d.ts +30 -0
  66. package/dist/tokens/generate-token-css.d.ts.map +1 -0
  67. package/dist/tokens/generate-token-css.js +367 -0
  68. package/dist/tokens/generate-token-css.js.map +1 -0
  69. package/dist/tokens/generate-token-file-content.d.ts +6 -0
  70. package/dist/tokens/generate-token-file-content.d.ts.map +1 -0
  71. package/dist/tokens/generate-token-file-content.js +27 -0
  72. package/dist/tokens/generate-token-file-content.js.map +1 -0
  73. package/dist/tokens/generate-typography-css.d.ts +3 -0
  74. package/dist/tokens/generate-typography-css.d.ts.map +1 -0
  75. package/dist/tokens/generate-typography-css.js +106 -0
  76. package/dist/tokens/generate-typography-css.js.map +1 -0
  77. package/dist/tokens/index.d.ts +5 -0
  78. package/dist/tokens/index.d.ts.map +1 -0
  79. package/dist/tokens/index.js +5 -0
  80. package/dist/tokens/index.js.map +1 -0
  81. package/dist/tokens/write-tokens.d.ts +7 -0
  82. package/dist/tokens/write-tokens.d.ts.map +1 -0
  83. package/dist/tokens/write-tokens.js +115 -0
  84. package/dist/tokens/write-tokens.js.map +1 -0
  85. package/package.json +35 -0
@@ -0,0 +1,6 @@
1
+ import type { ComponentDefinition } from "@calibrate-ds/shared-types";
2
+ /**
3
+ * Builds .module.css structure abstracting component `.root` classes natively interpreting style hooks matching variants intuitively inherently.
4
+ */
5
+ export declare function generateComponentCss(component: ComponentDefinition): string;
6
+ //# sourceMappingURL=generate-component-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-component-css.d.ts","sourceRoot":"","sources":["../../src/components/generate-component-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AA2BtE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CA4E3E"}
@@ -0,0 +1,97 @@
1
+ import { normalizePropName } from "./helpers.js";
2
+ import { normalizeTokenVariablePart } from "@calibrate-ds/core";
3
+ /**
4
+ * Normalizes CSS custom variables reliably using shared PTB logic.
5
+ */
6
+ function normalizeCssVarName(name) {
7
+ return normalizeTokenVariablePart(name);
8
+ }
9
+ /**
10
+ * Maps Calibrate internal style slots into valid Web CSS property equivalents natively.
11
+ */
12
+ const CSS_PROPERTY_MAP = {
13
+ spacingX: "padding-inline",
14
+ spacingY: "padding-block",
15
+ borderRadius: "border-radius",
16
+ radius: "border-radius",
17
+ border: "border",
18
+ color: "color",
19
+ text: "color",
20
+ fill: "color",
21
+ background: "background",
22
+ iconColor: "color"
23
+ };
24
+ /**
25
+ * Builds .module.css structure abstracting component `.root` classes natively interpreting style hooks matching variants intuitively inherently.
26
+ */
27
+ export function generateComponentCss(component) {
28
+ let cssContent = `.root {\n`;
29
+ // Extract core generic flex-behaviors organically.
30
+ cssContent += ` display: flex;\n`;
31
+ if (component.layout) {
32
+ if (component.layout.direction === "row") {
33
+ cssContent += ` flex-direction: row;\n`;
34
+ }
35
+ else if (component.layout.direction === "column") {
36
+ cssContent += ` flex-direction: column;\n`;
37
+ }
38
+ if (component.layout.gap) {
39
+ const gapVal = typeof component.layout.gap === "object" ? (component.layout.gap.resolvedToken?.name || component.layout.gap.rawValue) : component.layout.gap;
40
+ cssContent += ` gap: ${typeof gapVal === "number" ? gapVal + "px" : gapVal};\n`;
41
+ }
42
+ if (component.layout.padding) {
43
+ const { top, right, bottom, left } = component.layout.padding;
44
+ const t = (top.resolvedToken?.name || top.rawValue);
45
+ const r = (right.resolvedToken?.name || right.rawValue);
46
+ const b = (bottom.resolvedToken?.name || bottom.rawValue);
47
+ const l = (left.resolvedToken?.name || left.rawValue);
48
+ if (t === b && r === l && t === r) {
49
+ cssContent += ` padding: ${typeof t === "number" ? t + "px" : t};\n`;
50
+ }
51
+ else if (t === b && r === l) {
52
+ cssContent += ` padding: ${typeof t === "number" ? t + "px" : t} ${typeof r === "number" ? r + "px" : r};\n`;
53
+ }
54
+ else {
55
+ cssContent += ` padding: ${typeof t === "number" ? t + "px" : t} ${typeof r === "number" ? r + "px" : r} ${typeof b === "number" ? b + "px" : b} ${typeof l === "number" ? l + "px" : l};\n`;
56
+ }
57
+ }
58
+ // Typical defaults mapping align Main and Cross generic behaviors
59
+ if (component.layout.mainAlignment) {
60
+ cssContent += ` justify-content: ${component.layout.mainAlignment === "center" ? "center" : component.layout.mainAlignment === "space-between" ? "space-between" : "flex-start"};\n`;
61
+ }
62
+ if (component.layout.crossAlignment) {
63
+ cssContent += ` align-items: ${component.layout.crossAlignment === "center" ? "center" : "flex-start"};\n`;
64
+ }
65
+ }
66
+ // Connect standard properties gracefully catching styles inherently natively replacing specific values with matching Figma explicit definitions.
67
+ if (component.styleMetadata) {
68
+ for (const [key, val] of Object.entries(component.styleMetadata)) {
69
+ const cssProperty = CSS_PROPERTY_MAP[key] || normalizeCssVarName(key);
70
+ // Extrapolate explicit Custom Token definitions matching `{<tokenId>}`
71
+ if (typeof val === "string" && val.startsWith("{") && val.endsWith("}")) {
72
+ const tokenAlias = val.slice(1, -1);
73
+ cssContent += ` ${cssProperty}: var(--ptb-${normalizeCssVarName(tokenAlias)});\n`;
74
+ }
75
+ else {
76
+ const formatValue = typeof val === "number" && cssProperty !== "opacity" ? `${val}px` : val;
77
+ cssContent += ` ${cssProperty}: ${formatValue};\n`;
78
+ }
79
+ }
80
+ }
81
+ cssContent += `}\n`;
82
+ // Extrapolate explicit CSS states structurally generating variants natively safely
83
+ if (component.properties) {
84
+ const enumProps = component.properties.filter(p => p.type === "enum" && p.options);
85
+ for (const p of enumProps) {
86
+ const safeName = normalizePropName(p.name);
87
+ for (const opt of (p.options || [])) {
88
+ // Determine explicit basic specific mappings cleanly inherently
89
+ cssContent += `\n.root[data-${safeName.toLowerCase()}="${opt}"] {\n`;
90
+ cssContent += ` /* Variant overrides for ${safeName}=${opt} */\n`;
91
+ cssContent += `}\n`;
92
+ }
93
+ }
94
+ }
95
+ return cssContent;
96
+ }
97
+ //# sourceMappingURL=generate-component-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-component-css.js","sourceRoot":"","sources":["../../src/components/generate-component-css.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ComponentDefinition, PTBConfig, DesignSystemModel } from "@calibrate-ds/shared-types";
2
+ /**
3
+ * Writes the structural boilerplate for a strictly validated React Component mapped
4
+ * functionally tracking properties natively against standard `data-` mappings.
5
+ * Automatically injects structural token dependencies based on categorical mappings.
6
+ */
7
+ export declare function generateComponentFile(component: ComponentDefinition, config: PTBConfig, model: DesignSystemModel): string;
8
+ //# sourceMappingURL=generate-component-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-component-file.d.ts","sourceRoot":"","sources":["../../src/components/generate-component-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAMpG;;;;GAIG;AACH,wBAAgB,qBAAqB,CACjC,SAAS,EAAE,mBAAmB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,iBAAiB,GACzB,MAAM,CAwOR"}
@@ -0,0 +1,216 @@
1
+ import { createNamingStrategy, normalizeIconDisplayName, isIconComponent } from "@calibrate-ds/core";
2
+ import { normalizePropName, inferBaseElement, sanitizeOptionName, getCssModuleImportPath } from "./helpers.js";
3
+ import { inferRelevantTokenCollections, resolveRelativeTokenImport, formatCollectionImportName, inferStyleSlots, selectTokensForSlots } from "./token-helpers.js";
4
+ import { generateLayoutJSX } from "./layout-jsx.js";
5
+ /**
6
+ * Writes the structural boilerplate for a strictly validated React Component mapped
7
+ * functionally tracking properties natively against standard `data-` mappings.
8
+ * Automatically injects structural token dependencies based on categorical mappings.
9
+ */
10
+ export function generateComponentFile(component, config, model) {
11
+ const namingStrategy = createNamingStrategy(config.naming);
12
+ const resolvedName = isIconComponent(component.name) ? normalizeIconDisplayName(component.name) : component.name;
13
+ const componentName = namingStrategy.formatComponentName(resolvedName);
14
+ const usesCssModules = config.generation?.cssFiles !== false;
15
+ const typesImport = config.framework.typescript
16
+ ? `import type { ${componentName}Props } from "./${componentName}.types.js";`
17
+ : "";
18
+ const stylesImport = usesCssModules
19
+ ? `import styles from "${getCssModuleImportPath(componentName)}";`
20
+ : "";
21
+ // 1. Resolve Tokens Structural Semantics
22
+ const availableTokens = model.tokens || [];
23
+ const relevantTokens = inferRelevantTokenCollections(component.name, component.categoryPath || "", availableTokens);
24
+ let tokenImportsBlock = "";
25
+ let tokenRefsBlock = "";
26
+ let styleIntentsBlock = "";
27
+ if (relevantTokens.length > 0) {
28
+ tokenImportsBlock = relevantTokens.map(collection => {
29
+ const importName = `${formatCollectionImportName(collection.name)}Tokens`;
30
+ const importPath = resolveRelativeTokenImport(collection.name);
31
+ return `import { ${importName} } from "${importPath}";`;
32
+ }).join("\n");
33
+ tokenRefsBlock = `
34
+ /**
35
+ * Structural Token references mapping the component intent natively.
36
+ * Generated statically by Calibrate mimicking Figma styles structurally.
37
+ */
38
+ export const ${componentName}TokenRefs = {
39
+ ${relevantTokens.map(t => ` ${formatCollectionImportName(t.name)}: ${formatCollectionImportName(t.name)}Tokens,`).join("\n")}
40
+ } as const;
41
+ `;
42
+ // Style Intents
43
+ const styleSlots = inferStyleSlots(component.name, component.categoryPath || "");
44
+ const styleTokensMap = selectTokensForSlots(styleSlots, relevantTokens, component.styleMetadata);
45
+ if (Object.keys(styleTokensMap).length > 0) {
46
+ styleIntentsBlock = `
47
+ /**
48
+ * Expressive Style Intent describing the explicit structural mappings to actual UI design tokens.
49
+ * This metadata connects the visual hierarchy to abstract definitions visually.
50
+ */
51
+ export const ${componentName}StyleTokens = {
52
+ ${Object.entries(styleTokensMap).map(([slot, exactRef]) => ` ${slot}: ${exactRef},`).join("\n")}
53
+ } as const;
54
+ `;
55
+ }
56
+ }
57
+ const { tag } = inferBaseElement(component.name, component.categoryPath || "");
58
+ const propsDef = config.framework.typescript
59
+ ? `{ className, ...props }: ${componentName}Props`
60
+ : `{ className, ...props }`;
61
+ let returnBlock = "";
62
+ // Build base properties to pass towards the root node seamlessly
63
+ let dataAtts = "";
64
+ let destructuredVariants = "";
65
+ if (component.properties && component.properties.length > 0) {
66
+ dataAtts = component.properties
67
+ .filter(p => p.type === "enum" || p.type === "boolean")
68
+ .map(p => {
69
+ const cleanName = normalizePropName(p.name);
70
+ return `data-${cleanName.toLowerCase()}={${cleanName}}`;
71
+ }).join("\n ");
72
+ destructuredVariants = component.properties.map(p => normalizePropName(p.name)).join(", ");
73
+ }
74
+ else if (component.variants && component.variants.length > 0) {
75
+ dataAtts = component.variants.map(v => {
76
+ const cleanName = normalizePropName(v.name);
77
+ return `data-${cleanName.toLowerCase()}={${cleanName}}`;
78
+ }).join("\n ");
79
+ destructuredVariants = component.variants.map(v => normalizePropName(v.name)).join(", ");
80
+ }
81
+ const propsWithVariantsDef = destructuredVariants
82
+ ? (config.framework.typescript ? `{ className, ${destructuredVariants}, ...props }: ${componentName}Props` : `{ className, ${destructuredVariants}, ...props }`)
83
+ : propsDef;
84
+ // We build the `{...props}` explicit string matching exactly what the generator requires native to React
85
+ const classNameExpr = usesCssModules
86
+ ? `[styles.root, className].filter(Boolean).join(" ")`
87
+ : `className ?? ""`;
88
+ let allPropsStr = dataAtts
89
+ ? `className={${classNameExpr}}\n ${dataAtts}\n {...props}`
90
+ : `className={${classNameExpr}} {...props}`;
91
+ // 2. Extrapolate ARIA Attributes organically mapping strict Property States securely!
92
+ let ariaStr = "";
93
+ if (component.properties) {
94
+ let ariaAttrs = [];
95
+ // Find literal Text Fallbacks inherently mapping labels
96
+ const textProp = component.properties.find(p => p.type === "text");
97
+ if (textProp) {
98
+ ariaAttrs.push(`aria-label={${normalizePropName(textProp.name)}}`);
99
+ }
100
+ // Catch Strict Semantic States inherently mapping visual toggles securely
101
+ for (const p of component.properties) {
102
+ const isEnum = p.type === "enum";
103
+ const isBool = p.type === "boolean";
104
+ if (isEnum || isBool) {
105
+ const safeName = normalizePropName(p.name);
106
+ const safeNameLower = safeName.toLowerCase();
107
+ const optionsStr = isEnum ? (p.options || []).map(opt => opt.toLowerCase()) : [];
108
+ if (safeNameLower === "disabled" || optionsStr.includes("disabled")) {
109
+ ariaAttrs.push(`aria-disabled={${isEnum ? `${safeName} === "Disabled"` : safeName}}`);
110
+ }
111
+ if (tag === "button" && (safeNameLower === "pressed" || optionsStr.includes("pressed"))) {
112
+ ariaAttrs.push(`aria-pressed={${isEnum ? `${safeName} === "Pressed"` : safeName}}`);
113
+ }
114
+ if (tag === "input" && (safeNameLower === "error" || safeNameLower === "invalid" || optionsStr.includes("error"))) {
115
+ ariaAttrs.push(`aria-invalid={${isEnum ? `${safeName} === "Error"` : safeName}}`);
116
+ }
117
+ if (tag !== "input" && (safeNameLower === "selected" || optionsStr.includes("selected"))) {
118
+ ariaAttrs.push(`aria-selected={${isEnum ? `${safeName} === "Selected"` : safeName}}`);
119
+ }
120
+ }
121
+ }
122
+ if (ariaAttrs.length > 0) {
123
+ ariaStr = ariaAttrs.join("\n ");
124
+ }
125
+ }
126
+ // Attach Aria Attributes onto standard property chains effortlessly!
127
+ if (ariaStr) {
128
+ allPropsStr = `${ariaStr}\n ${allPropsStr}`;
129
+ }
130
+ let implementationBody = "";
131
+ // 3. Consume Normalized Layout Tree recursively if available!
132
+ let dependencies = new Map();
133
+ if (component.layoutTree) {
134
+ // We evaluate `{...props}` mapping inside our string builder natively dynamically!
135
+ const result = generateLayoutJSX(component.layoutTree, component, model, namingStrategy, 3);
136
+ const childJSX = result.jsx;
137
+ const { tag } = inferBaseElement(component.name, component.categoryPath || "");
138
+ if (tag === "button") {
139
+ // Safely Wrap Semantic Native Button directly seamlessly!
140
+ implementationBody = ` <button ${allPropsStr}>\n${childJSX}\n </button>`;
141
+ }
142
+ else if (tag === "input") {
143
+ const isCheckbox = component.name.toLowerCase().includes("checkbox");
144
+ const inputType = isCheckbox ? "checkbox" : "text";
145
+ // Safely Wrap Semantic Native Input directly seamlessly!
146
+ implementationBody = ` <label className={className}>\n <input type="${inputType}" ${ariaStr} {...props} />\n${childJSX}\n </label>`;
147
+ }
148
+ else {
149
+ // Standard generic fallback explicitly wrapping layout configurations inside semantic standard wrappers seamlessly
150
+ implementationBody = ` <div ${allPropsStr}>\n${result.jsx}\n </div>`;
151
+ }
152
+ dependencies = result.dependencies;
153
+ }
154
+ else {
155
+ // 4. Fallback Legacy Skeletons (no layout metadata) natively
156
+ const { tag } = inferBaseElement(component.name, component.categoryPath || "");
157
+ const isVoidElement = ["img", "input", "br", "hr"].includes(tag);
158
+ if (isVoidElement) {
159
+ implementationBody = ` <${tag} ${allPropsStr} />`;
160
+ }
161
+ else {
162
+ implementationBody = ` <${tag} ${allPropsStr}>
163
+ {/* Implementation details modeled inside Calibrate generated safely */}
164
+ {props.children}
165
+ </${tag}>`;
166
+ }
167
+ }
168
+ // 4. Generate Localized Variant Map configurations safely
169
+ let variantDefinitions = "";
170
+ if (component.properties && component.properties.length > 0) {
171
+ const enumProps = component.properties.filter(p => p.type === "enum" && p.options && p.options.length > 0);
172
+ if (enumProps.length > 0) {
173
+ const variantLines = enumProps.map(p => {
174
+ const safeName = normalizePropName(p.name);
175
+ const safeOptions = p.options.map(opt => `"${sanitizeOptionName(opt)}"`).join(", ");
176
+ return ` ${safeName}: [${safeOptions}],`;
177
+ });
178
+ variantDefinitions = `const ${componentName.charAt(0).toLowerCase() + componentName.slice(1)}Variants = {\n${variantLines.join("\n")}\n} as const;\n\n`;
179
+ }
180
+ }
181
+ else if (component.variants && component.variants.length > 0) {
182
+ // Legacy fallback
183
+ const variantLines = component.variants.map(v => {
184
+ const safeName = normalizePropName(v.name);
185
+ const safeOptions = (v.options || []).map(opt => `"${sanitizeOptionName(opt)}"`).join(", ");
186
+ return ` ${safeName}: [${safeOptions}],`;
187
+ });
188
+ variantDefinitions = `const ${componentName.charAt(0).toLowerCase() + componentName.slice(1)}Variants = {\n${variantLines.join("\n")}\n} as const;\n\n`;
189
+ }
190
+ returnBlock = `${variantDefinitions}export function ${componentName}(${propsWithVariantsDef}) {
191
+ return (
192
+ ${implementationBody}
193
+ );
194
+ }`;
195
+ const outputChunks = [
196
+ `import * as React from "react";`,
197
+ ];
198
+ const layoutImportsBlock = Array.from(dependencies.entries()).map(([importPath, symbolName]) => {
199
+ return `import { ${symbolName} } from "${importPath}.js";`;
200
+ }).join("\n");
201
+ if (typesImport)
202
+ outputChunks.push(typesImport);
203
+ if (stylesImport)
204
+ outputChunks.push(stylesImport);
205
+ if (tokenImportsBlock)
206
+ outputChunks.push(tokenImportsBlock);
207
+ if (layoutImportsBlock)
208
+ outputChunks.push(layoutImportsBlock);
209
+ if (tokenRefsBlock)
210
+ outputChunks.push(tokenRefsBlock.trim());
211
+ if (styleIntentsBlock)
212
+ outputChunks.push(styleIntentsBlock.trim());
213
+ outputChunks.push(returnBlock);
214
+ return outputChunks.join("\n\n") + "\n";
215
+ }
216
+ //# sourceMappingURL=generate-component-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-component-file.js","sourceRoot":"","sources":["../../src/components/generate-component-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentDefinition, DesignSystemModel, PTBConfig } from "@calibrate-ds/shared-types";
2
+ export declare function generateCompositeFile(component: ComponentDefinition, model: DesignSystemModel, config: PTBConfig): string;
3
+ //# sourceMappingURL=generate-composite-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-composite-file.d.ts","sourceRoot":"","sources":["../../src/components/generate-composite-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAQpG,wBAAgB,qBAAqB,CACjC,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,SAAS,GAClB,MAAM,CAkFR"}
@@ -0,0 +1,78 @@
1
+ import { createNamingStrategy, normalizeIconDisplayName, isIconComponent } from "@calibrate-ds/core";
2
+ import { resolveRelativeImportTarget } from "./helpers.js";
3
+ function sanitizeVariantName(name) {
4
+ return name.replace(/[^a-zA-Z0-9_$]/g, "");
5
+ }
6
+ export function generateCompositeFile(component, model, config) {
7
+ const namingStrategy = createNamingStrategy(config.naming);
8
+ const resolvedName = isIconComponent(component.name) ? normalizeIconDisplayName(component.name) : component.name;
9
+ const componentName = namingStrategy.formatComponentName(resolvedName);
10
+ if (!component.composite) {
11
+ throw new Error(`Component ${componentName} is not a valid composite object natively.`);
12
+ }
13
+ const typesImport = config.framework.typescript
14
+ ? `import type { ${componentName}Props } from "./${componentName}.types.js";`
15
+ : "";
16
+ // Safely collect mapped canonical imports based on internal componentId matching model dynamically!
17
+ const dependencies = new Map(); // Path -> ExportName
18
+ const innerJsxNodes = [];
19
+ for (const child of component.composite.children) {
20
+ // Standard structural placeholder mapping
21
+ if ('componentId' in child) {
22
+ const refId = child.componentId;
23
+ const targetComponent = model.components.find(c => c.id === refId);
24
+ if (targetComponent) {
25
+ const targetName = namingStrategy.formatComponentName(targetComponent.name);
26
+ const importPath = resolveRelativeImportTarget(component, targetComponent, namingStrategy);
27
+ dependencies.set(importPath, targetName);
28
+ // Nest into functional layout structurally
29
+ innerJsxNodes.push(` {/* Instance: ${child.name} */}`);
30
+ innerJsxNodes.push(` <${targetName} />`);
31
+ }
32
+ else {
33
+ innerJsxNodes.push(` {/* Unresolved Instance: ${child.name} */}`);
34
+ }
35
+ }
36
+ else {
37
+ innerJsxNodes.push(` {/* Local Node: ${child.name} */}`);
38
+ innerJsxNodes.push(` <div>{/* Nested Elements missing structured abstractions */}</div>`);
39
+ }
40
+ }
41
+ const importsArray = Array.from(dependencies.entries()).map(([importPath, symbolName]) => {
42
+ // Output clean ESM mappings without file extensions matching folder barrel configs safely!
43
+ return `import { ${symbolName} } from "${importPath}.js";`;
44
+ });
45
+ // Extract local properties matching strictly!
46
+ const destructuredVariants = (component.variants || []).map(v => sanitizeVariantName(v.name)).join(", ");
47
+ let dataAttributes = "";
48
+ if (component.variants && component.variants.length > 0) {
49
+ dataAttributes = component.variants.map(v => {
50
+ const cleanName = sanitizeVariantName(v.name);
51
+ return `data-${cleanName.toLowerCase()}={${cleanName}}`;
52
+ }).join("\n ");
53
+ }
54
+ const internalProps = config.framework.typescript
55
+ ? `{ className${destructuredVariants.length ? `, ${destructuredVariants}` : ''}, children, ...props }: ${componentName}Props`
56
+ : `{ className${destructuredVariants.length ? `, ${destructuredVariants}` : ''}, children, ...props }`;
57
+ return `import * as React from "react";\n${typesImport}
58
+ ${importsArray.join("\n")}
59
+
60
+ export const ${componentName} = React.forwardRef<HTMLDivElement, ${componentName}Props>(
61
+ (${internalProps}, ref) => {
62
+ return (
63
+ <div
64
+ ref={ref}
65
+ className={className}
66
+ ${dataAttributes}
67
+ data-composite="${componentName.toLowerCase()}"
68
+ {...props}
69
+ >
70
+ ${innerJsxNodes.join("\n")}
71
+ {children}
72
+ </div>
73
+ );
74
+ });
75
+
76
+ ${componentName}.displayName = "${componentName}";\n`;
77
+ }
78
+ //# sourceMappingURL=generate-composite-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-composite-file.js","sourceRoot":"","sources":["../../src/components/generate-composite-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ComponentDefinition, PTBConfig } from "@calibrate-ds/shared-types";
2
+ /**
3
+ * Builds composite scaffolding interfaces explicitly allowing children injection
4
+ * mimicking standard UI containers dynamically mapping surface variants if they exist.
5
+ */
6
+ export declare function generateCompositeTypesFile(component: ComponentDefinition, config: PTBConfig): string;
7
+ //# sourceMappingURL=generate-composite-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-composite-types.d.ts","sourceRoot":"","sources":["../../src/components/generate-composite-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAmB,MAAM,4BAA4B,CAAC;AAWlG;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAqCpG"}
@@ -0,0 +1,44 @@
1
+ import { createNamingStrategy, normalizeIconDisplayName, isIconComponent } from "@calibrate-ds/core";
2
+ function sanitizeVariantName(name) {
3
+ return name.replace(/[^a-zA-Z0-9_$]/g, "");
4
+ }
5
+ function sanitizeOptionName(option) {
6
+ return option.replace(/["']/g, "");
7
+ }
8
+ /**
9
+ * Builds composite scaffolding interfaces explicitly allowing children injection
10
+ * mimicking standard UI containers dynamically mapping surface variants if they exist.
11
+ */
12
+ export function generateCompositeTypesFile(component, config) {
13
+ const namingStrategy = createNamingStrategy(config.naming);
14
+ const resolvedName = isIconComponent(component.name) ? normalizeIconDisplayName(component.name) : component.name;
15
+ const componentName = namingStrategy.formatComponentName(resolvedName);
16
+ let output = `import type * as React from "react";\n\n`;
17
+ const variantProps = [];
18
+ // Map internal overrides or composite level variants just like canonical nodes
19
+ if (component.variants && component.variants.length > 0) {
20
+ component.variants.forEach((v) => {
21
+ const cleanName = sanitizeVariantName(v.name);
22
+ const typeName = `${componentName}${cleanName.charAt(0).toUpperCase() + cleanName.slice(1)}`;
23
+ if (v.type === "boolean") {
24
+ output += `export type ${typeName} = boolean;\n`;
25
+ variantProps.push(` ${cleanName}?: ${typeName};`);
26
+ }
27
+ else if (v.type === "string" || v.type === "number") {
28
+ const union = v.options.map(opt => `"${sanitizeOptionName(opt)}"`).join(" | ");
29
+ output += `export type ${typeName} = ${union || "string"};\n`;
30
+ variantProps.push(` ${cleanName}?: ${typeName};`);
31
+ }
32
+ });
33
+ output += "\n";
34
+ }
35
+ output += `export interface ${componentName}Props extends React.HTMLAttributes<HTMLDivElement> {\n`;
36
+ output += variantProps.join("\n");
37
+ if (variantProps.length > 0) {
38
+ output += "\n";
39
+ }
40
+ // Composites implicitly expect complex children nesting vs canonical isolation
41
+ output += `}\n`;
42
+ return output;
43
+ }
44
+ //# sourceMappingURL=generate-composite-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-composite-types.js","sourceRoot":"","sources":["../../src/components/generate-composite-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErG,SAAS,mBAAmB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAA8B,EAAE,MAAiB;IACxF,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IACjH,MAAM,aAAa,GAAG,cAAc,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAEvE,IAAI,MAAM,GAAG,0CAA0C,CAAC;IAExD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,+EAA+E;IAC/E,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAkB,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,GAAG,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAE7F,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,eAAe,QAAQ,eAAe,CAAC;gBACjD,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS,MAAM,QAAQ,GAAG,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/E,MAAM,IAAI,eAAe,QAAQ,MAAM,KAAK,IAAI,QAAQ,KAAK,CAAC;gBAC9D,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS,MAAM,QAAQ,GAAG,CAAC,CAAC;YACvD,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,oBAAoB,aAAa,wDAAwD,CAAC;IACpG,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,IAAI,CAAC;IACnB,CAAC;IACD,+EAA+E;IAC/E,MAAM,IAAI,KAAK,CAAC;IAEhB,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ComponentDefinition, PTBConfig } from "@calibrate-ds/shared-types";
2
+ /**
3
+ * Derives valid TypeScript union definitions from normalized model variants
4
+ * and safely builds the primary `<ComponentName>Props` interface exposing
5
+ * DOM HTML attributes dynamically based on inferred semantic elements.
6
+ */
7
+ export declare function generateTypesFile(component: ComponentDefinition, config: PTBConfig): string;
8
+ //# sourceMappingURL=generate-types-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-types-file.d.ts","sourceRoot":"","sources":["../../src/components/generate-types-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAsC,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAIrH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CA6D3F"}
@@ -0,0 +1,65 @@
1
+ import { createNamingStrategy, normalizeIconDisplayName, isIconComponent } from "@calibrate-ds/core";
2
+ import { normalizePropName, sanitizeOptionName, inferBaseElement } from "./helpers.js";
3
+ /**
4
+ * Derives valid TypeScript union definitions from normalized model variants
5
+ * and safely builds the primary `<ComponentName>Props` interface exposing
6
+ * DOM HTML attributes dynamically based on inferred semantic elements.
7
+ */
8
+ export function generateTypesFile(component, config) {
9
+ const namingStrategy = createNamingStrategy(config.naming);
10
+ const resolvedName = isIconComponent(component.name) ? normalizeIconDisplayName(component.name) : component.name;
11
+ const componentName = namingStrategy.formatComponentName(resolvedName);
12
+ let output = `import type * as React from "react";\n\n`;
13
+ const variantProps = [];
14
+ if (component.properties && component.properties.length > 0) {
15
+ component.properties.forEach((p) => {
16
+ const cleanName = normalizePropName(p.name);
17
+ const typeName = `${componentName}${cleanName.charAt(0).toUpperCase() + cleanName.slice(1)}`;
18
+ if (p.type === "boolean") {
19
+ output += `export type ${typeName} = boolean;\n`;
20
+ variantProps.push(` ${cleanName}?: ${typeName};`);
21
+ }
22
+ else if (p.type === "text") {
23
+ output += `export type ${typeName} = string;\n`;
24
+ variantProps.push(` ${cleanName}?: ${typeName};`);
25
+ }
26
+ else if (p.type === "instance") {
27
+ output += `export type ${typeName} = React.ReactNode;\n`;
28
+ variantProps.push(` ${cleanName}?: ${typeName};`);
29
+ }
30
+ else if (p.type === "enum") {
31
+ // Convert options to string literal unions safely
32
+ const union = (p.options || []).map((opt) => `"${sanitizeOptionName(opt)}"`).join(" | ");
33
+ output += `export type ${typeName} = ${union || "string"};\n`;
34
+ variantProps.push(` ${cleanName}?: ${typeName};`);
35
+ }
36
+ });
37
+ output += "\n";
38
+ }
39
+ else if (component.variants && component.variants.length > 0) {
40
+ component.variants.forEach((v) => {
41
+ const cleanName = normalizePropName(v.name);
42
+ const typeName = `${componentName}${cleanName.charAt(0).toUpperCase() + cleanName.slice(1)}`;
43
+ if (v.type === "boolean") {
44
+ output += `export type ${typeName} = boolean;\n`;
45
+ variantProps.push(` ${cleanName}?: ${typeName};`);
46
+ }
47
+ else if (v.type === "string" || v.type === "number") {
48
+ // Convert options to string literal unions safely
49
+ const union = (v.options || []).map((opt) => `"${sanitizeOptionName(opt)}"`).join(" | ");
50
+ output += `export type ${typeName} = ${union || "string"};\n`;
51
+ variantProps.push(` ${cleanName}?: ${typeName};`);
52
+ }
53
+ });
54
+ output += "\n";
55
+ }
56
+ const { interfaceName } = inferBaseElement(component.name, component.categoryPath || "");
57
+ output += `export interface ${componentName}Props extends ${interfaceName} {\n`;
58
+ output += variantProps.join("\n");
59
+ if (variantProps.length > 0) {
60
+ output += "\n";
61
+ }
62
+ output += `}\n`;
63
+ return output;
64
+ }
65
+ //# sourceMappingURL=generate-types-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-types-file.js","sourceRoot":"","sources":["../../src/components/generate-types-file.ts"],"names":[],"mappings":"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"}