@matteoaliano/forest-ui 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1806 @@
1
+ import { createTheme } from '@mui/material/styles';
2
+
3
+ // src/theme/index.ts
4
+
5
+ // src/theme/tokens.ts
6
+ var colors = {
7
+ base: {
8
+ white: "#ffffff",
9
+ black: "#000000",
10
+ transparent: "#ffffff00"
11
+ },
12
+ brand: {
13
+ 25: "#fcfaff",
14
+ 50: "#f9f5ff",
15
+ 100: "#f4ebff",
16
+ 200: "#e9d7fe",
17
+ 300: "#d6bbfb",
18
+ 400: "#b692f6",
19
+ 500: "#9e77ed",
20
+ 600: "#7f56d9",
21
+ 700: "#6941c6",
22
+ 800: "#53389e",
23
+ 900: "#42307d",
24
+ 950: "#2c1c5f"
25
+ },
26
+ gray: {
27
+ 25: "#fcfcfd",
28
+ 50: "#f9fafb",
29
+ 100: "#f2f4f7",
30
+ 200: "#eaecf0",
31
+ 300: "#d0d5dd",
32
+ 400: "#98a2b3",
33
+ 500: "#667085",
34
+ 600: "#475467",
35
+ 700: "#344054",
36
+ 800: "#182230",
37
+ 900: "#101828",
38
+ 950: "#0c111d"
39
+ },
40
+ error: {
41
+ 25: "#fffbfa",
42
+ 50: "#fef3f2",
43
+ 100: "#fee4e2",
44
+ 200: "#fecdca",
45
+ 300: "#fda29b",
46
+ 400: "#f97066",
47
+ 500: "#f04438",
48
+ 600: "#d92d20",
49
+ 700: "#b42318",
50
+ 800: "#912018",
51
+ 900: "#7a271a",
52
+ 950: "#55160c"
53
+ },
54
+ warning: {
55
+ 25: "#fffcf5",
56
+ 50: "#fffaeb",
57
+ 100: "#fef0c7",
58
+ 200: "#fedf89",
59
+ 300: "#fec84b",
60
+ 400: "#fdb022",
61
+ 500: "#f79009",
62
+ 600: "#dc6803",
63
+ 700: "#b54708",
64
+ 800: "#93370d",
65
+ 900: "#7a2e0e",
66
+ 950: "#4e1d09"
67
+ },
68
+ success: {
69
+ 25: "#f6fef9",
70
+ 50: "#ecfdf3",
71
+ 100: "#dcfae6",
72
+ 200: "#abefc6",
73
+ 300: "#75e0a7",
74
+ 400: "#47cd89",
75
+ 500: "#17b26a",
76
+ 600: "#079455",
77
+ 700: "#067647",
78
+ 800: "#085d3a",
79
+ 900: "#074d31",
80
+ 950: "#053321"
81
+ },
82
+ blue: {
83
+ 25: "#f5faff",
84
+ 50: "#eff8ff",
85
+ 100: "#d1e9ff",
86
+ 200: "#b2ddff",
87
+ 300: "#84caff",
88
+ 400: "#53b1fd",
89
+ 500: "#2e90fa",
90
+ 600: "#1570ef",
91
+ 700: "#175cd3",
92
+ 800: "#1849a9",
93
+ 900: "#194185",
94
+ 950: "#102a56"
95
+ }
96
+ };
97
+ var spacing = {
98
+ none: 0,
99
+ xxs: 2,
100
+ xs: 4,
101
+ sm: 6,
102
+ md: 8,
103
+ lg: 12,
104
+ xl: 16,
105
+ "2xl": 20,
106
+ "3xl": 24,
107
+ "4xl": 32,
108
+ "5xl": 40,
109
+ "6xl": 48,
110
+ "7xl": 64,
111
+ "8xl": 80,
112
+ "9xl": 96,
113
+ "10xl": 128,
114
+ "11xl": 160
115
+ };
116
+ var radius = {
117
+ none: 0,
118
+ xxs: 2,
119
+ xs: 4,
120
+ sm: 6,
121
+ md: 8,
122
+ lg: 10,
123
+ xl: 12,
124
+ "2xl": 16,
125
+ "3xl": 20,
126
+ "4xl": 24,
127
+ full: 9999
128
+ };
129
+ var shadows = {
130
+ xs: "0px 1px 2px 0px #1018280d",
131
+ sm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f",
132
+ md: "0px 4px 8px -2px #1018281a, 0px 2px 4px -2px #1018280f",
133
+ lg: "0px 12px 16px -4px #10182814, 0px 4px 6px -2px #10182808",
134
+ xl: "0px 20px 24px -4px #10182814, 0px 8px 8px -4px #10182808",
135
+ "2xl": "0px 24px 48px -12px #1018282e",
136
+ "3xl": "0px 32px 64px -12px #10182824"
137
+ };
138
+ var focusRings = {
139
+ brand: "0px 0px 0px 4px #9e77ed3d",
140
+ brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #9e77ed3d",
141
+ brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #9e77ed3d",
142
+ gray: "0px 0px 0px 4px #98a2b324",
143
+ grayShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #98a2b324",
144
+ grayShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #98a2b324",
145
+ error: "0px 0px 0px 4px #f044383d",
146
+ errorShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f044383d"
147
+ };
148
+ var fontFamily = '"Poppins", sans-serif';
149
+ var fontSize = {
150
+ xxs: 11,
151
+ xs: 12,
152
+ sm: 14,
153
+ md: 16,
154
+ lg: 18,
155
+ xl: 20
156
+ };
157
+ var lineHeight = {
158
+ xxs: "16px",
159
+ xs: "18px",
160
+ sm: "20px",
161
+ md: "24px",
162
+ lg: "28px",
163
+ xl: "30px"
164
+ };
165
+ var fontWeight = {
166
+ regular: 400,
167
+ medium: 500,
168
+ semibold: 600,
169
+ bold: 700
170
+ };
171
+ var display = {
172
+ "2xl": { fontSize: 72, lineHeight: "90px", letterSpacing: "-0.02em" },
173
+ xl: { fontSize: 60, lineHeight: "72px", letterSpacing: "-0.02em" },
174
+ lg: { fontSize: 48, lineHeight: "60px", letterSpacing: "-0.02em" },
175
+ md: { fontSize: 36, lineHeight: "44px", letterSpacing: "-0.02em" },
176
+ sm: { fontSize: 30, lineHeight: "38px" },
177
+ xs: { fontSize: 24, lineHeight: "32px" }
178
+ };
179
+ var container = {
180
+ maxWidthDesktop: 1280,
181
+ paddingDesktop: 32,
182
+ paddingMobile: 16
183
+ };
184
+ var widths = {
185
+ xxs: 320,
186
+ xs: 384,
187
+ sm: 480,
188
+ md: 560,
189
+ lg: 640,
190
+ xl: 768,
191
+ "2xl": 1024,
192
+ "3xl": 1280,
193
+ "4xl": 1440,
194
+ "5xl": 1600,
195
+ "6xl": 1920
196
+ };
197
+ var text = {
198
+ primary: colors.gray[900],
199
+ secondary: colors.gray[700],
200
+ secondaryHover: colors.gray[800],
201
+ tertiary: colors.gray[600],
202
+ tertiaryHover: colors.gray[700],
203
+ quaternary: colors.gray[500],
204
+ disabled: colors.gray[500],
205
+ placeholder: colors.gray[500],
206
+ placeholderSubtle: colors.gray[300],
207
+ white: colors.base.white,
208
+ brandPrimary: colors.brand[900],
209
+ brandSecondary: colors.brand[700],
210
+ brandTertiary: colors.brand[600],
211
+ brandTertiaryAlt: colors.brand[600],
212
+ primaryOnBrand: colors.base.white,
213
+ secondaryOnBrand: colors.brand[200],
214
+ tertiaryOnBrand: colors.brand[200],
215
+ quaternaryOnBrand: colors.brand[300],
216
+ errorPrimary: colors.error[600],
217
+ warningPrimary: colors.warning[600],
218
+ successPrimary: colors.success[600]
219
+ };
220
+ var bg = {
221
+ primary: colors.base.white,
222
+ primaryAlt: colors.base.white,
223
+ primaryHover: colors.gray[50],
224
+ primarySolid: colors.gray[950],
225
+ secondary: colors.gray[50],
226
+ secondaryAlt: colors.gray[50],
227
+ secondarySubtle: colors.gray[25],
228
+ secondaryHover: colors.gray[100],
229
+ secondarySolid: colors.gray[600],
230
+ tertiary: colors.gray[100],
231
+ quaternary: colors.gray[200],
232
+ active: colors.gray[50],
233
+ disabled: colors.gray[100],
234
+ disabledSubtle: colors.gray[50],
235
+ overlay: colors.gray[950],
236
+ brandPrimary: colors.brand[50],
237
+ brandPrimaryAlt: colors.brand[50],
238
+ brandSecondary: colors.brand[100],
239
+ brandSolid: colors.brand[600],
240
+ brandSolidHover: colors.brand[700],
241
+ brandSection: colors.brand[800],
242
+ brandSectionSubtle: colors.brand[700],
243
+ errorPrimary: colors.error[50],
244
+ errorSecondary: colors.error[100],
245
+ errorSolid: colors.error[600],
246
+ warningPrimary: colors.warning[50],
247
+ warningSecondary: colors.warning[100],
248
+ warningSolid: colors.warning[600],
249
+ successPrimary: colors.success[50],
250
+ successSecondary: colors.success[100],
251
+ successSolid: colors.success[600]
252
+ };
253
+ var fg = {
254
+ primary: colors.gray[900],
255
+ secondary: colors.gray[700],
256
+ secondaryHover: colors.gray[800],
257
+ tertiary: colors.gray[600],
258
+ tertiaryHover: colors.gray[700],
259
+ quaternary: colors.gray[500],
260
+ quaternaryHover: colors.gray[600],
261
+ quinary: colors.gray[400],
262
+ quinaryHover: colors.gray[500],
263
+ senary: colors.gray[300],
264
+ white: colors.base.white,
265
+ disabled: colors.gray[400],
266
+ disabledSubtle: colors.gray[300],
267
+ brandPrimary: colors.brand[600],
268
+ brandPrimaryAlt: colors.brand[600],
269
+ brandSecondary: colors.brand[500],
270
+ errorPrimary: colors.error[600],
271
+ errorSecondary: colors.error[500],
272
+ warningPrimary: colors.warning[600],
273
+ warningSecondary: colors.warning[500],
274
+ successPrimary: colors.success[600],
275
+ successSecondary: colors.success[500]
276
+ };
277
+ var border = {
278
+ primary: colors.gray[300],
279
+ secondary: colors.gray[200],
280
+ tertiary: colors.gray[100],
281
+ disabled: colors.gray[300],
282
+ disabledSubtle: colors.gray[200],
283
+ brand: colors.brand[300],
284
+ brandSolid: colors.brand[600],
285
+ brandSolidAlt: colors.brand[600],
286
+ error: colors.error[300],
287
+ errorSolid: colors.error[600]
288
+ };
289
+ var buttonColors = {
290
+ primary: {
291
+ bg: colors.brand[600],
292
+ bgHover: colors.brand[700],
293
+ fg: colors.base.white,
294
+ fgHover: colors.base.white,
295
+ border: colors.brand[600],
296
+ borderHover: colors.brand[700]
297
+ },
298
+ secondary: {
299
+ bg: colors.base.white,
300
+ bgHover: colors.gray[50],
301
+ fg: colors.gray[700],
302
+ fgHover: colors.gray[800],
303
+ border: colors.gray[300],
304
+ borderHover: colors.gray[300]
305
+ },
306
+ secondaryColor: {
307
+ bg: colors.base.white,
308
+ bgHover: colors.brand[50],
309
+ fg: colors.brand[700],
310
+ fgHover: colors.brand[800],
311
+ border: colors.brand[300],
312
+ borderHover: colors.brand[300]
313
+ },
314
+ tertiary: {
315
+ fg: colors.gray[600],
316
+ fgHover: colors.gray[700],
317
+ bgHover: colors.gray[50]
318
+ },
319
+ tertiaryColor: {
320
+ fg: colors.brand[700],
321
+ fgHover: colors.brand[800],
322
+ bgHover: colors.brand[50]
323
+ },
324
+ primaryError: {
325
+ bg: colors.error[600],
326
+ bgHover: colors.error[700],
327
+ fg: colors.base.white,
328
+ fgHover: colors.base.white,
329
+ border: colors.error[600],
330
+ borderHover: colors.error[700]
331
+ },
332
+ secondaryError: {
333
+ bg: colors.base.white,
334
+ bgHover: colors.error[50],
335
+ fg: colors.error[700],
336
+ fgHover: colors.error[800],
337
+ border: colors.error[300],
338
+ borderHover: colors.error[300]
339
+ },
340
+ tertiaryError: {
341
+ fg: colors.error[700],
342
+ fgHover: colors.error[800],
343
+ bgHover: colors.error[50]
344
+ }
345
+ };
346
+ var avatarColors = {
347
+ bg: colors.gray[100],
348
+ contrastBorder: "#00000014",
349
+ profilePhotoBorder: colors.base.white,
350
+ focusBorder: "#98a2b324"
351
+ };
352
+ var breadcrumbColors = {
353
+ fg: colors.gray[600],
354
+ fgHover: colors.gray[700],
355
+ bgHover: colors.gray[50],
356
+ brandBgHover: colors.brand[50],
357
+ brandFgHover: colors.brand[700],
358
+ iconFg: colors.gray[500],
359
+ iconFgHover: colors.gray[700],
360
+ brandIconFgHover: colors.brand[700]
361
+ };
362
+ var iconColors = {
363
+ fgBrand: colors.brand[600],
364
+ fgBrandOnBrand: colors.brand[200],
365
+ featuredModernBorder: colors.gray[200],
366
+ featuredLightFgBrand: colors.brand[600],
367
+ featuredLightFgGray: colors.gray[500],
368
+ featuredLightFgError: colors.error[600],
369
+ featuredLightFgWarning: colors.warning[600],
370
+ featuredLightFgSuccess: colors.success[600],
371
+ featuredDarkFgBrand: colors.base.white,
372
+ featuredDarkFgGray: colors.base.white,
373
+ featuredDarkFgError: colors.base.white,
374
+ featuredDarkFgWarning: colors.base.white,
375
+ featuredDarkFgSuccess: colors.base.white
376
+ };
377
+ var navColors = {
378
+ itemIconFg: colors.gray[500],
379
+ itemIconFgActive: colors.gray[500],
380
+ itemButtonIconFg: colors.gray[500],
381
+ itemButtonIconFgActive: colors.gray[700]
382
+ };
383
+ var sliderColors = {
384
+ handleBorder: colors.brand[600],
385
+ handleBg: colors.base.white
386
+ };
387
+ var toggleColors = {
388
+ buttonFgDisabled: colors.gray[50]
389
+ };
390
+ var chartColors = {
391
+ axisFg: colors.gray[200],
392
+ gridlineFg: colors.gray[100],
393
+ labelFg: colors.gray[600],
394
+ labelFgEmphasis: colors.gray[700],
395
+ bg: colors.base.white,
396
+ bgAlt: colors.gray[50],
397
+ tooltipBg: colors.gray[950],
398
+ tooltipFg: colors.base.white,
399
+ crosshairFg: colors.gray[500],
400
+ legendFg: colors.gray[700],
401
+ series1Fg: colors.blue[600],
402
+ series1FgHover: colors.blue[700],
403
+ series1Bg: colors.blue[100],
404
+ series1BgHover: colors.blue[200],
405
+ series2Fg: colors.brand[600],
406
+ series2FgHover: colors.brand[700],
407
+ series2Bg: colors.brand[100],
408
+ series2BgHover: colors.brand[200]
409
+ };
410
+ var alpha = {
411
+ white: {
412
+ 10: "#ffffff1a",
413
+ 20: "#ffffff33",
414
+ 30: "#ffffff4d",
415
+ 40: "#ffffff66",
416
+ 50: "#ffffff80",
417
+ 60: "#ffffff99",
418
+ 70: "#ffffffb3",
419
+ 80: "#ffffffcc",
420
+ 90: "#ffffffe6",
421
+ 100: "#ffffff"
422
+ },
423
+ black: {
424
+ 10: "#0000001a",
425
+ 20: "#00000033",
426
+ 30: "#0000004d",
427
+ 40: "#00000066",
428
+ 50: "#00000080",
429
+ 60: "#00000099",
430
+ 70: "#000000b3",
431
+ 80: "#000000cc",
432
+ 90: "#000000e6",
433
+ 100: "#000000"
434
+ }
435
+ };
436
+
437
+ // src/theme/palette.ts
438
+ function buildPalette(tokens) {
439
+ const { colors: colors2, text: text2, bg: bg2, fg: fg2, border: border2 } = tokens;
440
+ return {
441
+ primary: {
442
+ main: colors2.brand[600],
443
+ light: colors2.brand[400],
444
+ dark: colors2.brand[700],
445
+ contrastText: colors2.base.white
446
+ },
447
+ secondary: {
448
+ main: colors2.gray[600],
449
+ light: colors2.gray[400],
450
+ dark: colors2.gray[700],
451
+ contrastText: colors2.base.white
452
+ },
453
+ error: {
454
+ main: colors2.error[600],
455
+ light: colors2.error[300],
456
+ dark: colors2.error[700],
457
+ contrastText: colors2.base.white
458
+ },
459
+ warning: {
460
+ main: colors2.warning[600],
461
+ light: colors2.warning[300],
462
+ dark: colors2.warning[700],
463
+ contrastText: colors2.base.white
464
+ },
465
+ success: {
466
+ main: colors2.success[600],
467
+ light: colors2.success[300],
468
+ dark: colors2.success[700],
469
+ contrastText: colors2.base.white
470
+ },
471
+ info: {
472
+ main: colors2.blue[600],
473
+ light: colors2.blue[300],
474
+ dark: colors2.blue[700],
475
+ contrastText: colors2.base.white
476
+ },
477
+ background: {
478
+ default: bg2.primary,
479
+ paper: bg2.primary
480
+ },
481
+ text: {
482
+ primary: text2.primary,
483
+ secondary: text2.secondary,
484
+ disabled: text2.disabled
485
+ },
486
+ divider: border2.secondary,
487
+ action: {
488
+ active: fg2.tertiary,
489
+ hover: bg2.primaryHover,
490
+ selected: bg2.brandPrimary,
491
+ disabled: fg2.disabled,
492
+ disabledBackground: bg2.disabled
493
+ }
494
+ };
495
+ }
496
+ var palette = buildPalette({
497
+ colors,
498
+ text,
499
+ bg,
500
+ fg,
501
+ border
502
+ });
503
+
504
+ // src/theme/typography.ts
505
+ function buildTypography(tokens) {
506
+ const { fontFamily: fontFamily2, display: display2, fontSize: fontSize2, lineHeight: lineHeight2, fontWeight: fontWeight2 } = tokens;
507
+ return {
508
+ fontFamily: fontFamily2,
509
+ fontWeightRegular: fontWeight2.regular,
510
+ fontWeightMedium: fontWeight2.medium,
511
+ fontWeightBold: fontWeight2.bold,
512
+ // Display styles → MUI headings
513
+ h1: {
514
+ fontSize: display2.xl.fontSize,
515
+ lineHeight: display2.xl.lineHeight,
516
+ letterSpacing: display2.xl.letterSpacing,
517
+ fontWeight: fontWeight2.semibold
518
+ },
519
+ h2: {
520
+ fontSize: display2.lg.fontSize,
521
+ lineHeight: display2.lg.lineHeight,
522
+ letterSpacing: display2.lg.letterSpacing,
523
+ fontWeight: fontWeight2.semibold
524
+ },
525
+ h3: {
526
+ fontSize: display2.md.fontSize,
527
+ lineHeight: display2.md.lineHeight,
528
+ letterSpacing: display2.md.letterSpacing,
529
+ fontWeight: fontWeight2.semibold
530
+ },
531
+ h4: {
532
+ fontSize: display2.sm.fontSize,
533
+ lineHeight: display2.sm.lineHeight,
534
+ fontWeight: fontWeight2.semibold
535
+ },
536
+ h5: {
537
+ fontSize: display2.xs.fontSize,
538
+ lineHeight: display2.xs.lineHeight,
539
+ fontWeight: fontWeight2.semibold
540
+ },
541
+ h6: {
542
+ fontSize: fontSize2.xl,
543
+ lineHeight: lineHeight2.xl,
544
+ fontWeight: fontWeight2.semibold
545
+ },
546
+ subtitle1: {
547
+ fontSize: fontSize2.lg,
548
+ lineHeight: lineHeight2.lg,
549
+ fontWeight: fontWeight2.medium
550
+ },
551
+ subtitle2: {
552
+ fontSize: fontSize2.md,
553
+ lineHeight: lineHeight2.md,
554
+ fontWeight: fontWeight2.medium
555
+ },
556
+ body1: {
557
+ fontSize: fontSize2.md,
558
+ lineHeight: lineHeight2.md,
559
+ fontWeight: fontWeight2.regular
560
+ },
561
+ body2: {
562
+ fontSize: fontSize2.sm,
563
+ lineHeight: lineHeight2.sm,
564
+ fontWeight: fontWeight2.regular
565
+ },
566
+ caption: {
567
+ fontSize: fontSize2.xs,
568
+ lineHeight: lineHeight2.xs,
569
+ fontWeight: fontWeight2.regular
570
+ },
571
+ overline: {
572
+ fontSize: fontSize2.xxs,
573
+ lineHeight: lineHeight2.xxs,
574
+ fontWeight: fontWeight2.medium,
575
+ textTransform: "uppercase",
576
+ letterSpacing: "0.08em"
577
+ },
578
+ button: {
579
+ fontSize: fontSize2.sm,
580
+ lineHeight: lineHeight2.sm,
581
+ fontWeight: fontWeight2.semibold,
582
+ textTransform: "none"
583
+ }
584
+ };
585
+ }
586
+ var typography = buildTypography({
587
+ fontFamily,
588
+ display,
589
+ fontSize,
590
+ lineHeight,
591
+ fontWeight
592
+ });
593
+
594
+ // src/theme/components.ts
595
+ function buildComponents(tokens) {
596
+ const {
597
+ colors: colors2,
598
+ radius: radius2,
599
+ focusRings: focusRings2,
600
+ shadows: tokenShadows,
601
+ text: text2,
602
+ bg: bg2,
603
+ fg: fg2,
604
+ border: border2,
605
+ buttonColors: buttonColors2
606
+ } = tokens;
607
+ return {
608
+ // ─── Button ─────────────────────────────────────────────────────
609
+ MuiButton: {
610
+ defaultProps: {
611
+ disableElevation: true
612
+ },
613
+ styleOverrides: {
614
+ root: {
615
+ borderRadius: radius2.md,
616
+ fontWeight: 600,
617
+ boxShadow: tokenShadows.xs,
618
+ height: 32,
619
+ padding: "6px 12px",
620
+ fontSize: 14,
621
+ lineHeight: "20px",
622
+ "&:focus-visible": {
623
+ boxShadow: focusRings2.brandShadowXs
624
+ }
625
+ },
626
+ containedPrimary: {
627
+ backgroundColor: buttonColors2.primary.bg,
628
+ "&:hover": {
629
+ backgroundColor: buttonColors2.primary.bgHover
630
+ }
631
+ },
632
+ outlinedPrimary: {
633
+ borderColor: buttonColors2.secondaryColor.border,
634
+ color: buttonColors2.secondaryColor.fg,
635
+ "&:hover": {
636
+ backgroundColor: buttonColors2.secondaryColor.bgHover,
637
+ borderColor: buttonColors2.secondaryColor.borderHover
638
+ }
639
+ },
640
+ outlinedSecondary: {
641
+ borderColor: buttonColors2.secondary.border,
642
+ "&:hover": {
643
+ borderColor: buttonColors2.secondary.borderHover
644
+ }
645
+ },
646
+ text: {
647
+ boxShadow: "none"
648
+ },
649
+ textPrimary: {
650
+ color: buttonColors2.tertiaryColor.fg,
651
+ "&:hover": {
652
+ backgroundColor: buttonColors2.tertiaryColor.bgHover
653
+ }
654
+ }
655
+ }
656
+ },
657
+ // ─── Button Group ───────────────────────────────────────────────
658
+ MuiButtonGroup: {
659
+ defaultProps: {
660
+ disableElevation: true
661
+ },
662
+ styleOverrides: {
663
+ root: {
664
+ borderRadius: radius2.md
665
+ },
666
+ grouped: {
667
+ "&:not(:last-of-type)": {
668
+ borderRight: `1px solid ${buttonColors2.primary.borderHover}`
669
+ }
670
+ }
671
+ }
672
+ },
673
+ // ─── FAB ────────────────────────────────────────────────────────
674
+ MuiFab: {
675
+ styleOverrides: {
676
+ root: {
677
+ boxShadow: tokenShadows.md,
678
+ "&:hover": {
679
+ boxShadow: tokenShadows.lg
680
+ },
681
+ "&:focus-visible": {
682
+ boxShadow: focusRings2.brandShadowSm
683
+ }
684
+ },
685
+ primary: {
686
+ backgroundColor: buttonColors2.primary.bg,
687
+ "&:hover": {
688
+ backgroundColor: buttonColors2.primary.bgHover
689
+ }
690
+ }
691
+ }
692
+ },
693
+ // ─── TextField / Input ──────────────────────────────────────────
694
+ MuiTextField: {
695
+ defaultProps: {
696
+ variant: "outlined",
697
+ size: "small"
698
+ }
699
+ },
700
+ MuiInputBase: {
701
+ styleOverrides: {
702
+ input: {
703
+ "&::placeholder": {
704
+ color: text2.placeholder,
705
+ WebkitTextFillColor: text2.placeholder,
706
+ fontWeight: 400,
707
+ opacity: 1
708
+ }
709
+ }
710
+ }
711
+ },
712
+ MuiOutlinedInput: {
713
+ styleOverrides: {
714
+ root: {
715
+ borderRadius: radius2.md,
716
+ boxShadow: tokenShadows.xs,
717
+ "&:hover .MuiOutlinedInput-notchedOutline": {
718
+ borderColor: border2.brand
719
+ },
720
+ "&.Mui-focused .MuiOutlinedInput-notchedOutline": {
721
+ borderColor: border2.brandSolid,
722
+ borderWidth: 1,
723
+ boxShadow: "none"
724
+ },
725
+ "&.Mui-error .MuiOutlinedInput-notchedOutline": {
726
+ borderColor: border2.error
727
+ },
728
+ "&.Mui-error.Mui-focused .MuiOutlinedInput-notchedOutline": {
729
+ borderColor: border2.errorSolid,
730
+ boxShadow: "none"
731
+ }
732
+ },
733
+ notchedOutline: {
734
+ borderColor: border2.primary
735
+ },
736
+ input: {
737
+ padding: "10px 14px",
738
+ fontSize: 16,
739
+ lineHeight: "24px"
740
+ },
741
+ inputSizeSmall: {
742
+ padding: "8px 12px",
743
+ fontSize: 14,
744
+ lineHeight: "20px"
745
+ }
746
+ }
747
+ },
748
+ MuiFormLabel: {
749
+ styleOverrides: {
750
+ root: {
751
+ color: text2.placeholder,
752
+ "&.Mui-focused": {
753
+ color: text2.placeholder
754
+ },
755
+ "&.Mui-error": {
756
+ color: text2.errorPrimary
757
+ }
758
+ }
759
+ }
760
+ },
761
+ MuiInputLabel: {
762
+ styleOverrides: {
763
+ root: {
764
+ fontSize: 14,
765
+ fontWeight: 500,
766
+ color: text2.placeholder,
767
+ "&.Mui-focused": {
768
+ color: text2.placeholder
769
+ },
770
+ "&.Mui-error": {
771
+ color: text2.errorPrimary
772
+ }
773
+ }
774
+ }
775
+ },
776
+ MuiFormHelperText: {
777
+ styleOverrides: {
778
+ root: {
779
+ fontSize: 14,
780
+ lineHeight: "20px",
781
+ marginTop: 6,
782
+ marginLeft: 0,
783
+ "&.Mui-error": {
784
+ color: text2.errorPrimary
785
+ }
786
+ }
787
+ }
788
+ },
789
+ // ─── Select ─────────────────────────────────────────────────────
790
+ MuiSelect: {
791
+ defaultProps: {
792
+ size: "small"
793
+ },
794
+ styleOverrides: {
795
+ select: {
796
+ "&.MuiSelect-select": {
797
+ "&[aria-placeholder], &:empty + .MuiSelect-nativeInput[value='']~&": {
798
+ color: text2.placeholder
799
+ }
800
+ }
801
+ },
802
+ icon: {
803
+ color: text2.placeholder
804
+ }
805
+ }
806
+ },
807
+ // ─── Autocomplete ───────────────────────────────────────────────
808
+ MuiAutocomplete: {
809
+ styleOverrides: {
810
+ paper: {
811
+ borderRadius: radius2.md,
812
+ boxShadow: tokenShadows.lg,
813
+ border: `1px solid ${border2.secondary}`,
814
+ marginTop: 4
815
+ },
816
+ option: {
817
+ fontSize: 16,
818
+ lineHeight: "24px",
819
+ padding: "10px 14px",
820
+ "&.Mui-focused": {
821
+ backgroundColor: bg2.primaryHover
822
+ },
823
+ '&[aria-selected="true"]': {
824
+ backgroundColor: bg2.brandPrimary
825
+ }
826
+ },
827
+ listbox: {
828
+ padding: 4
829
+ }
830
+ }
831
+ },
832
+ // ─── Checkbox ───────────────────────────────────────────────────
833
+ MuiCheckbox: {
834
+ defaultProps: {
835
+ disableRipple: true
836
+ },
837
+ styleOverrides: {
838
+ root: {
839
+ color: border2.primary,
840
+ borderRadius: radius2.xs,
841
+ padding: 0,
842
+ width: 20,
843
+ height: 20,
844
+ "&:hover": {
845
+ backgroundColor: "transparent",
846
+ color: fg2.brandPrimary
847
+ },
848
+ "&.Mui-checked": {
849
+ color: fg2.brandPrimary
850
+ },
851
+ "&.Mui-checked:hover": {
852
+ color: colors2.brand[700]
853
+ },
854
+ "&.Mui-focusVisible": {
855
+ outline: "none",
856
+ boxShadow: focusRings2.brand,
857
+ borderRadius: radius2.xs
858
+ },
859
+ "&.Mui-disabled": {
860
+ color: border2.primary
861
+ }
862
+ }
863
+ }
864
+ },
865
+ // ─── Radio ──────────────────────────────────────────────────────
866
+ MuiRadio: {
867
+ defaultProps: {
868
+ disableRipple: true
869
+ },
870
+ styleOverrides: {
871
+ root: {
872
+ color: border2.primary,
873
+ padding: 0,
874
+ "&:hover": {
875
+ backgroundColor: "transparent",
876
+ color: fg2.brandPrimary
877
+ },
878
+ "&.Mui-checked": {
879
+ color: fg2.brandPrimary
880
+ },
881
+ "&.Mui-checked:hover": {
882
+ color: colors2.brand[700]
883
+ },
884
+ "&.Mui-focusVisible": {
885
+ outline: "none",
886
+ boxShadow: focusRings2.brand,
887
+ borderRadius: radius2.full
888
+ },
889
+ "&.Mui-disabled": {
890
+ color: border2.primary
891
+ }
892
+ }
893
+ }
894
+ },
895
+ // ─── Switch ─────────────────────────────────────────────────────
896
+ MuiSwitch: {
897
+ defaultProps: {
898
+ disableRipple: true
899
+ },
900
+ styleOverrides: {
901
+ root: {
902
+ width: 44,
903
+ height: 24,
904
+ padding: 0
905
+ },
906
+ switchBase: {
907
+ padding: 2,
908
+ "&.Mui-checked": {
909
+ transform: "translateX(20px)",
910
+ color: fg2.white,
911
+ "& + .MuiSwitch-track": {
912
+ backgroundColor: fg2.brandPrimary,
913
+ opacity: 1
914
+ }
915
+ },
916
+ "&.Mui-checked:hover + .MuiSwitch-track": {
917
+ backgroundColor: colors2.brand[700]
918
+ },
919
+ "&.Mui-focusVisible .MuiSwitch-thumb": {
920
+ boxShadow: focusRings2.brand
921
+ },
922
+ "&.Mui-disabled .MuiSwitch-thumb": {
923
+ color: bg2.disabled
924
+ },
925
+ "&.Mui-disabled + .MuiSwitch-track": {
926
+ opacity: 0.5
927
+ }
928
+ },
929
+ thumb: {
930
+ width: 20,
931
+ height: 20,
932
+ boxShadow: "0px 1px 2px 0px #1018280d"
933
+ },
934
+ track: {
935
+ borderRadius: radius2.full,
936
+ backgroundColor: border2.secondary,
937
+ opacity: 1
938
+ }
939
+ }
940
+ },
941
+ // ─── Toggle Button ─────────────────────────────────────────────
942
+ MuiToggleButton: {
943
+ styleOverrides: {
944
+ root: {
945
+ borderColor: border2.primary,
946
+ color: text2.secondary,
947
+ fontSize: 14,
948
+ fontWeight: 600,
949
+ lineHeight: "20px",
950
+ height: 32,
951
+ padding: "6px 12px",
952
+ textTransform: "none",
953
+ "&:hover": {
954
+ backgroundColor: bg2.primaryHover,
955
+ borderColor: border2.primary
956
+ },
957
+ "&.Mui-selected": {
958
+ backgroundColor: bg2.brandPrimary,
959
+ color: buttonColors2.secondaryColor.fg,
960
+ borderColor: border2.brand,
961
+ "&:hover": {
962
+ backgroundColor: bg2.brandSecondary
963
+ }
964
+ },
965
+ "&:focus-visible": {
966
+ boxShadow: focusRings2.brandShadowXs
967
+ }
968
+ }
969
+ }
970
+ },
971
+ MuiToggleButtonGroup: {
972
+ styleOverrides: {
973
+ root: {
974
+ borderRadius: radius2.md,
975
+ overflow: "hidden"
976
+ },
977
+ grouped: {
978
+ borderRadius: 0,
979
+ "&:not(:first-of-type)": {
980
+ marginLeft: -1
981
+ },
982
+ "&:first-of-type": {
983
+ borderTopLeftRadius: radius2.md,
984
+ borderBottomLeftRadius: radius2.md
985
+ },
986
+ "&:last-of-type": {
987
+ borderTopRightRadius: radius2.md,
988
+ borderBottomRightRadius: radius2.md
989
+ }
990
+ }
991
+ }
992
+ },
993
+ // ─── Card ───────────────────────────────────────────────────────
994
+ MuiCard: {
995
+ defaultProps: {
996
+ elevation: 0
997
+ },
998
+ styleOverrides: {
999
+ root: {
1000
+ borderRadius: radius2.xl,
1001
+ border: `1px solid ${border2.secondary}`,
1002
+ backgroundColor: bg2.primary,
1003
+ overflow: "hidden"
1004
+ }
1005
+ }
1006
+ },
1007
+ MuiCardContent: {
1008
+ styleOverrides: {
1009
+ root: {
1010
+ padding: "24px",
1011
+ "&:last-child": {
1012
+ paddingBottom: "24px"
1013
+ }
1014
+ }
1015
+ }
1016
+ },
1017
+ MuiCardHeader: {
1018
+ styleOverrides: {
1019
+ root: {
1020
+ padding: "24px 24px 0 24px"
1021
+ },
1022
+ title: {
1023
+ fontSize: 18,
1024
+ fontWeight: 600,
1025
+ lineHeight: "28px"
1026
+ },
1027
+ subheader: {
1028
+ fontSize: 14,
1029
+ lineHeight: "20px",
1030
+ marginTop: 4
1031
+ },
1032
+ action: {
1033
+ marginTop: -4,
1034
+ marginRight: -4
1035
+ }
1036
+ }
1037
+ },
1038
+ // ─── Paper ──────────────────────────────────────────────────────
1039
+ MuiPaper: {
1040
+ defaultProps: {
1041
+ elevation: 0
1042
+ },
1043
+ styleOverrides: {
1044
+ root: {
1045
+ backgroundImage: "none"
1046
+ },
1047
+ rounded: {
1048
+ borderRadius: radius2.lg
1049
+ },
1050
+ elevation1: {
1051
+ boxShadow: tokenShadows.xs,
1052
+ border: `1px solid ${border2.secondary}`
1053
+ },
1054
+ elevation2: {
1055
+ boxShadow: tokenShadows.sm,
1056
+ border: `1px solid ${border2.secondary}`
1057
+ },
1058
+ elevation3: {
1059
+ boxShadow: tokenShadows.md,
1060
+ border: `1px solid ${border2.secondary}`
1061
+ },
1062
+ elevation4: {
1063
+ boxShadow: tokenShadows.lg,
1064
+ border: `1px solid ${border2.secondary}`
1065
+ },
1066
+ elevation8: {
1067
+ boxShadow: tokenShadows.xl,
1068
+ border: `1px solid ${border2.secondary}`
1069
+ },
1070
+ elevation16: {
1071
+ boxShadow: tokenShadows["2xl"],
1072
+ border: `1px solid ${border2.secondary}`
1073
+ },
1074
+ elevation24: {
1075
+ boxShadow: tokenShadows["3xl"],
1076
+ border: `1px solid ${border2.secondary}`
1077
+ }
1078
+ }
1079
+ },
1080
+ // ─── Accordion ──────────────────────────────────────────────────
1081
+ MuiAccordion: {
1082
+ defaultProps: {
1083
+ disableGutters: true,
1084
+ elevation: 0
1085
+ },
1086
+ styleOverrides: {
1087
+ root: {
1088
+ border: `1px solid ${border2.secondary}`,
1089
+ borderRadius: radius2.lg,
1090
+ "&:not(:last-child)": {
1091
+ marginBottom: 8
1092
+ },
1093
+ "&:before": {
1094
+ display: "none"
1095
+ },
1096
+ "&.Mui-expanded": {
1097
+ margin: 0,
1098
+ marginBottom: 8,
1099
+ borderRadius: radius2.lg
1100
+ }
1101
+ }
1102
+ }
1103
+ },
1104
+ MuiAccordionSummary: {
1105
+ styleOverrides: {
1106
+ root: {
1107
+ padding: "0 24px",
1108
+ minHeight: 56,
1109
+ "&.Mui-expanded": {
1110
+ minHeight: 56,
1111
+ borderBottom: `1px solid ${border2.secondary}`
1112
+ }
1113
+ },
1114
+ content: {
1115
+ margin: "12px 0",
1116
+ "&.Mui-expanded": {
1117
+ margin: "12px 0"
1118
+ }
1119
+ }
1120
+ }
1121
+ },
1122
+ MuiAccordionDetails: {
1123
+ styleOverrides: {
1124
+ root: {
1125
+ padding: "24px"
1126
+ }
1127
+ }
1128
+ },
1129
+ // ─── AppBar ─────────────────────────────────────────────────────
1130
+ MuiAppBar: {
1131
+ defaultProps: {
1132
+ elevation: 0,
1133
+ color: "transparent"
1134
+ },
1135
+ styleOverrides: {
1136
+ root: {
1137
+ borderBottom: `1px solid ${border2.secondary}`,
1138
+ backgroundColor: bg2.primary
1139
+ }
1140
+ }
1141
+ },
1142
+ MuiToolbar: {
1143
+ styleOverrides: {
1144
+ root: {
1145
+ minHeight: 64,
1146
+ "@media (min-width: 600px)": {
1147
+ minHeight: 64
1148
+ }
1149
+ },
1150
+ dense: {
1151
+ minHeight: 48,
1152
+ "@media (min-width: 600px)": {
1153
+ minHeight: 48
1154
+ }
1155
+ }
1156
+ }
1157
+ },
1158
+ // ─── Chip ───────────────────────────────────────────────────────
1159
+ MuiChip: {
1160
+ styleOverrides: {
1161
+ root: {
1162
+ borderRadius: radius2.md
1163
+ },
1164
+ label: {
1165
+ fontWeight: 500
1166
+ },
1167
+ sizeSmall: {
1168
+ fontSize: 12,
1169
+ height: 20
1170
+ },
1171
+ sizeMedium: {
1172
+ fontSize: 14,
1173
+ height: 24,
1174
+ "& .MuiChip-deleteIcon": { fontSize: 16 }
1175
+ },
1176
+ colorDefault: {
1177
+ "&.MuiChip-filled": {
1178
+ backgroundColor: colors2.gray[50],
1179
+ color: colors2.gray[700],
1180
+ "& .MuiChip-deleteIcon": { color: colors2.gray[400] }
1181
+ }
1182
+ },
1183
+ colorPrimary: {
1184
+ "&.MuiChip-filled": {
1185
+ backgroundColor: colors2.brand[50],
1186
+ color: colors2.brand[700],
1187
+ "& .MuiChip-deleteIcon": { color: colors2.brand[400] }
1188
+ }
1189
+ },
1190
+ colorSecondary: {
1191
+ "&.MuiChip-filled": {
1192
+ backgroundColor: colors2.gray[50],
1193
+ color: colors2.gray[700],
1194
+ "& .MuiChip-deleteIcon": { color: colors2.gray[400] }
1195
+ }
1196
+ },
1197
+ colorError: {
1198
+ "&.MuiChip-filled": {
1199
+ backgroundColor: colors2.error[50],
1200
+ color: colors2.error[700],
1201
+ "& .MuiChip-deleteIcon": { color: colors2.error[400] }
1202
+ }
1203
+ },
1204
+ colorWarning: {
1205
+ "&.MuiChip-filled": {
1206
+ backgroundColor: colors2.warning[50],
1207
+ color: colors2.warning[700],
1208
+ "& .MuiChip-deleteIcon": { color: colors2.warning[400] }
1209
+ }
1210
+ },
1211
+ colorSuccess: {
1212
+ "&.MuiChip-filled": {
1213
+ backgroundColor: colors2.success[50],
1214
+ color: colors2.success[700],
1215
+ "& .MuiChip-deleteIcon": { color: colors2.success[400] }
1216
+ }
1217
+ },
1218
+ colorInfo: {
1219
+ "&.MuiChip-filled": {
1220
+ backgroundColor: colors2.blue[50],
1221
+ color: colors2.blue[700],
1222
+ "& .MuiChip-deleteIcon": { color: colors2.blue[400] }
1223
+ }
1224
+ }
1225
+ }
1226
+ },
1227
+ // ─── Form Control / Label ───────────────────────────────────────
1228
+ MuiFormControlLabel: {
1229
+ styleOverrides: {
1230
+ root: {
1231
+ marginLeft: 0,
1232
+ gap: 8
1233
+ },
1234
+ label: {
1235
+ fontSize: 14,
1236
+ lineHeight: "20px",
1237
+ fontWeight: 500,
1238
+ color: text2.secondary
1239
+ }
1240
+ }
1241
+ },
1242
+ // ─── Table ───────────────────────────────────────────────────────
1243
+ MuiTable: {
1244
+ styleOverrides: {
1245
+ root: {
1246
+ borderCollapse: "separate",
1247
+ borderSpacing: 0
1248
+ }
1249
+ }
1250
+ },
1251
+ MuiTableCell: {
1252
+ styleOverrides: {
1253
+ root: {
1254
+ borderBottom: `1px solid ${border2.secondary}`,
1255
+ padding: "16px 24px",
1256
+ fontSize: 14,
1257
+ lineHeight: "20px",
1258
+ color: fg2.tertiary
1259
+ },
1260
+ head: {
1261
+ backgroundColor: bg2.secondary,
1262
+ color: fg2.tertiary,
1263
+ fontWeight: 500,
1264
+ fontSize: 12,
1265
+ lineHeight: "18px"
1266
+ },
1267
+ body: {
1268
+ color: fg2.tertiary
1269
+ }
1270
+ }
1271
+ },
1272
+ MuiTableHead: {
1273
+ styleOverrides: {
1274
+ root: {
1275
+ backgroundColor: bg2.secondary,
1276
+ borderBottom: `1px solid ${border2.secondary}`
1277
+ }
1278
+ }
1279
+ },
1280
+ MuiTableRow: {
1281
+ styleOverrides: {
1282
+ root: {
1283
+ "&:last-child td, &:last-child th": {
1284
+ border: 0
1285
+ },
1286
+ "&:hover": {
1287
+ backgroundColor: bg2.primaryHover
1288
+ },
1289
+ "&.Mui-selected": {
1290
+ backgroundColor: bg2.brandPrimary,
1291
+ "&:hover": {
1292
+ backgroundColor: bg2.brandPrimary
1293
+ }
1294
+ }
1295
+ }
1296
+ }
1297
+ },
1298
+ MuiTableContainer: {
1299
+ styleOverrides: {
1300
+ root: {
1301
+ borderRadius: radius2.xl,
1302
+ border: `1px solid ${border2.secondary}`,
1303
+ boxShadow: "none"
1304
+ }
1305
+ }
1306
+ },
1307
+ // ─── Badge ──────────────────────────────────────────────────────
1308
+ MuiBadge: {
1309
+ styleOverrides: {
1310
+ standard: {
1311
+ fontWeight: 500,
1312
+ fontSize: 12,
1313
+ lineHeight: "18px",
1314
+ minWidth: 20,
1315
+ height: 20,
1316
+ borderRadius: radius2.full
1317
+ },
1318
+ colorPrimary: {
1319
+ backgroundColor: bg2.brandSolid
1320
+ },
1321
+ colorError: {
1322
+ backgroundColor: bg2.errorSolid
1323
+ },
1324
+ colorSuccess: {
1325
+ backgroundColor: bg2.successSolid
1326
+ },
1327
+ colorWarning: {
1328
+ backgroundColor: bg2.warningSolid
1329
+ },
1330
+ dot: {
1331
+ minWidth: 8,
1332
+ height: 8,
1333
+ borderRadius: radius2.full
1334
+ }
1335
+ }
1336
+ },
1337
+ // ─── Divider ────────────────────────────────────────────────────
1338
+ MuiDivider: {
1339
+ styleOverrides: {
1340
+ root: {
1341
+ borderColor: border2.secondary
1342
+ }
1343
+ }
1344
+ },
1345
+ // ─── List ───────────────────────────────────────────────────────
1346
+ MuiList: {
1347
+ styleOverrides: {
1348
+ root: {
1349
+ padding: 4
1350
+ }
1351
+ }
1352
+ },
1353
+ MuiListItemButton: {
1354
+ styleOverrides: {
1355
+ root: {
1356
+ borderRadius: radius2.sm,
1357
+ padding: "8px 12px",
1358
+ "&:hover": {
1359
+ backgroundColor: bg2.primaryHover
1360
+ },
1361
+ "&.Mui-selected": {
1362
+ backgroundColor: bg2.brandPrimary,
1363
+ color: buttonColors2.secondaryColor.fg,
1364
+ "&:hover": {
1365
+ backgroundColor: bg2.brandSecondary
1366
+ }
1367
+ }
1368
+ }
1369
+ }
1370
+ },
1371
+ MuiListItemIcon: {
1372
+ styleOverrides: {
1373
+ root: {
1374
+ minWidth: 36,
1375
+ color: fg2.quaternary
1376
+ }
1377
+ }
1378
+ },
1379
+ MuiListItemText: {
1380
+ styleOverrides: {
1381
+ primary: {
1382
+ fontSize: 14,
1383
+ lineHeight: "20px",
1384
+ fontWeight: 500,
1385
+ color: text2.secondary
1386
+ },
1387
+ secondary: {
1388
+ fontSize: 14,
1389
+ lineHeight: "20px",
1390
+ color: text2.quaternary
1391
+ }
1392
+ }
1393
+ },
1394
+ // ─── Tooltip ────────────────────────────────────────────────────
1395
+ MuiTooltip: {
1396
+ styleOverrides: {
1397
+ tooltip: {
1398
+ backgroundColor: bg2.primarySolid,
1399
+ color: text2.white,
1400
+ fontSize: 12,
1401
+ lineHeight: "18px",
1402
+ fontWeight: 600,
1403
+ padding: "8px 12px",
1404
+ borderRadius: radius2.md,
1405
+ boxShadow: tokenShadows.lg
1406
+ },
1407
+ arrow: {
1408
+ color: bg2.primarySolid
1409
+ }
1410
+ }
1411
+ },
1412
+ // ─── Alert ──────────────────────────────────────────────────────
1413
+ MuiAlert: {
1414
+ defaultProps: {
1415
+ variant: "standard"
1416
+ },
1417
+ styleOverrides: {
1418
+ root: {
1419
+ borderRadius: radius2.xl,
1420
+ fontSize: 14,
1421
+ lineHeight: "20px",
1422
+ padding: "12px 16px",
1423
+ alignItems: "center"
1424
+ },
1425
+ standardError: {
1426
+ backgroundColor: bg2.errorPrimary,
1427
+ color: colors2.error[700],
1428
+ border: `1px solid ${border2.error}`,
1429
+ "& .MuiAlert-icon": {
1430
+ color: fg2.errorPrimary
1431
+ }
1432
+ },
1433
+ standardWarning: {
1434
+ backgroundColor: bg2.warningPrimary,
1435
+ color: colors2.warning[700],
1436
+ border: `1px solid ${colors2.warning[300]}`,
1437
+ "& .MuiAlert-icon": {
1438
+ color: fg2.warningPrimary
1439
+ }
1440
+ },
1441
+ standardSuccess: {
1442
+ backgroundColor: bg2.successPrimary,
1443
+ color: colors2.success[700],
1444
+ border: `1px solid ${colors2.success[300]}`,
1445
+ "& .MuiAlert-icon": {
1446
+ color: fg2.successPrimary
1447
+ }
1448
+ },
1449
+ standardInfo: {
1450
+ backgroundColor: colors2.blue[50],
1451
+ color: colors2.blue[700],
1452
+ border: `1px solid ${colors2.blue[300]}`,
1453
+ "& .MuiAlert-icon": {
1454
+ color: colors2.blue[600]
1455
+ }
1456
+ },
1457
+ icon: {
1458
+ padding: 0,
1459
+ marginRight: 12
1460
+ }
1461
+ }
1462
+ },
1463
+ MuiAlertTitle: {
1464
+ styleOverrides: {
1465
+ root: {
1466
+ fontWeight: 600,
1467
+ fontSize: 14,
1468
+ lineHeight: "20px",
1469
+ marginBottom: 4
1470
+ }
1471
+ }
1472
+ },
1473
+ // ─── Backdrop ───────────────────────────────────────────────────
1474
+ MuiBackdrop: {
1475
+ styleOverrides: {
1476
+ root: {
1477
+ backgroundColor: "rgba(16, 24, 40, 0.7)"
1478
+ }
1479
+ }
1480
+ },
1481
+ // ─── Dialog ─────────────────────────────────────────────────────
1482
+ MuiDialog: {
1483
+ styleOverrides: {
1484
+ paper: {
1485
+ borderRadius: radius2.xl,
1486
+ boxShadow: tokenShadows.xl,
1487
+ padding: 0
1488
+ }
1489
+ }
1490
+ },
1491
+ MuiDialogTitle: {
1492
+ styleOverrides: {
1493
+ root: {
1494
+ fontSize: 18,
1495
+ lineHeight: "28px",
1496
+ fontWeight: 600,
1497
+ color: text2.primary,
1498
+ padding: "24px 24px 0"
1499
+ }
1500
+ }
1501
+ },
1502
+ MuiDialogContent: {
1503
+ styleOverrides: {
1504
+ root: {
1505
+ padding: "20px 24px",
1506
+ fontSize: 14,
1507
+ lineHeight: "20px",
1508
+ color: text2.tertiary
1509
+ }
1510
+ }
1511
+ },
1512
+ MuiDialogActions: {
1513
+ styleOverrides: {
1514
+ root: {
1515
+ padding: "0 24px 24px",
1516
+ gap: 12
1517
+ }
1518
+ }
1519
+ },
1520
+ // ─── Progress ───────────────────────────────────────────────────
1521
+ MuiLinearProgress: {
1522
+ styleOverrides: {
1523
+ root: {
1524
+ borderRadius: radius2.full,
1525
+ height: 8,
1526
+ backgroundColor: border2.secondary
1527
+ },
1528
+ barColorPrimary: {
1529
+ backgroundColor: fg2.brandPrimary,
1530
+ borderRadius: radius2.full
1531
+ },
1532
+ barColorSecondary: {
1533
+ backgroundColor: bg2.secondarySolid,
1534
+ borderRadius: radius2.full
1535
+ }
1536
+ }
1537
+ },
1538
+ MuiCircularProgress: {
1539
+ styleOverrides: {
1540
+ colorPrimary: {
1541
+ color: fg2.brandPrimary
1542
+ },
1543
+ colorSecondary: {
1544
+ color: bg2.secondarySolid
1545
+ }
1546
+ }
1547
+ },
1548
+ // ─── Skeleton ───────────────────────────────────────────────────
1549
+ MuiSkeleton: {
1550
+ defaultProps: {
1551
+ animation: "wave"
1552
+ },
1553
+ styleOverrides: {
1554
+ root: {
1555
+ backgroundColor: bg2.tertiary
1556
+ },
1557
+ rounded: {
1558
+ borderRadius: radius2.md
1559
+ },
1560
+ circular: {
1561
+ borderRadius: radius2.full
1562
+ }
1563
+ }
1564
+ },
1565
+ // ─── Snackbar ───────────────────────────────────────────────────
1566
+ MuiSnackbarContent: {
1567
+ styleOverrides: {
1568
+ root: {
1569
+ backgroundColor: bg2.primarySolid,
1570
+ color: text2.white,
1571
+ borderRadius: radius2.xl,
1572
+ boxShadow: tokenShadows.lg,
1573
+ fontSize: 14,
1574
+ lineHeight: "20px",
1575
+ fontWeight: 500,
1576
+ padding: "6px 16px"
1577
+ }
1578
+ }
1579
+ },
1580
+ // ─── Typography ─────────────────────────────────────────────────
1581
+ MuiTypography: {
1582
+ defaultProps: {
1583
+ variantMapping: {
1584
+ h1: "h1",
1585
+ h2: "h2",
1586
+ h3: "h3",
1587
+ h4: "h4",
1588
+ h5: "h5",
1589
+ h6: "h6",
1590
+ subtitle1: "p",
1591
+ subtitle2: "p",
1592
+ body1: "p",
1593
+ body2: "p",
1594
+ caption: "span",
1595
+ overline: "span"
1596
+ }
1597
+ }
1598
+ },
1599
+ // ─── DataGrid (@mui/x-data-grid) ──────────────────────────────
1600
+ // Not part of MUI core's Components<Theme> type, so we merge via assertion.
1601
+ ...{
1602
+ MuiDataGrid: {
1603
+ styleOverrides: {
1604
+ root: {
1605
+ border: `1px solid ${border2.secondary}`,
1606
+ borderRadius: radius2.xl,
1607
+ fontFamily: "inherit",
1608
+ "& .MuiDataGrid-withBorderColor": {
1609
+ borderColor: border2.secondary
1610
+ }
1611
+ },
1612
+ columnHeaders: {
1613
+ backgroundColor: bg2.secondary
1614
+ },
1615
+ columnHeader: {
1616
+ fontSize: 12,
1617
+ lineHeight: "18px",
1618
+ fontWeight: 500,
1619
+ color: fg2.tertiary,
1620
+ "&:focus, &:focus-within": {
1621
+ outline: "none"
1622
+ }
1623
+ },
1624
+ columnHeaderTitle: {
1625
+ fontWeight: 500
1626
+ },
1627
+ cell: {
1628
+ fontSize: 14,
1629
+ lineHeight: "20px",
1630
+ color: fg2.tertiary,
1631
+ "&:focus, &:focus-within": {
1632
+ outline: "none"
1633
+ }
1634
+ },
1635
+ row: {
1636
+ "&:hover": {
1637
+ backgroundColor: bg2.primaryHover
1638
+ },
1639
+ "&.Mui-selected": {
1640
+ backgroundColor: bg2.brandPrimary,
1641
+ "&:hover": {
1642
+ backgroundColor: bg2.brandPrimary
1643
+ }
1644
+ }
1645
+ },
1646
+ footerContainer: {
1647
+ borderTop: `1px solid ${border2.secondary}`
1648
+ },
1649
+ columnSeparator: {
1650
+ color: border2.secondary
1651
+ }
1652
+ }
1653
+ }
1654
+ }
1655
+ };
1656
+ }
1657
+ var components = buildComponents({
1658
+ colors,
1659
+ radius,
1660
+ focusRings,
1661
+ shadows,
1662
+ text,
1663
+ bg,
1664
+ fg,
1665
+ border,
1666
+ buttonColors});
1667
+
1668
+ // src/theme/shadows.ts
1669
+ function buildShadows(tokens) {
1670
+ const tokenShadows = tokens.shadows;
1671
+ return [
1672
+ "none",
1673
+ // 0
1674
+ tokenShadows.xs,
1675
+ // 1
1676
+ tokenShadows.sm,
1677
+ // 2
1678
+ tokenShadows.sm,
1679
+ // 3
1680
+ tokenShadows.md,
1681
+ // 4
1682
+ tokenShadows.md,
1683
+ // 5
1684
+ tokenShadows.md,
1685
+ // 6
1686
+ tokenShadows.lg,
1687
+ // 7
1688
+ tokenShadows.lg,
1689
+ // 8
1690
+ tokenShadows.lg,
1691
+ // 9
1692
+ tokenShadows.xl,
1693
+ // 10
1694
+ tokenShadows.xl,
1695
+ // 11
1696
+ tokenShadows.xl,
1697
+ // 12
1698
+ tokenShadows["2xl"],
1699
+ // 13
1700
+ tokenShadows["2xl"],
1701
+ // 14
1702
+ tokenShadows["2xl"],
1703
+ // 15
1704
+ tokenShadows["3xl"],
1705
+ // 16
1706
+ tokenShadows["3xl"],
1707
+ // 17
1708
+ tokenShadows["3xl"],
1709
+ // 18
1710
+ tokenShadows["3xl"],
1711
+ // 19
1712
+ tokenShadows["3xl"],
1713
+ // 20
1714
+ tokenShadows["3xl"],
1715
+ // 21
1716
+ tokenShadows["3xl"],
1717
+ // 22
1718
+ tokenShadows["3xl"],
1719
+ // 23
1720
+ tokenShadows["3xl"]
1721
+ // 24
1722
+ ];
1723
+ }
1724
+ var shadows2 = buildShadows({
1725
+ shadows
1726
+ });
1727
+ function buildThemeOptions(tokens) {
1728
+ return {
1729
+ palette: buildPalette(tokens),
1730
+ typography: buildTypography(tokens),
1731
+ components: buildComponents(tokens),
1732
+ shadows: buildShadows(tokens),
1733
+ shape: {
1734
+ borderRadius: tokens.radius.md
1735
+ }
1736
+ };
1737
+ }
1738
+ function buildTheme(tokens) {
1739
+ return createTheme(buildThemeOptions(tokens));
1740
+ }
1741
+
1742
+ // src/theme/presets/forest.ts
1743
+ var forestPreset = {
1744
+ name: "forest",
1745
+ defaultVariant: "light",
1746
+ variants: {
1747
+ light: {
1748
+ tokens: {
1749
+ colors,
1750
+ spacing,
1751
+ radius,
1752
+ shadows,
1753
+ focusRings,
1754
+ fontFamily,
1755
+ fontSize,
1756
+ lineHeight,
1757
+ fontWeight,
1758
+ display,
1759
+ container,
1760
+ widths,
1761
+ text,
1762
+ bg,
1763
+ fg,
1764
+ border,
1765
+ buttonColors,
1766
+ avatarColors,
1767
+ breadcrumbColors,
1768
+ iconColors,
1769
+ navColors,
1770
+ sliderColors,
1771
+ toggleColors,
1772
+ chartColors,
1773
+ alpha
1774
+ }
1775
+ }
1776
+ }
1777
+ };
1778
+
1779
+ // src/theme/presets/index.ts
1780
+ var presetRegistry = /* @__PURE__ */ new Map();
1781
+ presetRegistry.set(forestPreset.name, forestPreset);
1782
+ function getPreset(name) {
1783
+ return presetRegistry.get(name);
1784
+ }
1785
+ function registerPreset(preset) {
1786
+ presetRegistry.set(preset.name, preset);
1787
+ }
1788
+ function getAvailablePresets() {
1789
+ return Array.from(presetRegistry.keys());
1790
+ }
1791
+
1792
+ // src/theme/index.ts
1793
+ var forestThemeOptions = {
1794
+ palette,
1795
+ typography,
1796
+ components,
1797
+ shadows: shadows2,
1798
+ shape: {
1799
+ borderRadius: 8
1800
+ }
1801
+ };
1802
+ var forestTheme = createTheme(forestThemeOptions);
1803
+
1804
+ export { alpha, avatarColors, bg, border, breadcrumbColors, buildTheme, buildThemeOptions, buttonColors, chartColors, colors, components, container, display, fg, focusRings, fontFamily, fontSize, fontWeight, forestPreset, forestTheme, forestThemeOptions, getAvailablePresets, getPreset, iconColors, lineHeight, navColors, palette, radius, registerPreset, shadows, shadows2, sliderColors, spacing, text, toggleColors, typography, widths };
1805
+ //# sourceMappingURL=chunk-C3OBHPIS.mjs.map
1806
+ //# sourceMappingURL=chunk-C3OBHPIS.mjs.map