logicstamp-context 0.2.3 → 0.2.5

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 (102) hide show
  1. package/LLM_CONTEXT.md +2 -2
  2. package/README.md +96 -585
  3. package/dist/cli/commands/compare.d.ts.map +1 -1
  4. package/dist/cli/commands/compare.js +120 -13
  5. package/dist/cli/commands/compare.js.map +1 -1
  6. package/dist/cli/commands/context/fileWriter.d.ts.map +1 -1
  7. package/dist/cli/commands/context/fileWriter.js +68 -6
  8. package/dist/cli/commands/context/fileWriter.js.map +1 -1
  9. package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -1
  10. package/dist/cli/commands/context/tokenEstimator.js +12 -4
  11. package/dist/cli/commands/context/tokenEstimator.js.map +1 -1
  12. package/dist/cli/commands/context.d.ts.map +1 -1
  13. package/dist/cli/commands/context.js +71 -2
  14. package/dist/cli/commands/context.js.map +1 -1
  15. package/dist/cli/commands/validate.d.ts.map +1 -1
  16. package/dist/cli/commands/validate.js +84 -8
  17. package/dist/cli/commands/validate.js.map +1 -1
  18. package/dist/cli/handlers/compareHandler.d.ts.map +1 -1
  19. package/dist/cli/handlers/compareHandler.js +123 -9
  20. package/dist/cli/handlers/compareHandler.js.map +1 -1
  21. package/dist/core/astParser/detectors.d.ts.map +1 -1
  22. package/dist/core/astParser/detectors.js +130 -57
  23. package/dist/core/astParser/detectors.js.map +1 -1
  24. package/dist/core/astParser/extractors/componentExtractor.d.ts.map +1 -1
  25. package/dist/core/astParser/extractors/componentExtractor.js +89 -20
  26. package/dist/core/astParser/extractors/componentExtractor.js.map +1 -1
  27. package/dist/core/astParser/extractors/eventExtractor.d.ts.map +1 -1
  28. package/dist/core/astParser/extractors/eventExtractor.js +83 -28
  29. package/dist/core/astParser/extractors/eventExtractor.js.map +1 -1
  30. package/dist/core/astParser/extractors/propExtractor.d.ts.map +1 -1
  31. package/dist/core/astParser/extractors/propExtractor.js +130 -51
  32. package/dist/core/astParser/extractors/propExtractor.js.map +1 -1
  33. package/dist/core/astParser/extractors/stateExtractor.d.ts.map +1 -1
  34. package/dist/core/astParser/extractors/stateExtractor.js +95 -44
  35. package/dist/core/astParser/extractors/stateExtractor.js.map +1 -1
  36. package/dist/core/astParser.d.ts +1 -0
  37. package/dist/core/astParser.d.ts.map +1 -1
  38. package/dist/core/astParser.js +74 -26
  39. package/dist/core/astParser.js.map +1 -1
  40. package/dist/core/manifest.d.ts.map +1 -1
  41. package/dist/core/manifest.js +28 -1
  42. package/dist/core/manifest.js.map +1 -1
  43. package/dist/core/pack/loader.d.ts.map +1 -1
  44. package/dist/core/pack/loader.js +22 -2
  45. package/dist/core/pack/loader.js.map +1 -1
  46. package/dist/core/styleExtractor/index.d.ts +2 -0
  47. package/dist/core/styleExtractor/index.d.ts.map +1 -1
  48. package/dist/core/styleExtractor/index.js +2 -0
  49. package/dist/core/styleExtractor/index.js.map +1 -1
  50. package/dist/core/styleExtractor/layout.d.ts +13 -2
  51. package/dist/core/styleExtractor/layout.d.ts.map +1 -1
  52. package/dist/core/styleExtractor/layout.js +135 -65
  53. package/dist/core/styleExtractor/layout.js.map +1 -1
  54. package/dist/core/styleExtractor/material.d.ts +19 -0
  55. package/dist/core/styleExtractor/material.d.ts.map +1 -0
  56. package/dist/core/styleExtractor/material.js +328 -0
  57. package/dist/core/styleExtractor/material.js.map +1 -0
  58. package/dist/core/styleExtractor/motion.d.ts +2 -2
  59. package/dist/core/styleExtractor/motion.d.ts.map +1 -1
  60. package/dist/core/styleExtractor/motion.js +425 -56
  61. package/dist/core/styleExtractor/motion.js.map +1 -1
  62. package/dist/core/styleExtractor/radix.d.ts +29 -0
  63. package/dist/core/styleExtractor/radix.d.ts.map +1 -0
  64. package/dist/core/styleExtractor/radix.js +315 -0
  65. package/dist/core/styleExtractor/radix.js.map +1 -0
  66. package/dist/core/styleExtractor/scss.d.ts.map +1 -1
  67. package/dist/core/styleExtractor/scss.js +37 -23
  68. package/dist/core/styleExtractor/scss.js.map +1 -1
  69. package/dist/core/styleExtractor/shadcn.d.ts +20 -0
  70. package/dist/core/styleExtractor/shadcn.d.ts.map +1 -0
  71. package/dist/core/styleExtractor/shadcn.js +345 -0
  72. package/dist/core/styleExtractor/shadcn.js.map +1 -0
  73. package/dist/core/styleExtractor/styleExtractor.d.ts.map +1 -1
  74. package/dist/core/styleExtractor/styleExtractor.js +270 -78
  75. package/dist/core/styleExtractor/styleExtractor.js.map +1 -1
  76. package/dist/core/styleExtractor/styled.d.ts +1 -1
  77. package/dist/core/styleExtractor/styled.d.ts.map +1 -1
  78. package/dist/core/styleExtractor/styled.js +308 -23
  79. package/dist/core/styleExtractor/styled.js.map +1 -1
  80. package/dist/core/styleExtractor/tailwind.d.ts +21 -3
  81. package/dist/core/styleExtractor/tailwind.d.ts.map +1 -1
  82. package/dist/core/styleExtractor/tailwind.js +279 -46
  83. package/dist/core/styleExtractor/tailwind.js.map +1 -1
  84. package/dist/types/UIFContract.d.ts +45 -0
  85. package/dist/types/UIFContract.d.ts.map +1 -1
  86. package/dist/types/UIFContract.js.map +1 -1
  87. package/dist/utils/config.d.ts.map +1 -1
  88. package/dist/utils/config.js +41 -2
  89. package/dist/utils/config.js.map +1 -1
  90. package/dist/utils/debug.d.ts +12 -0
  91. package/dist/utils/debug.d.ts.map +1 -0
  92. package/dist/utils/debug.js +16 -0
  93. package/dist/utils/debug.js.map +1 -0
  94. package/dist/utils/fsx.d.ts +2 -1
  95. package/dist/utils/fsx.d.ts.map +1 -1
  96. package/dist/utils/fsx.js +99 -28
  97. package/dist/utils/fsx.js.map +1 -1
  98. package/dist/utils/gitignore.d.ts.map +1 -1
  99. package/dist/utils/gitignore.js +28 -1
  100. package/dist/utils/gitignore.js.map +1 -1
  101. package/package.json +1 -1
  102. package/schema/logicstamp.context.schema.json +48 -1
@@ -1,85 +1,318 @@
1
1
  /**
2
2
  * Tailwind CSS extractor - Extracts and categorizes Tailwind utility classes
3
3
  */
4
+ import { SyntaxKind } from 'ts-morph';
5
+ import { debugError } from '../../utils/debug.js';
4
6
  /**
5
7
  * Tailwind utility class categories for semantic grouping
8
+ * Note: Order matters - first match wins.
9
+ * - ring- is intentionally only in borders (not colors)
10
+ * - shadow- is intentionally only in effects (not colors)
11
+ * - border- and outline- are in borders (checked before colors)
6
12
  */
7
13
  const TAILWIND_CATEGORIES = {
8
- layout: /^(flex|grid|block|inline|hidden|container|box-|aspect-|columns-|break-)/,
14
+ layout: /^(flex|grid|block|inline|hidden|container|box-|aspect-|columns-|break-|table|inline-table|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row-group|table-row|flow-root|contents|list-item)/,
9
15
  spacing: /^(p-|m-|px-|py-|mx-|my-|pt-|pb-|pl-|pr-|mt-|mb-|ml-|mr-|space-|gap-)/,
10
16
  sizing: /^(w-|h-|min-w-|min-h-|max-w-|max-h-|size-)/,
11
- typography: /^(text-|font-|leading-|tracking-|antialiased|subpixel|italic|not-italic|uppercase|lowercase|capitalize|normal-case|truncate|whitespace-)/,
12
- colors: /^(bg-|text-|border-|ring-|outline-|shadow-|from-|via-|to-|decoration-)/,
13
- borders: /^(border-|rounded-|ring-|divide-)/,
17
+ positioning: /^(static|fixed|absolute|relative|sticky|inset-|top-|right-|bottom-|left-|z-)/,
18
+ typography: /^(text-|font-|leading-|tracking-|antialiased|subpixel|italic|not-italic|uppercase|lowercase|capitalize|normal-case|truncate|whitespace-|line-clamp-|indent-|align-|vertical-align-)/,
19
+ borders: /^(border-|rounded-|ring-|divide-|outline-)/,
20
+ colors: /^(bg-|text-|from-|via-|to-|decoration-|accent-|caret-)/,
14
21
  effects: /^(shadow-|opacity-|mix-|backdrop-|blur-|brightness-|contrast-|grayscale|hue-|invert|saturate|sepia)/,
15
22
  transitions: /^(transition-|duration-|ease-|delay-|animate-)/,
16
23
  transforms: /^(scale-|rotate-|translate-|skew-|origin-)/,
17
24
  interactivity: /^(cursor-|select-|pointer-events-|resize-|scroll-|touch-|will-)/,
25
+ overflow: /^(overflow-|overscroll-)/,
26
+ display: /^(object-|float-|clear-|isolate)/,
18
27
  svg: /^(fill-|stroke-)/,
19
28
  };
20
29
  /**
21
- * Extract Tailwind classes from className attributes in JSX
30
+ * Pattern to match chains of variant prefixes (breakpoints, pseudo-classes, etc.)
31
+ * Matches one or more variant prefixes at the start of a class name
32
+ *
33
+ * Handles:
34
+ * - Responsive breakpoints: sm:, md:, lg:, xl:, 2xl:, max-*
35
+ * - Pseudo-classes: hover:, focus:, active:, disabled:, etc.
36
+ * - State variants: open:, checked:, selected:, etc.
37
+ * - Theme variants: dark:, light:
38
+ * - Motion variants: motion-safe:, motion-reduce:
39
+ * - ARIA/data variants: aria-[...]:, data-[...]:
40
+ * - Group/peer variants: group-hover:, peer-focus:, etc.
41
+ * - Print: print:
22
42
  */
23
- export function extractTailwindClasses(sourceText) {
24
- const classNames = [];
25
- // Match className="..." or className='...' or className={...}
26
- const patterns = [
27
- /className\s*=\s*"([^"]*)"/g,
28
- /className\s*=\s*'([^']*)'/g,
29
- /className\s*=\s*`([^`]*)`/g,
30
- ];
31
- for (const pattern of patterns) {
32
- for (const match of sourceText.matchAll(pattern)) {
33
- if (match[1]) {
34
- // Split by whitespace and filter empty strings
35
- const classes = match[1].split(/\s+/).filter(Boolean);
36
- classNames.push(...classes);
43
+ const VARIANT_PREFIX_CHAIN = /^(?:(sm|md|lg|xl|2xl|max-sm|max-md|max-lg|max-xl|max-2xl|hover|focus|active|disabled|visited|first|last|odd|even|group-hover|group-focus|group-active|peer-hover|peer-focus|peer-active|dark|light|motion-safe|motion-reduce|open|checked|selected|indeterminate|required|optional|valid|invalid|in-range|out-of-range|read-only|read-write|empty|target|before|after|placeholder|file|marker|selection|first-line|first-letter|backdrop|print|aria-[^:]+|data-[^:]+):)+/;
44
+ /**
45
+ * Pattern to match breakpoint prefixes anywhere in a class name
46
+ */
47
+ const BREAKPOINT_PATTERN = /\b(sm|md|lg|xl|2xl|max-sm|max-md|max-lg|max-xl|max-2xl):/g;
48
+ /**
49
+ * Extract Tailwind classes from className attributes in JSX (AST-based)
50
+ *
51
+ * Uses AST traversal to extract classes from:
52
+ * - Literal strings: className="flex p-4"
53
+ * - Template literals: className={`flex ${variable}`} (static segments extracted)
54
+ * - Function calls: className={cn('flex', isActive && 'bg-blue')}
55
+ * - Conditional expressions: className={isActive && 'bg-blue'}
56
+ *
57
+ * Note: Template literals are partially analyzed – static segments are extracted,
58
+ * dynamic expressions within ${} are ignored.
59
+ *
60
+ * Falls back to regex extraction for source text if AST is not available.
61
+ */
62
+ export function extractTailwindClasses(source) {
63
+ try {
64
+ if (typeof source === 'string') {
65
+ // Fallback to regex-based extraction for backward compatibility
66
+ return extractTailwindClassesFromText(source);
67
+ }
68
+ const classNames = new Set();
69
+ // Extract from JSX attributes - wrap AST-risky operation
70
+ let jsxElements = [];
71
+ try {
72
+ jsxElements = [
73
+ ...source.getDescendantsOfKind(SyntaxKind.JsxElement),
74
+ ...source.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
75
+ ];
76
+ }
77
+ catch {
78
+ // If AST traversal fails, fallback to regex extraction
79
+ return extractTailwindClassesFromText(source.getFullText());
80
+ }
81
+ for (const element of jsxElements) {
82
+ const openingElement = 'getOpeningElement' in element
83
+ ? element.getOpeningElement()
84
+ : element;
85
+ // Get all attributes and find className or class
86
+ const attributes = openingElement.getAttributes();
87
+ for (const attr of attributes) {
88
+ if (attr.getKind() !== SyntaxKind.JsxAttribute)
89
+ continue;
90
+ const jsxAttr = attr;
91
+ const attrName = jsxAttr.getNameNode().getText();
92
+ // Support both className (React/Preact) and class (Vue, Svelte, etc.)
93
+ if (attrName !== 'className' && attrName !== 'class')
94
+ continue;
95
+ const initializer = jsxAttr.getInitializer();
96
+ if (!initializer)
97
+ continue;
98
+ let expressionNode = initializer;
99
+ // Handle className="..." (StringLiteral) vs className={...} (JsxExpression)
100
+ // For className={...}, unwrap the JsxExpression to get the inner expression
101
+ if (initializer.getKind() === SyntaxKind.JsxExpression) {
102
+ const expr = initializer.getExpression();
103
+ if (!expr)
104
+ continue;
105
+ expressionNode = expr;
106
+ }
107
+ // Extract classes based on the expression type
108
+ const extracted = extractClassesFromExpression(expressionNode);
109
+ extracted.forEach(cls => classNames.add(cls));
110
+ }
111
+ }
112
+ return Array.from(classNames);
113
+ }
114
+ catch (error) {
115
+ debugError('tailwind', 'extractTailwindClasses', {
116
+ error: error instanceof Error ? error.message : String(error),
117
+ });
118
+ return [];
119
+ }
120
+ }
121
+ /**
122
+ * Extract classes from a className expression (AST node)
123
+ */
124
+ function extractClassesFromExpression(node) {
125
+ try {
126
+ const classes = [];
127
+ // String literal: className="flex p-4"
128
+ if (node.getKind() === SyntaxKind.StringLiteral) {
129
+ const text = node.getLiteralText?.() ?? node.getText().slice(1, -1);
130
+ classes.push(...text.split(/\s+/).filter(Boolean));
131
+ }
132
+ // Backtick literal with no interpolations: `flex p-4`
133
+ else if (node.getKind() === SyntaxKind.NoSubstitutionTemplateLiteral) {
134
+ const text = node.getLiteralText?.() ?? node.getText().slice(1, -1);
135
+ classes.push(...text.split(/\s+/).filter(Boolean));
136
+ }
137
+ // Template with interpolations: `flex ${...} text-white`
138
+ // Static segments are extracted, dynamic expressions within ${} are ignored
139
+ else if (node.getKind() === SyntaxKind.TemplateExpression) {
140
+ const template = node.asKindOrThrow(SyntaxKind.TemplateExpression);
141
+ // Head: initial static part before first ${}
142
+ const headText = template.getHead().getText().replace(/^`/, '');
143
+ if (headText.trim()) {
144
+ classes.push(...headText.trim().split(/\s+/).filter(Boolean));
145
+ }
146
+ // Each span: ${ expression }<literal>
147
+ // Only extract the literal part (static text after each ${}), ignore the expression
148
+ for (const span of template.getTemplateSpans()) {
149
+ const literal = span.getLiteral();
150
+ const litText = literal.getText().replace(/`$/, '');
151
+ if (litText.trim()) {
152
+ classes.push(...litText.trim().split(/\s+/).filter(Boolean));
153
+ }
154
+ }
155
+ }
156
+ // Conditional expression at top level: className={isActive && 'bg-blue'}
157
+ else if (node.getKind() === SyntaxKind.BinaryExpression) {
158
+ const binary = node.asKindOrThrow(SyntaxKind.BinaryExpression);
159
+ const right = binary.getRight();
160
+ if (right && right.getKind() === SyntaxKind.StringLiteral) {
161
+ const str = right.getLiteralText?.() ?? right.getText().slice(1, -1);
162
+ classes.push(...str.split(/\s+/).filter(Boolean));
37
163
  }
38
164
  }
165
+ // Function call: className={cn('flex', 'p-4')}
166
+ else if (node.getKind() === SyntaxKind.CallExpression) {
167
+ const callExpr = node.asKindOrThrow(SyntaxKind.CallExpression);
168
+ const expr = callExpr.getExpression();
169
+ // Check if it's cn/clsx/classnames by inspecting the identifier directly
170
+ // This is more robust than regex on getText() which can include parentheses
171
+ const name = expr.getKind() === SyntaxKind.Identifier ? expr.getText() : undefined;
172
+ if (!name || !['cn', 'clsx', 'classnames'].includes(name)) {
173
+ return classes;
174
+ }
175
+ // Extract string arguments from the call
176
+ const args = callExpr.getArguments();
177
+ for (const arg of args) {
178
+ // Recursively extract from arguments (handles strings, templates, conditionals, etc.)
179
+ classes.push(...extractClassesFromExpression(arg));
180
+ }
181
+ }
182
+ // Variable reference: className={styles}
183
+ else if (node.getKind() === SyntaxKind.Identifier) {
184
+ // Can't statically analyze variables, skip
185
+ }
186
+ return classes;
187
+ }
188
+ catch {
189
+ // Return empty array on unexpected errors - outer try/catch will handle logging
190
+ return [];
39
191
  }
40
- return classNames;
192
+ }
193
+ /**
194
+ * Fallback: Extract Tailwind classes from source text using regex
195
+ * Used for backward compatibility when only source text is available.
196
+ *
197
+ * Note: This fallback only handles literal className/class strings (className="..."),
198
+ * not dynamic expressions. Use AST-based extraction for full support.
199
+ */
200
+ function extractTailwindClassesFromText(sourceText) {
201
+ try {
202
+ const classNames = new Set();
203
+ // Match className="..." or className='...' or className={`...`}
204
+ // Also match class="..." for non-React frameworks (Vue, Svelte, etc.)
205
+ const patterns = [
206
+ /className\s*=\s*"([^"]*)"/g,
207
+ /className\s*=\s*'([^']*)'/g,
208
+ /className\s*=\s*`([^`]*)`/g,
209
+ /class\s*=\s*"([^"]*)"/g,
210
+ /class\s*=\s*'([^']*)'/g,
211
+ /class\s*=\s*`([^`]*)`/g,
212
+ ];
213
+ for (const pattern of patterns) {
214
+ for (const match of sourceText.matchAll(pattern)) {
215
+ if (match[1]) {
216
+ // Split by whitespace and filter empty strings
217
+ const classes = match[1].split(/\s+/).filter(Boolean);
218
+ classes.forEach(cls => classNames.add(cls));
219
+ }
220
+ }
221
+ }
222
+ return Array.from(classNames);
223
+ }
224
+ catch (error) {
225
+ debugError('tailwind', 'extractTailwindClassesFromText', {
226
+ error: error instanceof Error ? error.message : String(error),
227
+ });
228
+ return [];
229
+ }
230
+ }
231
+ /**
232
+ * Strip all variant prefixes from a class name to get the base utility
233
+ *
234
+ * Examples:
235
+ * - sm:bg-red-500 → bg-red-500
236
+ * - md:hover:bg-red-500 → bg-red-500
237
+ * - dark:focus:ring-2 → ring-2
238
+ * - light:bg-white → bg-white
239
+ * - aria-[pressed=true]:bg-blue-500 → bg-blue-500
240
+ * - data-[state=active]:text-red-500 → text-red-500
241
+ */
242
+ function stripVariantPrefixes(className) {
243
+ return className.replace(VARIANT_PREFIX_CHAIN, '');
41
244
  }
42
245
  /**
43
246
  * Categorize Tailwind utility classes
247
+ *
248
+ * Returns a record mapping category names to arrays of class names (JSON-ready).
249
+ * Each class is categorized based on its base utility (after stripping variant prefixes).
44
250
  */
45
251
  export function categorizeTailwindClasses(classes) {
46
- const categorized = {};
47
- for (const className of classes) {
48
- // Remove responsive prefixes (sm:, md:, lg:, etc.) for categorization
49
- const baseClass = className.replace(/^(sm|md|lg|xl|2xl|max-sm|max-md|max-lg|max-xl|max-2xl|hover|focus|active|disabled|group-hover|peer-focus|dark):/, '');
50
- let matchedCategory = false;
51
- for (const [category, pattern] of Object.entries(TAILWIND_CATEGORIES)) {
52
- if (pattern.test(baseClass)) {
53
- if (!categorized[category]) {
54
- categorized[category] = new Set();
252
+ try {
253
+ if (!Array.isArray(classes))
254
+ return {};
255
+ const categorized = {};
256
+ for (const className of classes) {
257
+ // Strip all variant prefixes to get the base utility class
258
+ const baseClass = stripVariantPrefixes(className);
259
+ let matchedCategory = false;
260
+ for (const [category, pattern] of Object.entries(TAILWIND_CATEGORIES)) {
261
+ if (pattern.test(baseClass)) {
262
+ if (!categorized[category]) {
263
+ categorized[category] = new Set();
264
+ }
265
+ categorized[category].add(className);
266
+ matchedCategory = true;
267
+ break;
55
268
  }
56
- categorized[category].add(className);
57
- matchedCategory = true;
58
- break;
59
269
  }
60
- }
61
- // Catch-all for uncategorized utilities
62
- if (!matchedCategory) {
63
- if (!categorized['other']) {
64
- categorized['other'] = new Set();
270
+ // Catch-all for uncategorized utilities
271
+ if (!matchedCategory) {
272
+ if (!categorized['other']) {
273
+ categorized['other'] = new Set();
274
+ }
275
+ categorized['other'].add(className);
65
276
  }
66
- categorized['other'].add(className);
67
277
  }
278
+ // Convert Sets to arrays for JSON serialization
279
+ // Let outer try/catch handle any conversion errors to preserve partial results
280
+ const result = Object.fromEntries(Object.entries(categorized).map(([k, v]) => [k, Array.from(v).sort()]));
281
+ return result;
282
+ }
283
+ catch (error) {
284
+ debugError('tailwind', 'categorizeTailwindClasses', {
285
+ error: error instanceof Error ? error.message : String(error),
286
+ });
287
+ return {};
68
288
  }
69
- return categorized;
70
289
  }
71
290
  /**
72
291
  * Extract responsive breakpoints used in the component
292
+ *
293
+ * Finds breakpoints anywhere in class names, not just at the start.
294
+ * Handles cases like hover:sm:bg-red-500 (though uncommon in practice).
73
295
  */
74
296
  export function extractBreakpoints(classes) {
75
- const breakpoints = new Set();
76
- const breakpointPattern = /^(sm|md|lg|xl|2xl|max-sm|max-md|max-lg|max-xl|max-2xl):/;
77
- for (const className of classes) {
78
- const match = className.match(breakpointPattern);
79
- if (match) {
80
- breakpoints.add(match[1]);
297
+ try {
298
+ if (!Array.isArray(classes))
299
+ return [];
300
+ const breakpoints = new Set();
301
+ for (const className of classes) {
302
+ let match;
303
+ // Reset regex lastIndex for each string
304
+ BREAKPOINT_PATTERN.lastIndex = 0;
305
+ while ((match = BREAKPOINT_PATTERN.exec(className))) {
306
+ breakpoints.add(match[1]);
307
+ }
81
308
  }
309
+ return Array.from(breakpoints).sort();
310
+ }
311
+ catch (error) {
312
+ debugError('tailwind', 'extractBreakpoints', {
313
+ error: error instanceof Error ? error.message : String(error),
314
+ });
315
+ return [];
82
316
  }
83
- return Array.from(breakpoints).sort();
84
317
  }
85
318
  //# sourceMappingURL=tailwind.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../../src/core/styleExtractor/tailwind.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../../src/core/styleExtractor/tailwind.ts"],"names":[],"mappings":"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"}
@@ -124,6 +124,47 @@ export interface StyleSources {
124
124
  viewportAnimations?: boolean;
125
125
  };
126
126
  };
127
+ materialUI?: {
128
+ components?: string[];
129
+ packages?: string[];
130
+ features: {
131
+ usesTheme?: boolean;
132
+ usesSxProp?: boolean;
133
+ usesStyled?: boolean;
134
+ usesMakeStyles?: boolean;
135
+ usesSystemProps?: boolean;
136
+ };
137
+ };
138
+ shadcnUI?: {
139
+ components?: string[];
140
+ variants?: Record<string, string[]>;
141
+ sizes?: string[];
142
+ features: {
143
+ usesForm?: boolean;
144
+ usesTheme?: boolean;
145
+ usesIcons?: boolean;
146
+ componentDensity?: 'low' | 'medium' | 'high';
147
+ };
148
+ };
149
+ radixUI?: {
150
+ primitives?: Record<string, string[]>;
151
+ patterns?: {
152
+ controlled?: string[];
153
+ uncontrolled?: string[];
154
+ portals?: number;
155
+ asChild?: number;
156
+ };
157
+ accessibility?: {
158
+ usesDirection?: boolean;
159
+ usesFocusManagement?: boolean;
160
+ usesKeyboardNav?: boolean;
161
+ usesModal?: boolean;
162
+ };
163
+ features?: {
164
+ primitiveCount?: number;
165
+ compositionDepth?: 'simple' | 'moderate' | 'complex';
166
+ };
167
+ };
127
168
  }
128
169
  export interface LayoutMetadata {
129
170
  type?: 'flex' | 'grid' | 'relative' | 'absolute';
@@ -135,6 +176,10 @@ export interface LayoutMetadata {
135
176
  export interface VisualMetadata {
136
177
  colors?: string[];
137
178
  spacing?: string[];
179
+ /**
180
+ * Border radius token (e.g., "default", "sm", "md", "lg", "xl", "2xl", "3xl", "full")
181
+ * Stores just the token, not the full class name (e.g., "lg" not "rounded-lg")
182
+ */
138
183
  radius?: string;
139
184
  typography?: string[];
140
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UIFContract.d.ts","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UIFContract.d.ts","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UIFContract.js","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAkMH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,GAAG,CAAC,IAAI,KAAK,aAAa;QAC1B,eAAe,IAAI,GAAG;QACtB,GAAG,CAAC,aAAa,KAAK,KAAK,CAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"UIFContract.js","sourceRoot":"","sources":["../../src/types/UIFContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAqPH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,GAAG,CAAC,IAAI,KAAK,aAAa;QAC1B,eAAe,IAAI,GAAG;QACtB,GAAG,CAAC,aAAa,KAAK,KAAK,CAC5B,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAQ/E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzG"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAQ/E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C9F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzG"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { readFile, writeFile, mkdir, access } from 'node:fs/promises';
5
5
  import { join } from 'node:path';
6
+ import { debugError } from './debug.js';
6
7
  /**
7
8
  * Get the config directory path for a project
8
9
  */
@@ -47,9 +48,47 @@ export async function writeConfig(projectRoot, config) {
47
48
  const configDir = getConfigDir(projectRoot);
48
49
  const configPath = getConfigPath(projectRoot);
49
50
  // Ensure config directory exists
50
- await mkdir(configDir, { recursive: true });
51
+ try {
52
+ await mkdir(configDir, { recursive: true });
53
+ }
54
+ catch (error) {
55
+ const err = error;
56
+ debugError('config', 'writeConfig', {
57
+ configDir,
58
+ operation: 'mkdir',
59
+ message: err.message,
60
+ code: err.code,
61
+ });
62
+ throw new Error(`Failed to create config directory "${configDir}": ${err.code === 'EACCES' ? 'Permission denied' : err.message}`);
63
+ }
51
64
  // Write config file
52
- await writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
65
+ try {
66
+ await writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
67
+ }
68
+ catch (error) {
69
+ const err = error;
70
+ debugError('config', 'writeConfig', {
71
+ configPath,
72
+ operation: 'writeFile',
73
+ message: err.message,
74
+ code: err.code,
75
+ });
76
+ let userMessage;
77
+ switch (err.code) {
78
+ case 'ENOENT':
79
+ userMessage = `Parent directory not found for: "${configPath}"`;
80
+ break;
81
+ case 'EACCES':
82
+ userMessage = `Permission denied writing to: "${configPath}"`;
83
+ break;
84
+ case 'ENOSPC':
85
+ userMessage = `No space left on device. Cannot write: "${configPath}"`;
86
+ break;
87
+ default:
88
+ userMessage = `Failed to write config file "${configPath}": ${err.message}`;
89
+ }
90
+ throw new Error(userMessage);
91
+ }
53
92
  }
54
93
  /**
55
94
  * Update config with new values (merges with existing)
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAS1C;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,MAAwB;IAC7E,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAE9C,iCAAiC;IACjC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,oBAAoB;IACpB,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,OAAkC;IACxF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Debug logging utilities
3
+ * Only logs when LOGICSTAMP_DEBUG=1 is set
4
+ */
5
+ /**
6
+ * Debug logging helper for module errors
7
+ * @param moduleName - Name of the module (e.g., 'fsx', 'astParser')
8
+ * @param functionName - Name of the function that encountered the error
9
+ * @param context - Additional context to log (file paths, error details, etc.)
10
+ */
11
+ export declare function debugError(moduleName: string, functionName: string, context: Record<string, unknown>): void;
12
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAIN"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Debug logging utilities
3
+ * Only logs when LOGICSTAMP_DEBUG=1 is set
4
+ */
5
+ /**
6
+ * Debug logging helper for module errors
7
+ * @param moduleName - Name of the module (e.g., 'fsx', 'astParser')
8
+ * @param functionName - Name of the function that encountered the error
9
+ * @param context - Additional context to log (file paths, error details, etc.)
10
+ */
11
+ export function debugError(moduleName, functionName, context) {
12
+ if (process.env.LOGICSTAMP_DEBUG === '1') {
13
+ console.error(`[LogicStamp][DEBUG] ${moduleName}.${functionName} error:`, context);
14
+ }
15
+ }
16
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,UAAkB,EAClB,YAAoB,EACpB,OAAgC;IAEhC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,uBAAuB,UAAU,IAAI,YAAY,SAAS,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
@@ -36,6 +36,7 @@ export declare function globFiles(searchPath: string, extensions?: string): Prom
36
36
  export declare function readFileWithText(filePath: string): Promise<FileWithText>;
37
37
  /**
38
38
  * Find all sidecar files (*.uif.json) in a directory
39
+ * Returns empty array if glob fails (sidecars are optional)
39
40
  */
40
41
  export declare function findSidecarFiles(searchPath: string): Promise<string[]>;
41
42
  /**
@@ -81,5 +82,5 @@ export declare function getFolderPath(filePath: string): string;
81
82
  * Group files by their containing folder
82
83
  * Returns a Map of folderPath -> array of file paths
83
84
  */
84
- export declare function groupFilesByFolder(files: string[], projectRoot: string): Map<string, string[]>;
85
+ export declare function groupFilesByFolder(files: string[]): Map<string, string[]>;
85
86
  //# sourceMappingURL=fsx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fsx.d.ts","sourceRoot":"","sources":["../../src/utils/fsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAUH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,MAAmB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAG9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM5E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAe9F"}
1
+ {"version":3,"file":"fsx.d.ts","sourceRoot":"","sources":["../../src/utils/fsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAWH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,MAAmB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CAyDnB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoC9E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgB5E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAczE"}