mcp-react-toolkit 1.0.0 → 1.2.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 (235) hide show
  1. package/README.md +146 -42
  2. package/package.json +13 -5
  3. package/server.json +20 -0
  4. package/tools/accessibility-checker/build/index.js +9 -5
  5. package/tools/accessibility-checker/build/index.js.map +1 -1
  6. package/tools/accessibility-checker/build/rules.d.ts.map +1 -1
  7. package/tools/accessibility-checker/build/rules.js +325 -94
  8. package/tools/accessibility-checker/build/rules.js.map +1 -1
  9. package/tools/code-modernizer/build/tools/01-convert-to-typescript.d.ts.map +1 -1
  10. package/tools/code-modernizer/build/tools/01-convert-to-typescript.js +65 -50
  11. package/tools/code-modernizer/build/tools/01-convert-to-typescript.js.map +1 -1
  12. package/tools/code-modernizer/build/types.d.ts +1 -0
  13. package/tools/code-modernizer/build/types.d.ts.map +1 -1
  14. package/tools/code-modernizer/build/utils/ast-parser.d.ts.map +1 -1
  15. package/tools/code-modernizer/build/utils/ast-parser.js +30 -14
  16. package/tools/code-modernizer/build/utils/ast-parser.js.map +1 -1
  17. package/tools/code-modernizer/build/utils/type-generator.d.ts +1 -1
  18. package/tools/code-modernizer/build/utils/type-generator.d.ts.map +1 -1
  19. package/tools/code-modernizer/build/utils/type-generator.js +72 -23
  20. package/tools/code-modernizer/build/utils/type-generator.js.map +1 -1
  21. package/tools/component-factory/build/index.js +59 -7
  22. package/tools/component-factory/build/index.js.map +1 -1
  23. package/tools/component-fixer/README.md +44 -0
  24. package/tools/component-fixer/build/index.d.ts +3 -0
  25. package/tools/component-fixer/build/index.d.ts.map +1 -0
  26. package/tools/component-fixer/build/index.js +647 -0
  27. package/tools/component-fixer/build/index.js.map +1 -0
  28. package/tools/component-fixer/build/index.test.d.ts +2 -0
  29. package/tools/component-fixer/build/index.test.d.ts.map +1 -0
  30. package/tools/component-fixer/build/index.test.js.map +1 -0
  31. package/tools/component-fixer/package.json +20 -0
  32. package/tools/component-reviewer/README.md +54 -0
  33. package/tools/component-reviewer/build/index.d.ts +39 -0
  34. package/tools/component-reviewer/build/index.d.ts.map +1 -0
  35. package/tools/component-reviewer/build/index.js +946 -0
  36. package/tools/component-reviewer/build/index.js.map +1 -0
  37. package/tools/component-reviewer/build/index.test.d.ts +2 -0
  38. package/tools/component-reviewer/build/index.test.d.ts.map +1 -0
  39. package/tools/component-reviewer/build/index.test.js.map +1 -0
  40. package/tools/component-reviewer/package.json +20 -0
  41. package/tools/dep-auditor/build/index.d.ts +1 -0
  42. package/tools/dep-auditor/build/index.d.ts.map +1 -1
  43. package/tools/dep-auditor/build/index.js +71 -16
  44. package/tools/dep-auditor/build/index.js.map +1 -1
  45. package/tools/generate-tests/build/analyzer.d.ts +14 -0
  46. package/tools/generate-tests/build/analyzer.d.ts.map +1 -1
  47. package/tools/generate-tests/build/analyzer.js +96 -42
  48. package/tools/generate-tests/build/analyzer.js.map +1 -1
  49. package/tools/generate-tests/build/generators.d.ts.map +1 -1
  50. package/tools/generate-tests/build/generators.js +304 -79
  51. package/tools/generate-tests/build/generators.js.map +1 -1
  52. package/tools/generate-tests/build/index.js +29 -10
  53. package/tools/generate-tests/build/index.js.map +1 -1
  54. package/tools/json-viewer/build/index.js +29 -6
  55. package/tools/json-viewer/build/index.js.map +1 -1
  56. package/tools/legacy-analyzer/README.md +66 -0
  57. package/tools/legacy-analyzer/build/index.d.ts +3 -0
  58. package/tools/legacy-analyzer/build/index.d.ts.map +1 -0
  59. package/tools/legacy-analyzer/build/index.js +209 -0
  60. package/tools/legacy-analyzer/build/index.js.map +1 -0
  61. package/tools/legacy-analyzer/build/index.test.d.ts +2 -0
  62. package/tools/legacy-analyzer/build/index.test.d.ts.map +1 -0
  63. package/tools/legacy-analyzer/build/index.test.js.map +1 -0
  64. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts +3 -0
  65. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts.map +1 -0
  66. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js +115 -0
  67. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js.map +1 -0
  68. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts +3 -0
  69. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts.map +1 -0
  70. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js +85 -0
  71. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js.map +1 -0
  72. package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts +3 -0
  73. package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts.map +1 -0
  74. package/tools/legacy-analyzer/build/tools/03-analyze-components.js +87 -0
  75. package/tools/legacy-analyzer/build/tools/03-analyze-components.js.map +1 -0
  76. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts +3 -0
  77. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts.map +1 -0
  78. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js +133 -0
  79. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js.map +1 -0
  80. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts +3 -0
  81. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts.map +1 -0
  82. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js +160 -0
  83. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js.map +1 -0
  84. package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts +3 -0
  85. package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts.map +1 -0
  86. package/tools/legacy-analyzer/build/tools/06-analyze-routing.js +150 -0
  87. package/tools/legacy-analyzer/build/tools/06-analyze-routing.js.map +1 -0
  88. package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts +3 -0
  89. package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts.map +1 -0
  90. package/tools/legacy-analyzer/build/tools/07-analyze-styling.js +131 -0
  91. package/tools/legacy-analyzer/build/tools/07-analyze-styling.js.map +1 -0
  92. package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts +3 -0
  93. package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts.map +1 -0
  94. package/tools/legacy-analyzer/build/tools/08-analyze-assets.js +85 -0
  95. package/tools/legacy-analyzer/build/tools/08-analyze-assets.js.map +1 -0
  96. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts +3 -0
  97. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts.map +1 -0
  98. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js +329 -0
  99. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js.map +1 -0
  100. package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts +3 -0
  101. package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts.map +1 -0
  102. package/tools/legacy-analyzer/build/tools/10-detect-duplication.js +192 -0
  103. package/tools/legacy-analyzer/build/tools/10-detect-duplication.js.map +1 -0
  104. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts +3 -0
  105. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts.map +1 -0
  106. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js +232 -0
  107. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js.map +1 -0
  108. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts +3 -0
  109. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts.map +1 -0
  110. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js +247 -0
  111. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js.map +1 -0
  112. package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts +3 -0
  113. package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts.map +1 -0
  114. package/tools/legacy-analyzer/build/tools/13-detect-features.js +141 -0
  115. package/tools/legacy-analyzer/build/tools/13-detect-features.js.map +1 -0
  116. package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts +3 -0
  117. package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts.map +1 -0
  118. package/tools/legacy-analyzer/build/tools/14-classify-files.js +76 -0
  119. package/tools/legacy-analyzer/build/tools/14-classify-files.js.map +1 -0
  120. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts +3 -0
  121. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts.map +1 -0
  122. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js +70 -0
  123. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js.map +1 -0
  124. package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts +3 -0
  125. package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts.map +1 -0
  126. package/tools/legacy-analyzer/build/tools/16-design-target-structure.js +26 -0
  127. package/tools/legacy-analyzer/build/tools/16-design-target-structure.js.map +1 -0
  128. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts +3 -0
  129. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts.map +1 -0
  130. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js +108 -0
  131. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js.map +1 -0
  132. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts +3 -0
  133. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts.map +1 -0
  134. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js +137 -0
  135. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js.map +1 -0
  136. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts +3 -0
  137. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts.map +1 -0
  138. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js +160 -0
  139. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js.map +1 -0
  140. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts +3 -0
  141. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts.map +1 -0
  142. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js +162 -0
  143. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js.map +1 -0
  144. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts +3 -0
  145. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts.map +1 -0
  146. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js +108 -0
  147. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js.map +1 -0
  148. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts +3 -0
  149. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts.map +1 -0
  150. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js +98 -0
  151. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js.map +1 -0
  152. package/tools/legacy-analyzer/build/types.d.ts +413 -0
  153. package/tools/legacy-analyzer/build/types.d.ts.map +1 -0
  154. package/tools/legacy-analyzer/build/types.js +12 -0
  155. package/tools/legacy-analyzer/build/types.js.map +1 -0
  156. package/tools/legacy-analyzer/build/utils/ast-parser.d.ts +34 -0
  157. package/tools/legacy-analyzer/build/utils/ast-parser.d.ts.map +1 -0
  158. package/tools/legacy-analyzer/build/utils/ast-parser.js +394 -0
  159. package/tools/legacy-analyzer/build/utils/ast-parser.js.map +1 -0
  160. package/tools/legacy-analyzer/build/utils/file-scanner.d.ts +51 -0
  161. package/tools/legacy-analyzer/build/utils/file-scanner.d.ts.map +1 -0
  162. package/tools/legacy-analyzer/build/utils/file-scanner.js +174 -0
  163. package/tools/legacy-analyzer/build/utils/file-scanner.js.map +1 -0
  164. package/tools/legacy-analyzer/build/utils/import-tracker.d.ts +38 -0
  165. package/tools/legacy-analyzer/build/utils/import-tracker.d.ts.map +1 -0
  166. package/tools/legacy-analyzer/build/utils/import-tracker.js +194 -0
  167. package/tools/legacy-analyzer/build/utils/import-tracker.js.map +1 -0
  168. package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts +88 -0
  169. package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts.map +1 -0
  170. package/tools/legacy-analyzer/build/utils/refactor-helpers.js +538 -0
  171. package/tools/legacy-analyzer/build/utils/refactor-helpers.js.map +1 -0
  172. package/tools/legacy-analyzer/package.json +20 -0
  173. package/tools/lighthouse-runner/README.md +45 -0
  174. package/tools/lighthouse-runner/build/index.d.ts +6 -0
  175. package/tools/lighthouse-runner/build/index.d.ts.map +1 -0
  176. package/tools/lighthouse-runner/build/index.js +295 -0
  177. package/tools/lighthouse-runner/build/index.js.map +1 -0
  178. package/tools/lighthouse-runner/build/index.test.d.ts +2 -0
  179. package/tools/lighthouse-runner/build/index.test.d.ts.map +1 -0
  180. package/tools/lighthouse-runner/build/index.test.js.map +1 -0
  181. package/tools/lighthouse-runner/package.json +20 -0
  182. package/tools/monorepo-manager/build/utils.d.ts.map +1 -1
  183. package/tools/monorepo-manager/build/utils.js +12 -9
  184. package/tools/monorepo-manager/build/utils.js.map +1 -1
  185. package/tools/performance-audit/README.md +37 -0
  186. package/tools/performance-audit/build/index.d.ts +13 -0
  187. package/tools/performance-audit/build/index.d.ts.map +1 -0
  188. package/tools/performance-audit/build/index.js +311 -0
  189. package/tools/performance-audit/build/index.js.map +1 -0
  190. package/tools/performance-audit/build/index.test.d.ts +2 -0
  191. package/tools/performance-audit/build/index.test.d.ts.map +1 -0
  192. package/tools/performance-audit/build/index.test.js.map +1 -0
  193. package/tools/performance-audit/package.json +20 -0
  194. package/tools/quality-pipeline/build/index.js +55 -15
  195. package/tools/quality-pipeline/build/index.js.map +1 -1
  196. package/tools/render-analyzer/README.md +43 -0
  197. package/tools/render-analyzer/build/index.d.ts +25 -0
  198. package/tools/render-analyzer/build/index.d.ts.map +1 -0
  199. package/tools/render-analyzer/build/index.js +342 -0
  200. package/tools/render-analyzer/build/index.js.map +1 -0
  201. package/tools/render-analyzer/build/index.test.d.ts +2 -0
  202. package/tools/render-analyzer/build/index.test.d.ts.map +1 -0
  203. package/tools/render-analyzer/build/index.test.js.map +1 -0
  204. package/tools/render-analyzer/package.json +20 -0
  205. package/tools/shared/build/fs.d.ts +8 -0
  206. package/tools/shared/build/fs.d.ts.map +1 -0
  207. package/tools/shared/build/fs.js +45 -0
  208. package/tools/shared/build/fs.js.map +1 -0
  209. package/tools/shared/build/index.d.ts +1 -0
  210. package/tools/shared/build/index.d.ts.map +1 -1
  211. package/tools/shared/build/index.js +1 -0
  212. package/tools/shared/build/index.js.map +1 -1
  213. package/tools/storybook-generator/README.md +39 -0
  214. package/tools/storybook-generator/build/index.d.ts +13 -0
  215. package/tools/storybook-generator/build/index.d.ts.map +1 -0
  216. package/tools/storybook-generator/build/index.js +478 -0
  217. package/tools/storybook-generator/build/index.js.map +1 -0
  218. package/tools/storybook-generator/build/index.test.d.ts +2 -0
  219. package/tools/storybook-generator/build/index.test.d.ts.map +1 -0
  220. package/tools/storybook-generator/build/index.test.js.map +1 -0
  221. package/tools/storybook-generator/package.json +20 -0
  222. package/tools/test-gap-analyzer/README.md +41 -0
  223. package/tools/test-gap-analyzer/build/index.d.ts +20 -0
  224. package/tools/test-gap-analyzer/build/index.d.ts.map +1 -0
  225. package/tools/test-gap-analyzer/build/index.js +371 -0
  226. package/tools/test-gap-analyzer/build/index.js.map +1 -0
  227. package/tools/test-gap-analyzer/build/index.test.d.ts +2 -0
  228. package/tools/test-gap-analyzer/build/index.test.d.ts.map +1 -0
  229. package/tools/test-gap-analyzer/build/index.test.js.map +1 -0
  230. package/tools/test-gap-analyzer/package.json +20 -0
  231. package/tools/typescript-enforcer/build/scanner.d.ts.map +1 -1
  232. package/tools/typescript-enforcer/build/scanner.js +13 -1
  233. package/tools/typescript-enforcer/build/scanner.js.map +1 -1
  234. package/tools/typescript-enforcer/build/types.d.ts +1 -0
  235. package/tools/typescript-enforcer/build/types.d.ts.map +1 -1
@@ -0,0 +1,478 @@
1
+ #!/usr/bin/env node
2
+ import { McpServerBase, safeReadFile } from '@mcp-showcase/shared';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ // ============================================================================
6
+ // COMPONENT ANALYSIS
7
+ // ============================================================================
8
+ const VOID_NAMES = new Set(['input', 'img', 'separator', 'divider', 'hr', 'br', 'textarea']);
9
+ const INTERACTIVE_NAMES = ['button', 'link', 'anchor', 'tab', 'toggle', 'switch', 'checkbox', 'radio'];
10
+ function scanDirectory(dir) {
11
+ const files = [];
12
+ if (!fs.existsSync(dir))
13
+ return files;
14
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
15
+ for (const entry of entries) {
16
+ if (entry.isSymbolicLink())
17
+ continue;
18
+ const fullPath = path.join(dir, entry.name);
19
+ if (entry.isDirectory()) {
20
+ if (['node_modules', 'build', 'dist', '.next', '__tests__', '.turbo', '.git'].includes(entry.name))
21
+ continue;
22
+ files.push(...scanDirectory(fullPath));
23
+ }
24
+ else if (entry.name.match(/\.(tsx|jsx)$/)) {
25
+ if (entry.name.includes('.test.') || entry.name.includes('.spec.') || entry.name.includes('.stories.'))
26
+ continue;
27
+ files.push(fullPath);
28
+ }
29
+ }
30
+ return files;
31
+ }
32
+ export function extractPropsInterface(content, componentName) {
33
+ const patterns = [
34
+ // Named: ButtonProps, ToolCardProps, etc.
35
+ new RegExp(`interface\\s+${componentName}Props(?:\\s+extends[^{]*)?\\s*\\{([^}]*)\\}`, 's'),
36
+ new RegExp(`type\\s+${componentName}Props\\s*=\\s*(?:[^{]*&\\s*)?\\{([^}]*)\\}`, 's'),
37
+ // Generic "Props" interface (very common pattern)
38
+ /interface\s+Props(?:\s+extends[^{]*)?\s*\{([^}]*)\}/s,
39
+ /type\s+Props\s*=\s*(?:[^{]*&\s*)?\{([^}]*)\}/s,
40
+ // Inline props destructured: function Foo({ bar, baz }: { bar: string; baz?: number })
41
+ new RegExp(`(?:function|const)\\s+${componentName}\\s*\\(\\s*\\{[^}]*\\}\\s*:\\s*\\{([^}]*)\\}`, 's'),
42
+ ];
43
+ for (const pattern of patterns) {
44
+ const m = content.match(pattern);
45
+ if (!m)
46
+ continue;
47
+ const fields = [];
48
+ for (const field of m[1].matchAll(/(\w+)(\??)\s*:\s*([^;\n]+)/g)) {
49
+ fields.push({ name: field[1], optional: field[2] === '?', type: field[3].trim() });
50
+ }
51
+ if (fields.length > 0)
52
+ return fields;
53
+ }
54
+ return [];
55
+ }
56
+ export function extractVariantValues(content, key) {
57
+ // Strategy 1: cva() object pattern: size: { sm: {...}, md: {...} }
58
+ const cvaPattern = new RegExp(`${key}\\s*:\\s*\\{([^}]*)\\}`, 's');
59
+ const cvaMatch = content.match(cvaPattern);
60
+ if (cvaMatch) {
61
+ const values = [];
62
+ for (const vm of cvaMatch[1].matchAll(/['"`]?(\w+)['"`]?\s*:/g)) {
63
+ if (vm[1] !== key)
64
+ values.push(vm[1]);
65
+ }
66
+ if (values.length > 0)
67
+ return values.slice(0, 8);
68
+ }
69
+ // Strategy 2: TypeScript interface/type union literal: size?: 'small' | 'medium' | 'large'
70
+ const unionPattern = new RegExp(`${key}\\??\\s*:\\s*((?:'[^']+'|"[^"]+"|\`[^\`]+\`|\\|?\\s*)+)`, 's');
71
+ const unionMatch = content.match(unionPattern);
72
+ if (unionMatch) {
73
+ const values = [];
74
+ for (const vm of unionMatch[1].matchAll(/['"`]([^'"`]+)['"`]/g)) {
75
+ values.push(vm[1]);
76
+ }
77
+ if (values.length > 0)
78
+ return values.slice(0, 8);
79
+ }
80
+ return [];
81
+ }
82
+ function analyzeComponent(content, filePath) {
83
+ const fileName = path.basename(filePath, path.extname(filePath));
84
+ const nameMatch = content.match(/export\s+(?:default\s+)?(?:const|function)\s+([A-Z]\w+)/);
85
+ const name = nameMatch ? nameMatch[1] : fileName.replace(/[^a-zA-Z0-9]/g, '');
86
+ const isComponent = /(?:export\s+(?:default\s+)?)?(?:const|function)\s+[A-Z]\w+/.test(content) ||
87
+ content.includes('React.FC') || content.includes('forwardRef');
88
+ if (!isComponent)
89
+ return null;
90
+ const props = extractPropsInterface(content, name);
91
+ const variantValues = extractVariantValues(content, 'variant');
92
+ const sizeValues = extractVariantValues(content, 'size');
93
+ const hasVariants = variantValues.length > 0 || (content.includes('variant') && (content.includes('cva') || content.includes("'default'")));
94
+ const hasSizes = sizeValues.length > 0 || (content.includes('size') && content.includes('cva'));
95
+ const isVoidElement = VOID_NAMES.has(name.toLowerCase());
96
+ const isInteractive = INTERACTIVE_NAMES.some(i => name.toLowerCase().includes(i));
97
+ const hasChildren = props.some(p => p.name === 'children') || (content.includes('children') && !isVoidElement);
98
+ const hasDisabled = props.some(p => p.name === 'disabled') || content.includes('disabled');
99
+ const hasLoading = props.some(p => p.name === 'loading' || p.name === 'isLoading');
100
+ const callbacks = props.filter(p => /^on[A-Z]/.test(p.name)).map(p => p.name).slice(0, 5);
101
+ return {
102
+ name, file: filePath, props, hasVariants, hasSizes,
103
+ variantValues: variantValues.length > 0 ? variantValues : (hasVariants ? ['default', 'destructive', 'outline', 'secondary', 'ghost'] : []),
104
+ sizeValues: sizeValues.length > 0 ? sizeValues : (hasSizes ? ['sm', 'default', 'lg'] : []),
105
+ isVoidElement, isInteractive, hasChildren, hasDisabled, hasLoading, callbacks,
106
+ };
107
+ }
108
+ // ============================================================================
109
+ // ARGTYPE GENERATION
110
+ // ============================================================================
111
+ export function propTypeToControl(propType) {
112
+ const t = propType.trim();
113
+ if (t === 'boolean')
114
+ return "control: 'boolean'";
115
+ if (t === 'number')
116
+ return "control: 'number'";
117
+ if (/string\s*\|/.test(t) || /\|\s*string/.test(t))
118
+ return "control: 'text'";
119
+ if (t === 'string')
120
+ return "control: 'text'";
121
+ if (t.includes('|') && !t.includes('=>')) {
122
+ const options = t.split('|').map(o => o.trim().replace(/['"]/g, '')).filter(Boolean);
123
+ return `control: 'select', options: [${options.map(o => `'${o}'`).join(', ')}]`;
124
+ }
125
+ if (t.startsWith('(') || t.includes('=>'))
126
+ return "action: 'called'";
127
+ return "control: 'text'";
128
+ }
129
+ export function generateArgTypes(props) {
130
+ if (props.length === 0)
131
+ return '';
132
+ const lines = props
133
+ .filter(p => !['className', 'style', 'ref'].includes(p.name))
134
+ .map(p => {
135
+ const control = propTypeToControl(p.type);
136
+ if (control.startsWith('action:')) {
137
+ return ` ${p.name}: { ${control} },`;
138
+ }
139
+ return ` ${p.name}: { ${control} },`;
140
+ });
141
+ return lines.length > 0 ? ` argTypes: {\n${lines.join('\n')}\n },` : '';
142
+ }
143
+ // ============================================================================
144
+ // MOCK DATA GENERATION
145
+ // ============================================================================
146
+ export function getMockValue(propName, propType, componentName) {
147
+ const t = propType.trim().toLowerCase();
148
+ const n = propName.toLowerCase();
149
+ // Boolean props
150
+ if (t === 'boolean')
151
+ return 'false';
152
+ // Number props
153
+ if (t === 'number') {
154
+ if (n.includes('count') || n.includes('total') || n.includes('length'))
155
+ return '5';
156
+ if (n.includes('min'))
157
+ return '0';
158
+ if (n.includes('max'))
159
+ return '100';
160
+ if (n.includes('step'))
161
+ return '1';
162
+ if (n.includes('width') || n.includes('height') || n.includes('size'))
163
+ return '200';
164
+ if (n.includes('index'))
165
+ return '0';
166
+ return '42';
167
+ }
168
+ // String props — give contextual defaults
169
+ if (t === 'string') {
170
+ if (n === 'label' || n === 'title')
171
+ return `'${componentName} label'`;
172
+ if (n === 'placeholder')
173
+ return `'Enter ${n}...'`;
174
+ if (n === 'id')
175
+ return `'${n}-1'`;
176
+ if (n === 'name')
177
+ return `'${n}-field'`;
178
+ if (n === 'value')
179
+ return `'example value'`;
180
+ if (n.includes('text') || n.includes('content') || n.includes('message') || n.includes('description'))
181
+ return `'Sample ${n} text'`;
182
+ if (n.includes('url') || n.includes('href') || n.includes('src'))
183
+ return `'https://example.com'`;
184
+ if (n.includes('icon'))
185
+ return `'star'`;
186
+ if (n.includes('color'))
187
+ return `'#3b82f6'`;
188
+ if (n.includes('className') || n.includes('class'))
189
+ return `''`;
190
+ if (n.includes('variant'))
191
+ return `'default'`;
192
+ if (n.includes('size'))
193
+ return `'md'`;
194
+ return `'Example ${propName}'`;
195
+ }
196
+ // Union types: pick first value
197
+ const unionMatch = propType.match(/^'([^']+)'/);
198
+ if (unionMatch)
199
+ return `'${unionMatch[1]}'`;
200
+ // React.ReactNode / JSX.Element / ReactElement
201
+ if (t.includes('reactnode') || t.includes('reactelement') || t.includes('jsx.element') || t.includes('react.fc')) {
202
+ return `'Content here'`;
203
+ }
204
+ // Array types: provide an example array
205
+ if (t.endsWith('[]') || t.startsWith('array<')) {
206
+ return '[]';
207
+ }
208
+ // Callback/function — skip (handled separately via callbacks)
209
+ if (t.includes('=>') || t.startsWith('function') || t === '() => void')
210
+ return null;
211
+ // Object types — provide empty object or null
212
+ if (t === 'object' || t.startsWith('{'))
213
+ return 'undefined';
214
+ return null;
215
+ }
216
+ // ============================================================================
217
+ // STORY GENERATION
218
+ // ============================================================================
219
+ function generateStory(info) {
220
+ const { name, props, hasVariants, hasSizes, isVoidElement, isInteractive, hasChildren, hasDisabled, hasLoading, callbacks, variantValues, sizeValues } = info;
221
+ const renderContent = isVoidElement ? `placeholder="${name} text"` : (hasChildren ? `>{...}</${name}>` : '');
222
+ const defaultChild = hasChildren && !isVoidElement ? `\n args: {\n children: '${name} content',\n },` : '';
223
+ const selfClose = isVoidElement ? ' />' : '';
224
+ const argTypes = generateArgTypes(props);
225
+ // Storybook @storybook/test imports for play functions
226
+ const hasPlayFn = isInteractive && (callbacks.length > 0 || hasDisabled);
227
+ let out = `import type { Meta, StoryObj } from '@storybook/react';`;
228
+ if (hasPlayFn) {
229
+ out += `\nimport { within, userEvent, expect } from '@storybook/test';`;
230
+ }
231
+ out += `\nimport { ${name} } from './${name}';\n`;
232
+ // Meta
233
+ out += `\nconst meta: Meta<typeof ${name}> = {\n`;
234
+ out += ` title: 'Components/${name}',\n`;
235
+ out += ` component: ${name},\n`;
236
+ out += ` tags: ['autodocs'],\n`;
237
+ out += ` parameters: {\n`;
238
+ out += ` layout: '${isVoidElement ? 'centered' : 'centered'}',\n`;
239
+ out += ` docs: {\n`;
240
+ out += ` description: {\n`;
241
+ out += ` component: '${name} component — see the Args table for all available props.',\n`;
242
+ out += ` },\n`;
243
+ out += ` },\n`;
244
+ out += ` },\n`;
245
+ if (argTypes)
246
+ out += `${argTypes}\n`;
247
+ out += `};\n\nexport default meta;\ntype Story = StoryObj<typeof ${name}>;\n`;
248
+ // ── Default story (includes required props with mock data) ────────────────
249
+ const requiredProps = props.filter(p => !p.optional && !['className', 'children', 'style', 'ref'].includes(p.name) && !p.name.startsWith('on'));
250
+ const defaultArgs = [];
251
+ if (hasChildren && !isVoidElement)
252
+ defaultArgs.push(` children: '${name} content'`);
253
+ for (const p of requiredProps) {
254
+ const mockVal = getMockValue(p.name, p.type, name);
255
+ if (mockVal !== null)
256
+ defaultArgs.push(` ${p.name}: ${mockVal}`);
257
+ }
258
+ const defaultArgsBlock = defaultArgs.length > 0 ? `\n args: {\n${defaultArgs.join(',\n')},\n },` : (defaultChild || '');
259
+ out += `\n// ----- Default -----\nexport const Default: Story = {${defaultArgsBlock}\n};\n`;
260
+ // ── Playground (all controls enabled) ─────────────────────────────────────
261
+ out += `\n// ----- Playground (edit any prop in the Controls panel) -----\nexport const Playground: Story = {\n args: {`;
262
+ if (hasChildren && !isVoidElement)
263
+ out += `\n children: '${name} content',`;
264
+ for (const p of props.filter(p => !['className', 'children', 'style', 'ref'].includes(p.name) && !p.name.startsWith('on'))) {
265
+ const mockVal = getMockValue(p.name, p.type, name);
266
+ if (mockVal !== null)
267
+ out += `\n ${p.name}: ${mockVal},`;
268
+ }
269
+ out += `\n },\n};\n`;
270
+ // ── Variant stories ────────────────────────────────────────────────────────
271
+ if (hasVariants && variantValues.length > 0) {
272
+ out += `\n// ----- Variants -----\n`;
273
+ for (const v of variantValues) {
274
+ const storyName = v.charAt(0).toUpperCase() + v.slice(1);
275
+ out += `export const ${storyName}: Story = {\n args: {\n variant: '${v}',`;
276
+ if (hasChildren && !isVoidElement)
277
+ out += `\n children: '${storyName} variant',`;
278
+ out += `\n },\n};\n`;
279
+ }
280
+ // AllVariants composite
281
+ out += `\n// ----- All variants side-by-side -----\nexport const AllVariants: Story = {\n render: () => (\n <div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap', alignItems: 'center' }}>\n`;
282
+ for (const v of variantValues) {
283
+ if (isVoidElement) {
284
+ out += ` <${name} variant="${v}" placeholder="${v}" />\n`;
285
+ }
286
+ else {
287
+ out += ` <${name} variant="${v}">${v}</${name}>\n`;
288
+ }
289
+ }
290
+ out += ` </div>\n ),\n};\n`;
291
+ }
292
+ // ── Size stories ───────────────────────────────────────────────────────────
293
+ if (hasSizes && sizeValues.length > 0) {
294
+ out += `\n// ----- Sizes -----\n`;
295
+ for (const s of sizeValues) {
296
+ const storyName = `Size${s.charAt(0).toUpperCase() + s.slice(1)}`;
297
+ out += `export const ${storyName}: Story = {\n args: {\n size: '${s}',`;
298
+ if (hasChildren && !isVoidElement)
299
+ out += `\n children: '${s} size',`;
300
+ out += `\n },\n};\n`;
301
+ }
302
+ }
303
+ // ── Disabled state ─────────────────────────────────────────────────────────
304
+ if (hasDisabled) {
305
+ out += `\n// ----- Disabled state -----\nexport const Disabled: Story = {\n args: {\n disabled: true,`;
306
+ if (hasChildren && !isVoidElement)
307
+ out += `\n children: 'Disabled',`;
308
+ out += `\n },\n};\n`;
309
+ }
310
+ // ── Loading state ──────────────────────────────────────────────────────────
311
+ if (hasLoading) {
312
+ out += `\n// ----- Loading state -----\nexport const Loading: Story = {\n args: {\n loading: true,`;
313
+ if (hasChildren && !isVoidElement)
314
+ out += `\n children: 'Loading...',`;
315
+ out += `\n },\n};\n`;
316
+ }
317
+ // ── Callback story (Actions panel) ─────────────────────────────────────────
318
+ if (callbacks.length > 0) {
319
+ out += `\n// ----- With callbacks (check Actions panel) -----\nexport const WithCallbacks: Story = {\n args: {`;
320
+ for (const cb of callbacks) {
321
+ out += `\n ${cb}: () => console.log('${cb} fired'),`;
322
+ }
323
+ if (hasChildren && !isVoidElement)
324
+ out += `\n children: 'Click me',`;
325
+ out += `\n },\n};\n`;
326
+ }
327
+ // ── Accessibility story ────────────────────────────────────────────────────
328
+ out += `\n// ----- Accessibility (with ARIA attributes) -----\nexport const Accessibility: Story = {\n args: {\n 'aria-label': '${name} accessible label',`;
329
+ if (hasChildren && !isVoidElement)
330
+ out += `\n children: 'Accessible ${name}',`;
331
+ out += `\n },\n};\n`;
332
+ // ── Interactive play function (for button/input-like components) ───────────
333
+ if (isInteractive && callbacks.includes('onClick')) {
334
+ out += `\n// ----- Interactive (automated interaction test) -----\nexport const Interactive: Story = {\n args: {\n onClick: () => {},`;
335
+ if (hasChildren && !isVoidElement)
336
+ out += `\n children: 'Click me',`;
337
+ out += `\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const el = canvas.getByRole('button');\n await userEvent.click(el);\n await expect(el).toBeInTheDocument();\n },\n};\n`;
338
+ }
339
+ if (isVoidElement && callbacks.includes('onChange')) {
340
+ out += `\n// ----- Input interaction test -----\nexport const InputInteraction: Story = {\n args: {\n placeholder: 'Type here...',\n onChange: () => {},\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const input = canvas.getByRole('textbox');\n await userEvent.type(input, 'Hello world');\n await expect(input).toHaveValue('Hello world');\n },\n};\n`;
341
+ }
342
+ return out;
343
+ }
344
+ function findExistingStories(dir) {
345
+ const stories = [];
346
+ if (!fs.existsSync(dir))
347
+ return stories;
348
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
349
+ for (const entry of entries) {
350
+ if (entry.name.endsWith('.stories.tsx') || entry.name.endsWith('.stories.ts')) {
351
+ stories.push(entry.name.replace(/\.(stories\.(tsx|ts))$/, ''));
352
+ }
353
+ }
354
+ return stories;
355
+ }
356
+ // ============================================================================
357
+ // MAIN SERVER
358
+ // ============================================================================
359
+ class StorybookGeneratorServer extends McpServerBase {
360
+ constructor() {
361
+ super({ name: 'storybook-generator', version: '1.0.0' });
362
+ }
363
+ registerTools() {
364
+ this.addTool('generate_stories', 'Analyze React component files and generate comprehensive Storybook story files: Default, Playground, all variants, sizes, disabled, loading, callbacks, accessibility, and interactive play functions.', {
365
+ type: 'object',
366
+ properties: {
367
+ path: { type: 'string', description: 'Path to component file or directory' },
368
+ outputPath: { type: 'string', description: 'Directory to write story files (defaults to same directory as component)' },
369
+ overwrite: { type: 'boolean', description: 'Overwrite existing story files (default: false)' },
370
+ },
371
+ required: ['path'],
372
+ }, (args) => this.handleGenerate(args));
373
+ this.addTool('check_story_coverage', 'Report which components already have Storybook stories and which are missing them.', {
374
+ type: 'object',
375
+ properties: {
376
+ path: { type: 'string', description: 'Directory to scan for components and stories' },
377
+ },
378
+ required: ['path'],
379
+ }, (args) => this.handleCoverage(args));
380
+ }
381
+ async handleGenerate(args) {
382
+ const { path: targetPath, outputPath, overwrite = false } = args;
383
+ try {
384
+ const stat = fs.statSync(targetPath);
385
+ const isDir = stat.isDirectory();
386
+ const files = isDir ? scanDirectory(targetPath) : [targetPath];
387
+ const results = [];
388
+ for (const file of files) {
389
+ const content = safeReadFile(file);
390
+ if (content === null)
391
+ continue;
392
+ const info = analyzeComponent(content, file);
393
+ if (!info)
394
+ continue;
395
+ const dir = path.dirname(file);
396
+ const existingStories = findExistingStories(dir);
397
+ if (existingStories.includes(info.name) && !overwrite) {
398
+ results.push({ file, skipped: true, reason: 'Story already exists. Pass overwrite: true to replace.' });
399
+ continue;
400
+ }
401
+ const storyContent = generateStory(info);
402
+ const storyDir = outputPath || dir;
403
+ const storyPath = path.join(storyDir, `${info.name}.stories.tsx`);
404
+ fs.mkdirSync(path.dirname(storyPath), { recursive: true });
405
+ fs.writeFileSync(storyPath, storyContent);
406
+ // Count stories by counting "export const"
407
+ const storiesCount = (storyContent.match(/^export const /gm) || []).length;
408
+ results.push({
409
+ file,
410
+ storyPath,
411
+ component: info.name,
412
+ storiesCount,
413
+ stories: storyContent.match(/^export const (\w+):/gm)?.map(s => s.replace(/^export const (\w+):.*$/, '$1')) ?? [],
414
+ props: info.props.map(p => p.name),
415
+ });
416
+ }
417
+ const generated = results.filter((r) => !r.skipped).length;
418
+ const skipped = results.filter((r) => r.skipped).length;
419
+ return this.success({ generated, skipped, results });
420
+ }
421
+ catch (error) {
422
+ return this.error(error);
423
+ }
424
+ }
425
+ async handleCoverage(args) {
426
+ const { path: targetPath } = args;
427
+ try {
428
+ const stat = fs.statSync(targetPath);
429
+ const isDir = stat.isDirectory();
430
+ const files = isDir ? scanDirectory(targetPath) : [targetPath];
431
+ const components = [];
432
+ let withStories = 0;
433
+ let withoutStories = 0;
434
+ for (const file of files) {
435
+ const content = safeReadFile(file);
436
+ if (content === null)
437
+ continue;
438
+ const info = analyzeComponent(content, file);
439
+ if (!info)
440
+ continue;
441
+ const dir = path.dirname(file);
442
+ const storiesPath = path.join(dir, `${info.name}.stories.tsx`);
443
+ const hasStories = fs.existsSync(storiesPath);
444
+ if (hasStories)
445
+ withStories++;
446
+ else
447
+ withoutStories++;
448
+ components.push({
449
+ name: info.name,
450
+ file,
451
+ hasStories,
452
+ storiesPath: hasStories ? storiesPath : null,
453
+ propsCount: info.props.length,
454
+ hasVariants: info.hasVariants,
455
+ hasSizes: info.hasSizes,
456
+ });
457
+ }
458
+ const total = components.length;
459
+ return this.success({
460
+ summary: {
461
+ totalComponents: total,
462
+ withStories,
463
+ withoutStories,
464
+ coveragePercent: total > 0 ? Math.round((withStories / total) * 100) : 100,
465
+ },
466
+ components,
467
+ });
468
+ }
469
+ catch (error) {
470
+ return this.error(error);
471
+ }
472
+ }
473
+ }
474
+ // ============================================================================
475
+ // ENTRY POINT
476
+ // ============================================================================
477
+ new StorybookGeneratorServer().run().catch(console.error);
478
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@mcp-showcase/storybook-generator",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "main": "./build/index.js",
6
+ "scripts": {
7
+ "build": "tsc && chmod +x build/index.js",
8
+ "dev": "tsc --watch",
9
+ "test": "vitest run"
10
+ },
11
+ "dependencies": {
12
+ "@mcp-showcase/shared": "*",
13
+ "@modelcontextprotocol/sdk": "^1.12.0"
14
+ },
15
+ "devDependencies": {
16
+ "@types/node": "^20.0.0",
17
+ "typescript": "^5.0.0",
18
+ "vitest": "^2.0.0"
19
+ }
20
+ }
@@ -0,0 +1,41 @@
1
+ # test-gap-analyzer
2
+
3
+ MCP server that finds untested code paths — missing test files, unimplemented function stubs, and edge cases that aren't covered.
4
+
5
+ ## Tools
6
+
7
+ | Tool | What it does |
8
+ |---|---|
9
+ | `analyze_test_gaps` | Find all exports without a corresponding test file |
10
+ | `detect_missing_edge_cases` | For each untested export, suggest edge cases (null input, empty input, boundary values, etc.) |
11
+ | `coverage_report` | Summary: total exports, tested vs untested, coverage % |
12
+
13
+ ## Usage
14
+
15
+ ```sh
16
+ echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"analyze_test_gaps","arguments":{"path":"/path/to/src"}}}' \
17
+ | node build/index.js
18
+ ```
19
+
20
+ ## Output
21
+
22
+ ```json
23
+ {
24
+ "success": true,
25
+ "summary": { "totalFiles": 50, "coveragePercent": 0, "untestedExports": 105 },
26
+ "gaps": [
27
+ {
28
+ "sourceFile": "src/utils/format.ts",
29
+ "testFile": null,
30
+ "gaps": [{ "name": "formatDate", "type": "function", "line": 12 }]
31
+ }
32
+ ]
33
+ }
34
+ ```
35
+
36
+ ## Build & test
37
+
38
+ ```sh
39
+ npm run build
40
+ npm test
41
+ ```
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ interface ExportInfo {
3
+ name: string;
4
+ type: 'function' | 'component' | 'hook' | 'class' | 'constant' | 'type';
5
+ line: number;
6
+ }
7
+ interface EdgeCase {
8
+ category: string;
9
+ description: string;
10
+ severity: 'high' | 'medium' | 'low';
11
+ suggestion: string;
12
+ }
13
+ export declare function extractExports(content: string): ExportInfo[];
14
+ export declare function analyzeTestFile(testContent: string): {
15
+ testedFunctions: string[];
16
+ testedBehaviors: Map<string, string[]>;
17
+ };
18
+ export declare function detectMissingEdgeCases(exportInfo: ExportInfo, testedBehaviors: string[]): EdgeCase[];
19
+ export {};
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AASA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACxE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAgC5D;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAyB1H;AAMD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CA8CpG"}