@l.x/mycelium 1.0.2 → 1.0.4

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/css/theme.css ADDED
@@ -0,0 +1,322 @@
1
+ /* Mycelium Theme Tokens for Tailwind v4 */
2
+
3
+ @theme {
4
+ /* Font Families - these create font-* utilities */
5
+ --font-basel: "Basel Grotesk", sans-serif;
6
+ --font-basel-book: "Basel Grotesk Book", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI",
7
+ Roboto, Helvetica, Arial, sans-serif;
8
+ --font-basel-medium: "Basel Grotesk Medium", -apple-system, system-ui, BlinkMacSystemFont,
9
+ "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
10
+ --font-mono: "InputMono-Regular", monospace;
11
+
12
+ /* Font Weights */
13
+ --font-weight-book: 485;
14
+ --font-weight-medium: 535;
15
+
16
+ /* Breakpoints */
17
+ --breakpoint-xxs: 360px;
18
+ --breakpoint-xs: 380px;
19
+ --breakpoint-sm: 450px;
20
+ --breakpoint-md: 640px;
21
+ --breakpoint-lg: 768px;
22
+ --breakpoint-xl: 1024px;
23
+ --breakpoint-xxl: 1280px;
24
+ --breakpoint-xxxl: 1536px;
25
+
26
+ /* Typography Scale - Headings (creates text-heading-* utilities) */
27
+ --text-heading-1: 52px;
28
+ --text-heading-1--line-height: 60px;
29
+ --text-heading-1--letter-spacing: -0.02em;
30
+ --text-heading-1--font-weight: 485;
31
+
32
+ --text-heading-2: 36px;
33
+ --text-heading-2--line-height: 44px;
34
+ --text-heading-2--letter-spacing: -0.01em;
35
+ --text-heading-2--font-weight: 485;
36
+
37
+ --text-heading-3: 24px;
38
+ --text-heading-3--line-height: 32px;
39
+ --text-heading-3--letter-spacing: -0.005em;
40
+ --text-heading-3--font-weight: 485;
41
+
42
+ /* Typography Scale - Subheadings */
43
+ --text-subheading-1: 18px;
44
+ --text-subheading-1--line-height: 24px;
45
+ --text-subheading-1--font-weight: 485;
46
+
47
+ --text-subheading-2: 16px;
48
+ --text-subheading-2--line-height: 24px;
49
+ --text-subheading-2--font-weight: 485;
50
+
51
+ /* Typography Scale - Body */
52
+ --text-body-1: 18px;
53
+ --text-body-1--line-height: 24px;
54
+ --text-body-1--font-weight: 485;
55
+
56
+ --text-body-2: 16px;
57
+ --text-body-2--line-height: 24px;
58
+ --text-body-2--font-weight: 485;
59
+
60
+ --text-body-3: 14px;
61
+ --text-body-3--line-height: 20px;
62
+ --text-body-3--font-weight: 485;
63
+
64
+ --text-body-4: 12px;
65
+ --text-body-4--line-height: 16px;
66
+ --text-body-4--font-weight: 485;
67
+
68
+ /* Typography Scale - Buttons */
69
+ --text-button-1: 18px;
70
+ --text-button-1--line-height: 24px;
71
+ --text-button-1--font-weight: 535;
72
+
73
+ --text-button-2: 16px;
74
+ --text-button-2--line-height: 24px;
75
+ --text-button-2--font-weight: 535;
76
+
77
+ --text-button-3: 14px;
78
+ --text-button-3--line-height: 20px;
79
+ --text-button-3--font-weight: 535;
80
+
81
+ --text-button-4: 12px;
82
+ --text-button-4--line-height: 16px;
83
+ --text-button-4--font-weight: 535;
84
+
85
+ /* Base Colors */
86
+ --color-white: #ffffff;
87
+ --color-black: #000000;
88
+
89
+ /* Semantic Colors - Background */
90
+ --color-background: #ffffff;
91
+ --color-background-dark: #000000;
92
+
93
+ /* Semantic Colors - Neutrals */
94
+ --color-neutral1-light: #222222;
95
+ --color-neutral1-dark: #ffffff;
96
+ --color-neutral2-light: #7d7d7d;
97
+ --color-neutral2-dark: #9b9b9b;
98
+ --color-neutral3-light: #cecece;
99
+ --color-neutral3-dark: #5e5e5e;
100
+
101
+ /* Semantic Colors - Surfaces */
102
+ --color-surface1-light: #ffffff;
103
+ --color-surface1-dark: #131313;
104
+ --color-surface1-hovered: #f5f5f5;
105
+ --color-surface1-hovered-dark: #181818;
106
+
107
+ --color-surface2-light: #f9f9f9;
108
+ --color-surface2-dark: #1b1b1b;
109
+ --color-surface2-hovered: #f2f2f2;
110
+ --color-surface2-hovered-dark: #242424;
111
+
112
+ --color-surface3-light: #22222212;
113
+ --color-surface3-dark: #ffffff12;
114
+ --color-surface3-hovered: rgba(34, 34, 34, 0.12);
115
+ --color-surface3-hovered-dark: rgba(255, 255, 255, 0.16);
116
+
117
+ --color-surface4-light: #ffffff64;
118
+ --color-surface4-dark: #ffffff20;
119
+
120
+ --color-surface5-light: #00000004;
121
+ --color-surface5-dark: #00000004;
122
+
123
+ /* Semantic Colors - Accents */
124
+ --color-accent1-light: #ff37c7;
125
+ --color-accent1-dark: #ff37c7;
126
+ --color-accent2-light: #ffefff;
127
+ --color-accent2-dark: #311c31;
128
+ --color-accent3: #4c82fb;
129
+ --color-accent3-dark: #4c82fb;
130
+ --color-accent4: #fdaff0;
131
+ --color-accent4-light: #fef4ff;
132
+
133
+ /* Token Colors */
134
+ --color-token0: #fc72ff;
135
+ --color-token0-dark: #fc72ff;
136
+ --color-token1: #4c82fb;
137
+ --color-token1-dark: #4c82fb;
138
+
139
+ /* Status Colors */
140
+ --color-success-light: #0c8911;
141
+ --color-success-dark: #21c95e;
142
+ --color-critical-light: #e10f0f;
143
+ --color-critical-dark: #ff593c;
144
+ --color-critical-secondary: #fff2f1;
145
+ --color-critical-secondary-dark: #2e0805;
146
+ --color-warning: #eeb317;
147
+
148
+ /* Network Colors */
149
+ --color-network-ethereum: #627eea;
150
+ --color-network-optimism: #ff0420;
151
+ --color-network-polygon: #a457ff;
152
+ --color-network-arbitrum: #28a0f0;
153
+ --color-network-bsc: #f0b90b;
154
+ --color-network-base: #0052ff;
155
+ --color-network-blast: #fcfc03;
156
+
157
+ /* Decorative/Pattern Colors */
158
+ --color-pattern-dots-dark: rgba(252, 116, 254, 0.08);
159
+ --color-pattern-dots-light: rgba(252, 116, 254, 0.2);
160
+
161
+ /* Gray Palette */
162
+ --color-gray-50: #f5f6fc;
163
+ --color-gray-100: #e8ecfb;
164
+ --color-gray-150: #d2d9ee;
165
+ --color-gray-200: #b8c0dc;
166
+ --color-gray-250: #a6afca;
167
+ --color-gray-300: #98a1c0;
168
+ --color-gray-350: #888fab;
169
+ --color-gray-400: #7780a0;
170
+ --color-gray-450: #6b7594;
171
+ --color-gray-500: #5d6785;
172
+ --color-gray-550: #505a78;
173
+ --color-gray-600: #404a67;
174
+ --color-gray-650: #333d59;
175
+ --color-gray-700: #293249;
176
+ --color-gray-750: #1b2236;
177
+ --color-gray-800: #131a2a;
178
+ --color-gray-850: #0e1524;
179
+ --color-gray-900: #0d111c;
180
+ --color-gray-950: #080b11;
181
+
182
+ /* Pink Palette */
183
+ --color-pink-50: #f9ecf1;
184
+ --color-pink-100: #ffd9e4;
185
+ --color-pink-200: #fba4c0;
186
+ --color-pink-300: #ff6fa3;
187
+ --color-pink-400: #fb118e;
188
+ --color-pink-500: #c41969;
189
+ --color-pink-600: #8c0f49;
190
+ --color-pink-700: #55072a;
191
+ --color-pink-800: #350318;
192
+ --color-pink-900: #2b000b;
193
+ --color-pink-vibrant: #f50db4;
194
+ --color-pink-base: #fc74fe;
195
+
196
+ /* Red Palette */
197
+ --color-red-50: #faecea;
198
+ --color-red-100: #fed5cf;
199
+ --color-red-200: #fea79b;
200
+ --color-red-300: #fd766b;
201
+ --color-red-400: #fa2b39;
202
+ --color-red-500: #c4292f;
203
+ --color-red-600: #891e20;
204
+ --color-red-700: #530f0f;
205
+ --color-red-800: #380a03;
206
+ --color-red-900: #240800;
207
+ --color-red-vibrant: #f14544;
208
+
209
+ /* Yellow Palette */
210
+ --color-yellow-50: #f6f2d5;
211
+ --color-yellow-100: #dbbc19;
212
+ --color-yellow-200: #dbbc19;
213
+ --color-yellow-300: #bb9f13;
214
+ --color-yellow-400: #a08116;
215
+ --color-yellow-500: #866311;
216
+ --color-yellow-600: #5d4204;
217
+ --color-yellow-700: #3e2b04;
218
+ --color-yellow-800: #231902;
219
+ --color-yellow-900: #180f02;
220
+ --color-yellow-vibrant: #faf40a;
221
+
222
+ /* Green Palette */
223
+ --color-green-50: #e3f3e6;
224
+ --color-green-100: #bfeeca;
225
+ --color-green-200: #76d191;
226
+ --color-green-300: #40b66b;
227
+ --color-green-400: #209853;
228
+ --color-green-500: #0b783e;
229
+ --color-green-600: #0c522a;
230
+ --color-green-700: #053117;
231
+ --color-green-800: #091f10;
232
+ --color-green-900: #09130b;
233
+ --color-green-vibrant: #5cfe9d;
234
+
235
+ /* Blue Palette */
236
+ --color-blue-50: #edeff8;
237
+ --color-blue-100: #dee1ff;
238
+ --color-blue-200: #adbcff;
239
+ --color-blue-300: #869eff;
240
+ --color-blue-400: #4c82fb;
241
+ --color-blue-500: #1267d6;
242
+ --color-blue-600: #1d4294;
243
+ --color-blue-700: #09265e;
244
+ --color-blue-800: #0b193f;
245
+ --color-blue-900: #040e34;
246
+ --color-blue-vibrant: #587bff;
247
+
248
+ /* Gold Palette */
249
+ --color-gold-200: #eeb317;
250
+ --color-gold-400: #b17900;
251
+ --color-gold-vibrant: #feb239;
252
+
253
+ /* Magenta Palette */
254
+ --color-magenta-300: #fd82ff;
255
+ --color-magenta-vibrant: #fc72ff;
256
+
257
+ /* Purple Palette */
258
+ --color-purple-300: #8440f2;
259
+ --color-purple-900: #1c0337;
260
+ --color-purple-vibrant: #6100ff;
261
+
262
+ /* Unicon Avatar Colors - Light Mode */
263
+ --color-unicon-0-light: #f50db4;
264
+ --color-unicon-1-light: #ffbf17;
265
+ --color-unicon-2-light: #ff8934;
266
+ --color-unicon-3-light: #85754a;
267
+ --color-unicon-4-light: #0c8911;
268
+ --color-unicon-5-light: #78e744;
269
+ --color-unicon-6-light: #00c3a0;
270
+ --color-unicon-7-light: #23a3ff;
271
+ --color-unicon-8-light: #4981ff;
272
+ --color-unicon-9-light: #4300b0;
273
+
274
+ /* Unicon Avatar Colors - Dark Mode */
275
+ --color-unicon-0-dark: #fc74fe;
276
+ --color-unicon-1-dark: #fff612;
277
+ --color-unicon-2-dark: #ff4d00;
278
+ --color-unicon-3-dark: #996f01;
279
+ --color-unicon-4-dark: #21c95e;
280
+ --color-unicon-5-dark: #b1f13c;
281
+ --color-unicon-6-dark: #5cfe9d;
282
+ --color-unicon-7-dark: #3adcff;
283
+ --color-unicon-8-dark: #0047ff;
284
+ --color-unicon-9-dark: #9e62ff;
285
+
286
+ /* Legacy/Compatibility Colors */
287
+ --color-border: #f9f9f9;
288
+ --color-input: #f9f9f9;
289
+ --color-ring: #222222;
290
+ --color-foreground: #222222;
291
+ --color-card: #ffffff;
292
+ --color-card-foreground: #222222;
293
+ --color-popover: #ffffff;
294
+ --color-popover-foreground: #222222;
295
+ --color-primary: #222222;
296
+ --color-primary-foreground: #f9f9f9;
297
+ --color-secondary: #f9f9f9;
298
+ --color-secondary-foreground: #222222;
299
+ --color-muted: #f9f9f9;
300
+ --color-muted-foreground: #7d7d7d;
301
+ --color-destructive: #ff5f52;
302
+ --color-destructive-foreground: #f9f9f9;
303
+ --color-scrim: rgba(0, 0, 0, 0.6);
304
+
305
+ /* Border Radius */
306
+ --radius-none: 0px;
307
+ --radius-4: 4px;
308
+ --radius-6: 6px;
309
+ --radius-8: 8px;
310
+ --radius-12: 12px;
311
+ --radius-16: 16px;
312
+ --radius-20: 20px;
313
+ --radius-24: 24px;
314
+ --radius-28: 28px;
315
+ --radius-32: 32px;
316
+ --radius-full: 999999px;
317
+
318
+ /* Box Shadows */
319
+ --shadow-short: var(--shadow-short);
320
+ --shadow-medium: var(--shadow-medium);
321
+ --shadow-large: var(--shadow-large);
322
+ }
@@ -0,0 +1,202 @@
1
+ /* CSS Custom Properties */
2
+
3
+ /* Light mode is the default */
4
+ :root {
5
+ color-scheme: light;
6
+ --font-basel: "Basel Grotesk";
7
+
8
+ /* Light mode shadows */
9
+ --shadow-short: 0px 1px 6px 2px rgba(0, 0, 0, 0.03), 0px 1px 2px 0px rgba(0, 0, 0, 0.02);
10
+ --shadow-medium: 0px 6px 12px -3px rgba(19, 19, 19, 0.04), 0px 2px 5px -2px rgba(19, 19, 19, 0.03);
11
+ --shadow-large: 0px 10px 20px -5px rgba(19, 19, 19, 0.05), 0px 4px 12px -3px rgba(19, 19, 19, 0.04);
12
+
13
+ /* shadcn compatibility */
14
+ --radius: 0.625rem;
15
+ --background: oklch(1 0 0);
16
+ --foreground: oklch(0.145 0 0);
17
+ --card: oklch(1 0 0);
18
+ --card-foreground: oklch(0.145 0 0);
19
+ --popover: oklch(1 0 0);
20
+ --popover-foreground: oklch(0.145 0 0);
21
+ --primary: oklch(0.205 0 0);
22
+ --primary-foreground: oklch(0.985 0 0);
23
+ --secondary: oklch(0.97 0 0);
24
+ --secondary-foreground: oklch(0.205 0 0);
25
+ --muted: oklch(0.97 0 0);
26
+ --muted-foreground: oklch(0.556 0 0);
27
+ --accent: oklch(0.97 0 0);
28
+ --accent-foreground: oklch(0.205 0 0);
29
+ --destructive: oklch(0.577 0.245 27.325);
30
+ --border: oklch(0.922 0 0);
31
+ --input: oklch(0.922 0 0);
32
+ --ring: oklch(0.708 0 0);
33
+ --chart-1: oklch(0.646 0.222 41.116);
34
+ --chart-2: oklch(0.6 0.118 184.704);
35
+ --chart-3: oklch(0.398 0.07 227.392);
36
+ --chart-4: oklch(0.828 0.189 84.429);
37
+ --chart-5: oklch(0.769 0.188 70.08);
38
+ --sidebar: oklch(0.985 0 0);
39
+ --sidebar-foreground: oklch(0.145 0 0);
40
+ --sidebar-primary: oklch(0.205 0 0);
41
+ --sidebar-primary-foreground: oklch(0.985 0 0);
42
+ --sidebar-accent: oklch(0.97 0 0);
43
+ --sidebar-accent-foreground: oklch(0.205 0 0);
44
+ --sidebar-border: oklch(0.922 0 0);
45
+ --sidebar-ring: oklch(0.708 0 0);
46
+
47
+ /* Mycelium semantic colors - light mode (auto-switching) */
48
+ --surface1: var(--color-surface1-light);
49
+ --surface2: var(--color-surface2-light);
50
+ --surface3: var(--color-surface3-light);
51
+ --surface4: var(--color-surface4-light);
52
+ --surface5: var(--color-surface5-light);
53
+ --neutral1: var(--color-neutral1-light);
54
+ --neutral2: var(--color-neutral2-light);
55
+ --neutral3: var(--color-neutral3-light);
56
+ --accent1: var(--color-accent1-light);
57
+ --accent2: var(--color-accent2-light);
58
+
59
+ /* Semantic status colors - auto-switching light/dark */
60
+ --success: var(--color-success-light);
61
+ --warning: var(--color-gold-200);
62
+ --critical: var(--color-critical-light);
63
+
64
+ /* Unicon avatar colors - auto-switching */
65
+ --unicon-0: var(--color-unicon-0-light);
66
+ --unicon-1: var(--color-unicon-1-light);
67
+ --unicon-2: var(--color-unicon-2-light);
68
+ --unicon-3: var(--color-unicon-3-light);
69
+ --unicon-4: var(--color-unicon-4-light);
70
+ --unicon-5: var(--color-unicon-5-light);
71
+ --unicon-6: var(--color-unicon-6-light);
72
+ --unicon-7: var(--color-unicon-7-light);
73
+ --unicon-8: var(--color-unicon-8-light);
74
+ --unicon-9: var(--color-unicon-9-light);
75
+ --unicon-bg-opacity: 0.12;
76
+ }
77
+
78
+ /* Dark mode applies when .dark class is present */
79
+ .dark {
80
+ color-scheme: dark;
81
+
82
+ /* Dark mode shadows */
83
+ --shadow-short: 0px 1px 3px 0px rgba(0, 0, 0, 0.12), 0px 1px 2px 0px rgba(0, 0, 0, 0.24);
84
+ --shadow-medium: 0px 10px 15px -3px rgba(19, 19, 19, 0.54), 0px 4px 6px -2px rgba(19, 19, 19, 0.4);
85
+ --shadow-large: 0px 16px 24px -6px rgba(0, 0, 0, 0.6), 0px 8px 12px -4px rgba(0, 0, 0, 0.48);
86
+
87
+ /* shadcn compatibility */
88
+ --background: oklch(0.145 0 0);
89
+ --foreground: oklch(0.985 0 0);
90
+ --card: oklch(0.205 0 0);
91
+ --card-foreground: oklch(0.985 0 0);
92
+ --popover: oklch(0.205 0 0);
93
+ --popover-foreground: oklch(0.985 0 0);
94
+ --primary: oklch(0.922 0 0);
95
+ --primary-foreground: oklch(0.205 0 0);
96
+ --secondary: oklch(0.269 0 0);
97
+ --secondary-foreground: oklch(0.985 0 0);
98
+ --muted: oklch(0.269 0 0);
99
+ --muted-foreground: oklch(0.708 0 0);
100
+ --accent: oklch(0.269 0 0);
101
+ --accent-foreground: oklch(0.985 0 0);
102
+ --destructive: oklch(0.704 0.191 22.216);
103
+ --border: oklch(1 0 0 / 10%);
104
+ --input: oklch(1 0 0 / 15%);
105
+ --ring: oklch(0.556 0 0);
106
+ --chart-1: oklch(0.488 0.243 264.376);
107
+ --chart-2: oklch(0.696 0.17 162.48);
108
+ --chart-3: oklch(0.769 0.188 70.08);
109
+ --chart-4: oklch(0.627 0.265 303.9);
110
+ --chart-5: oklch(0.645 0.246 16.439);
111
+ --sidebar: oklch(0.205 0 0);
112
+ --sidebar-foreground: oklch(0.985 0 0);
113
+ --sidebar-primary: oklch(0.488 0.243 264.376);
114
+ --sidebar-primary-foreground: oklch(0.985 0 0);
115
+ --sidebar-accent: oklch(0.269 0 0);
116
+ --sidebar-accent-foreground: oklch(0.985 0 0);
117
+ --sidebar-border: oklch(1 0 0 / 10%);
118
+ --sidebar-ring: oklch(0.556 0 0);
119
+
120
+ /* Mycelium semantic colors - dark mode (auto-switching) */
121
+ --surface1: var(--color-surface1-dark);
122
+ --surface2: var(--color-surface2-dark);
123
+ --surface3: var(--color-surface3-dark);
124
+ --surface4: var(--color-surface4-dark);
125
+ --surface5: var(--color-surface5-dark);
126
+ --neutral1: var(--color-neutral1-dark);
127
+ --neutral2: var(--color-neutral2-dark);
128
+ --neutral3: var(--color-neutral3-dark);
129
+ --accent1: var(--color-accent1-dark);
130
+ --accent2: var(--color-accent2-dark);
131
+ /* Status colors - dark mode */
132
+ --success: var(--color-success-dark);
133
+ --critical: var(--color-critical-dark);
134
+
135
+ /* Unicon avatar colors - dark mode */
136
+ --unicon-0: var(--color-unicon-0-dark);
137
+ --unicon-1: var(--color-unicon-1-dark);
138
+ --unicon-2: var(--color-unicon-2-dark);
139
+ --unicon-3: var(--color-unicon-3-dark);
140
+ --unicon-4: var(--color-unicon-4-dark);
141
+ --unicon-5: var(--color-unicon-5-dark);
142
+ --unicon-6: var(--color-unicon-6-dark);
143
+ --unicon-7: var(--color-unicon-7-dark);
144
+ --unicon-8: var(--color-unicon-8-dark);
145
+ --unicon-9: var(--color-unicon-9-dark);
146
+ --unicon-bg-opacity: 0.16;
147
+ }
148
+
149
+ /* shadcn theme inline block for Tailwind v4 */
150
+ @theme inline {
151
+ --radius-sm: calc(var(--radius) - 4px);
152
+ --radius-md: calc(var(--radius) - 2px);
153
+ --radius-lg: var(--radius);
154
+ --radius-xl: calc(var(--radius) + 4px);
155
+ --color-background: var(--background);
156
+ --color-foreground: var(--foreground);
157
+ --color-card: var(--card);
158
+ --color-card-foreground: var(--card-foreground);
159
+ --color-popover: var(--popover);
160
+ --color-popover-foreground: var(--popover-foreground);
161
+ --color-primary: var(--primary);
162
+ --color-primary-foreground: var(--primary-foreground);
163
+ --color-secondary: var(--secondary);
164
+ --color-secondary-foreground: var(--secondary-foreground);
165
+ --color-muted: var(--muted);
166
+ --color-muted-foreground: var(--muted-foreground);
167
+ --color-accent: var(--accent);
168
+ --color-accent-foreground: var(--accent-foreground);
169
+ --color-destructive: var(--destructive);
170
+ --color-border: var(--border);
171
+ --color-input: var(--input);
172
+ --color-ring: var(--ring);
173
+ --color-chart-1: var(--chart-1);
174
+ --color-chart-2: var(--chart-2);
175
+ --color-chart-3: var(--chart-3);
176
+ --color-chart-4: var(--chart-4);
177
+ --color-chart-5: var(--chart-5);
178
+ --color-sidebar: var(--sidebar);
179
+ --color-sidebar-foreground: var(--sidebar-foreground);
180
+ --color-sidebar-primary: var(--sidebar-primary);
181
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
182
+ --color-sidebar-accent: var(--sidebar-accent);
183
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
184
+ --color-sidebar-border: var(--sidebar-border);
185
+ --color-sidebar-ring: var(--sidebar-ring);
186
+
187
+ /* Mycelium semantic colors - auto-switching Tailwind utilities */
188
+ --color-surface1: var(--surface1);
189
+ --color-surface2: var(--surface2);
190
+ --color-surface3: var(--surface3);
191
+ --color-surface4: var(--surface4);
192
+ --color-surface5: var(--surface5);
193
+ --color-neutral1: var(--neutral1);
194
+ --color-neutral2: var(--neutral2);
195
+ --color-neutral3: var(--neutral3);
196
+ --color-accent1: var(--accent1);
197
+ --color-accent2: var(--accent2);
198
+ /* Status colors: semantic tokens reference raw palette from theme.css */
199
+ --color-success: var(--success);
200
+ --color-warning: var(--warning);
201
+ --color-critical: var(--critical);
202
+ }
Binary file
Binary file
Binary file
Binary file
package/fonts.css ADDED
@@ -0,0 +1,4 @@
1
+ /* Basel Grotesk Fonts */
2
+ /* Usage: @import "@universe/mycelium/fonts"; */
3
+
4
+ @import "./css/fonts.css";
package/package.json CHANGED
@@ -1 +1,50 @@
1
- {"name":"@l.x/mycelium","version":"1.0.2","description":"LX Exchange - mycelium","main":"index.js","dependencies":{"@luxexchange/mycelium":"1.0.2"}}
1
+ {
2
+ "name": "@l.x/mycelium",
3
+ "version": "1.0.4",
4
+ "private": false,
5
+ "main": "src/index.ts",
6
+ "sideEffects": [
7
+ "*.css"
8
+ ],
9
+ "exports": {
10
+ ".": "./src/index.ts",
11
+ "./tailwind": "./tailwind.css",
12
+ "./fonts": "./fonts.css",
13
+ "./cn": {
14
+ "types": "./src/cn.d.ts",
15
+ "default": "./src/index.ts"
16
+ }
17
+ },
18
+ "dependencies": {
19
+ "clsx": "2.1.1",
20
+ "tailwind-merge": "3.3.1"
21
+ },
22
+ "peerDependencies": {
23
+ "react": ">=18.0.0",
24
+ "tailwindcss": ">=4.0.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "22.13.1",
28
+ "@typescript/native-preview": "7.0.0-dev.20260311.1",
29
+ "depcheck": "1.4.7",
30
+ "eslint": "8.57.1",
31
+ "react": "19.0.3",
32
+ "tailwindcss": "4.1.16",
33
+ "typescript": "5.8.3",
34
+ "@luxfi/eslint-config": "^1.0.6"
35
+ },
36
+ "nx": {
37
+ "includedScripts": []
38
+ },
39
+ "scripts": {
40
+ "typecheck": "nx typecheck @l.x/mycelium",
41
+ "typecheck:tsgo": "nx typecheck:tsgo @l.x/mycelium",
42
+ "lint": "nx lint @l.x/mycelium",
43
+ "lint:fix": "nx lint:fix @l.x/mycelium",
44
+ "lint:biome": "nx lint:biome @l.x/mycelium",
45
+ "lint:biome:fix": "nx lint:biome:fix @l.x/mycelium",
46
+ "lint:eslint": "nx lint:eslint @l.x/mycelium",
47
+ "lint:eslint:fix": "nx lint:eslint:fix @l.x/mycelium",
48
+ "check:deps:usage": "nx check:deps:usage @l.x/mycelium"
49
+ }
50
+ }
package/project.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "@l.x/mycelium",
3
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
+ "sourceRoot": "pkgs/mycelium/src",
5
+ "projectType": "library",
6
+ "tags": ["scope:mycelium", "type:lib"],
7
+ "targets": {
8
+ "typecheck": {},
9
+ "typecheck:tsgo": {},
10
+ "lint:biome": {},
11
+ "lint:biome:fix": {},
12
+ "lint:eslint": {},
13
+ "lint:eslint:fix": {},
14
+ "lint": {},
15
+ "lint:fix": {},
16
+ "check:deps:usage": {}
17
+ }
18
+ }
package/src/cn.ts ADDED
@@ -0,0 +1,75 @@
1
+ import { type ClassValue, clsx } from 'clsx'
2
+ import { extendTailwindMerge } from 'tailwind-merge'
3
+ import { typographyClasses } from './types'
4
+
5
+ /** Custom color classes for tailwind-merge conflict resolution */
6
+ const colorClasses = [
7
+ 'foreground',
8
+ 'background',
9
+ 'neutral1',
10
+ 'neutral1-light',
11
+ 'neutral1-dark',
12
+ 'neutral2',
13
+ 'neutral2-light',
14
+ 'neutral2-dark',
15
+ 'neutral3',
16
+ 'neutral3-light',
17
+ 'neutral3-dark',
18
+ 'surface1',
19
+ 'surface1-light',
20
+ 'surface1-dark',
21
+ 'surface2',
22
+ 'surface2-light',
23
+ 'surface2-dark',
24
+ 'surface3',
25
+ 'surface3-light',
26
+ 'surface3-dark',
27
+ 'surface4',
28
+ 'surface4-light',
29
+ 'surface4-dark',
30
+ 'surface5',
31
+ 'surface5-light',
32
+ 'surface5-dark',
33
+ 'accent1',
34
+ 'accent1-light',
35
+ 'accent1-dark',
36
+ 'accent2',
37
+ 'accent2-light',
38
+ 'accent2-dark',
39
+ 'success',
40
+ 'warning',
41
+ 'critical',
42
+ 'destructive',
43
+ 'muted-foreground',
44
+ 'card-foreground',
45
+ 'popover-foreground',
46
+ 'primary-foreground',
47
+ 'secondary-foreground',
48
+ 'destructive-foreground',
49
+ ] as const
50
+
51
+ /**
52
+ * Extended tailwind-merge configuration for Mycelium classes.
53
+ * - Typography: ensures cn('text-sm', 'text-body-1') correctly resolves to 'text-body-1'
54
+ * - Colors: ensures cn('text-foreground', 'text-critical') correctly resolves to 'text-critical'
55
+ */
56
+ const customTwMerge = extendTailwindMerge({
57
+ extend: {
58
+ classGroups: {
59
+ 'font-size': [...typographyClasses],
60
+ 'text-color': colorClasses.map((c) => `text-${c}`),
61
+ },
62
+ },
63
+ })
64
+
65
+ /**
66
+ * Merge class names with Tailwind CSS conflict resolution.
67
+ *
68
+ * @example
69
+ * cn('text-sm', 'text-body-1') // => 'text-body-1'
70
+ * cn('bg-red-500', isActive && 'bg-blue-500') // => 'bg-blue-500' if isActive
71
+ * cn('p-4', className) // Merge with external className prop
72
+ */
73
+ export function cn(...inputs: ClassValue[]): string {
74
+ return customTwMerge(clsx(inputs))
75
+ }
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ // Mycelium - Lx's Tailwind Design System
2
+ // Main JS exports
3
+
4
+ export { cn } from './cn'
5
+ export * from './types'
6
+ export { COLOR_COUNT, UNICON_COLORS } from './unicon/colors'
7
+ export { hashString } from './unicon/hash'
8
+ export { Unicon, type UniconProps } from './unicon/Unicon'