@fragments-sdk/cli 0.2.2

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 (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +106 -0
  3. package/dist/bin.d.ts +1 -0
  4. package/dist/bin.js +4783 -0
  5. package/dist/bin.js.map +1 -0
  6. package/dist/chunk-4FDQSGKX.js +786 -0
  7. package/dist/chunk-4FDQSGKX.js.map +1 -0
  8. package/dist/chunk-7H2MMGYG.js +369 -0
  9. package/dist/chunk-7H2MMGYG.js.map +1 -0
  10. package/dist/chunk-BSCG3IP7.js +619 -0
  11. package/dist/chunk-BSCG3IP7.js.map +1 -0
  12. package/dist/chunk-LY2CFFPY.js +898 -0
  13. package/dist/chunk-LY2CFFPY.js.map +1 -0
  14. package/dist/chunk-MUZ6CM66.js +6636 -0
  15. package/dist/chunk-MUZ6CM66.js.map +1 -0
  16. package/dist/chunk-OAENNG3G.js +1489 -0
  17. package/dist/chunk-OAENNG3G.js.map +1 -0
  18. package/dist/chunk-XHNKNI6J.js +235 -0
  19. package/dist/chunk-XHNKNI6J.js.map +1 -0
  20. package/dist/core-DWKLGY4N.js +68 -0
  21. package/dist/core-DWKLGY4N.js.map +1 -0
  22. package/dist/generate-4LQNJ7SX.js +249 -0
  23. package/dist/generate-4LQNJ7SX.js.map +1 -0
  24. package/dist/index.d.ts +775 -0
  25. package/dist/index.js +41 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/init-EMVI47QG.js +416 -0
  28. package/dist/init-EMVI47QG.js.map +1 -0
  29. package/dist/mcp-bin.d.ts +1 -0
  30. package/dist/mcp-bin.js +1117 -0
  31. package/dist/mcp-bin.js.map +1 -0
  32. package/dist/scan-4YPRF7FV.js +12 -0
  33. package/dist/scan-4YPRF7FV.js.map +1 -0
  34. package/dist/service-QSZMZJBJ.js +208 -0
  35. package/dist/service-QSZMZJBJ.js.map +1 -0
  36. package/dist/static-viewer-MIPGZ4Z7.js +12 -0
  37. package/dist/static-viewer-MIPGZ4Z7.js.map +1 -0
  38. package/dist/test-SQ5ZHXWU.js +1067 -0
  39. package/dist/test-SQ5ZHXWU.js.map +1 -0
  40. package/dist/tokens-HSGMYK64.js +173 -0
  41. package/dist/tokens-HSGMYK64.js.map +1 -0
  42. package/dist/viewer-YRF4SQE4.js +11101 -0
  43. package/dist/viewer-YRF4SQE4.js.map +1 -0
  44. package/package.json +107 -0
  45. package/src/ai.ts +266 -0
  46. package/src/analyze.ts +265 -0
  47. package/src/bin.ts +916 -0
  48. package/src/build.ts +248 -0
  49. package/src/commands/a11y.ts +302 -0
  50. package/src/commands/add.ts +313 -0
  51. package/src/commands/audit.ts +195 -0
  52. package/src/commands/baseline.ts +221 -0
  53. package/src/commands/build.ts +144 -0
  54. package/src/commands/compare.ts +337 -0
  55. package/src/commands/context.ts +107 -0
  56. package/src/commands/dev.ts +107 -0
  57. package/src/commands/enhance.ts +858 -0
  58. package/src/commands/generate.ts +391 -0
  59. package/src/commands/init.ts +531 -0
  60. package/src/commands/link/figma.ts +645 -0
  61. package/src/commands/link/index.ts +10 -0
  62. package/src/commands/link/storybook.ts +267 -0
  63. package/src/commands/list.ts +49 -0
  64. package/src/commands/metrics.ts +114 -0
  65. package/src/commands/reset.ts +242 -0
  66. package/src/commands/scan.ts +537 -0
  67. package/src/commands/storygen.ts +207 -0
  68. package/src/commands/tokens.ts +251 -0
  69. package/src/commands/validate.ts +93 -0
  70. package/src/commands/verify.ts +215 -0
  71. package/src/core/composition.test.ts +262 -0
  72. package/src/core/composition.ts +255 -0
  73. package/src/core/config.ts +84 -0
  74. package/src/core/constants.ts +111 -0
  75. package/src/core/context.ts +380 -0
  76. package/src/core/defineSegment.ts +137 -0
  77. package/src/core/discovery.ts +337 -0
  78. package/src/core/figma.ts +263 -0
  79. package/src/core/fragment-types.ts +214 -0
  80. package/src/core/generators/context.ts +389 -0
  81. package/src/core/generators/index.ts +23 -0
  82. package/src/core/generators/registry.ts +364 -0
  83. package/src/core/generators/typescript-extractor.ts +374 -0
  84. package/src/core/importAnalyzer.ts +217 -0
  85. package/src/core/index.ts +149 -0
  86. package/src/core/loader.ts +155 -0
  87. package/src/core/node.ts +63 -0
  88. package/src/core/parser.ts +551 -0
  89. package/src/core/previewLoader.ts +172 -0
  90. package/src/core/schema/fragment.schema.json +189 -0
  91. package/src/core/schema/registry.schema.json +137 -0
  92. package/src/core/schema.ts +182 -0
  93. package/src/core/storyAdapter.test.ts +571 -0
  94. package/src/core/storyAdapter.ts +761 -0
  95. package/src/core/token-types.ts +287 -0
  96. package/src/core/types.ts +754 -0
  97. package/src/diff.ts +323 -0
  98. package/src/index.ts +43 -0
  99. package/src/mcp/__tests__/projectFields.test.ts +130 -0
  100. package/src/mcp/bin.ts +36 -0
  101. package/src/mcp/index.ts +8 -0
  102. package/src/mcp/server.ts +1310 -0
  103. package/src/mcp/utils.ts +54 -0
  104. package/src/mcp-bin.ts +36 -0
  105. package/src/migrate/__tests__/argTypes/argTypes.test.ts +189 -0
  106. package/src/migrate/__tests__/args/args.test.ts +452 -0
  107. package/src/migrate/__tests__/meta/meta.test.ts +198 -0
  108. package/src/migrate/__tests__/stories/stories.test.ts +278 -0
  109. package/src/migrate/__tests__/utils/utils.test.ts +371 -0
  110. package/src/migrate/__tests__/values/values.test.ts +303 -0
  111. package/src/migrate/bin.ts +108 -0
  112. package/src/migrate/converter.ts +658 -0
  113. package/src/migrate/detect.ts +196 -0
  114. package/src/migrate/index.ts +45 -0
  115. package/src/migrate/migrate.ts +163 -0
  116. package/src/migrate/parser.ts +1136 -0
  117. package/src/migrate/report.ts +624 -0
  118. package/src/migrate/types.ts +169 -0
  119. package/src/screenshot.ts +249 -0
  120. package/src/service/__tests__/ast-utils.test.ts +426 -0
  121. package/src/service/__tests__/enhance-scanner.test.ts +200 -0
  122. package/src/service/__tests__/figma/figma.test.ts +652 -0
  123. package/src/service/__tests__/metrics-store.test.ts +409 -0
  124. package/src/service/__tests__/patch-generator.test.ts +186 -0
  125. package/src/service/__tests__/props-extractor.test.ts +365 -0
  126. package/src/service/__tests__/token-registry.test.ts +267 -0
  127. package/src/service/analytics.ts +659 -0
  128. package/src/service/ast-utils.ts +444 -0
  129. package/src/service/browser-pool.ts +339 -0
  130. package/src/service/capture.ts +267 -0
  131. package/src/service/diff.ts +279 -0
  132. package/src/service/enhance/aggregator.ts +489 -0
  133. package/src/service/enhance/cache.ts +275 -0
  134. package/src/service/enhance/codebase-scanner.ts +357 -0
  135. package/src/service/enhance/context-generator.ts +529 -0
  136. package/src/service/enhance/doc-extractor.ts +523 -0
  137. package/src/service/enhance/index.ts +131 -0
  138. package/src/service/enhance/props-extractor.ts +665 -0
  139. package/src/service/enhance/scanner.ts +445 -0
  140. package/src/service/enhance/storybook-parser.ts +552 -0
  141. package/src/service/enhance/types.ts +346 -0
  142. package/src/service/enhance/variant-renderer.ts +479 -0
  143. package/src/service/figma.ts +1008 -0
  144. package/src/service/index.ts +249 -0
  145. package/src/service/metrics-store.ts +333 -0
  146. package/src/service/patch-generator.ts +349 -0
  147. package/src/service/report.ts +854 -0
  148. package/src/service/storage.ts +401 -0
  149. package/src/service/token-fixes.ts +281 -0
  150. package/src/service/token-parser.ts +504 -0
  151. package/src/service/token-registry.ts +721 -0
  152. package/src/service/utils.ts +172 -0
  153. package/src/setup.ts +241 -0
  154. package/src/shared/command-wrapper.ts +81 -0
  155. package/src/shared/dev-server-client.ts +199 -0
  156. package/src/shared/index.ts +8 -0
  157. package/src/shared/segment-loader.ts +59 -0
  158. package/src/shared/types.ts +147 -0
  159. package/src/static-viewer.ts +715 -0
  160. package/src/test/discovery.ts +172 -0
  161. package/src/test/index.ts +281 -0
  162. package/src/test/reporters/console.ts +194 -0
  163. package/src/test/reporters/json.ts +190 -0
  164. package/src/test/reporters/junit.ts +186 -0
  165. package/src/test/runner.ts +598 -0
  166. package/src/test/types.ts +245 -0
  167. package/src/test/watch.ts +200 -0
  168. package/src/validators.ts +152 -0
  169. package/src/viewer/__tests__/jsx-parser.test.ts +502 -0
  170. package/src/viewer/__tests__/render-utils.test.ts +232 -0
  171. package/src/viewer/__tests__/style-utils.test.ts +404 -0
  172. package/src/viewer/bin.ts +86 -0
  173. package/src/viewer/cli/health.ts +256 -0
  174. package/src/viewer/cli/index.ts +33 -0
  175. package/src/viewer/cli/scan.ts +124 -0
  176. package/src/viewer/cli/utils.ts +174 -0
  177. package/src/viewer/components/AccessibilityPanel.tsx +1404 -0
  178. package/src/viewer/components/ActionCapture.tsx +172 -0
  179. package/src/viewer/components/ActionsPanel.tsx +371 -0
  180. package/src/viewer/components/App.tsx +638 -0
  181. package/src/viewer/components/BottomPanel.tsx +224 -0
  182. package/src/viewer/components/CodePanel.tsx +589 -0
  183. package/src/viewer/components/CommandPalette.tsx +336 -0
  184. package/src/viewer/components/ComponentGraph.tsx +394 -0
  185. package/src/viewer/components/ComponentHeader.tsx +85 -0
  186. package/src/viewer/components/ContractPanel.tsx +234 -0
  187. package/src/viewer/components/ErrorBoundary.tsx +85 -0
  188. package/src/viewer/components/FigmaEmbed.tsx +231 -0
  189. package/src/viewer/components/FragmentEditor.tsx +485 -0
  190. package/src/viewer/components/HealthDashboard.tsx +452 -0
  191. package/src/viewer/components/HmrStatusIndicator.tsx +71 -0
  192. package/src/viewer/components/Icons.tsx +417 -0
  193. package/src/viewer/components/InteractionsPanel.tsx +720 -0
  194. package/src/viewer/components/IsolatedPreviewFrame.tsx +321 -0
  195. package/src/viewer/components/IsolatedRender.tsx +111 -0
  196. package/src/viewer/components/KeyboardShortcutsHelp.tsx +89 -0
  197. package/src/viewer/components/LandingPage.tsx +441 -0
  198. package/src/viewer/components/Layout.tsx +22 -0
  199. package/src/viewer/components/LeftSidebar.tsx +391 -0
  200. package/src/viewer/components/MultiViewportPreview.tsx +429 -0
  201. package/src/viewer/components/PreviewArea.tsx +404 -0
  202. package/src/viewer/components/PreviewFrameHost.tsx +310 -0
  203. package/src/viewer/components/PreviewPane.tsx +150 -0
  204. package/src/viewer/components/PreviewToolbar.tsx +176 -0
  205. package/src/viewer/components/PropsEditor.tsx +512 -0
  206. package/src/viewer/components/PropsTable.tsx +98 -0
  207. package/src/viewer/components/RelationsSection.tsx +57 -0
  208. package/src/viewer/components/ResizablePanel.tsx +328 -0
  209. package/src/viewer/components/RightSidebar.tsx +118 -0
  210. package/src/viewer/components/ScreenshotButton.tsx +90 -0
  211. package/src/viewer/components/Sidebar.tsx +169 -0
  212. package/src/viewer/components/SkeletonLoader.tsx +156 -0
  213. package/src/viewer/components/StoryRenderer.tsx +128 -0
  214. package/src/viewer/components/ThemeProvider.tsx +96 -0
  215. package/src/viewer/components/Toast.tsx +67 -0
  216. package/src/viewer/components/TokenStylePanel.tsx +708 -0
  217. package/src/viewer/components/UsageSection.tsx +95 -0
  218. package/src/viewer/components/VariantMatrix.tsx +350 -0
  219. package/src/viewer/components/VariantRenderer.tsx +131 -0
  220. package/src/viewer/components/VariantTabs.tsx +84 -0
  221. package/src/viewer/components/ViewportSelector.tsx +165 -0
  222. package/src/viewer/components/_future/CreatePage.tsx +836 -0
  223. package/src/viewer/composition-renderer.ts +381 -0
  224. package/src/viewer/constants/index.ts +1 -0
  225. package/src/viewer/constants/ui.ts +185 -0
  226. package/src/viewer/entry.tsx +299 -0
  227. package/src/viewer/hooks/index.ts +2 -0
  228. package/src/viewer/hooks/useA11yCache.ts +383 -0
  229. package/src/viewer/hooks/useA11yService.ts +498 -0
  230. package/src/viewer/hooks/useActions.ts +138 -0
  231. package/src/viewer/hooks/useAppState.ts +124 -0
  232. package/src/viewer/hooks/useFigmaIntegration.ts +132 -0
  233. package/src/viewer/hooks/useHmrStatus.ts +109 -0
  234. package/src/viewer/hooks/useKeyboardShortcuts.ts +222 -0
  235. package/src/viewer/hooks/usePreviewBridge.ts +347 -0
  236. package/src/viewer/hooks/useScrollSpy.ts +78 -0
  237. package/src/viewer/hooks/useUrlState.ts +330 -0
  238. package/src/viewer/hooks/useViewSettings.ts +125 -0
  239. package/src/viewer/index.html +28 -0
  240. package/src/viewer/index.ts +14 -0
  241. package/src/viewer/intelligence/healthReport.ts +505 -0
  242. package/src/viewer/intelligence/styleDrift.ts +340 -0
  243. package/src/viewer/intelligence/usageScanner.ts +309 -0
  244. package/src/viewer/jsx-parser.ts +485 -0
  245. package/src/viewer/postcss.config.js +6 -0
  246. package/src/viewer/preview-frame-entry.tsx +25 -0
  247. package/src/viewer/preview-frame.html +109 -0
  248. package/src/viewer/render-template.html +68 -0
  249. package/src/viewer/render-utils.ts +170 -0
  250. package/src/viewer/server.ts +276 -0
  251. package/src/viewer/style-utils.ts +414 -0
  252. package/src/viewer/styles/globals.css +355 -0
  253. package/src/viewer/tailwind.config.js +37 -0
  254. package/src/viewer/types/a11y.ts +197 -0
  255. package/src/viewer/utils/a11y-fixes.ts +471 -0
  256. package/src/viewer/utils/actionExport.ts +372 -0
  257. package/src/viewer/utils/colorSchemes.ts +201 -0
  258. package/src/viewer/utils/detectRelationships.ts +256 -0
  259. package/src/viewer/vite-plugin.ts +2143 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Utility functions for the MCP server
3
+ */
4
+
5
+ /**
6
+ * Extract specific fields from an object using dot notation paths.
7
+ * E.g., projectFields(obj, ['meta.name', 'usage.when']) returns { meta: { name: ... }, usage: { when: ... } }
8
+ *
9
+ * @param obj - The source object to extract fields from
10
+ * @param fields - Array of field paths (supports dot notation for nested fields)
11
+ * @returns A new object containing only the requested fields
12
+ */
13
+ export function projectFields<T extends Record<string, unknown>>(
14
+ obj: T,
15
+ fields: string[]
16
+ ): Partial<T> {
17
+ if (!fields || fields.length === 0) {
18
+ return obj;
19
+ }
20
+
21
+ const result: Record<string, unknown> = {};
22
+
23
+ for (const field of fields) {
24
+ const parts = field.split('.');
25
+ let source: unknown = obj;
26
+ let target = result;
27
+
28
+ for (let i = 0; i < parts.length; i++) {
29
+ const part = parts[i];
30
+ const isLast = i === parts.length - 1;
31
+
32
+ if (source === null || source === undefined || typeof source !== 'object') {
33
+ break;
34
+ }
35
+
36
+ const sourceObj = source as Record<string, unknown>;
37
+ const value = sourceObj[part];
38
+
39
+ if (isLast) {
40
+ // Set the final value
41
+ target[part] = value;
42
+ } else {
43
+ // Create nested object if needed
44
+ if (!(part in target)) {
45
+ target[part] = {};
46
+ }
47
+ target = target[part] as Record<string, unknown>;
48
+ source = value;
49
+ }
50
+ }
51
+ }
52
+
53
+ return result as Partial<T>;
54
+ }
package/src/mcp-bin.ts ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import { startMcpServer } from './mcp/server.js';
3
+
4
+ // Parse command line arguments
5
+ const args = process.argv.slice(2);
6
+ let projectRoot = process.cwd();
7
+ let viewerUrl: string | undefined;
8
+
9
+ for (let i = 0; i < args.length; i++) {
10
+ const arg = args[i];
11
+
12
+ if (arg === '--project-root' || arg === '-p') {
13
+ projectRoot = args[++i] ?? projectRoot;
14
+ } else if (arg === '--viewer-url' || arg === '-u') {
15
+ viewerUrl = args[++i];
16
+ } else if (arg === '--help' || arg === '-h') {
17
+ console.log(`
18
+ Usage: fragments-mcp [options]
19
+
20
+ Options:
21
+ -p, --project-root <path> Project root directory (default: cwd)
22
+ -u, --viewer-url <url> Viewer URL (default: http://localhost:6006)
23
+ -h, --help Show this help message
24
+ `);
25
+ process.exit(0);
26
+ }
27
+ }
28
+
29
+ // Start server
30
+ startMcpServer({
31
+ projectRoot,
32
+ viewerUrl,
33
+ }).catch((error) => {
34
+ console.error('Failed to start MCP server:', error);
35
+ process.exit(1);
36
+ });
@@ -0,0 +1,189 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { __testing } from "../../parser.js";
3
+
4
+ const { parseArgTypes, parseArgTypeContent } = __testing;
5
+
6
+ describe("parseArgTypes", () => {
7
+ describe("basic parsing", () => {
8
+ it("parses single argType", () => {
9
+ const content = `
10
+ export default {
11
+ argTypes: {
12
+ variant: {
13
+ control: 'select',
14
+ options: ['primary', 'secondary']
15
+ }
16
+ }
17
+ }
18
+ `;
19
+ const result = parseArgTypes(content, []);
20
+ expect(result).toHaveProperty("variant");
21
+ expect(result.variant.control).toBe("select");
22
+ expect(result.variant.options).toEqual(["primary", "secondary"]);
23
+ });
24
+
25
+ it("parses multiple argTypes", () => {
26
+ const content = `
27
+ export default {
28
+ argTypes: {
29
+ size: {
30
+ control: 'select',
31
+ options: ['small', 'medium', 'large']
32
+ },
33
+ disabled: {
34
+ control: 'boolean'
35
+ },
36
+ label: {
37
+ control: 'text'
38
+ }
39
+ }
40
+ }
41
+ `;
42
+ const result = parseArgTypes(content, []);
43
+ expect(Object.keys(result)).toHaveLength(3);
44
+ expect(result.size.control).toBe("select");
45
+ expect(result.disabled.control).toBe("boolean");
46
+ expect(result.label.control).toBe("text");
47
+ });
48
+
49
+ it("returns empty object when no argTypes", () => {
50
+ const content = `export default { title: 'Components/Button' }`;
51
+ const result = parseArgTypes(content, []);
52
+ expect(result).toEqual({});
53
+ });
54
+ });
55
+
56
+ describe("nested argTypes", () => {
57
+ it("handles deeply nested structures", () => {
58
+ const content = `
59
+ export default {
60
+ argTypes: {
61
+ onClick: {
62
+ action: 'clicked',
63
+ table: {
64
+ category: 'Events'
65
+ }
66
+ }
67
+ }
68
+ }
69
+ `;
70
+ const result = parseArgTypes(content, []);
71
+ expect(result).toHaveProperty("onClick");
72
+ });
73
+
74
+ it("handles argTypes with type information", () => {
75
+ const content = `
76
+ export default {
77
+ argTypes: {
78
+ children: {
79
+ control: 'text',
80
+ type: {
81
+ name: 'string',
82
+ required: true
83
+ }
84
+ }
85
+ }
86
+ }
87
+ `;
88
+ const result = parseArgTypes(content, []);
89
+ expect(result.children.control).toBe("text");
90
+ });
91
+ });
92
+ });
93
+
94
+ describe("parseArgTypeContent", () => {
95
+ describe("control extraction", () => {
96
+ it("extracts simple string control", () => {
97
+ const content = `control: 'select'`;
98
+ const result = parseArgTypeContent(content, []);
99
+ expect(result.control).toBe("select");
100
+ });
101
+
102
+ it("extracts control from object format", () => {
103
+ const content = `control: { type: 'range', min: 0, max: 100 }`;
104
+ const result = parseArgTypeContent(content, []);
105
+ expect(result.control).toBe("range");
106
+ });
107
+
108
+ it("handles different quote styles for control", () => {
109
+ expect(parseArgTypeContent(`control: "boolean"`, []).control).toBe("boolean");
110
+ expect(parseArgTypeContent(`control: 'text'`, []).control).toBe("text");
111
+ });
112
+ });
113
+
114
+ describe("options extraction", () => {
115
+ it("extracts array of string options", () => {
116
+ const content = `options: ['small', 'medium', 'large']`;
117
+ const result = parseArgTypeContent(content, []);
118
+ expect(result.options).toEqual(["small", "medium", "large"]);
119
+ });
120
+
121
+ it("handles options with different quotes", () => {
122
+ const content = `options: ["primary", 'secondary', "tertiary"]`;
123
+ const result = parseArgTypeContent(content, []);
124
+ expect(result.options).toEqual(["primary", "secondary", "tertiary"]);
125
+ });
126
+
127
+ it("handles numeric options", () => {
128
+ const content = `options: [1, 2, 3, 4]`;
129
+ const result = parseArgTypeContent(content, []);
130
+ expect(result.options).toEqual(["1", "2", "3", "4"]);
131
+ });
132
+ });
133
+
134
+ describe("description extraction", () => {
135
+ it("extracts description string", () => {
136
+ const content = `description: 'The button variant to use'`;
137
+ const result = parseArgTypeContent(content, []);
138
+ expect(result.description).toBe("The button variant to use");
139
+ });
140
+
141
+ it("handles double-quoted description", () => {
142
+ const content = `description: "Controls the button size"`;
143
+ const result = parseArgTypeContent(content, []);
144
+ expect(result.description).toBe("Controls the button size");
145
+ });
146
+ });
147
+
148
+ describe("defaultValue extraction", () => {
149
+ it("extracts defaultValue from summary format", () => {
150
+ const content = `defaultValue: { summary: 'primary' }`;
151
+ const result = parseArgTypeContent(content, []);
152
+ expect(result.defaultValue).toBe("primary");
153
+ });
154
+
155
+ it("extracts simple defaultValue", () => {
156
+ const content = `defaultValue: 'secondary'`;
157
+ const result = parseArgTypeContent(content, []);
158
+ expect(result.defaultValue).toBe("secondary");
159
+ });
160
+
161
+ it("extracts boolean defaultValue", () => {
162
+ const content = `defaultValue: false`;
163
+ const result = parseArgTypeContent(content, []);
164
+ expect(result.defaultValue).toBe("false");
165
+ });
166
+
167
+ it("extracts numeric defaultValue", () => {
168
+ const content = `defaultValue: 42`;
169
+ const result = parseArgTypeContent(content, []);
170
+ expect(result.defaultValue).toBe("42");
171
+ });
172
+ });
173
+
174
+ describe("complex argType content", () => {
175
+ it("parses full argType definition", () => {
176
+ const content = `
177
+ control: 'select',
178
+ options: ['primary', 'secondary', 'ghost'],
179
+ description: 'The visual style of the button',
180
+ defaultValue: { summary: 'primary' }
181
+ `;
182
+ const result = parseArgTypeContent(content, []);
183
+ expect(result.control).toBe("select");
184
+ expect(result.options).toEqual(["primary", "secondary", "ghost"]);
185
+ expect(result.description).toBe("The visual style of the button");
186
+ expect(result.defaultValue).toBe("primary");
187
+ });
188
+ });
189
+ });