logicstamp-context 0.2.4 → 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 (101) hide show
  1. package/LLM_CONTEXT.md +2 -2
  2. package/README.md +23 -19
  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 +1 -0
  47. package/dist/core/styleExtractor/index.d.ts.map +1 -1
  48. package/dist/core/styleExtractor/index.js +1 -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.map +1 -1
  55. package/dist/core/styleExtractor/material.js +291 -66
  56. package/dist/core/styleExtractor/material.js.map +1 -1
  57. package/dist/core/styleExtractor/motion.d.ts +2 -2
  58. package/dist/core/styleExtractor/motion.d.ts.map +1 -1
  59. package/dist/core/styleExtractor/motion.js +425 -56
  60. package/dist/core/styleExtractor/motion.js.map +1 -1
  61. package/dist/core/styleExtractor/radix.d.ts +29 -0
  62. package/dist/core/styleExtractor/radix.d.ts.map +1 -0
  63. package/dist/core/styleExtractor/radix.js +315 -0
  64. package/dist/core/styleExtractor/radix.js.map +1 -0
  65. package/dist/core/styleExtractor/scss.d.ts.map +1 -1
  66. package/dist/core/styleExtractor/scss.js +37 -23
  67. package/dist/core/styleExtractor/scss.js.map +1 -1
  68. package/dist/core/styleExtractor/shadcn.d.ts +20 -0
  69. package/dist/core/styleExtractor/shadcn.d.ts.map +1 -0
  70. package/dist/core/styleExtractor/shadcn.js +345 -0
  71. package/dist/core/styleExtractor/shadcn.js.map +1 -0
  72. package/dist/core/styleExtractor/styleExtractor.d.ts.map +1 -1
  73. package/dist/core/styleExtractor/styleExtractor.js +267 -89
  74. package/dist/core/styleExtractor/styleExtractor.js.map +1 -1
  75. package/dist/core/styleExtractor/styled.d.ts +1 -1
  76. package/dist/core/styleExtractor/styled.d.ts.map +1 -1
  77. package/dist/core/styleExtractor/styled.js +308 -23
  78. package/dist/core/styleExtractor/styled.js.map +1 -1
  79. package/dist/core/styleExtractor/tailwind.d.ts +21 -3
  80. package/dist/core/styleExtractor/tailwind.d.ts.map +1 -1
  81. package/dist/core/styleExtractor/tailwind.js +279 -46
  82. package/dist/core/styleExtractor/tailwind.js.map +1 -1
  83. package/dist/types/UIFContract.d.ts +34 -0
  84. package/dist/types/UIFContract.d.ts.map +1 -1
  85. package/dist/types/UIFContract.js.map +1 -1
  86. package/dist/utils/config.d.ts.map +1 -1
  87. package/dist/utils/config.js +41 -2
  88. package/dist/utils/config.js.map +1 -1
  89. package/dist/utils/debug.d.ts +12 -0
  90. package/dist/utils/debug.d.ts.map +1 -0
  91. package/dist/utils/debug.js +16 -0
  92. package/dist/utils/debug.js.map +1 -0
  93. package/dist/utils/fsx.d.ts +2 -1
  94. package/dist/utils/fsx.d.ts.map +1 -1
  95. package/dist/utils/fsx.js +99 -28
  96. package/dist/utils/fsx.js.map +1 -1
  97. package/dist/utils/gitignore.d.ts.map +1 -1
  98. package/dist/utils/gitignore.js +28 -1
  99. package/dist/utils/gitignore.js.map +1 -1
  100. package/package.json +1 -1
  101. package/schema/logicstamp.context.schema.json +1 -1
@@ -1,74 +1,443 @@
1
1
  /**
2
2
  * Framer Motion extractor - Extracts animation configurations
3
3
  */
4
+ import { SyntaxKind } from 'ts-morph';
5
+ import { debugError } from '../../utils/debug.js';
4
6
  /**
5
- * Extract Framer Motion animation configurations
7
+ * Extract Framer Motion animation configurations using AST
6
8
  */
7
9
  export function extractMotionConfig(source) {
8
- const sourceText = source.getFullText();
9
- // Extract motion components (motion.div, motion.button, etc.)
10
- const motionComponentMatches = sourceText.matchAll(/motion\.(\w+)/g);
11
- const components = new Set();
12
- for (const match of motionComponentMatches) {
13
- if (match[1])
14
- components.add(match[1]);
10
+ try {
11
+ const components = new Set();
12
+ const variants = new Set();
13
+ let hasGestures = false;
14
+ let hasLayout = false;
15
+ let hasViewport = false;
16
+ // Cache import declarations for reuse
17
+ let importDeclarations = [];
18
+ try {
19
+ importDeclarations = source.getImportDeclarations();
20
+ }
21
+ catch (error) {
22
+ debugError('motion', 'extractMotionConfig', {
23
+ error: error instanceof Error ? error.message : String(error),
24
+ context: 'getImportDeclarations',
25
+ });
26
+ // Continue with empty array
27
+ }
28
+ // Check if Framer Motion is actually being used
29
+ let hasFramerMotionImport = false;
30
+ try {
31
+ hasFramerMotionImport = importDeclarations.some(imp => {
32
+ const mod = imp.getModuleSpecifierValue();
33
+ return mod === 'framer-motion' || mod.startsWith('framer-motion/');
34
+ });
35
+ }
36
+ catch (error) {
37
+ debugError('motion', 'extractMotionConfig', {
38
+ error: error instanceof Error ? error.message : String(error),
39
+ context: 'checkFramerMotionImports',
40
+ });
41
+ // Default to false on error
42
+ }
43
+ // Extract motion components (motion.div, motion.button, etc.) using AST
44
+ let propertyAccessExpressions = [];
45
+ try {
46
+ propertyAccessExpressions = source.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression);
47
+ }
48
+ catch (error) {
49
+ debugError('motion', 'extractMotionConfig', {
50
+ error: error instanceof Error ? error.message : String(error),
51
+ context: 'getPropertyAccessExpressions',
52
+ });
53
+ // Continue with empty array
54
+ }
55
+ try {
56
+ for (const propAccess of propertyAccessExpressions) {
57
+ const expression = propAccess.getExpression();
58
+ if (expression.getKind() === SyntaxKind.Identifier && expression.getText() === 'motion') {
59
+ const name = propAccess.getNameNode().getText();
60
+ components.add(name);
61
+ }
62
+ }
63
+ }
64
+ catch (error) {
65
+ debugError('motion', 'extractMotionConfig', {
66
+ error: error instanceof Error ? error.message : String(error),
67
+ context: 'processPropertyAccessExpressions',
68
+ });
69
+ // Continue - component detection may be incomplete but not fatal
70
+ }
71
+ // Only check for gestures/layout/viewport if Framer Motion is actually being used
72
+ const usesMotion = hasFramerMotionImport || components.size > 0;
73
+ // Extract variant names from JSX attributes using AST
74
+ let jsxAttributes = [];
75
+ try {
76
+ jsxAttributes = source.getDescendantsOfKind(SyntaxKind.JsxAttribute);
77
+ }
78
+ catch (error) {
79
+ debugError('motion', 'extractMotionConfig', {
80
+ error: error instanceof Error ? error.message : String(error),
81
+ context: 'getJsxAttributes',
82
+ });
83
+ // Continue with empty array
84
+ }
85
+ try {
86
+ for (const attr of jsxAttributes) {
87
+ const jsxAttr = attr;
88
+ const attrName = jsxAttr.getNameNode().getText();
89
+ if (attrName === 'variants') {
90
+ const initializer = jsxAttr.getInitializer();
91
+ if (initializer && initializer.getKind() === SyntaxKind.JsxExpression) {
92
+ const expr = initializer.getExpression();
93
+ if (expr && expr.getKind() === SyntaxKind.ObjectLiteralExpression) {
94
+ // Extract property names from inline object literal
95
+ const objLiteral = expr.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);
96
+ const properties = objLiteral.getProperties();
97
+ for (const prop of properties) {
98
+ if (prop.getKind() === SyntaxKind.PropertyAssignment) {
99
+ const name = prop.getNameNode();
100
+ if (name.getKind() === SyntaxKind.Identifier) {
101
+ variants.add(name.getText());
102
+ }
103
+ }
104
+ }
105
+ }
106
+ else if (expr && expr.getKind() === SyntaxKind.Identifier) {
107
+ // Handle variants passed as variable reference (e.g., variants={variants})
108
+ // Find the variable declaration and extract from it
109
+ try {
110
+ const varName = expr.getText();
111
+ const variableDeclarations = source.getDescendantsOfKind(SyntaxKind.VariableDeclaration);
112
+ for (const varDecl of variableDeclarations) {
113
+ const nameNode = varDecl.getNameNode();
114
+ if (nameNode.getKind() === SyntaxKind.Identifier && nameNode.getText() === varName) {
115
+ const initializer = varDecl.getInitializer();
116
+ if (initializer && initializer.getKind() === SyntaxKind.ObjectLiteralExpression) {
117
+ const objLiteral = initializer.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);
118
+ const properties = objLiteral.getProperties();
119
+ for (const prop of properties) {
120
+ if (prop.getKind() === SyntaxKind.PropertyAssignment) {
121
+ const propAssignment = prop.asKindOrThrow(SyntaxKind.PropertyAssignment);
122
+ const propName = propAssignment.getNameNode();
123
+ if (propName.getKind() === SyntaxKind.Identifier) {
124
+ variants.add(propName.getText());
125
+ }
126
+ }
127
+ }
128
+ }
129
+ break;
130
+ }
131
+ }
132
+ }
133
+ catch (error) {
134
+ debugError('motion', 'extractMotionConfig', {
135
+ error: error instanceof Error ? error.message : String(error),
136
+ context: 'extractVariantsFromVariableDeclarations',
137
+ });
138
+ // Continue - variant detection may be incomplete but not fatal
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+ catch (error) {
146
+ debugError('motion', 'extractMotionConfig', {
147
+ error: error instanceof Error ? error.message : String(error),
148
+ context: 'extractVariantsFromJsxAttributes',
149
+ });
150
+ // Continue - variant detection may be incomplete but not fatal
151
+ }
152
+ // Check for gesture handlers (only if Framer Motion is being used)
153
+ if (usesMotion && !hasGestures) {
154
+ const gestureProps = ['whileHover', 'whileTap', 'whileDrag', 'whileFocus', 'whileInView',
155
+ 'onTap', 'onPan', 'onDrag', 'onHover', 'onTapStart', 'onTapEnd',
156
+ 'onPanStart', 'onPanEnd', 'onDragStart', 'onDragEnd', 'onHoverStart', 'onHoverEnd'];
157
+ try {
158
+ for (const attr of jsxAttributes) {
159
+ const jsxAttr = attr;
160
+ const attrName = jsxAttr.getNameNode().getText();
161
+ if (gestureProps.includes(attrName)) {
162
+ hasGestures = true;
163
+ break;
164
+ }
165
+ }
166
+ }
167
+ catch (error) {
168
+ debugError('motion', 'extractMotionConfig', {
169
+ error: error instanceof Error ? error.message : String(error),
170
+ context: 'checkGestures',
171
+ });
172
+ // Default to false on error
173
+ }
174
+ }
175
+ // Check for layout animations (only if Framer Motion is being used)
176
+ if (usesMotion && !hasLayout) {
177
+ try {
178
+ for (const attr of jsxAttributes) {
179
+ const jsxAttr = attr;
180
+ const attrName = jsxAttr.getNameNode().getText();
181
+ if (attrName === 'layout' || attrName === 'layoutId') {
182
+ hasLayout = true;
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ catch (error) {
188
+ debugError('motion', 'extractMotionConfig', {
189
+ error: error instanceof Error ? error.message : String(error),
190
+ context: 'checkLayoutAnimations',
191
+ });
192
+ // Default to false on error
193
+ }
194
+ }
195
+ // Check for viewport animations (only if Framer Motion is being used)
196
+ if (usesMotion && !hasViewport) {
197
+ try {
198
+ for (const attr of jsxAttributes) {
199
+ const jsxAttr = attr;
200
+ const attrName = jsxAttr.getNameNode().getText();
201
+ if (attrName === 'viewport') {
202
+ hasViewport = true;
203
+ break;
204
+ }
205
+ }
206
+ }
207
+ catch (error) {
208
+ debugError('motion', 'extractMotionConfig', {
209
+ error: error instanceof Error ? error.message : String(error),
210
+ context: 'checkViewportAnimations',
211
+ });
212
+ // Default to false on error
213
+ }
214
+ }
215
+ // Check for useInView hook using AST (only if Framer Motion is being used)
216
+ if (usesMotion && !hasViewport) {
217
+ try {
218
+ const callExpressions = source.getDescendantsOfKind(SyntaxKind.CallExpression);
219
+ for (const callExpr of callExpressions) {
220
+ const expr = callExpr.getExpression();
221
+ if (expr.getKind() === SyntaxKind.Identifier && expr.getText() === 'useInView') {
222
+ hasViewport = true;
223
+ break;
224
+ }
225
+ }
226
+ }
227
+ catch (error) {
228
+ debugError('motion', 'extractMotionConfig', {
229
+ error: error instanceof Error ? error.message : String(error),
230
+ context: 'checkUseInViewHook',
231
+ });
232
+ // Default to false on error
233
+ }
234
+ }
235
+ return {
236
+ components: Array.from(components).sort(),
237
+ variants: Array.from(variants).sort(),
238
+ hasGestures,
239
+ hasLayout,
240
+ hasViewport,
241
+ };
15
242
  }
16
- // Extract variant names
17
- const variantMatches = sourceText.matchAll(/variants\s*=\s*\{\s*(\w+)/g);
18
- const variants = new Set();
19
- for (const match of variantMatches) {
20
- if (match[1])
21
- variants.add(match[1]);
243
+ catch (error) {
244
+ debugError('motion', 'extractMotionConfig', {
245
+ error: error instanceof Error ? error.message : String(error),
246
+ });
247
+ // Return empty/default values on unexpected errors
248
+ return {
249
+ components: [],
250
+ variants: [],
251
+ hasGestures: false,
252
+ hasLayout: false,
253
+ hasViewport: false,
254
+ };
22
255
  }
23
- // Check for gesture handlers
24
- const hasGestures = /while(Hover|Tap|Drag|Focus|InView)\s*=/.test(sourceText) ||
25
- /on(Tap|Pan|Drag|Hover)(Start|End)?\s*=/.test(sourceText);
26
- // Check for layout animations
27
- const hasLayout = /layout(?:Id)?\s*=/.test(sourceText);
28
- // Check for viewport animations
29
- const hasViewport = /useInView|viewport\s*=\s*\{/.test(sourceText);
30
- return {
31
- components: Array.from(components).sort(),
32
- variants: Array.from(variants).sort(),
33
- hasGestures,
34
- hasLayout,
35
- hasViewport,
36
- };
37
256
  }
38
257
  /**
39
- * Extract animation metadata
258
+ * Extract animation metadata using AST
40
259
  */
41
260
  export function extractAnimationMetadata(source) {
42
- const animation = {};
43
- const sourceText = source.getFullText();
44
- // Check for framer-motion animations
45
- const hasFramerMotion = source.getImportDeclarations().some(imp => {
46
- const moduleSpecifier = imp.getModuleSpecifierValue();
47
- return moduleSpecifier === 'framer-motion';
48
- });
49
- if (hasFramerMotion) {
50
- animation.library = 'framer-motion';
51
- // Check for fade-in patterns
52
- if (/animate\s*=\s*\{\{\s*opacity:\s*1/.test(sourceText)) {
53
- animation.type = 'fade-in';
54
- }
55
- // Check for useInView hook
56
- if (/useInView/.test(sourceText)) {
57
- animation.trigger = 'inView';
261
+ try {
262
+ const animation = {};
263
+ // Cache import declarations for reuse
264
+ let importDeclarations = [];
265
+ try {
266
+ importDeclarations = source.getImportDeclarations();
58
267
  }
59
- }
60
- // Check for CSS transitions/animations
61
- if (/transition/.test(sourceText) || /animate-/.test(sourceText)) {
62
- if (!animation.library) {
63
- animation.library = 'css';
64
- }
65
- if (!animation.type && /animate-/.test(sourceText)) {
66
- const animateMatch = sourceText.match(/animate-(\w+)/);
67
- if (animateMatch) {
68
- animation.type = animateMatch[1];
268
+ catch (error) {
269
+ debugError('motion', 'extractAnimationMetadata', {
270
+ error: error instanceof Error ? error.message : String(error),
271
+ context: 'getImportDeclarations',
272
+ });
273
+ // Continue with empty array
274
+ }
275
+ // Check for framer-motion animations using AST
276
+ let hasFramerMotion = false;
277
+ try {
278
+ hasFramerMotion = importDeclarations.some(imp => {
279
+ const mod = imp.getModuleSpecifierValue();
280
+ return mod === 'framer-motion' || mod.startsWith('framer-motion/');
281
+ });
282
+ }
283
+ catch (error) {
284
+ debugError('motion', 'extractAnimationMetadata', {
285
+ error: error instanceof Error ? error.message : String(error),
286
+ context: 'checkFramerMotionImports',
287
+ });
288
+ // Default to false on error
289
+ }
290
+ // Cache JSX attributes once for reuse in both Framer Motion and CSS checks
291
+ let jsxAttributes = [];
292
+ try {
293
+ jsxAttributes = source.getDescendantsOfKind(SyntaxKind.JsxAttribute);
294
+ }
295
+ catch (error) {
296
+ debugError('motion', 'extractAnimationMetadata', {
297
+ error: error instanceof Error ? error.message : String(error),
298
+ context: 'getJsxAttributes',
299
+ });
300
+ // Continue with empty array
301
+ }
302
+ if (hasFramerMotion) {
303
+ animation.library = 'framer-motion';
304
+ // Check for fade-in patterns using AST
305
+ try {
306
+ for (const attr of jsxAttributes) {
307
+ if (attr.getNameNode().getText() === 'animate') {
308
+ const animateInitializer = attr.getInitializer();
309
+ if (animateInitializer && animateInitializer.getKind() === SyntaxKind.JsxExpression) {
310
+ const expr = animateInitializer.getExpression();
311
+ if (expr && expr.getKind() === SyntaxKind.ObjectLiteralExpression) {
312
+ const objLiteral = expr.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);
313
+ const properties = objLiteral.getProperties();
314
+ for (const prop of properties) {
315
+ if (prop.getKind() === SyntaxKind.PropertyAssignment) {
316
+ const name = prop.getNameNode();
317
+ if (name.getKind() === SyntaxKind.Identifier && name.getText() === 'opacity') {
318
+ const opacityInitializer = prop.getInitializer();
319
+ if (opacityInitializer && opacityInitializer.getKind() === SyntaxKind.NumericLiteral) {
320
+ const value = opacityInitializer.getLiteralValue?.() ?? parseFloat(opacityInitializer.getText());
321
+ if (value === 1) {
322
+ animation.type = 'fade-in';
323
+ break;
324
+ }
325
+ }
326
+ }
327
+ }
328
+ }
329
+ if (animation.type === 'fade-in')
330
+ break;
331
+ }
332
+ }
333
+ }
334
+ }
335
+ }
336
+ catch (error) {
337
+ debugError('motion', 'extractAnimationMetadata', {
338
+ error: error instanceof Error ? error.message : String(error),
339
+ context: 'checkFadeInPatterns',
340
+ });
341
+ // Continue - animation detection may be incomplete but not fatal
342
+ }
343
+ // Check for useInView hook using AST
344
+ if (!animation.trigger) {
345
+ try {
346
+ const callExpressions = source.getDescendantsOfKind(SyntaxKind.CallExpression);
347
+ for (const callExpr of callExpressions) {
348
+ const expr = callExpr.getExpression();
349
+ if (expr.getKind() === SyntaxKind.Identifier && expr.getText() === 'useInView') {
350
+ animation.trigger = 'inView';
351
+ break;
352
+ }
353
+ }
354
+ }
355
+ catch (error) {
356
+ debugError('motion', 'extractAnimationMetadata', {
357
+ error: error instanceof Error ? error.message : String(error),
358
+ context: 'checkUseInViewHook',
359
+ });
360
+ // Continue - trigger detection may be incomplete but not fatal
361
+ }
362
+ }
363
+ }
364
+ // Check for CSS transitions/animations using AST (reuse jsxAttributes from above)
365
+ let hasTransition = false;
366
+ let hasAnimateClass = false;
367
+ try {
368
+ // Check for transition attribute or transition-related classes in className
369
+ hasTransition = jsxAttributes.some(attr => {
370
+ const name = attr.getNameNode().getText();
371
+ if (name === 'transition')
372
+ return true; // explicit prop
373
+ if (name === 'className' || name === 'class') {
374
+ const attrInitializer = attr.getInitializer();
375
+ if (attrInitializer) {
376
+ const text = attrInitializer.getText();
377
+ // Tailwind-style transitions
378
+ return /(?:^|\s)transition-/.test(text) || /(?:^|\s)duration-/.test(text);
379
+ }
380
+ }
381
+ return false;
382
+ });
383
+ hasAnimateClass = jsxAttributes.some(attr => {
384
+ const attrName = attr.getNameNode().getText();
385
+ if (attrName === 'className' || attrName === 'class') {
386
+ const attrInitializer = attr.getInitializer();
387
+ if (attrInitializer) {
388
+ const text = attrInitializer.getText();
389
+ return /animate-/.test(text);
390
+ }
391
+ }
392
+ return false;
393
+ });
394
+ }
395
+ catch (error) {
396
+ debugError('motion', 'extractAnimationMetadata', {
397
+ error: error instanceof Error ? error.message : String(error),
398
+ context: 'checkCSSTransitionsAnimations',
399
+ });
400
+ // Default to false on error
401
+ }
402
+ if (hasTransition || hasAnimateClass) {
403
+ if (!animation.library) {
404
+ animation.library = 'css';
405
+ }
406
+ if (!animation.type && hasAnimateClass) {
407
+ try {
408
+ // Extract animate- class name
409
+ for (const attr of jsxAttributes) {
410
+ const attrName = attr.getNameNode().getText();
411
+ if (attrName === 'className' || attrName === 'class') {
412
+ const attrInitializer = attr.getInitializer();
413
+ if (attrInitializer) {
414
+ const text = attrInitializer.getText();
415
+ const animateMatch = text.match(/animate-([a-zA-Z0-9_-]+)/);
416
+ if (animateMatch) {
417
+ animation.type = animateMatch[1];
418
+ break;
419
+ }
420
+ }
421
+ }
422
+ }
423
+ }
424
+ catch (error) {
425
+ debugError('motion', 'extractAnimationMetadata', {
426
+ error: error instanceof Error ? error.message : String(error),
427
+ context: 'extractAnimateClassName',
428
+ });
429
+ // Continue - animation type detection may be incomplete but not fatal
430
+ }
69
431
  }
70
432
  }
433
+ return animation;
434
+ }
435
+ catch (error) {
436
+ debugError('motion', 'extractAnimationMetadata', {
437
+ error: error instanceof Error ? error.message : String(error),
438
+ });
439
+ // Return empty object on unexpected errors
440
+ return {};
71
441
  }
72
- return animation;
73
442
  }
74
443
  //# sourceMappingURL=motion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/core/styleExtractor/motion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/core/styleExtractor/motion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Radix UI extractor - Extracts Radix UI primitive usage
3
+ * Radix UI provides unstyled, accessible components/primitives
4
+ * Many teams use Radix directly, and ShadCN is built on top of it
5
+ */
6
+ import { SourceFile } from 'ts-morph';
7
+ /**
8
+ * Extract Radix UI primitive usage from a source file
9
+ */
10
+ export declare function extractRadixUI(source: SourceFile): {
11
+ primitives: Record<string, string[]>;
12
+ patterns: {
13
+ controlled: string[];
14
+ uncontrolled: string[];
15
+ portals: number;
16
+ asChild: number;
17
+ };
18
+ accessibility: {
19
+ usesDirection?: boolean;
20
+ usesFocusManagement?: boolean;
21
+ usesKeyboardNav?: boolean;
22
+ usesModal?: boolean;
23
+ };
24
+ features: {
25
+ primitiveCount?: number;
26
+ compositionDepth?: 'simple' | 'moderate' | 'complex';
27
+ };
28
+ };
29
+ //# sourceMappingURL=radix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radix.d.ts","sourceRoot":"","sources":["../../../src/core/styleExtractor/radix.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EAMX,MAAM,UAAU,CAAC;AAqDlB;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG;IAClD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,aAAa,EAAE;QACb,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE;QACR,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;KACtD,CAAC;CACH,CAqRA"}