intent-core 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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -0
  3. package/dist/compiler/index.d.ts +53 -0
  4. package/dist/compiler/index.d.ts.map +1 -0
  5. package/dist/compiler/index.js +147 -0
  6. package/dist/compiler/index.js.map +1 -0
  7. package/dist/compiler/parser.d.ts +25 -0
  8. package/dist/compiler/parser.d.ts.map +1 -0
  9. package/dist/compiler/parser.js +198 -0
  10. package/dist/compiler/parser.js.map +1 -0
  11. package/dist/generator/ai-manifest.d.ts +14 -0
  12. package/dist/generator/ai-manifest.d.ts.map +1 -0
  13. package/dist/generator/ai-manifest.js +276 -0
  14. package/dist/generator/ai-manifest.js.map +1 -0
  15. package/dist/generator/css.d.ts +16 -0
  16. package/dist/generator/css.d.ts.map +1 -0
  17. package/dist/generator/css.js +230 -0
  18. package/dist/generator/css.js.map +1 -0
  19. package/dist/generator/types.d.ts +11 -0
  20. package/dist/generator/types.d.ts.map +1 -0
  21. package/dist/generator/types.js +229 -0
  22. package/dist/generator/types.js.map +1 -0
  23. package/dist/index.d.ts +47 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +51 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/schema/define.d.ts +60 -0
  28. package/dist/schema/define.d.ts.map +1 -0
  29. package/dist/schema/define.js +167 -0
  30. package/dist/schema/define.js.map +1 -0
  31. package/dist/types/index.d.ts +156 -0
  32. package/dist/types/index.d.ts.map +1 -0
  33. package/dist/types/index.js +5 -0
  34. package/dist/types/index.js.map +1 -0
  35. package/dist/validator/constraints.d.ts +16 -0
  36. package/dist/validator/constraints.d.ts.map +1 -0
  37. package/dist/validator/constraints.js +168 -0
  38. package/dist/validator/constraints.js.map +1 -0
  39. package/dist/validator/index.d.ts +22 -0
  40. package/dist/validator/index.d.ts.map +1 -0
  41. package/dist/validator/index.js +321 -0
  42. package/dist/validator/index.js.map +1 -0
  43. package/package.json +61 -0
@@ -0,0 +1,276 @@
1
+ /**
2
+ * AI Manifest Generator
3
+ *
4
+ * Generates AI-friendly metadata for LLM consumption.
5
+ */
6
+ import { generateValidCombinations } from '../validator/constraints.js';
7
+ // ============================================================================
8
+ // Component Description Generator
9
+ // ============================================================================
10
+ const COMPONENT_DESCRIPTIONS = {
11
+ Button: 'An interactive element that triggers an action when clicked or pressed.',
12
+ Stack: 'A layout component that distributes children along a vertical or horizontal axis with consistent spacing.',
13
+ Surface: 'A container that provides visual elevation and background treatment.',
14
+ Text: 'A typography component for displaying text with consistent styling.',
15
+ Input: 'A form control for accepting user text input.',
16
+ Card: 'A container for grouping related content and actions.',
17
+ Dialog: 'A modal window that interrupts the user flow to display important content.',
18
+ Avatar: 'A visual representation of a user or entity, typically as an image or initials.',
19
+ Badge: 'A small label for displaying status, count, or category.',
20
+ Divider: 'A visual separator between content sections.',
21
+ Icon: 'A symbolic visual element representing an action, object, or concept.',
22
+ List: 'A vertical grouping of related items.',
23
+ Grid: 'A two-dimensional layout system for arranging content in rows and columns.',
24
+ };
25
+ const PROPERTY_DESCRIPTIONS = {
26
+ Button: {
27
+ importance: 'Visual prominence level indicating the action significance',
28
+ size: 'Physical dimensions of the button',
29
+ state: 'Interactive state affecting appearance and behavior',
30
+ },
31
+ Stack: {
32
+ direction: 'Axis along which children are arranged',
33
+ gap: 'Space between child elements',
34
+ align: 'Cross-axis alignment of children',
35
+ justify: 'Main-axis distribution of children',
36
+ },
37
+ Surface: {
38
+ elevation: 'Visual depth indicating hierarchy level',
39
+ padding: 'Internal spacing from content to edges',
40
+ background: 'Background color treatment',
41
+ },
42
+ Text: {
43
+ size: 'Typography scale level',
44
+ weight: 'Font thickness',
45
+ color: 'Text color variant',
46
+ align: 'Horizontal text alignment',
47
+ },
48
+ };
49
+ const VALUE_DESCRIPTIONS = {
50
+ Button: {
51
+ importance: {
52
+ primary: 'The main call-to-action, highest prominence',
53
+ secondary: 'Alternative action, medium prominence',
54
+ ghost: 'Low emphasis, blends with background',
55
+ danger: 'Destructive action requiring caution',
56
+ },
57
+ size: {
58
+ sm: 'Compact size for dense UIs',
59
+ md: 'Standard size for most use cases',
60
+ lg: 'Large size for emphasis or touch targets',
61
+ },
62
+ },
63
+ Stack: {
64
+ direction: {
65
+ row: 'Horizontal layout, left to right',
66
+ column: 'Vertical layout, top to bottom',
67
+ },
68
+ gap: {
69
+ tight: 'Minimal spacing, 4px',
70
+ normal: 'Standard spacing, 8px',
71
+ relaxed: 'Comfortable spacing, 16px',
72
+ loose: 'Generous spacing, 32px',
73
+ },
74
+ align: {
75
+ start: 'Align to start of cross axis',
76
+ center: 'Center along cross axis',
77
+ end: 'Align to end of cross axis',
78
+ stretch: 'Fill available cross-axis space',
79
+ },
80
+ },
81
+ };
82
+ // ============================================================================
83
+ // Manifest Generation
84
+ // ============================================================================
85
+ export function generateAIManifest(config) {
86
+ return {
87
+ version: config.version || '0.1.0',
88
+ designSystem: config.name,
89
+ tokens: config.tokens,
90
+ components: Object.entries(config.components).map(([name, schema]) => generateComponentForAI(name, schema)),
91
+ semanticDescriptions: generateSemanticDescriptions(config),
92
+ };
93
+ }
94
+ function generateComponentForAI(name, schema) {
95
+ const descriptions = PROPERTY_DESCRIPTIONS[name] || {};
96
+ const valueDescriptions = VALUE_DESCRIPTIONS[name] || {};
97
+ return {
98
+ name,
99
+ description: schema.description || COMPONENT_DESCRIPTIONS[name] || `${name} component`,
100
+ properties: Object.entries(schema.properties).map(([propName, prop]) => ({
101
+ name: propName,
102
+ type: prop.type,
103
+ values: prop.type === 'enum' ? prop.values : undefined,
104
+ required: prop.required || false,
105
+ default: prop.default,
106
+ description: descriptions[propName],
107
+ valueDescriptions: valueDescriptions[propName],
108
+ })),
109
+ constraints: schema.constraints.map(c => {
110
+ const when = Object.entries(c.when).map(([k, v]) => `${k}=${JSON.stringify(v)}`).join(', ');
111
+ if (c.forbid) {
112
+ return `When ${when}: cannot use ${c.forbid.join(', ')}`;
113
+ }
114
+ if (c.require) {
115
+ const reqs = Object.entries(c.require).map(([k, v]) => `${k} in [${v.join(', ')}]`).join(', ');
116
+ return `When ${when}: requires ${reqs}`;
117
+ }
118
+ return `When ${when}: constraint applies`;
119
+ }),
120
+ examples: generateExamples(name, schema),
121
+ };
122
+ }
123
+ function generateExamples(name, schema) {
124
+ const valid = [];
125
+ const invalid = [];
126
+ // Generate valid examples from actual valid combinations
127
+ const combinations = generateValidCombinations(schema).slice(0, 3);
128
+ for (const combo of combinations) {
129
+ const props = Object.entries(combo)
130
+ .map(([k, v]) => `${k}="${v}"`)
131
+ .join(' ');
132
+ valid.push(`<${name} ${props}>Content</${name}>`);
133
+ }
134
+ // Add size-responsive example if applicable
135
+ const hasSize = 'size' in schema.properties;
136
+ if (hasSize && combinations.length > 0) {
137
+ const base = combinations[0];
138
+ const props = Object.entries(base)
139
+ .map(([k, v]) => k === 'size' ? `${k}="lg"` : `${k}="${v}"`)
140
+ .join(' ');
141
+ valid.push(`<${name} ${props}>Larger variant</${name}>`);
142
+ }
143
+ // Generate invalid examples from constraints
144
+ for (const constraint of schema.constraints.slice(0, 2)) {
145
+ const whenProps = Object.entries(constraint.when);
146
+ const baseProps = whenProps.map(([k, v]) => `${k}="${Array.isArray(v) ? v[0] : v}"`);
147
+ if (constraint.forbid && constraint.forbid.length > 0) {
148
+ const forbiddenProp = constraint.forbid[0];
149
+ // Try to find a value for the forbidden prop
150
+ const propDef = schema.properties[forbiddenProp];
151
+ if (propDef?.type === 'enum') {
152
+ const forbiddenValue = propDef.values[0];
153
+ invalid.push(`<${name} ${baseProps.join(' ')} ${forbiddenProp}="${forbiddenValue}">Invalid</${name}> <!-- Error: ${constraint.message || 'Constraint violation'} -->`);
154
+ }
155
+ }
156
+ }
157
+ // Add generic anti-patterns
158
+ invalid.push(`<${name} className="flex items-center">Bad</${name}> <!-- Error: Use Intent props, not Tailwind utilities -->`);
159
+ return { valid, invalid };
160
+ }
161
+ function generateSemanticDescriptions(config) {
162
+ const descriptions = {};
163
+ // Token descriptions
164
+ for (const [category, tokens] of Object.entries(config.tokens)) {
165
+ if (!tokens)
166
+ continue;
167
+ for (const [name, value] of Object.entries(tokens)) {
168
+ descriptions[`token:${category}:${name}`] = `${category} token with value ${value}`;
169
+ }
170
+ }
171
+ // Component descriptions
172
+ for (const [name, schema] of Object.entries(config.components)) {
173
+ descriptions[`component:${name}`] = schema.description || COMPONENT_DESCRIPTIONS[name] || `${name} component`;
174
+ // Property descriptions
175
+ for (const [propName, prop] of Object.entries(schema.properties)) {
176
+ const desc = PROPERTY_DESCRIPTIONS[name]?.[propName] || `${propName} property`;
177
+ descriptions[`prop:${name}:${propName}`] = desc;
178
+ // Value descriptions
179
+ if (prop.type === 'enum') {
180
+ for (const value of prop.values) {
181
+ const valueDesc = VALUE_DESCRIPTIONS[name]?.[propName]?.[value] || `${value} option`;
182
+ descriptions[`value:${name}:${propName}:${value}`] = valueDesc;
183
+ }
184
+ }
185
+ }
186
+ }
187
+ return descriptions;
188
+ }
189
+ export function generateAIPrompt(manifest, context) {
190
+ const lines = [];
191
+ lines.push('# Intent Framework Rules');
192
+ lines.push('');
193
+ lines.push('You are coding with Intent, a schema-first styling system.');
194
+ lines.push('');
195
+ lines.push('## Critical Constraints');
196
+ lines.push('');
197
+ lines.push('1. **NEVER use arbitrary values** (e.g., `pt-[7px]`). Use only schema tokens.');
198
+ lines.push('2. **NEVER use Tailwind utility classes directly**. Use Intent components: `<Stack>`, `<Button>`, `<Surface>`');
199
+ lines.push('3. **Check valid prop combinations** in the schema before using');
200
+ lines.push('4. **Prefer semantic props** over visual descriptions: `importance="primary"` not `color="blue"`');
201
+ lines.push('');
202
+ if (context?.component) {
203
+ const component = manifest.components.find(c => c.name === context.component);
204
+ if (component) {
205
+ lines.push(`## Component: ${component.name}`);
206
+ lines.push('');
207
+ lines.push(component.description);
208
+ lines.push('');
209
+ lines.push('### Properties');
210
+ lines.push('');
211
+ for (const prop of component.properties) {
212
+ const required = prop.required ? ' (required)' : '';
213
+ const def = prop.default !== undefined ? ` [default: ${prop.default}]` : '';
214
+ const values = prop.values ? ` = ${prop.values.join(' | ')}` : '';
215
+ lines.push(`- **${prop.name}**${required}${def}${values}`);
216
+ if (prop.description) {
217
+ lines.push(` - ${prop.description}`);
218
+ }
219
+ }
220
+ lines.push('');
221
+ if (component.constraints.length > 0) {
222
+ lines.push('### Constraints');
223
+ lines.push('');
224
+ for (const constraint of component.constraints) {
225
+ lines.push(`- ${constraint}`);
226
+ }
227
+ lines.push('');
228
+ }
229
+ lines.push('### Examples');
230
+ lines.push('');
231
+ lines.push('**Valid:**');
232
+ for (const example of component.examples.valid) {
233
+ lines.push('```tsx');
234
+ lines.push(example);
235
+ lines.push('```');
236
+ }
237
+ lines.push('');
238
+ if (component.examples.invalid.length > 0) {
239
+ lines.push('**Invalid:**');
240
+ for (const example of component.examples.invalid) {
241
+ lines.push('```tsx');
242
+ lines.push(example);
243
+ lines.push('```');
244
+ }
245
+ lines.push('');
246
+ }
247
+ }
248
+ }
249
+ else {
250
+ // Full system overview
251
+ lines.push('## Available Components');
252
+ lines.push('');
253
+ for (const component of manifest.components) {
254
+ lines.push(`- **${component.name}**: ${component.description}`);
255
+ }
256
+ lines.push('');
257
+ lines.push('## Design Tokens');
258
+ lines.push('');
259
+ for (const [category, tokens] of Object.entries(manifest.tokens)) {
260
+ if (!tokens)
261
+ continue;
262
+ lines.push(`### ${category}`);
263
+ lines.push(Object.keys(tokens).map(t => `- ${t}`).join('\n'));
264
+ lines.push('');
265
+ }
266
+ }
267
+ lines.push('## When Generating UI');
268
+ lines.push('');
269
+ lines.push('1. Import components from \'intent-react\'');
270
+ lines.push('2. Check the schema for valid enum values');
271
+ lines.push('3. If design calls for custom styling, ask to add token to schema first');
272
+ lines.push('4. Run `intent validate` before finishing');
273
+ lines.push('');
274
+ return lines.join('\n');
275
+ }
276
+ //# sourceMappingURL=ai-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-manifest.js","sourceRoot":"","sources":["../../src/generator/ai-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CSS Generator
3
+ *
4
+ * Compiles component schemas into optimized CSS with semantic class names.
5
+ * Uses per-prop attribute selectors to avoid combinatorial explosion.
6
+ */
7
+ import type { DesignSystemConfig, ComponentSchema, TokenRegistry, CompiledStyles } from '../types/index.js';
8
+ export declare function generateCSSVariables(tokens: TokenRegistry, prefix?: string): string;
9
+ export declare function generateDarkModeVariables(tokens: TokenRegistry, darkTokens: Partial<TokenRegistry>, prefix?: string): string;
10
+ export declare function compileComponent(schema: ComponentSchema, config: DesignSystemConfig): CompiledStyles;
11
+ export interface CompilationOptions {
12
+ minify?: boolean;
13
+ includeSourceMap?: boolean;
14
+ }
15
+ export declare function compileSystem(config: DesignSystemConfig, options?: CompilationOptions): string;
16
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/generator/css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EAGf,aAAa,EACb,cAAc,EACf,MAAM,mBAAmB,CAAC;AAM3B,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,SAAW,GAAG,MAAM,CAcrF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,EAClC,MAAM,SAAW,GAChB,MAAM,CA2BR;AAwID,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,kBAAkB,GACzB,cAAc,CAqEhB;AAMD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAmCR"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * CSS Generator
3
+ *
4
+ * Compiles component schemas into optimized CSS with semantic class names.
5
+ * Uses per-prop attribute selectors to avoid combinatorial explosion.
6
+ */
7
+ // ============================================================================
8
+ // CSS Variable Generation
9
+ // ============================================================================
10
+ export function generateCSSVariables(tokens, prefix = 'intent') {
11
+ const lines = [':root {'];
12
+ for (const [category, values] of Object.entries(tokens)) {
13
+ if (!values)
14
+ continue;
15
+ for (const [name, value] of Object.entries(values)) {
16
+ const varName = `--${prefix}-${category}-${name}`;
17
+ lines.push(` ${varName}: ${value};`);
18
+ }
19
+ }
20
+ lines.push('}');
21
+ return lines.join('\n');
22
+ }
23
+ export function generateDarkModeVariables(tokens, darkTokens, prefix = 'intent') {
24
+ const declarations = [];
25
+ for (const [category, values] of Object.entries(darkTokens)) {
26
+ if (!values)
27
+ continue;
28
+ for (const [name, value] of Object.entries(values)) {
29
+ const varName = `--${prefix}-${category}-${name}`;
30
+ declarations.push(` ${varName}: ${value};`);
31
+ }
32
+ }
33
+ const lines = [];
34
+ // System preference
35
+ lines.push('@media (prefers-color-scheme: dark) {');
36
+ lines.push(' :root {');
37
+ lines.push(...declarations.map(d => ' ' + d));
38
+ lines.push(' }');
39
+ lines.push('}');
40
+ lines.push('');
41
+ // Manual toggle class
42
+ lines.push(':root.dark {');
43
+ lines.push(...declarations);
44
+ lines.push('}');
45
+ return lines.join('\n');
46
+ }
47
+ // ============================================================================
48
+ // Class Name Generation
49
+ // ============================================================================
50
+ function generateClassName(component, prop, value, prefix = 'intent') {
51
+ // Convert camelCase to kebab-case
52
+ const kebabProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
53
+ const kebabComponent = component.toLowerCase();
54
+ return `.${prefix}-${kebabComponent}[data-${kebabProp}="${value}"]`;
55
+ }
56
+ // ============================================================================
57
+ // Value Resolution
58
+ // ============================================================================
59
+ function resolveValue(value, tokens, prefix = 'intent') {
60
+ // Special literal values that should never be resolved as tokens
61
+ const LITERAL_VALUES = ['none', 'transparent', 'inherit', 'initial', 'unset', 'auto'];
62
+ // Try exact match first (single-word token key)
63
+ if (/^[a-zA-Z][\w-]*$/.test(value)) {
64
+ // Check if it's a literal CSS value
65
+ if (LITERAL_VALUES.includes(value)) {
66
+ return value;
67
+ }
68
+ // Try direct lookup: value is the key in some category
69
+ // e.g., 'brand-primary' in color category
70
+ for (const [category, tokenSet] of Object.entries(tokens)) {
71
+ if (tokenSet && value in tokenSet) {
72
+ return `var(--${prefix}-${category}-${value})`;
73
+ }
74
+ }
75
+ // Try category-prefixed lookup: "radius-md" → category "radius", key "md"
76
+ // Also handles "elevation-low" → category "elevation", key "low"
77
+ for (const [category, tokenSet] of Object.entries(tokens)) {
78
+ if (!tokenSet)
79
+ continue;
80
+ if (value.startsWith(category + '-')) {
81
+ const key = value.slice(category.length + 1);
82
+ if (key in tokenSet) {
83
+ return `var(--${prefix}-${category}-${key})`;
84
+ }
85
+ }
86
+ }
87
+ // Not a token reference, return as-is
88
+ return value;
89
+ }
90
+ // Multi-word value: resolve each word independently
91
+ // Handles "tight compact" → "var(--intent-space-tight) var(--intent-space-compact)"
92
+ // Handles "1px solid border-default" → "1px solid var(--intent-color-border-default)"
93
+ const words = value.split(/\s+/);
94
+ if (words.length > 1) {
95
+ return words.map(word => resolveValue(word, tokens, prefix)).join(' ');
96
+ }
97
+ return value;
98
+ }
99
+ function resolveStyleValue(value, tokens, propValues, prefix = 'intent') {
100
+ if (typeof value === 'string') {
101
+ return resolveValue(value, tokens, prefix);
102
+ }
103
+ // Handle responsive/size-based objects
104
+ if (typeof value === 'object' && value !== null) {
105
+ // Check if it has a key that matches current prop values
106
+ for (const [key, val] of Object.entries(value)) {
107
+ // Check if this key matches any of the current prop values
108
+ if (propValues[key] !== undefined) {
109
+ return resolveValue(val, tokens, prefix);
110
+ }
111
+ }
112
+ // Return first value as fallback
113
+ const firstValue = Object.values(value)[0];
114
+ return resolveValue(firstValue, tokens, prefix);
115
+ }
116
+ return String(value);
117
+ }
118
+ // ============================================================================
119
+ // Style Generation
120
+ // ============================================================================
121
+ function generateCSSRule(selector, styles, tokens, propValues, prefix = 'intent') {
122
+ const declarations = [];
123
+ for (const [property, value] of Object.entries(styles)) {
124
+ // Convert camelCase to kebab-case for CSS properties
125
+ const cssProperty = property.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
126
+ const resolvedValue = resolveStyleValue(value, tokens, propValues, prefix);
127
+ declarations.push(` ${cssProperty}: ${resolvedValue};`);
128
+ }
129
+ if (declarations.length === 0) {
130
+ return '';
131
+ }
132
+ return `${selector} {\n${declarations.join('\n')}\n}`;
133
+ }
134
+ // ============================================================================
135
+ // Component CSS Generation
136
+ // ============================================================================
137
+ function isConditionalMappingArray(value) {
138
+ return Array.isArray(value) && value.length > 0 &&
139
+ typeof value[0] === 'object' && value[0] !== null &&
140
+ 'condition' in value[0] && 'styles' in value[0];
141
+ }
142
+ export function compileComponent(schema, config) {
143
+ const lines = [];
144
+ const classes = [];
145
+ const prefix = config.settings?.cssPrefix || 'intent';
146
+ const tokens = config.tokens;
147
+ const baseClass = `${prefix}-${schema.name.toLowerCase()}`;
148
+ // Generate base styles
149
+ if (schema.baseStyles) {
150
+ const baseSelector = `.${baseClass}`;
151
+ const baseRule = generateCSSRule(baseSelector, schema.baseStyles, tokens, {}, prefix);
152
+ if (baseRule) {
153
+ lines.push(baseRule);
154
+ classes.push(baseClass);
155
+ }
156
+ }
157
+ // Generate per-prop selectors (not cartesian product)
158
+ // Each mapping key like 'importance=primary' becomes .intent-button[data-importance="primary"]
159
+ for (const [mappingKey, mappingValue] of Object.entries(schema.mappings)) {
160
+ // Parse mapping key like "importance=primary"
161
+ const [mapProp, mapValue] = mappingKey.split('=');
162
+ // Generate simple selector for this prop=value
163
+ const selector = generateClassName(schema.name, mapProp, mapValue, prefix);
164
+ classes.push(`${baseClass}[data-${mapProp.toLowerCase()}="${mapValue}"]`);
165
+ if (isConditionalMappingArray(mappingValue)) {
166
+ // Conditional mapping array - generate compound selectors only for explicit conditions
167
+ for (const conditional of mappingValue) {
168
+ const conditions = Object.entries(conditional.condition);
169
+ if (conditions.length === 0)
170
+ continue;
171
+ // Build compound selector for additional conditions
172
+ const additionalSelectors = conditions.map(([condProp, condValue]) => `[data-${condProp.toLowerCase()}="${condValue}"]`);
173
+ const compoundSelector = selector + additionalSelectors.join('');
174
+ const rule = generateCSSRule(compoundSelector, conditional.styles, tokens, { [mapProp]: mapValue, ...conditional.condition }, prefix);
175
+ if (rule) {
176
+ lines.push(rule);
177
+ }
178
+ }
179
+ }
180
+ else {
181
+ // Simple mapping or responsive object - one rule per prop=value
182
+ const rule = generateCSSRule(selector, mappingValue, tokens, { [mapProp]: mapValue }, prefix);
183
+ if (rule) {
184
+ lines.push(rule);
185
+ }
186
+ }
187
+ }
188
+ return {
189
+ css: lines.join('\n\n'),
190
+ classes,
191
+ };
192
+ }
193
+ export function compileSystem(config, options = {}) {
194
+ const lines = [];
195
+ const prefix = config.settings?.cssPrefix || 'intent';
196
+ // Add CSS reset for Intent components
197
+ lines.push(`/* Intent Design System: ${config.name} v${config.version || '0.1.0'} */`);
198
+ lines.push('');
199
+ // Generate CSS variables
200
+ if (config.settings?.generateCSSVariables !== false) {
201
+ lines.push(generateCSSVariables(config.tokens, prefix));
202
+ lines.push('');
203
+ // Generate dark mode overrides
204
+ if (config.darkTokens) {
205
+ lines.push(generateDarkModeVariables(config.tokens, config.darkTokens, prefix));
206
+ lines.push('');
207
+ }
208
+ }
209
+ // Generate component styles
210
+ for (const [name, schema] of Object.entries(config.components)) {
211
+ lines.push(`/* Component: ${name} */`);
212
+ const compiled = compileComponent(schema, config);
213
+ lines.push(compiled.css);
214
+ lines.push('');
215
+ }
216
+ let css = lines.join('\n');
217
+ if (options.minify) {
218
+ css = minifyCSS(css);
219
+ }
220
+ return css;
221
+ }
222
+ function minifyCSS(css) {
223
+ return css
224
+ .replace(/\/\*[\s\S]*?\*\//g, '') // Remove comments
225
+ .replace(/\s+/g, ' ') // Collapse whitespace
226
+ .replace(/\s*([{}:;,])\s*/g, '$1') // Remove space around punctuation
227
+ .replace(/;}/g, '}') // Remove last semicolon in block
228
+ .trim();
229
+ }
230
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/generator/css.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * TypeScript Type Generator
3
+ *
4
+ * Generates strict TypeScript types from component schemas.
5
+ */
6
+ import type { DesignSystemConfig, ComponentSchema } from '../types/index.js';
7
+ export declare function generateComponentTypes(schema: ComponentSchema): string;
8
+ export declare function generateTokenTypes(tokens: DesignSystemConfig['tokens']): string;
9
+ export declare function generateSystemTypes(config: DesignSystemConfig): string;
10
+ export declare function generateRuntimeTypes(config: DesignSystemConfig): string;
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAsB,MAAM,mBAAmB,CAAC;AA4EjG,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAwCtE;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,MAAM,CAiC/E;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CA+DtE;AAMD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAiCvE"}