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.
- package/INSTALLATION.md +232 -0
- package/README.md +262 -0
- package/SKILLS.md +411 -0
- package/bin/install-skills.js +171 -0
- package/data/mozaic.db +0 -0
- package/data/mozaic.db-shm +0 -0
- package/data/mozaic.db-wal +0 -0
- package/dist/__tests__/sanity-check.test.d.ts +2 -0
- package/dist/__tests__/sanity-check.test.d.ts.map +1 -0
- package/dist/__tests__/sanity-check.test.js +167 -0
- package/dist/__tests__/sanity-check.test.js.map +1 -0
- package/dist/__tests__/tools.integration.test.d.ts +2 -0
- package/dist/__tests__/tools.integration.test.d.ts.map +1 -0
- package/dist/__tests__/tools.integration.test.js +220 -0
- package/dist/__tests__/tools.integration.test.js.map +1 -0
- package/dist/db/queries.d.ts +144 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +536 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +4 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +253 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +416 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/__tests__/docs-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/docs-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/docs-parser.test.js +251 -0
- package/dist/parsers/__tests__/docs-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/icons-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/icons-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/icons-parser.test.js +169 -0
- package/dist/parsers/__tests__/icons-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/react-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/react-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/react-parser.test.js +274 -0
- package/dist/parsers/__tests__/react-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/scss-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/scss-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/scss-parser.test.js +364 -0
- package/dist/parsers/__tests__/scss-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/tokens-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/tokens-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/tokens-parser.test.js +172 -0
- package/dist/parsers/__tests__/tokens-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/vue-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/vue-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/vue-parser.test.js +207 -0
- package/dist/parsers/__tests__/vue-parser.test.js.map +1 -0
- package/dist/parsers/docs-parser.d.ts +4 -0
- package/dist/parsers/docs-parser.d.ts.map +1 -0
- package/dist/parsers/docs-parser.js +237 -0
- package/dist/parsers/docs-parser.js.map +1 -0
- package/dist/parsers/icons-parser.d.ts +33 -0
- package/dist/parsers/icons-parser.d.ts.map +1 -0
- package/dist/parsers/icons-parser.js +125 -0
- package/dist/parsers/icons-parser.js.map +1 -0
- package/dist/parsers/react-parser.d.ts +3 -0
- package/dist/parsers/react-parser.d.ts.map +1 -0
- package/dist/parsers/react-parser.js +406 -0
- package/dist/parsers/react-parser.js.map +1 -0
- package/dist/parsers/scss-parser.d.ts +9 -0
- package/dist/parsers/scss-parser.d.ts.map +1 -0
- package/dist/parsers/scss-parser.js +351 -0
- package/dist/parsers/scss-parser.js.map +1 -0
- package/dist/parsers/tokens/border-parser.d.ts +3 -0
- package/dist/parsers/tokens/border-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/border-parser.js +83 -0
- package/dist/parsers/tokens/border-parser.js.map +1 -0
- package/dist/parsers/tokens/color-parser.d.ts +3 -0
- package/dist/parsers/tokens/color-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/color-parser.js +88 -0
- package/dist/parsers/tokens/color-parser.js.map +1 -0
- package/dist/parsers/tokens/grid-parser.d.ts +3 -0
- package/dist/parsers/tokens/grid-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/grid-parser.js +97 -0
- package/dist/parsers/tokens/grid-parser.js.map +1 -0
- package/dist/parsers/tokens/index.d.ts +9 -0
- package/dist/parsers/tokens/index.d.ts.map +1 -0
- package/dist/parsers/tokens/index.js +10 -0
- package/dist/parsers/tokens/index.js.map +1 -0
- package/dist/parsers/tokens/screen-parser.d.ts +3 -0
- package/dist/parsers/tokens/screen-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/screen-parser.js +54 -0
- package/dist/parsers/tokens/screen-parser.js.map +1 -0
- package/dist/parsers/tokens/shadow-parser.d.ts +3 -0
- package/dist/parsers/tokens/shadow-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/shadow-parser.js +62 -0
- package/dist/parsers/tokens/shadow-parser.js.map +1 -0
- package/dist/parsers/tokens/spacing-parser.d.ts +4 -0
- package/dist/parsers/tokens/spacing-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/spacing-parser.js +85 -0
- package/dist/parsers/tokens/spacing-parser.js.map +1 -0
- package/dist/parsers/tokens/types.d.ts +33 -0
- package/dist/parsers/tokens/types.d.ts.map +1 -0
- package/dist/parsers/tokens/types.js +42 -0
- package/dist/parsers/tokens/types.js.map +1 -0
- package/dist/parsers/tokens/typography-parser.d.ts +3 -0
- package/dist/parsers/tokens/typography-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/typography-parser.js +76 -0
- package/dist/parsers/tokens/typography-parser.js.map +1 -0
- package/dist/parsers/tokens-parser.d.ts +18 -0
- package/dist/parsers/tokens-parser.d.ts.map +1 -0
- package/dist/parsers/tokens-parser.js +57 -0
- package/dist/parsers/tokens-parser.js.map +1 -0
- package/dist/parsers/vue-parser.d.ts +3 -0
- package/dist/parsers/vue-parser.d.ts.map +1 -0
- package/dist/parsers/vue-parser.js +343 -0
- package/dist/parsers/vue-parser.js.map +1 -0
- package/dist/tools/generate-react-component.d.ts +35 -0
- package/dist/tools/generate-react-component.d.ts.map +1 -0
- package/dist/tools/generate-react-component.js +81 -0
- package/dist/tools/generate-react-component.js.map +1 -0
- package/dist/tools/generate-vue-component.d.ts +35 -0
- package/dist/tools/generate-vue-component.d.ts.map +1 -0
- package/dist/tools/generate-vue-component.js +81 -0
- package/dist/tools/generate-vue-component.js.map +1 -0
- package/dist/tools/get-component-info.d.ts +52 -0
- package/dist/tools/get-component-info.d.ts.map +1 -0
- package/dist/tools/get-component-info.js +94 -0
- package/dist/tools/get-component-info.js.map +1 -0
- package/dist/tools/get-css-utility.d.ts +41 -0
- package/dist/tools/get-css-utility.d.ts.map +1 -0
- package/dist/tools/get-css-utility.js +57 -0
- package/dist/tools/get-css-utility.js.map +1 -0
- package/dist/tools/get-design-tokens.d.ts +44 -0
- package/dist/tools/get-design-tokens.d.ts.map +1 -0
- package/dist/tools/get-design-tokens.js +124 -0
- package/dist/tools/get-design-tokens.js.map +1 -0
- package/dist/tools/get-icon.d.ts +32 -0
- package/dist/tools/get-icon.d.ts.map +1 -0
- package/dist/tools/get-icon.js +108 -0
- package/dist/tools/get-icon.js.map +1 -0
- package/dist/tools/get-install-info.d.ts +39 -0
- package/dist/tools/get-install-info.d.ts.map +1 -0
- package/dist/tools/get-install-info.js +160 -0
- package/dist/tools/get-install-info.js.map +1 -0
- package/dist/tools/list-components.d.ts +32 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +62 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/list-css-utilities.d.ts +27 -0
- package/dist/tools/list-css-utilities.d.ts.map +1 -0
- package/dist/tools/list-css-utilities.js +48 -0
- package/dist/tools/list-css-utilities.js.map +1 -0
- package/dist/tools/search-documentation.d.ts +37 -0
- package/dist/tools/search-documentation.d.ts.map +1 -0
- package/dist/tools/search-documentation.js +120 -0
- package/dist/tools/search-documentation.js.map +1 -0
- package/dist/tools/search-icons.d.ts +41 -0
- package/dist/tools/search-icons.d.ts.map +1 -0
- package/dist/tools/search-icons.js +134 -0
- package/dist/tools/search-icons.js.map +1 -0
- package/package.json +98 -0
- package/skills/mozaic-css-utilities/skill.md +633 -0
- package/skills/mozaic-design-tokens/skill.md +621 -0
- package/skills/mozaic-icons/skill.md +624 -0
- package/skills/mozaic-react-builder/skill.md +652 -0
- package/skills/mozaic-vue-builder/skill.md +491 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { join, relative } from "path";
|
|
3
|
+
// Extract frontmatter from MDX files
|
|
4
|
+
function extractFrontmatter(content) {
|
|
5
|
+
const frontmatterRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
|
|
6
|
+
const match = content.match(frontmatterRegex);
|
|
7
|
+
if (match) {
|
|
8
|
+
const frontmatterStr = match[1];
|
|
9
|
+
const body = match[2];
|
|
10
|
+
const frontmatter = {};
|
|
11
|
+
const lines = frontmatterStr.split("\n");
|
|
12
|
+
for (const line of lines) {
|
|
13
|
+
const colonIndex = line.indexOf(":");
|
|
14
|
+
if (colonIndex !== -1) {
|
|
15
|
+
const key = line.substring(0, colonIndex).trim();
|
|
16
|
+
const value = line
|
|
17
|
+
.substring(colonIndex + 1)
|
|
18
|
+
.trim()
|
|
19
|
+
.replace(/^['"]|['"]$/g, "");
|
|
20
|
+
frontmatter[key] = value;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { frontmatter, body };
|
|
24
|
+
}
|
|
25
|
+
return { frontmatter: {}, body: content };
|
|
26
|
+
}
|
|
27
|
+
// Extract title from content if not in frontmatter
|
|
28
|
+
function extractTitle(content) {
|
|
29
|
+
// Try to find Storybook Meta title (e.g., <Meta title="Getting Started/Introduction" />)
|
|
30
|
+
const metaMatch = content.match(/<Meta\s+title=["']([^"']+)["']/);
|
|
31
|
+
if (metaMatch) {
|
|
32
|
+
// Take the last part of the path as title (e.g., "Getting Started/Introduction" -> "Introduction")
|
|
33
|
+
const parts = metaMatch[1].split("/");
|
|
34
|
+
return parts[parts.length - 1];
|
|
35
|
+
}
|
|
36
|
+
// Try to find first h1
|
|
37
|
+
const h1Match = content.match(/^#\s+(.+)$/m);
|
|
38
|
+
if (h1Match) {
|
|
39
|
+
return h1Match[1];
|
|
40
|
+
}
|
|
41
|
+
// Try to find MDX heading
|
|
42
|
+
const mdxMatch = content.match(/<h1[^>]*>([^<]+)<\/h1>/i);
|
|
43
|
+
if (mdxMatch) {
|
|
44
|
+
return mdxMatch[1];
|
|
45
|
+
}
|
|
46
|
+
return "Untitled";
|
|
47
|
+
}
|
|
48
|
+
// Extract Storybook Meta title path for URL generation
|
|
49
|
+
function extractMetaTitlePath(content) {
|
|
50
|
+
const metaMatch = content.match(/<Meta\s+title=["']([^"']+)["']/);
|
|
51
|
+
if (metaMatch) {
|
|
52
|
+
return metaMatch[1].toLowerCase().replace(/\s+/g, "-");
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
// Extract keywords from content
|
|
57
|
+
function extractKeywords(content, title) {
|
|
58
|
+
const keywords = new Set();
|
|
59
|
+
// Add title words
|
|
60
|
+
title.split(/\s+/).forEach((word) => {
|
|
61
|
+
if (word.length > 2) {
|
|
62
|
+
keywords.add(word.toLowerCase());
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Extract component names (PascalCase)
|
|
66
|
+
const componentRegex = /\bM[A-Z][a-zA-Z]+/g;
|
|
67
|
+
const componentMatches = content.match(componentRegex);
|
|
68
|
+
if (componentMatches) {
|
|
69
|
+
componentMatches.forEach((match) => keywords.add(match.toLowerCase()));
|
|
70
|
+
}
|
|
71
|
+
// Extract CSS class names
|
|
72
|
+
const cssClassRegex = /\bmc-[a-z0-9-]+/g;
|
|
73
|
+
const cssMatches = content.match(cssClassRegex);
|
|
74
|
+
if (cssMatches) {
|
|
75
|
+
cssMatches.forEach((match) => keywords.add(match));
|
|
76
|
+
}
|
|
77
|
+
// Extract code keywords
|
|
78
|
+
const codeKeywords = ["props", "slots", "events", "emit", "component", "style"];
|
|
79
|
+
codeKeywords.forEach((keyword) => {
|
|
80
|
+
if (content.toLowerCase().includes(keyword)) {
|
|
81
|
+
keywords.add(keyword);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return Array.from(keywords);
|
|
85
|
+
}
|
|
86
|
+
// Clean MDX content for storage
|
|
87
|
+
function cleanContent(content) {
|
|
88
|
+
// Remove import statements
|
|
89
|
+
let cleaned = content.replace(/^import\s+.*$/gm, "");
|
|
90
|
+
// Remove Storybook Meta tags
|
|
91
|
+
cleaned = cleaned.replace(/<Meta\s+[^>]*\/>/g, "");
|
|
92
|
+
// Extract code from Storybook Source components
|
|
93
|
+
cleaned = cleaned.replace(/<Source[^>]*code=\{?["'`]([^"'`]+)["'`]\}?[^>]*\/>/g, "```\n$1\n```");
|
|
94
|
+
cleaned = cleaned.replace(/<Source[^>]*code=\{`([\s\S]*?)`\}[^>]*\/>/g, "```\n$1\n```");
|
|
95
|
+
// Remove JSX components but keep their text content
|
|
96
|
+
cleaned = cleaned.replace(/<[A-Z][a-zA-Z]*[^>]*>([\s\S]*?)<\/[A-Z][a-zA-Z]*>/g, "$1");
|
|
97
|
+
// Remove self-closing JSX components
|
|
98
|
+
cleaned = cleaned.replace(/<[A-Z][a-zA-Z]*[^>]*\/>/g, "");
|
|
99
|
+
// Remove empty code blocks
|
|
100
|
+
cleaned = cleaned.replace(/```\s*```/g, "");
|
|
101
|
+
// Normalize whitespace
|
|
102
|
+
cleaned = cleaned.replace(/\n{3,}/g, "\n\n");
|
|
103
|
+
return cleaned.trim();
|
|
104
|
+
}
|
|
105
|
+
// Infer category from file path
|
|
106
|
+
function inferCategory(filePath) {
|
|
107
|
+
const pathLower = filePath.toLowerCase();
|
|
108
|
+
if (pathLower.includes("component")) {
|
|
109
|
+
return "components";
|
|
110
|
+
}
|
|
111
|
+
if (pathLower.includes("foundation") || pathLower.includes("token")) {
|
|
112
|
+
return "foundations";
|
|
113
|
+
}
|
|
114
|
+
if (pathLower.includes("pattern")) {
|
|
115
|
+
return "patterns";
|
|
116
|
+
}
|
|
117
|
+
if (pathLower.includes("getting-started") || pathLower.includes("guide")) {
|
|
118
|
+
return "guides";
|
|
119
|
+
}
|
|
120
|
+
return "other";
|
|
121
|
+
}
|
|
122
|
+
function parseMdxFile(filePath, _basePath) {
|
|
123
|
+
try {
|
|
124
|
+
const content = readFileSync(filePath, "utf-8");
|
|
125
|
+
const { frontmatter, body } = extractFrontmatter(content);
|
|
126
|
+
const title = frontmatter.title || extractTitle(body);
|
|
127
|
+
const cleanedContent = cleanContent(body);
|
|
128
|
+
const category = frontmatter.category || inferCategory(filePath);
|
|
129
|
+
const keywords = extractKeywords(cleanedContent, title);
|
|
130
|
+
return {
|
|
131
|
+
title,
|
|
132
|
+
content: cleanedContent,
|
|
133
|
+
category,
|
|
134
|
+
keywords,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.warn(`Warning: Could not parse ${filePath}:`, error);
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function findMdxFiles(dir) {
|
|
143
|
+
const files = [];
|
|
144
|
+
if (!existsSync(dir)) {
|
|
145
|
+
return files;
|
|
146
|
+
}
|
|
147
|
+
const entries = readdirSync(dir);
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
const fullPath = join(dir, entry);
|
|
150
|
+
const stat = statSync(fullPath);
|
|
151
|
+
if (stat.isDirectory()) {
|
|
152
|
+
files.push(...findMdxFiles(fullPath));
|
|
153
|
+
}
|
|
154
|
+
else if (entry.endsWith(".mdx") || entry.endsWith(".md")) {
|
|
155
|
+
files.push(fullPath);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return files;
|
|
159
|
+
}
|
|
160
|
+
// Generate URL path from file path
|
|
161
|
+
function generateUrlPath(filePath, basePath) {
|
|
162
|
+
let urlPath = relative(basePath, filePath);
|
|
163
|
+
// Remove file extension
|
|
164
|
+
urlPath = urlPath.replace(/\.(mdx?|md)$/, "");
|
|
165
|
+
// Convert to URL format
|
|
166
|
+
urlPath = "/" + urlPath.replace(/\\/g, "/").toLowerCase();
|
|
167
|
+
// Remove index from path
|
|
168
|
+
urlPath = urlPath.replace(/\/index$/, "");
|
|
169
|
+
return urlPath;
|
|
170
|
+
}
|
|
171
|
+
// Minimum content length to include a doc (filters out empty index pages)
|
|
172
|
+
const MIN_CONTENT_LENGTH = 100;
|
|
173
|
+
export async function parseDocumentation(docsPath) {
|
|
174
|
+
const docs = [];
|
|
175
|
+
const mdxFiles = findMdxFiles(docsPath);
|
|
176
|
+
for (const file of mdxFiles) {
|
|
177
|
+
const parsed = parseMdxFile(file, docsPath);
|
|
178
|
+
if (parsed && parsed.content.length >= MIN_CONTENT_LENGTH) {
|
|
179
|
+
docs.push({
|
|
180
|
+
title: parsed.title,
|
|
181
|
+
path: generateUrlPath(file, docsPath),
|
|
182
|
+
content: parsed.content,
|
|
183
|
+
category: parsed.category,
|
|
184
|
+
keywords: parsed.keywords,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return docs;
|
|
189
|
+
}
|
|
190
|
+
// Parse Storybook MDX files from Vue/React repos
|
|
191
|
+
export async function parseStorybookDocs(docsPath, framework, baseUrlPath) {
|
|
192
|
+
const docs = [];
|
|
193
|
+
const mdxFiles = findMdxFiles(docsPath);
|
|
194
|
+
for (const file of mdxFiles) {
|
|
195
|
+
// Skip non-documentation files
|
|
196
|
+
const fileName = file.split("/").pop() || "";
|
|
197
|
+
if (fileName.startsWith("Autodocs") || fileName.startsWith(".")) {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
const content = readFileSync(file, "utf-8");
|
|
202
|
+
const { frontmatter, body } = extractFrontmatter(content);
|
|
203
|
+
// Get title from Meta tag or frontmatter or content
|
|
204
|
+
const title = frontmatter.title || extractTitle(body);
|
|
205
|
+
// Skip if no meaningful title
|
|
206
|
+
if (title === "Untitled") {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const cleanedContent = cleanContent(body);
|
|
210
|
+
// Generate URL path from Meta title or filename
|
|
211
|
+
const metaPath = extractMetaTitlePath(content);
|
|
212
|
+
const urlPath = metaPath
|
|
213
|
+
? `${baseUrlPath}/${metaPath.replace(/\//g, "/")}`
|
|
214
|
+
: `${baseUrlPath}/${fileName.replace(/\.mdx?$/, "").toLowerCase()}`;
|
|
215
|
+
// Skip docs with very short content
|
|
216
|
+
if (cleanedContent.length < MIN_CONTENT_LENGTH) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
// Add framework-specific keywords
|
|
220
|
+
const keywords = extractKeywords(cleanedContent, title);
|
|
221
|
+
keywords.push(framework);
|
|
222
|
+
keywords.push(`@mozaic-ds/${framework === "vue" ? "vue-3" : "react"}`);
|
|
223
|
+
docs.push({
|
|
224
|
+
title: `${title} (${framework === "vue" ? "Vue" : "React"})`,
|
|
225
|
+
path: urlPath,
|
|
226
|
+
content: cleanedContent,
|
|
227
|
+
category: `${framework}-docs`,
|
|
228
|
+
keywords,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
console.warn(`Warning: Could not parse ${file}:`, error);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return docs;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=docs-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-parser.js","sourceRoot":"","sources":["../../src/parsers/docs-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface ParsedIcon {
|
|
2
|
+
name: string;
|
|
3
|
+
iconName: string;
|
|
4
|
+
type: string;
|
|
5
|
+
size: number;
|
|
6
|
+
viewBox: string;
|
|
7
|
+
paths: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Parse icons from the mozaic-design-system icons.js file
|
|
11
|
+
* The file contains ES module exports like:
|
|
12
|
+
* export const ArrowArrowBottom16 = {
|
|
13
|
+
* viewBox: "0 0 16 16",
|
|
14
|
+
* size: "1rem",
|
|
15
|
+
* paths: [{tagName: "path", attrs: {...}}],
|
|
16
|
+
* type: "navigation",
|
|
17
|
+
* iconName: "ArrowArrowBottom16"
|
|
18
|
+
* };
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseIcons(iconsJsPath: string): Promise<ParsedIcon[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Generate SVG markup from an icon's path data
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateSvg(icon: ParsedIcon): string;
|
|
25
|
+
/**
|
|
26
|
+
* Generate React component code for an icon
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateReactComponent(icon: ParsedIcon): string;
|
|
29
|
+
/**
|
|
30
|
+
* Generate Vue component code for an icon
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateVueComponent(icon: ParsedIcon): string;
|
|
33
|
+
//# sourceMappingURL=icons-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/icons-parser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAqD3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA0CpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAQ/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAa7D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
/**
|
|
3
|
+
* Parse icons from the mozaic-design-system icons.js file
|
|
4
|
+
* The file contains ES module exports like:
|
|
5
|
+
* export const ArrowArrowBottom16 = {
|
|
6
|
+
* viewBox: "0 0 16 16",
|
|
7
|
+
* size: "1rem",
|
|
8
|
+
* paths: [{tagName: "path", attrs: {...}}],
|
|
9
|
+
* type: "navigation",
|
|
10
|
+
* iconName: "ArrowArrowBottom16"
|
|
11
|
+
* };
|
|
12
|
+
*/
|
|
13
|
+
export async function parseIcons(iconsJsPath) {
|
|
14
|
+
const content = readFileSync(iconsJsPath, "utf-8");
|
|
15
|
+
const icons = [];
|
|
16
|
+
// Split by 'export const' to get individual icon definitions
|
|
17
|
+
const iconBlocks = content.split(/export\s+const\s+/).slice(1); // Skip first empty element
|
|
18
|
+
for (const block of iconBlocks) {
|
|
19
|
+
try {
|
|
20
|
+
// Extract the icon name (first word before '=')
|
|
21
|
+
const nameMatch = block.match(/^(\w+)\s*=/);
|
|
22
|
+
if (!nameMatch)
|
|
23
|
+
continue;
|
|
24
|
+
const exportName = nameMatch[1];
|
|
25
|
+
// Extract viewBox
|
|
26
|
+
const viewBoxMatch = block.match(/viewBox:\s*"([^"]+)"/);
|
|
27
|
+
const viewBox = viewBoxMatch?.[1] ?? "0 0 16 16";
|
|
28
|
+
// Extract type
|
|
29
|
+
const typeMatch = block.match(/type:\s*"([^"]+)"/);
|
|
30
|
+
const type = typeMatch?.[1] ?? "unknown";
|
|
31
|
+
// Extract iconName from the object
|
|
32
|
+
const iconNameMatch = block.match(/iconName:\s*"([^"]+)"/);
|
|
33
|
+
const iconName = iconNameMatch?.[1] ?? exportName;
|
|
34
|
+
// Extract size from the name (last digits)
|
|
35
|
+
const sizeMatch = exportName.match(/(\d+)$/);
|
|
36
|
+
const size = sizeMatch ? parseInt(sizeMatch[1], 10) : 16;
|
|
37
|
+
// Extract paths - find the paths array
|
|
38
|
+
const pathsMatch = block.match(/paths:\s*(\[[\s\S]*?\])\s*,?\s*(?:type:|iconName:)/);
|
|
39
|
+
const paths = pathsMatch?.[1] ?? "[]";
|
|
40
|
+
// Clean icon name (remove size suffix)
|
|
41
|
+
const cleanIconName = iconName.replace(/\d+$/, "");
|
|
42
|
+
icons.push({
|
|
43
|
+
name: exportName,
|
|
44
|
+
iconName: cleanIconName,
|
|
45
|
+
type,
|
|
46
|
+
size,
|
|
47
|
+
viewBox,
|
|
48
|
+
paths,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Skip icons that fail to parse
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return icons;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generate SVG markup from an icon's path data
|
|
60
|
+
*/
|
|
61
|
+
export function generateSvg(icon) {
|
|
62
|
+
let pathsArray;
|
|
63
|
+
try {
|
|
64
|
+
// Parse the paths JSON
|
|
65
|
+
pathsArray = JSON.parse(icon.paths.replace(/(\w+):/g, '"$1":').replace(/'/g, '"'));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// If parsing fails, try to extract just the d attribute
|
|
69
|
+
const dMatch = icon.paths.match(/"d":\s*"([^"]+)"/);
|
|
70
|
+
if (dMatch) {
|
|
71
|
+
return `<svg viewBox="${icon.viewBox}" xmlns="http://www.w3.org/2000/svg">
|
|
72
|
+
<path d="${dMatch[1]}" fill="currentColor"/>
|
|
73
|
+
</svg>`;
|
|
74
|
+
}
|
|
75
|
+
return `<svg viewBox="${icon.viewBox}" xmlns="http://www.w3.org/2000/svg"></svg>`;
|
|
76
|
+
}
|
|
77
|
+
const renderElement = (el, indent = " ") => {
|
|
78
|
+
const attrs = el.attrs
|
|
79
|
+
? Object.entries(el.attrs)
|
|
80
|
+
.map(([k, v]) => `${k}="${v}"`)
|
|
81
|
+
.join(" ")
|
|
82
|
+
: "";
|
|
83
|
+
if (el.children && el.children.length > 0) {
|
|
84
|
+
const childrenStr = el.children
|
|
85
|
+
.map((child) => renderElement(child, indent + " "))
|
|
86
|
+
.join("\n");
|
|
87
|
+
return `${indent}<${el.tagName}${attrs ? " " + attrs : ""}>\n${childrenStr}\n${indent}</${el.tagName}>`;
|
|
88
|
+
}
|
|
89
|
+
return `${indent}<${el.tagName}${attrs ? " " + attrs : ""} fill="currentColor"/>`;
|
|
90
|
+
};
|
|
91
|
+
const pathsStr = pathsArray.map((p) => renderElement(p)).join("\n");
|
|
92
|
+
return `<svg viewBox="${icon.viewBox}" xmlns="http://www.w3.org/2000/svg">
|
|
93
|
+
${pathsStr}
|
|
94
|
+
</svg>`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate React component code for an icon
|
|
98
|
+
*/
|
|
99
|
+
export function generateReactComponent(icon) {
|
|
100
|
+
return `import { MIcon } from "@mozaic-ds/react";
|
|
101
|
+
|
|
102
|
+
// Using the Mozaic React icon component
|
|
103
|
+
<MIcon name="${icon.name}" />
|
|
104
|
+
|
|
105
|
+
// Or import directly from the icons package
|
|
106
|
+
import { ${icon.name} } from "@mozaic-ds/icons/js/icons";`;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generate Vue component code for an icon
|
|
110
|
+
*/
|
|
111
|
+
export function generateVueComponent(icon) {
|
|
112
|
+
return `<template>
|
|
113
|
+
<MIcon name="${icon.name}" />
|
|
114
|
+
</template>
|
|
115
|
+
|
|
116
|
+
<script setup>
|
|
117
|
+
import { MIcon } from "@mozaic-ds/vue-3";
|
|
118
|
+
</script>
|
|
119
|
+
|
|
120
|
+
<!-- Or use directly from icons package -->
|
|
121
|
+
<script>
|
|
122
|
+
import { ${icon.name} } from "@mozaic-ds/icons/js/icons";
|
|
123
|
+
</script>`;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=icons-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons-parser.js","sourceRoot":"","sources":["../../src/parsers/icons-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/react-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAiC,MAAM,kBAAkB,CAAC;AAmajF,wBAAsB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAoFvF"}
|