mozaic-mcp-server 1.0.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 (161) hide show
  1. package/INSTALLATION.md +232 -0
  2. package/README.md +262 -0
  3. package/SKILLS.md +411 -0
  4. package/bin/install-skills.js +171 -0
  5. package/data/mozaic.db +0 -0
  6. package/data/mozaic.db-shm +0 -0
  7. package/data/mozaic.db-wal +0 -0
  8. package/dist/__tests__/sanity-check.test.d.ts +2 -0
  9. package/dist/__tests__/sanity-check.test.d.ts.map +1 -0
  10. package/dist/__tests__/sanity-check.test.js +167 -0
  11. package/dist/__tests__/sanity-check.test.js.map +1 -0
  12. package/dist/__tests__/tools.integration.test.d.ts +2 -0
  13. package/dist/__tests__/tools.integration.test.d.ts.map +1 -0
  14. package/dist/__tests__/tools.integration.test.js +220 -0
  15. package/dist/__tests__/tools.integration.test.js.map +1 -0
  16. package/dist/db/queries.d.ts +144 -0
  17. package/dist/db/queries.d.ts.map +1 -0
  18. package/dist/db/queries.js +536 -0
  19. package/dist/db/queries.js.map +1 -0
  20. package/dist/db/schema.d.ts +4 -0
  21. package/dist/db/schema.d.ts.map +1 -0
  22. package/dist/db/schema.js +253 -0
  23. package/dist/db/schema.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +416 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/parsers/__tests__/docs-parser.test.d.ts +2 -0
  29. package/dist/parsers/__tests__/docs-parser.test.d.ts.map +1 -0
  30. package/dist/parsers/__tests__/docs-parser.test.js +251 -0
  31. package/dist/parsers/__tests__/docs-parser.test.js.map +1 -0
  32. package/dist/parsers/__tests__/icons-parser.test.d.ts +2 -0
  33. package/dist/parsers/__tests__/icons-parser.test.d.ts.map +1 -0
  34. package/dist/parsers/__tests__/icons-parser.test.js +169 -0
  35. package/dist/parsers/__tests__/icons-parser.test.js.map +1 -0
  36. package/dist/parsers/__tests__/react-parser.test.d.ts +2 -0
  37. package/dist/parsers/__tests__/react-parser.test.d.ts.map +1 -0
  38. package/dist/parsers/__tests__/react-parser.test.js +274 -0
  39. package/dist/parsers/__tests__/react-parser.test.js.map +1 -0
  40. package/dist/parsers/__tests__/scss-parser.test.d.ts +2 -0
  41. package/dist/parsers/__tests__/scss-parser.test.d.ts.map +1 -0
  42. package/dist/parsers/__tests__/scss-parser.test.js +364 -0
  43. package/dist/parsers/__tests__/scss-parser.test.js.map +1 -0
  44. package/dist/parsers/__tests__/tokens-parser.test.d.ts +2 -0
  45. package/dist/parsers/__tests__/tokens-parser.test.d.ts.map +1 -0
  46. package/dist/parsers/__tests__/tokens-parser.test.js +172 -0
  47. package/dist/parsers/__tests__/tokens-parser.test.js.map +1 -0
  48. package/dist/parsers/__tests__/vue-parser.test.d.ts +2 -0
  49. package/dist/parsers/__tests__/vue-parser.test.d.ts.map +1 -0
  50. package/dist/parsers/__tests__/vue-parser.test.js +207 -0
  51. package/dist/parsers/__tests__/vue-parser.test.js.map +1 -0
  52. package/dist/parsers/docs-parser.d.ts +4 -0
  53. package/dist/parsers/docs-parser.d.ts.map +1 -0
  54. package/dist/parsers/docs-parser.js +237 -0
  55. package/dist/parsers/docs-parser.js.map +1 -0
  56. package/dist/parsers/icons-parser.d.ts +33 -0
  57. package/dist/parsers/icons-parser.d.ts.map +1 -0
  58. package/dist/parsers/icons-parser.js +125 -0
  59. package/dist/parsers/icons-parser.js.map +1 -0
  60. package/dist/parsers/react-parser.d.ts +3 -0
  61. package/dist/parsers/react-parser.d.ts.map +1 -0
  62. package/dist/parsers/react-parser.js +406 -0
  63. package/dist/parsers/react-parser.js.map +1 -0
  64. package/dist/parsers/scss-parser.d.ts +9 -0
  65. package/dist/parsers/scss-parser.d.ts.map +1 -0
  66. package/dist/parsers/scss-parser.js +351 -0
  67. package/dist/parsers/scss-parser.js.map +1 -0
  68. package/dist/parsers/tokens/border-parser.d.ts +3 -0
  69. package/dist/parsers/tokens/border-parser.d.ts.map +1 -0
  70. package/dist/parsers/tokens/border-parser.js +83 -0
  71. package/dist/parsers/tokens/border-parser.js.map +1 -0
  72. package/dist/parsers/tokens/color-parser.d.ts +3 -0
  73. package/dist/parsers/tokens/color-parser.d.ts.map +1 -0
  74. package/dist/parsers/tokens/color-parser.js +88 -0
  75. package/dist/parsers/tokens/color-parser.js.map +1 -0
  76. package/dist/parsers/tokens/grid-parser.d.ts +3 -0
  77. package/dist/parsers/tokens/grid-parser.d.ts.map +1 -0
  78. package/dist/parsers/tokens/grid-parser.js +97 -0
  79. package/dist/parsers/tokens/grid-parser.js.map +1 -0
  80. package/dist/parsers/tokens/index.d.ts +9 -0
  81. package/dist/parsers/tokens/index.d.ts.map +1 -0
  82. package/dist/parsers/tokens/index.js +10 -0
  83. package/dist/parsers/tokens/index.js.map +1 -0
  84. package/dist/parsers/tokens/screen-parser.d.ts +3 -0
  85. package/dist/parsers/tokens/screen-parser.d.ts.map +1 -0
  86. package/dist/parsers/tokens/screen-parser.js +54 -0
  87. package/dist/parsers/tokens/screen-parser.js.map +1 -0
  88. package/dist/parsers/tokens/shadow-parser.d.ts +3 -0
  89. package/dist/parsers/tokens/shadow-parser.d.ts.map +1 -0
  90. package/dist/parsers/tokens/shadow-parser.js +62 -0
  91. package/dist/parsers/tokens/shadow-parser.js.map +1 -0
  92. package/dist/parsers/tokens/spacing-parser.d.ts +4 -0
  93. package/dist/parsers/tokens/spacing-parser.d.ts.map +1 -0
  94. package/dist/parsers/tokens/spacing-parser.js +85 -0
  95. package/dist/parsers/tokens/spacing-parser.js.map +1 -0
  96. package/dist/parsers/tokens/types.d.ts +33 -0
  97. package/dist/parsers/tokens/types.d.ts.map +1 -0
  98. package/dist/parsers/tokens/types.js +42 -0
  99. package/dist/parsers/tokens/types.js.map +1 -0
  100. package/dist/parsers/tokens/typography-parser.d.ts +3 -0
  101. package/dist/parsers/tokens/typography-parser.d.ts.map +1 -0
  102. package/dist/parsers/tokens/typography-parser.js +76 -0
  103. package/dist/parsers/tokens/typography-parser.js.map +1 -0
  104. package/dist/parsers/tokens-parser.d.ts +18 -0
  105. package/dist/parsers/tokens-parser.d.ts.map +1 -0
  106. package/dist/parsers/tokens-parser.js +57 -0
  107. package/dist/parsers/tokens-parser.js.map +1 -0
  108. package/dist/parsers/vue-parser.d.ts +3 -0
  109. package/dist/parsers/vue-parser.d.ts.map +1 -0
  110. package/dist/parsers/vue-parser.js +343 -0
  111. package/dist/parsers/vue-parser.js.map +1 -0
  112. package/dist/tools/generate-react-component.d.ts +35 -0
  113. package/dist/tools/generate-react-component.d.ts.map +1 -0
  114. package/dist/tools/generate-react-component.js +81 -0
  115. package/dist/tools/generate-react-component.js.map +1 -0
  116. package/dist/tools/generate-vue-component.d.ts +35 -0
  117. package/dist/tools/generate-vue-component.d.ts.map +1 -0
  118. package/dist/tools/generate-vue-component.js +81 -0
  119. package/dist/tools/generate-vue-component.js.map +1 -0
  120. package/dist/tools/get-component-info.d.ts +52 -0
  121. package/dist/tools/get-component-info.d.ts.map +1 -0
  122. package/dist/tools/get-component-info.js +94 -0
  123. package/dist/tools/get-component-info.js.map +1 -0
  124. package/dist/tools/get-css-utility.d.ts +41 -0
  125. package/dist/tools/get-css-utility.d.ts.map +1 -0
  126. package/dist/tools/get-css-utility.js +57 -0
  127. package/dist/tools/get-css-utility.js.map +1 -0
  128. package/dist/tools/get-design-tokens.d.ts +44 -0
  129. package/dist/tools/get-design-tokens.d.ts.map +1 -0
  130. package/dist/tools/get-design-tokens.js +124 -0
  131. package/dist/tools/get-design-tokens.js.map +1 -0
  132. package/dist/tools/get-icon.d.ts +32 -0
  133. package/dist/tools/get-icon.d.ts.map +1 -0
  134. package/dist/tools/get-icon.js +108 -0
  135. package/dist/tools/get-icon.js.map +1 -0
  136. package/dist/tools/get-install-info.d.ts +39 -0
  137. package/dist/tools/get-install-info.d.ts.map +1 -0
  138. package/dist/tools/get-install-info.js +160 -0
  139. package/dist/tools/get-install-info.js.map +1 -0
  140. package/dist/tools/list-components.d.ts +32 -0
  141. package/dist/tools/list-components.d.ts.map +1 -0
  142. package/dist/tools/list-components.js +62 -0
  143. package/dist/tools/list-components.js.map +1 -0
  144. package/dist/tools/list-css-utilities.d.ts +27 -0
  145. package/dist/tools/list-css-utilities.d.ts.map +1 -0
  146. package/dist/tools/list-css-utilities.js +48 -0
  147. package/dist/tools/list-css-utilities.js.map +1 -0
  148. package/dist/tools/search-documentation.d.ts +37 -0
  149. package/dist/tools/search-documentation.d.ts.map +1 -0
  150. package/dist/tools/search-documentation.js +120 -0
  151. package/dist/tools/search-documentation.js.map +1 -0
  152. package/dist/tools/search-icons.d.ts +41 -0
  153. package/dist/tools/search-icons.d.ts.map +1 -0
  154. package/dist/tools/search-icons.js +134 -0
  155. package/dist/tools/search-icons.js.map +1 -0
  156. package/package.json +98 -0
  157. package/skills/mozaic-css-utilities/skill.md +633 -0
  158. package/skills/mozaic-design-tokens/skill.md +621 -0
  159. package/skills/mozaic-icons/skill.md +624 -0
  160. package/skills/mozaic-react-builder/skill.md +652 -0
  161. package/skills/mozaic-vue-builder/skill.md +491 -0
@@ -0,0 +1,406 @@
1
+ import { readFileSync, existsSync, readdirSync, statSync } from "fs";
2
+ import { join, basename } from "path";
3
+ // Extract const arrays like: const sizes = ['s', 'm', 'l'] as const
4
+ function extractConstArrays(content) {
5
+ const constArrays = new Map();
6
+ // Match: const sizes = ['s', 'm', 'l'] as const
7
+ const constRegex = /const\s+(\w+)\s*=\s*\[([^\]]+)\]\s*as\s+const/g;
8
+ let match;
9
+ while ((match = constRegex.exec(content)) !== null) {
10
+ const name = match[1];
11
+ const values = match[2]
12
+ .split(",")
13
+ .map((s) => s.trim().replace(/['"]/g, ""))
14
+ .filter((s) => s.length > 0);
15
+ constArrays.set(name, values);
16
+ }
17
+ return constArrays;
18
+ }
19
+ // Extract props from a types file content
20
+ function extractPropsFromInterface(content, interfaceName, constArrays, allInterfaces) {
21
+ const props = [];
22
+ const seenProps = new Set();
23
+ // Find the target interface
24
+ const interfaceRegex = new RegExp(`interface\\s+${interfaceName}\\s*(?:extends\\s+([^{]+))?\\s*\\{([\\s\\S]*?)\\}`, "g");
25
+ const match = interfaceRegex.exec(content);
26
+ if (!match)
27
+ return props;
28
+ const extendsClause = match[1];
29
+ const interfaceBody = match[2];
30
+ // First, recursively get props from extended interfaces
31
+ if (extendsClause) {
32
+ const extendedInterfaces = extendsClause
33
+ .split(",")
34
+ .map((s) => s.trim().replace(/<[^>]+>/, "")) // Remove generics like Omit<...>
35
+ .filter((s) => s.length > 0 && !s.startsWith("Omit") && !s.includes("HTMLAttributes"));
36
+ for (const extInterface of extendedInterfaces) {
37
+ const extProps = extractPropsFromInterface(content, extInterface, constArrays, allInterfaces);
38
+ for (const prop of extProps) {
39
+ if (!seenProps.has(prop.name)) {
40
+ seenProps.add(prop.name);
41
+ props.push(prop);
42
+ }
43
+ }
44
+ }
45
+ }
46
+ // Parse props from this interface
47
+ const propRegex = /(\w+)(\?)?:\s*([^;\n]+)/g;
48
+ let propMatch;
49
+ while ((propMatch = propRegex.exec(interfaceBody)) !== null) {
50
+ const propName = propMatch[1];
51
+ const isOptional = !!propMatch[2];
52
+ const propType = propMatch[3].trim();
53
+ // Skip already seen, callbacks, children
54
+ if (seenProps.has(propName))
55
+ continue;
56
+ if (propType.includes("=>") || propName.startsWith("on"))
57
+ continue;
58
+ if (propName === "children" || propName === "className")
59
+ continue;
60
+ seenProps.add(propName);
61
+ // Check if type references a const array type (e.g., TButtonSize)
62
+ let options;
63
+ const typeRefMatch = propType.match(/^T(\w+)$/);
64
+ if (typeRefMatch) {
65
+ // Look for corresponding const array (e.g., TButtonSize -> sizes)
66
+ const typeName = typeRefMatch[1].toLowerCase();
67
+ for (const [constName, values] of constArrays) {
68
+ if (typeName.includes(constName.toLowerCase())) {
69
+ options = values;
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ // Handle inline union types
75
+ if (propType.includes("|") && propType.includes("'")) {
76
+ options = propType
77
+ .split("|")
78
+ .map((s) => s.trim().replace(/['"]/g, ""))
79
+ .filter((s) => s && s !== "undefined");
80
+ }
81
+ props.push({
82
+ name: propName,
83
+ type: propType,
84
+ required: !isOptional,
85
+ options: options && options.length > 1 ? options : undefined,
86
+ });
87
+ }
88
+ return props;
89
+ }
90
+ // Extract props from React component - checks both inline and external .types.ts files
91
+ function extractProps(content, componentDir) {
92
+ let props = [];
93
+ // First try to find imported Props type and load external types file
94
+ if (componentDir) {
95
+ // Match: import { IButtonProps } from './Button.types'
96
+ const importMatch = content.match(/import\s*\{[^}]*?(I\w*Props)\s*[^}]*\}\s*from\s*['"]\.\/(\w+)\.types['"]/);
97
+ if (importMatch) {
98
+ const propsInterface = importMatch[1];
99
+ const typesFileName = importMatch[2];
100
+ const typesFilePath = join(componentDir, `${typesFileName}.types.ts`);
101
+ if (existsSync(typesFilePath)) {
102
+ try {
103
+ const typesContent = readFileSync(typesFilePath, "utf-8");
104
+ const constArrays = extractConstArrays(typesContent);
105
+ const allInterfaces = new Map();
106
+ props = extractPropsFromInterface(typesContent, propsInterface, constArrays, allInterfaces);
107
+ }
108
+ catch {
109
+ // Fall through to inline extraction
110
+ }
111
+ }
112
+ }
113
+ }
114
+ // Fallback: extract from inline interfaces in the component file
115
+ if (props.length === 0) {
116
+ const interfacePatterns = [
117
+ /interface\s+\w*Props\w*\s*(?:extends[^{]+)?{([\s\S]*?)}/g,
118
+ /type\s+\w*Props\w*\s*=\s*{([\s\S]*?)}/g,
119
+ ];
120
+ for (const pattern of interfacePatterns) {
121
+ let interfaceMatch;
122
+ while ((interfaceMatch = pattern.exec(content)) !== null) {
123
+ const interfaceContent = interfaceMatch[1];
124
+ const propRegex = /(\w+)(\?)?:\s*([^;\n]+)/g;
125
+ let match;
126
+ while ((match = propRegex.exec(interfaceContent)) !== null) {
127
+ const propName = match[1];
128
+ const isOptional = !!match[2];
129
+ const propType = match[3].trim();
130
+ if (propType.includes("=>") || propName.startsWith("on"))
131
+ continue;
132
+ if (propName === "children")
133
+ continue;
134
+ if (propType.includes("|")) {
135
+ const options = propType
136
+ .split("|")
137
+ .map((s) => s.trim().replace(/['"]/g, ""))
138
+ .filter((s) => s && s !== "undefined");
139
+ props.push({
140
+ name: propName,
141
+ type: "string",
142
+ required: !isOptional,
143
+ options: options.length > 1 ? options : undefined,
144
+ });
145
+ }
146
+ else {
147
+ props.push({
148
+ name: propName,
149
+ type: propType.toLowerCase(),
150
+ required: !isOptional,
151
+ });
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ return props;
158
+ }
159
+ // Extract callback props as events
160
+ function extractCallbacks(content) {
161
+ const events = [];
162
+ const seenEvents = new Set();
163
+ // Match callback props: onSomething?: (args) => void
164
+ const callbackPatterns = [
165
+ /(\bon[A-Z]\w*)\??:\s*\([^)]*\)\s*=>\s*\w+/g,
166
+ /(\bon[A-Z]\w*)\??:\s*\w*EventHandler/g,
167
+ ];
168
+ for (const pattern of callbackPatterns) {
169
+ let match;
170
+ while ((match = pattern.exec(content)) !== null) {
171
+ const eventName = match[1];
172
+ if (!seenEvents.has(eventName)) {
173
+ seenEvents.add(eventName);
174
+ events.push({
175
+ name: eventName,
176
+ description: `${eventName.replace(/^on/, "")} event callback`,
177
+ });
178
+ }
179
+ }
180
+ }
181
+ return events;
182
+ }
183
+ // Check if component accepts children
184
+ function hasChildrenProp(content) {
185
+ return (content.includes("children") ||
186
+ content.includes("PropsWithChildren") ||
187
+ content.includes("ReactNode"));
188
+ }
189
+ // Extract CSS classes from component
190
+ function extractCssClasses(content) {
191
+ const classes = [];
192
+ const seenClasses = new Set();
193
+ // Match mc- prefixed classes (Mozaic convention)
194
+ const classRegex = /['"`](mc-[a-z0-9-]+)['"`]/g;
195
+ let match;
196
+ while ((match = classRegex.exec(content)) !== null) {
197
+ if (!seenClasses.has(match[1])) {
198
+ seenClasses.add(match[1]);
199
+ classes.push(match[1]);
200
+ }
201
+ }
202
+ return classes;
203
+ }
204
+ function parseReactFile(filePath, componentDir) {
205
+ try {
206
+ const content = readFileSync(filePath, "utf-8");
207
+ const fileName = basename(filePath, ".tsx");
208
+ // Also try to extract callbacks from types file
209
+ let callbacks = extractCallbacks(content);
210
+ const typesFilePath = join(componentDir, `${fileName}.types.ts`);
211
+ if (existsSync(typesFilePath)) {
212
+ const typesContent = readFileSync(typesFilePath, "utf-8");
213
+ callbacks = [...callbacks, ...extractCallbacks(typesContent)];
214
+ }
215
+ return {
216
+ name: fileName,
217
+ props: extractProps(content, componentDir),
218
+ callbacks,
219
+ hasChildren: hasChildrenProp(content),
220
+ };
221
+ }
222
+ catch (error) {
223
+ console.warn(`Warning: Could not parse ${filePath}:`, error);
224
+ return null;
225
+ }
226
+ }
227
+ // Parse storybook stories for examples
228
+ function parseStoriesFile(filePath) {
229
+ const examples = [];
230
+ try {
231
+ const content = readFileSync(filePath, "utf-8");
232
+ // First, find all exported story names
233
+ const exportedStories = [];
234
+ const exportRegex = /export\s+const\s+(\w+)\s*=/g;
235
+ let exportMatch;
236
+ while ((exportMatch = exportRegex.exec(content)) !== null) {
237
+ const storyName = exportMatch[1];
238
+ // Skip default export and non-story exports
239
+ if (storyName !== "default" && storyName !== "Default" && /^[A-Z]/.test(storyName)) {
240
+ exportedStories.push(storyName);
241
+ }
242
+ }
243
+ // For each story, find its args (React CSF format: StoryName.args = {...})
244
+ for (const storyName of exportedStories) {
245
+ // Match StoryName.args = {...} - handle nested objects with balanced braces
246
+ const argsPattern = new RegExp(`${storyName}\\.args\\s*=\\s*\\{([^}]*(?:\\{[^}]*\\}[^}]*)*)\\}`, "s");
247
+ const argsMatch = content.match(argsPattern);
248
+ if (argsMatch) {
249
+ examples.push({
250
+ title: storyName.replace(/([A-Z])/g, " $1").trim(),
251
+ code: argsMatch[1].trim(),
252
+ });
253
+ }
254
+ }
255
+ // Also try inline args format: export const Story = { args: {...} }
256
+ const inlineArgsRegex = /export\s+const\s+(\w+)\s*=\s*\{[\s\S]*?args\s*:\s*\{([^}]*)\}/g;
257
+ let match;
258
+ while ((match = inlineArgsRegex.exec(content)) !== null) {
259
+ const storyName = match[1];
260
+ const args = match[2];
261
+ // Skip Default story and already captured stories
262
+ if (storyName !== "Default" && !exportedStories.includes(storyName)) {
263
+ examples.push({
264
+ title: storyName.replace(/([A-Z])/g, " $1").trim(),
265
+ code: args.trim(),
266
+ });
267
+ }
268
+ }
269
+ // Also try to extract render functions
270
+ const renderRegex = /render\s*:\s*\([^)]*\)\s*=>\s*(<[\s\S]*?>)/g;
271
+ while ((match = renderRegex.exec(content)) !== null) {
272
+ examples.push({
273
+ title: "Example",
274
+ code: match[1].trim(),
275
+ });
276
+ }
277
+ }
278
+ catch (error) {
279
+ console.warn(`Warning: Could not parse stories ${filePath}:`, error);
280
+ }
281
+ return examples;
282
+ }
283
+ function findComponentDirs(baseDir) {
284
+ const dirs = [];
285
+ if (!existsSync(baseDir)) {
286
+ return dirs;
287
+ }
288
+ const entries = readdirSync(baseDir);
289
+ for (const entry of entries) {
290
+ const fullPath = join(baseDir, entry);
291
+ const stat = statSync(fullPath);
292
+ // React components typically use PascalCase directory names
293
+ if (stat.isDirectory() && /^[A-Z]/.test(entry)) {
294
+ dirs.push(fullPath);
295
+ }
296
+ }
297
+ return dirs;
298
+ }
299
+ // Component category mapping based on name patterns
300
+ function inferCategory(componentName) {
301
+ const name = componentName.toLowerCase();
302
+ if (["button", "link", "optionbutton", "optioncard"].some((n) => name.includes(n))) {
303
+ return "action";
304
+ }
305
+ if ([
306
+ "input",
307
+ "select",
308
+ "checkbox",
309
+ "radio",
310
+ "toggle",
311
+ "textarea",
312
+ "field",
313
+ "autocomplete",
314
+ "datepicker",
315
+ "dropdown",
316
+ "fileuploader",
317
+ "password",
318
+ "phone",
319
+ "quantity",
320
+ ].some((n) => name.includes(n))) {
321
+ return "form";
322
+ }
323
+ if (["accordion", "breadcrumb", "menu", "pagination", "sidebar", "stepper", "tabs"].some((n) => name.includes(n))) {
324
+ return "navigation";
325
+ }
326
+ if (["badge", "flag", "loader", "modal", "notification", "progress", "tooltip"].some((n) => name.includes(n))) {
327
+ return "feedback";
328
+ }
329
+ if (["card", "divider", "layer"].some((n) => name.includes(n))) {
330
+ return "layout";
331
+ }
332
+ if (["table", "heading", "hero", "listbox", "rating", "tag"].some((n) => name.includes(n))) {
333
+ return "data-display";
334
+ }
335
+ return "other";
336
+ }
337
+ export async function parseReactComponents(componentsPath) {
338
+ const components = [];
339
+ const componentDirs = findComponentDirs(componentsPath);
340
+ for (const dir of componentDirs) {
341
+ const componentName = basename(dir);
342
+ // React components are typically named Component.tsx or index.tsx
343
+ const possibleFiles = [join(dir, `${componentName}.tsx`), join(dir, "index.tsx")];
344
+ let tsxFile = null;
345
+ for (const file of possibleFiles) {
346
+ if (existsSync(file)) {
347
+ tsxFile = file;
348
+ break;
349
+ }
350
+ }
351
+ if (tsxFile) {
352
+ const parsed = parseReactFile(tsxFile, dir);
353
+ if (parsed) {
354
+ const component = {
355
+ name: componentName,
356
+ slug: componentName.toLowerCase(),
357
+ category: inferCategory(componentName),
358
+ frameworks: ["react"],
359
+ props: parsed.props,
360
+ slots: parsed.hasChildren
361
+ ? [{ name: "children", description: "Component children" }]
362
+ : [],
363
+ events: parsed.callbacks,
364
+ examples: [],
365
+ cssClasses: [],
366
+ };
367
+ // Try to find stories file
368
+ const storiesPatterns = [
369
+ join(dir, "stories", `${componentName}.stories.tsx`),
370
+ join(dir, `${componentName}.stories.tsx`),
371
+ join(dir, "stories", "index.stories.tsx"),
372
+ ];
373
+ for (const storiesPath of storiesPatterns) {
374
+ if (existsSync(storiesPath)) {
375
+ const stories = parseStoriesFile(storiesPath);
376
+ component.examples?.push(...stories.map((s) => ({
377
+ framework: "react",
378
+ title: s.title,
379
+ code: s.code,
380
+ })));
381
+ break;
382
+ }
383
+ }
384
+ // Also check for stories directory
385
+ const storiesDir = join(dir, "stories");
386
+ if (existsSync(storiesDir)) {
387
+ const storyFiles = readdirSync(storiesDir).filter((f) => f.endsWith(".stories.tsx"));
388
+ for (const storyFile of storyFiles) {
389
+ const stories = parseStoriesFile(join(storiesDir, storyFile));
390
+ component.examples?.push(...stories.map((s) => ({
391
+ framework: "react",
392
+ title: s.title,
393
+ code: s.code,
394
+ })));
395
+ }
396
+ }
397
+ // Extract CSS classes from the TSX file
398
+ const tsxContent = readFileSync(tsxFile, "utf-8");
399
+ component.cssClasses = extractCssClasses(tsxContent);
400
+ components.push(component);
401
+ }
402
+ }
403
+ }
404
+ return components;
405
+ }
406
+ //# sourceMappingURL=react-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-parser.js","sourceRoot":"","sources":["../../src/parsers/react-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CssUtility } from "../db/queries.js";
2
+ export interface ParseScssOptions {
3
+ stylesPath: string;
4
+ }
5
+ /**
6
+ * Parse SCSS files to extract CSS-only utilities (layouts and spacing)
7
+ */
8
+ export declare function parseCssUtilities(stylesPath: string): Promise<CssUtility[]>;
9
+ //# sourceMappingURL=scss-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scss-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/scss-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAwCtE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAoBjF"}