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,351 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
// Screen breakpoints for responsive classes
|
|
4
|
+
const MAJOR_SCREENS = ["s", "m", "l", "xl"];
|
|
5
|
+
// Spacing sizes for margin/padding utilities
|
|
6
|
+
const SIZES = [
|
|
7
|
+
"025",
|
|
8
|
+
"050",
|
|
9
|
+
"075",
|
|
10
|
+
"100",
|
|
11
|
+
"125",
|
|
12
|
+
"150",
|
|
13
|
+
"200",
|
|
14
|
+
"250",
|
|
15
|
+
"300",
|
|
16
|
+
"350",
|
|
17
|
+
"400",
|
|
18
|
+
"500",
|
|
19
|
+
"600",
|
|
20
|
+
"700",
|
|
21
|
+
"800",
|
|
22
|
+
"900",
|
|
23
|
+
"1000",
|
|
24
|
+
];
|
|
25
|
+
// Sides for margin/padding utilities
|
|
26
|
+
const SIDES = {
|
|
27
|
+
t: "top",
|
|
28
|
+
r: "right",
|
|
29
|
+
l: "left",
|
|
30
|
+
b: "bottom",
|
|
31
|
+
all: "all",
|
|
32
|
+
v: "vertical",
|
|
33
|
+
h: "horizontal",
|
|
34
|
+
};
|
|
35
|
+
// Aspect ratios
|
|
36
|
+
const ASPECT_RATIOS = ["1x1", "2x3", "3x2", "3x4", "4x3", "16x9"];
|
|
37
|
+
/**
|
|
38
|
+
* Parse SCSS files to extract CSS-only utilities (layouts and spacing)
|
|
39
|
+
*/
|
|
40
|
+
export async function parseCssUtilities(stylesPath) {
|
|
41
|
+
const utilities = [];
|
|
42
|
+
// Parse layouts
|
|
43
|
+
const layoutsPath = join(stylesPath, "layouts");
|
|
44
|
+
if (existsSync(layoutsPath)) {
|
|
45
|
+
utilities.push(parseFlexyUtility());
|
|
46
|
+
utilities.push(parseContainerUtility());
|
|
47
|
+
}
|
|
48
|
+
// Parse utilities
|
|
49
|
+
const utilitiesPath = join(stylesPath, "utilities");
|
|
50
|
+
if (existsSync(utilitiesPath)) {
|
|
51
|
+
utilities.push(parseMarginUtility());
|
|
52
|
+
utilities.push(parsePaddingUtility());
|
|
53
|
+
utilities.push(parseRatioUtility());
|
|
54
|
+
utilities.push(parseScrollUtility());
|
|
55
|
+
}
|
|
56
|
+
return utilities;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse Flexy (flexbox grid) utility
|
|
60
|
+
*/
|
|
61
|
+
function parseFlexyUtility() {
|
|
62
|
+
const classes = [];
|
|
63
|
+
// Base class
|
|
64
|
+
classes.push(".ml-flexy");
|
|
65
|
+
// Column class
|
|
66
|
+
classes.push(".ml-flexy__col");
|
|
67
|
+
// Modifiers
|
|
68
|
+
const modifiers = [
|
|
69
|
+
"gutter",
|
|
70
|
+
"space-around",
|
|
71
|
+
"justify-between",
|
|
72
|
+
"justify-evenly",
|
|
73
|
+
"justify-start",
|
|
74
|
+
"justify-center",
|
|
75
|
+
"justify-end",
|
|
76
|
+
"items-stretch",
|
|
77
|
+
"items-start",
|
|
78
|
+
"items-center",
|
|
79
|
+
"items-end",
|
|
80
|
+
];
|
|
81
|
+
for (const mod of modifiers) {
|
|
82
|
+
classes.push(`.ml-flexy--${mod}`);
|
|
83
|
+
}
|
|
84
|
+
// Responsive modifiers (for justify-* classes)
|
|
85
|
+
const responsiveModifiers = [
|
|
86
|
+
"space-around",
|
|
87
|
+
"justify-between",
|
|
88
|
+
"justify-evenly",
|
|
89
|
+
"justify-start",
|
|
90
|
+
"justify-center",
|
|
91
|
+
"justify-end",
|
|
92
|
+
];
|
|
93
|
+
for (const screen of MAJOR_SCREENS) {
|
|
94
|
+
for (const mod of responsiveModifiers) {
|
|
95
|
+
classes.push(`.ml-flexy--${mod}@from-${screen}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Column width classes (fractions)
|
|
99
|
+
const fractions = [
|
|
100
|
+
[1, 2],
|
|
101
|
+
[1, 3],
|
|
102
|
+
[2, 3],
|
|
103
|
+
[1, 4],
|
|
104
|
+
[3, 4],
|
|
105
|
+
[1, 6],
|
|
106
|
+
[5, 6],
|
|
107
|
+
[1, 12],
|
|
108
|
+
[2, 12],
|
|
109
|
+
[3, 12],
|
|
110
|
+
[4, 12],
|
|
111
|
+
[5, 12],
|
|
112
|
+
[6, 12],
|
|
113
|
+
[7, 12],
|
|
114
|
+
[8, 12],
|
|
115
|
+
[9, 12],
|
|
116
|
+
[10, 12],
|
|
117
|
+
[11, 12],
|
|
118
|
+
];
|
|
119
|
+
for (const [num, denom] of fractions) {
|
|
120
|
+
classes.push(`.ml-flexy__col--${num}of${denom}`);
|
|
121
|
+
classes.push(`.ml-flexy__col--push-${num}of${denom}`);
|
|
122
|
+
// Responsive variants
|
|
123
|
+
for (const screen of MAJOR_SCREENS) {
|
|
124
|
+
classes.push(`.ml-flexy__col--${num}of${denom}@from-${screen}`);
|
|
125
|
+
classes.push(`.ml-flexy__col--push-${num}of${denom}@from-${screen}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Custom column classes
|
|
129
|
+
const customCols = ["fill", "full", "initial", "grow", "first", "last"];
|
|
130
|
+
for (const col of customCols) {
|
|
131
|
+
classes.push(`.ml-flexy__col--${col}`);
|
|
132
|
+
for (const screen of MAJOR_SCREENS) {
|
|
133
|
+
classes.push(`.ml-flexy__col--${col}@from-${screen}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Push reset
|
|
137
|
+
classes.push(".ml-flexy__col--push--reset");
|
|
138
|
+
for (const screen of MAJOR_SCREENS) {
|
|
139
|
+
classes.push(`.ml-flexy__col--push--reset@from-${screen}`);
|
|
140
|
+
}
|
|
141
|
+
const examples = [
|
|
142
|
+
{
|
|
143
|
+
title: "Basic 2-column layout",
|
|
144
|
+
code: `<div class="ml-flexy ml-flexy--gutter">
|
|
145
|
+
<div class="ml-flexy__col ml-flexy__col--6of12">Column 1</div>
|
|
146
|
+
<div class="ml-flexy__col ml-flexy__col--6of12">Column 2</div>
|
|
147
|
+
</div>`,
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
title: "Responsive columns",
|
|
151
|
+
code: `<div class="ml-flexy ml-flexy--gutter">
|
|
152
|
+
<div class="ml-flexy__col ml-flexy__col--full ml-flexy__col--6of12@from-m ml-flexy__col--4of12@from-l">
|
|
153
|
+
Responsive column
|
|
154
|
+
</div>
|
|
155
|
+
</div>`,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
title: "Centered content",
|
|
159
|
+
code: `<div class="ml-flexy ml-flexy--justify-center ml-flexy--items-center">
|
|
160
|
+
<div class="ml-flexy__col ml-flexy__col--initial">Centered content</div>
|
|
161
|
+
</div>`,
|
|
162
|
+
},
|
|
163
|
+
];
|
|
164
|
+
return {
|
|
165
|
+
name: "Flexy",
|
|
166
|
+
slug: "flexy",
|
|
167
|
+
category: "layout",
|
|
168
|
+
description: "Flexbox-based grid system for creating responsive layouts. Uses 12-column grid with responsive breakpoints and utility modifiers for alignment and spacing.",
|
|
169
|
+
classes,
|
|
170
|
+
examples,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Parse Container utility
|
|
175
|
+
*/
|
|
176
|
+
function parseContainerUtility() {
|
|
177
|
+
const classes = [];
|
|
178
|
+
classes.push(".ml-container");
|
|
179
|
+
classes.push(".ml-container--fluid");
|
|
180
|
+
// Responsive fluid modifier
|
|
181
|
+
for (const screen of MAJOR_SCREENS) {
|
|
182
|
+
classes.push(`.ml-container--fluid@from-${screen}`);
|
|
183
|
+
}
|
|
184
|
+
const examples = [
|
|
185
|
+
{
|
|
186
|
+
title: "Basic container",
|
|
187
|
+
code: `<div class="ml-container">
|
|
188
|
+
<p>Content within max-width container</p>
|
|
189
|
+
</div>`,
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
title: "Fluid container",
|
|
193
|
+
code: `<div class="ml-container ml-container--fluid">
|
|
194
|
+
<p>Full-width content with padding</p>
|
|
195
|
+
</div>`,
|
|
196
|
+
},
|
|
197
|
+
];
|
|
198
|
+
return {
|
|
199
|
+
name: "Container",
|
|
200
|
+
slug: "container",
|
|
201
|
+
category: "layout",
|
|
202
|
+
description: "Responsive container with automatic max-width and padding. Centers content and provides consistent horizontal spacing across breakpoints.",
|
|
203
|
+
classes,
|
|
204
|
+
examples,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Parse Margin utilities
|
|
209
|
+
*/
|
|
210
|
+
function parseMarginUtility() {
|
|
211
|
+
const classes = [];
|
|
212
|
+
// Generate all margin utility classes
|
|
213
|
+
for (const [sideKey] of Object.entries(SIDES)) {
|
|
214
|
+
for (const size of SIZES) {
|
|
215
|
+
if (sideKey === "all") {
|
|
216
|
+
classes.push(`.mu-m-${size}`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
classes.push(`.mu-m${sideKey}-${size}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const examples = [
|
|
224
|
+
{
|
|
225
|
+
title: "Margin all sides",
|
|
226
|
+
code: `<div class="mu-m-100">16px margin on all sides</div>`,
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
title: "Margin specific sides",
|
|
230
|
+
code: `<div class="mu-mt-200 mu-mb-100">
|
|
231
|
+
32px top margin, 16px bottom margin
|
|
232
|
+
</div>`,
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
title: "Horizontal/vertical margin",
|
|
236
|
+
code: `<div class="mu-mv-200 mu-mh-100">
|
|
237
|
+
32px vertical margin, 16px horizontal margin
|
|
238
|
+
</div>`,
|
|
239
|
+
},
|
|
240
|
+
];
|
|
241
|
+
return {
|
|
242
|
+
name: "Margin",
|
|
243
|
+
slug: "margin",
|
|
244
|
+
category: "utility",
|
|
245
|
+
description: "Margin utility classes using magic unit scale (mu). Supports all sides, individual sides, vertical, and horizontal margins.",
|
|
246
|
+
classes,
|
|
247
|
+
examples,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Parse Padding utilities
|
|
252
|
+
*/
|
|
253
|
+
function parsePaddingUtility() {
|
|
254
|
+
const classes = [];
|
|
255
|
+
// Generate all padding utility classes
|
|
256
|
+
for (const [sideKey] of Object.entries(SIDES)) {
|
|
257
|
+
for (const size of SIZES) {
|
|
258
|
+
if (sideKey === "all") {
|
|
259
|
+
classes.push(`.mu-p-${size}`);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
classes.push(`.mu-p${sideKey}-${size}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const examples = [
|
|
267
|
+
{
|
|
268
|
+
title: "Padding all sides",
|
|
269
|
+
code: `<div class="mu-p-100">16px padding on all sides</div>`,
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
title: "Padding specific sides",
|
|
273
|
+
code: `<div class="mu-pt-200 mu-pb-100">
|
|
274
|
+
32px top padding, 16px bottom padding
|
|
275
|
+
</div>`,
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
title: "Horizontal/vertical padding",
|
|
279
|
+
code: `<div class="mu-pv-200 mu-ph-100">
|
|
280
|
+
32px vertical padding, 16px horizontal padding
|
|
281
|
+
</div>`,
|
|
282
|
+
},
|
|
283
|
+
];
|
|
284
|
+
return {
|
|
285
|
+
name: "Padding",
|
|
286
|
+
slug: "padding",
|
|
287
|
+
category: "utility",
|
|
288
|
+
description: "Padding utility classes using magic unit scale (mu). Supports all sides, individual sides, vertical, and horizontal padding.",
|
|
289
|
+
classes,
|
|
290
|
+
examples,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Parse Ratio utilities
|
|
295
|
+
*/
|
|
296
|
+
function parseRatioUtility() {
|
|
297
|
+
const classes = [];
|
|
298
|
+
classes.push(".mu-ratio");
|
|
299
|
+
classes.push(".mu-ratio__item");
|
|
300
|
+
for (const ratio of ASPECT_RATIOS) {
|
|
301
|
+
classes.push(`.mu-ratio--${ratio}`);
|
|
302
|
+
}
|
|
303
|
+
const examples = [
|
|
304
|
+
{
|
|
305
|
+
title: "16:9 aspect ratio",
|
|
306
|
+
code: `<div class="mu-ratio mu-ratio--16x9">
|
|
307
|
+
<img class="mu-ratio__item" src="image.jpg" alt="Image with 16:9 ratio" />
|
|
308
|
+
</div>`,
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
title: "Square ratio",
|
|
312
|
+
code: `<div class="mu-ratio mu-ratio--1x1">
|
|
313
|
+
<div class="mu-ratio__item">Square content</div>
|
|
314
|
+
</div>`,
|
|
315
|
+
},
|
|
316
|
+
];
|
|
317
|
+
return {
|
|
318
|
+
name: "Ratio",
|
|
319
|
+
slug: "ratio",
|
|
320
|
+
category: "utility",
|
|
321
|
+
description: "Aspect ratio utility for maintaining element proportions. Supports common aspect ratios like 16:9, 4:3, 1:1, etc.",
|
|
322
|
+
classes,
|
|
323
|
+
examples,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Parse Scroll utilities
|
|
328
|
+
*/
|
|
329
|
+
function parseScrollUtility() {
|
|
330
|
+
const classes = [".mu-prevent-body-scroll"];
|
|
331
|
+
const examples = [
|
|
332
|
+
{
|
|
333
|
+
title: "Prevent body scroll",
|
|
334
|
+
code: `<!-- Add to html or body element when modal is open -->
|
|
335
|
+
<html class="mu-prevent-body-scroll">
|
|
336
|
+
<body class="mu-prevent-body-scroll">
|
|
337
|
+
<!-- Content -->
|
|
338
|
+
</body>
|
|
339
|
+
</html>`,
|
|
340
|
+
},
|
|
341
|
+
];
|
|
342
|
+
return {
|
|
343
|
+
name: "Scroll",
|
|
344
|
+
slug: "scroll",
|
|
345
|
+
category: "utility",
|
|
346
|
+
description: "Scroll utility for preventing body scroll. Useful when modals or overlays are open.",
|
|
347
|
+
classes,
|
|
348
|
+
examples,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=scss-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scss-parser.js","sourceRoot":"","sources":["../../src/parsers/scss-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"border-parser.d.ts","sourceRoot":"","sources":["../../../src/parsers/tokens/border-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAYxC,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAwF5E"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
export async function parseBorderTokens(tokensPath) {
|
|
4
|
+
const tokens = [];
|
|
5
|
+
// Parse border tokens
|
|
6
|
+
const borderPath = join(tokensPath, "properties", "border");
|
|
7
|
+
if (existsSync(borderPath)) {
|
|
8
|
+
const files = readdirSync(borderPath).filter((f) => f.endsWith(".json"));
|
|
9
|
+
for (const file of files) {
|
|
10
|
+
const filePath = join(borderPath, file);
|
|
11
|
+
try {
|
|
12
|
+
const content = readFileSync(filePath, "utf-8");
|
|
13
|
+
const data = JSON.parse(content);
|
|
14
|
+
const relativePath = `properties/border/${file}`;
|
|
15
|
+
const borderData = data.border || data;
|
|
16
|
+
for (const [sizeName, borderDef] of Object.entries(borderData)) {
|
|
17
|
+
if (typeof borderDef !== "object" || !("value" in borderDef))
|
|
18
|
+
continue;
|
|
19
|
+
const value = borderDef.value;
|
|
20
|
+
const numValue = typeof value === "number" ? value : parseFloat(String(value));
|
|
21
|
+
tokens.push({
|
|
22
|
+
category: "border",
|
|
23
|
+
subcategory: "width",
|
|
24
|
+
name: sizeName,
|
|
25
|
+
path: `border.${sizeName}`,
|
|
26
|
+
cssVariable: `--border-${sizeName}`,
|
|
27
|
+
scssVariable: `$border-${sizeName}`,
|
|
28
|
+
valueRaw: String(value),
|
|
29
|
+
valueNumber: numValue,
|
|
30
|
+
valueUnit: "px",
|
|
31
|
+
valueComputed: `${numValue}px`,
|
|
32
|
+
description: borderDef.description || `Border width ${sizeName}`,
|
|
33
|
+
platform: "all",
|
|
34
|
+
sourceFile: relativePath,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.warn(`Warning: Could not parse ${filePath}:`, error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Parse radius tokens
|
|
44
|
+
const radiusPath = join(tokensPath, "properties", "radius");
|
|
45
|
+
if (existsSync(radiusPath)) {
|
|
46
|
+
const files = readdirSync(radiusPath).filter((f) => f.endsWith(".json"));
|
|
47
|
+
for (const file of files) {
|
|
48
|
+
const filePath = join(radiusPath, file);
|
|
49
|
+
try {
|
|
50
|
+
const content = readFileSync(filePath, "utf-8");
|
|
51
|
+
const data = JSON.parse(content);
|
|
52
|
+
const relativePath = `properties/radius/${file}`;
|
|
53
|
+
const radiusData = data.radius || data;
|
|
54
|
+
for (const [sizeName, radiusDef] of Object.entries(radiusData)) {
|
|
55
|
+
if (typeof radiusDef !== "object" || !("value" in radiusDef))
|
|
56
|
+
continue;
|
|
57
|
+
const value = radiusDef.value;
|
|
58
|
+
const numValue = typeof value === "number" ? value : parseFloat(String(value));
|
|
59
|
+
tokens.push({
|
|
60
|
+
category: "radius",
|
|
61
|
+
subcategory: undefined,
|
|
62
|
+
name: sizeName,
|
|
63
|
+
path: `radius.${sizeName}`,
|
|
64
|
+
cssVariable: `--radius-${sizeName}`,
|
|
65
|
+
scssVariable: `$radius-${sizeName}`,
|
|
66
|
+
valueRaw: String(value),
|
|
67
|
+
valueNumber: numValue,
|
|
68
|
+
valueUnit: "px",
|
|
69
|
+
valueComputed: `${numValue}px`,
|
|
70
|
+
description: radiusDef.description || `Border radius ${sizeName}`,
|
|
71
|
+
platform: "all",
|
|
72
|
+
sourceFile: relativePath,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.warn(`Warning: Could not parse ${filePath}:`, error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return tokens;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=border-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"border-parser.js","sourceRoot":"","sources":["../../../src/parsers/tokens/border-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-parser.d.ts","sourceRoot":"","sources":["../../../src/parsers/tokens/color-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAyFxC,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CA0B3E"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { parseValue, pathToCssVariable, pathToScssVariable } from "./types.js";
|
|
4
|
+
function isColorValue(obj) {
|
|
5
|
+
return (typeof obj === "object" &&
|
|
6
|
+
obj !== null &&
|
|
7
|
+
"value" in obj &&
|
|
8
|
+
typeof obj.value === "string");
|
|
9
|
+
}
|
|
10
|
+
function extractSubcategory(path) {
|
|
11
|
+
// Extract subcategory from paths like "color.primary-01.100"
|
|
12
|
+
const parts = path.split(".");
|
|
13
|
+
if (parts.length >= 2) {
|
|
14
|
+
// Get base name without number suffix (e.g., "primary" from "primary-01")
|
|
15
|
+
const subcat = parts[0].replace(/-\d+$/, "");
|
|
16
|
+
return subcat;
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
function flattenColorTokens(obj, sourceFile, prefix = "") {
|
|
21
|
+
const tokens = [];
|
|
22
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
23
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
24
|
+
if (isColorValue(value)) {
|
|
25
|
+
const parsed = parseValue(value.value);
|
|
26
|
+
const fullPath = `color.${path}`;
|
|
27
|
+
tokens.push({
|
|
28
|
+
category: "color",
|
|
29
|
+
subcategory: extractSubcategory(path),
|
|
30
|
+
name: path.replace(/\./g, "-"),
|
|
31
|
+
path: fullPath,
|
|
32
|
+
cssVariable: pathToCssVariable("color", path),
|
|
33
|
+
scssVariable: pathToScssVariable("color", path),
|
|
34
|
+
valueRaw: parsed.raw,
|
|
35
|
+
valueUnit: parsed.unit,
|
|
36
|
+
description: value.description,
|
|
37
|
+
platform: "all",
|
|
38
|
+
sourceFile,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else if (typeof value === "object" && value !== null) {
|
|
42
|
+
tokens.push(...flattenColorTokens(value, sourceFile, path));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return tokens;
|
|
46
|
+
}
|
|
47
|
+
function findJsonFiles(dir) {
|
|
48
|
+
const files = [];
|
|
49
|
+
if (!existsSync(dir)) {
|
|
50
|
+
return files;
|
|
51
|
+
}
|
|
52
|
+
const entries = readdirSync(dir);
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
const fullPath = join(dir, entry);
|
|
55
|
+
const stat = statSync(fullPath);
|
|
56
|
+
if (stat.isDirectory()) {
|
|
57
|
+
files.push(...findJsonFiles(fullPath));
|
|
58
|
+
}
|
|
59
|
+
else if (entry.endsWith(".json")) {
|
|
60
|
+
files.push(fullPath);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return files;
|
|
64
|
+
}
|
|
65
|
+
export async function parseColorTokens(tokensPath) {
|
|
66
|
+
const colorPath = join(tokensPath, "properties", "color");
|
|
67
|
+
const tokens = [];
|
|
68
|
+
if (!existsSync(colorPath)) {
|
|
69
|
+
console.warn(`Color tokens path not found: ${colorPath}`);
|
|
70
|
+
return tokens;
|
|
71
|
+
}
|
|
72
|
+
const jsonFiles = findJsonFiles(colorPath);
|
|
73
|
+
for (const file of jsonFiles) {
|
|
74
|
+
try {
|
|
75
|
+
const content = readFileSync(file, "utf-8");
|
|
76
|
+
const data = JSON.parse(content);
|
|
77
|
+
const relativePath = file.replace(tokensPath, "");
|
|
78
|
+
// Skip the outer "color" key if present
|
|
79
|
+
const colorData = data.color || data;
|
|
80
|
+
tokens.push(...flattenColorTokens(colorData, relativePath));
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.warn(`Warning: Could not parse ${file}:`, error);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return tokens;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=color-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-parser.js","sourceRoot":"","sources":["../../../src/parsers/tokens/color-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-parser.d.ts","sourceRoot":"","sources":["../../../src/parsers/tokens/grid-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAqBxC,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAmG1E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
const MAGIC_UNIT_PX = 16; // 1 magic unit = 16px
|
|
4
|
+
export async function parseGridTokens(tokensPath) {
|
|
5
|
+
const tokens = [];
|
|
6
|
+
const sizePath = join(tokensPath, "properties", "size");
|
|
7
|
+
if (!existsSync(sizePath)) {
|
|
8
|
+
console.warn(`Size tokens path not found: ${sizePath}`);
|
|
9
|
+
return tokens;
|
|
10
|
+
}
|
|
11
|
+
// Parse grid.json (gutter sizes)
|
|
12
|
+
const gridFile = join(sizePath, "grid.json");
|
|
13
|
+
if (existsSync(gridFile)) {
|
|
14
|
+
try {
|
|
15
|
+
const content = readFileSync(gridFile, "utf-8");
|
|
16
|
+
const data = JSON.parse(content);
|
|
17
|
+
const relativePath = "properties/size/grid.json";
|
|
18
|
+
const gutterData = data.size?.gutter?.screen || {};
|
|
19
|
+
for (const [screenName, gutterDef] of Object.entries(gutterData)) {
|
|
20
|
+
if (typeof gutterDef !== "object" || !("value" in gutterDef))
|
|
21
|
+
continue;
|
|
22
|
+
const muValue = gutterDef.value;
|
|
23
|
+
const pxValue = muValue * MAGIC_UNIT_PX;
|
|
24
|
+
tokens.push({
|
|
25
|
+
category: "grid",
|
|
26
|
+
subcategory: "gutter",
|
|
27
|
+
name: `gutter-${screenName}`,
|
|
28
|
+
path: `grid.gutter.screen.${screenName}`,
|
|
29
|
+
cssVariable: `--grid-gutter-${screenName}`,
|
|
30
|
+
scssVariable: `$size-gutter-screen-${screenName}`,
|
|
31
|
+
valueRaw: `${muValue}mu`,
|
|
32
|
+
valueNumber: muValue,
|
|
33
|
+
valueUnit: "mu",
|
|
34
|
+
valueComputed: `${pxValue}px`,
|
|
35
|
+
description: `Grid gutter for ${screenName} screens (${muValue} magic units = ${pxValue}px)`,
|
|
36
|
+
platform: "all",
|
|
37
|
+
sourceFile: relativePath,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.warn(`Warning: Could not parse ${gridFile}:`, error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Parse base.json (magic unit and rem value)
|
|
46
|
+
const baseFile = join(sizePath, "base.json");
|
|
47
|
+
if (existsSync(baseFile)) {
|
|
48
|
+
try {
|
|
49
|
+
const content = readFileSync(baseFile, "utf-8");
|
|
50
|
+
const data = JSON.parse(content);
|
|
51
|
+
const relativePath = "properties/size/base.json";
|
|
52
|
+
// Magic unit
|
|
53
|
+
if (data["magic-unit"]) {
|
|
54
|
+
const muValue = data["magic-unit"].value;
|
|
55
|
+
tokens.push({
|
|
56
|
+
category: "grid",
|
|
57
|
+
subcategory: "base",
|
|
58
|
+
name: "magic-unit",
|
|
59
|
+
path: "grid.magic-unit",
|
|
60
|
+
cssVariable: "--magic-unit",
|
|
61
|
+
scssVariable: "$magic-unit",
|
|
62
|
+
valueRaw: `${muValue}`,
|
|
63
|
+
valueNumber: muValue,
|
|
64
|
+
valueUnit: undefined,
|
|
65
|
+
valueComputed: `${muValue * MAGIC_UNIT_PX}px`,
|
|
66
|
+
description: "Base magic unit multiplier (1mu = 16px)",
|
|
67
|
+
platform: "all",
|
|
68
|
+
sourceFile: relativePath,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Local rem value
|
|
72
|
+
if (data["local-rem-value"]) {
|
|
73
|
+
const remValue = data["local-rem-value"].value;
|
|
74
|
+
tokens.push({
|
|
75
|
+
category: "grid",
|
|
76
|
+
subcategory: "base",
|
|
77
|
+
name: "local-rem-value",
|
|
78
|
+
path: "grid.local-rem-value",
|
|
79
|
+
cssVariable: "--local-rem-value",
|
|
80
|
+
scssVariable: "$local-rem-value",
|
|
81
|
+
valueRaw: `${remValue}px`,
|
|
82
|
+
valueNumber: remValue,
|
|
83
|
+
valueUnit: "px",
|
|
84
|
+
valueComputed: `${remValue}px`,
|
|
85
|
+
description: "Base rem value (1rem = 16px)",
|
|
86
|
+
platform: "all",
|
|
87
|
+
sourceFile: relativePath,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.warn(`Warning: Could not parse ${baseFile}:`, error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return tokens;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=grid-parser.js.map
|