@omnitron-dev/prism 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/bin/prism.js +13 -0
  4. package/dist/accessibility/index.d.ts +157 -0
  5. package/dist/accessibility/index.js +186 -0
  6. package/dist/accessibility/index.js.map +1 -0
  7. package/dist/blocks/index.d.ts +1239 -0
  8. package/dist/blocks/index.js +1712 -0
  9. package/dist/blocks/index.js.map +1 -0
  10. package/dist/chunk-77KIJLPP.js +37 -0
  11. package/dist/chunk-77KIJLPP.js.map +1 -0
  12. package/dist/chunk-BTIT7WYH.js +339 -0
  13. package/dist/chunk-BTIT7WYH.js.map +1 -0
  14. package/dist/chunk-BV32OJ2A.js +1409 -0
  15. package/dist/chunk-BV32OJ2A.js.map +1 -0
  16. package/dist/chunk-DDY7TLUI.js +139 -0
  17. package/dist/chunk-DDY7TLUI.js.map +1 -0
  18. package/dist/chunk-DXXZ3ITR.js +4227 -0
  19. package/dist/chunk-DXXZ3ITR.js.map +1 -0
  20. package/dist/chunk-E3XANPTO.js +2319 -0
  21. package/dist/chunk-E3XANPTO.js.map +1 -0
  22. package/dist/chunk-FU52GL2E.js +3 -0
  23. package/dist/chunk-FU52GL2E.js.map +1 -0
  24. package/dist/chunk-GYDT5EKX.js +16505 -0
  25. package/dist/chunk-GYDT5EKX.js.map +1 -0
  26. package/dist/chunk-HO2GKTWJ.js +28 -0
  27. package/dist/chunk-HO2GKTWJ.js.map +1 -0
  28. package/dist/chunk-JDTC2SBY.js +140 -0
  29. package/dist/chunk-JDTC2SBY.js.map +1 -0
  30. package/dist/chunk-JNU4QHJK.js +6 -0
  31. package/dist/chunk-JNU4QHJK.js.map +1 -0
  32. package/dist/chunk-LAEY5USO.js +2621 -0
  33. package/dist/chunk-LAEY5USO.js.map +1 -0
  34. package/dist/chunk-UR6X3W5I.js +530 -0
  35. package/dist/chunk-UR6X3W5I.js.map +1 -0
  36. package/dist/chunk-WC2WM2JD.js +883 -0
  37. package/dist/chunk-WC2WM2JD.js.map +1 -0
  38. package/dist/chunk-XWL6J6IO.js +40 -0
  39. package/dist/chunk-XWL6J6IO.js.map +1 -0
  40. package/dist/cli/index.js +2695 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/config-BA6IeTq9.d.ts +100 -0
  43. package/dist/core/index.d.ts +454 -0
  44. package/dist/core/index.js +9 -0
  45. package/dist/core/index.js.map +1 -0
  46. package/dist/forms/index.d.ts +562 -0
  47. package/dist/forms/index.js +545 -0
  48. package/dist/forms/index.js.map +1 -0
  49. package/dist/hooks/index.d.ts +7 -0
  50. package/dist/hooks/index.js +10 -0
  51. package/dist/hooks/index.js.map +1 -0
  52. package/dist/http/index.d.ts +233 -0
  53. package/dist/http/index.js +282 -0
  54. package/dist/http/index.js.map +1 -0
  55. package/dist/index-odhPSv9I.d.ts +2491 -0
  56. package/dist/index.css +131 -0
  57. package/dist/index.css.map +1 -0
  58. package/dist/index.d.ts +9109 -0
  59. package/dist/index.js +13280 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/layouts/index.d.ts +854 -0
  62. package/dist/layouts/index.js +6 -0
  63. package/dist/layouts/index.js.map +1 -0
  64. package/dist/netron/index.d.ts +4 -0
  65. package/dist/netron/index.js +4 -0
  66. package/dist/netron/index.js.map +1 -0
  67. package/dist/registry/index.d.ts +352 -0
  68. package/dist/registry/index.js +4 -0
  69. package/dist/registry/index.js.map +1 -0
  70. package/dist/registry-BrDNftd5.d.ts +574 -0
  71. package/dist/settings-plpR26Xk.d.ts +455 -0
  72. package/dist/state/index.d.ts +981 -0
  73. package/dist/state/index.js +5 -0
  74. package/dist/state/index.js.map +1 -0
  75. package/dist/theme/index.d.ts +1049 -0
  76. package/dist/theme/index.js +5 -0
  77. package/dist/theme/index.js.map +1 -0
  78. package/dist/theme-CrXLfP1c.d.ts +389 -0
  79. package/dist/types/index.d.ts +146 -0
  80. package/dist/types/index.js +5 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/use-timeout-D7U3EAtH.d.ts +808 -0
  83. package/package.json +194 -0
@@ -0,0 +1,4227 @@
1
+ import { buttonClasses } from '@mui/material/Button';
2
+ import { iconButtonClasses } from '@mui/material/IconButton';
3
+ import { accordionClasses } from '@mui/material/Accordion';
4
+ import { accordionSummaryClasses } from '@mui/material/AccordionSummary';
5
+ import { autocompleteClasses } from '@mui/material/Autocomplete';
6
+ import SvgIcon, { svgIconClasses } from '@mui/material/SvgIcon';
7
+ import { tableRowClasses } from '@mui/material/TableRow';
8
+ import { tableCellClasses } from '@mui/material/TableCell';
9
+ import { stepIconClasses } from '@mui/material/StepIcon';
10
+ import { stepLabelClasses } from '@mui/material/StepLabel';
11
+ import { toggleButtonClasses } from '@mui/material/ToggleButton';
12
+ import { paginationItemClasses } from '@mui/material/PaginationItem';
13
+ import { chipClasses } from '@mui/material/Chip';
14
+ import { inputBaseClasses } from '@mui/material/InputBase';
15
+ import { outlinedInputClasses } from '@mui/material/OutlinedInput';
16
+ import { filledInputClasses } from '@mui/material/FilledInput';
17
+ import { inputAdornmentClasses } from '@mui/material/InputAdornment';
18
+ import { inputLabelClasses } from '@mui/material/InputLabel';
19
+ import { checkboxClasses } from '@mui/material/Checkbox';
20
+ import { radioClasses } from '@mui/material/Radio';
21
+ import { switchClasses } from '@mui/material/Switch';
22
+ import { formLabelClasses } from '@mui/material/FormLabel';
23
+ import { jsx } from 'react/jsx-runtime';
24
+ import { tabClasses } from '@mui/material/Tab';
25
+ import { createTheme, responsiveFontSizes } from '@mui/material/styles';
26
+ import * as locales from '@mui/material/locale';
27
+
28
+ // src/theme/utils/color.ts
29
+ function hexToRgb(hex) {
30
+ const h = hex.replace("#", "");
31
+ const expanded = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
32
+ const bigint = parseInt(expanded, 16);
33
+ const r = bigint >> 16 & 255;
34
+ const g = bigint >> 8 & 255;
35
+ const b = bigint & 255;
36
+ return [r, g, b];
37
+ }
38
+ function hexToRgbChannel(hex) {
39
+ const [r, g, b] = hexToRgb(hex);
40
+ return `${r} ${g} ${b}`;
41
+ }
42
+ function rgbToHex(r, g, b) {
43
+ const to2 = (n) => Math.round(n).toString(16).padStart(2, "0");
44
+ return `#${to2(r)}${to2(g)}${to2(b)}`.toUpperCase();
45
+ }
46
+ function hexToHsl(hex) {
47
+ const [r, g, b] = hexToRgb(hex);
48
+ const r1 = r / 255;
49
+ const g1 = g / 255;
50
+ const b1 = b / 255;
51
+ const max = Math.max(r1, g1, b1);
52
+ const min = Math.min(r1, g1, b1);
53
+ let h = 0;
54
+ let s = 0;
55
+ const l = (max + min) / 2;
56
+ const d = max - min;
57
+ if (d !== 0) {
58
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
59
+ switch (max) {
60
+ case r1:
61
+ h = (g1 - b1) / d + (g1 < b1 ? 6 : 0);
62
+ break;
63
+ case g1:
64
+ h = (b1 - r1) / d + 2;
65
+ break;
66
+ default:
67
+ h = (r1 - g1) / d + 4;
68
+ }
69
+ h /= 6;
70
+ }
71
+ return { h: h * 360, s: s * 100, l: l * 100 };
72
+ }
73
+ function hslToHex(h, s, l) {
74
+ const s1 = s / 100;
75
+ const l1 = l / 100;
76
+ const c = (1 - Math.abs(2 * l1 - 1)) * s1;
77
+ const x = c * (1 - Math.abs(h / 60 % 2 - 1));
78
+ const m = l1 - c / 2;
79
+ let r1;
80
+ let g1;
81
+ let b1;
82
+ if (h >= 0 && h < 60) {
83
+ [r1, g1, b1] = [c, x, 0];
84
+ } else if (h >= 60 && h < 120) {
85
+ [r1, g1, b1] = [x, c, 0];
86
+ } else if (h >= 120 && h < 180) {
87
+ [r1, g1, b1] = [0, c, x];
88
+ } else if (h >= 180 && h < 240) {
89
+ [r1, g1, b1] = [0, x, c];
90
+ } else if (h >= 240 && h < 300) {
91
+ [r1, g1, b1] = [x, 0, c];
92
+ } else {
93
+ [r1, g1, b1] = [c, 0, x];
94
+ }
95
+ return rgbToHex(Math.round((r1 + m) * 255), Math.round((g1 + m) * 255), Math.round((b1 + m) * 255));
96
+ }
97
+ function rgba(color, alpha) {
98
+ const [r, g, b] = hexToRgb(color);
99
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
100
+ }
101
+ function cssVarRgba(channel, alpha) {
102
+ return `rgba(${channel} / ${alpha})`;
103
+ }
104
+ function generatePaletteColorWithChannels(color) {
105
+ return {
106
+ ...color,
107
+ lighterChannel: hexToRgbChannel(color.lighter),
108
+ lightChannel: hexToRgbChannel(color.light),
109
+ mainChannel: hexToRgbChannel(color.main),
110
+ darkChannel: hexToRgbChannel(color.dark),
111
+ darkerChannel: hexToRgbChannel(color.darker),
112
+ contrastTextChannel: hexToRgbChannel(color.contrastText)
113
+ };
114
+ }
115
+ function generateColorScaleWithChannels(scale) {
116
+ const shadeKeys = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
117
+ const channels = {};
118
+ for (const key of shadeKeys) {
119
+ const channelKey = `${key}Channel`;
120
+ channels[channelKey] = hexToRgbChannel(scale[key]);
121
+ }
122
+ return { ...scale, ...channels };
123
+ }
124
+ function clamp(n, min, max) {
125
+ return Math.max(min, Math.min(max, n));
126
+ }
127
+ function generateColorScale(baseColor) {
128
+ const base = hexToHsl(baseColor);
129
+ const tones = [
130
+ { key: 50, lDelta: 40 },
131
+ { key: 100, lDelta: 32 },
132
+ { key: 200, lDelta: 24 },
133
+ { key: 300, lDelta: 16 },
134
+ { key: 400, lDelta: 8 },
135
+ { key: 500, lDelta: 0 },
136
+ { key: 600, lDelta: -8 },
137
+ { key: 700, lDelta: -16 },
138
+ { key: 800, lDelta: -24 },
139
+ { key: 900, lDelta: -32 },
140
+ { key: 950, lDelta: -40 }
141
+ ];
142
+ const scale = {};
143
+ for (const { key, lDelta } of tones) {
144
+ const l = clamp(base.l + lDelta, 5, 95);
145
+ scale[key] = hslToHex(base.h, base.s, l);
146
+ }
147
+ return scale;
148
+ }
149
+ function getLuminanceForContrast(hex) {
150
+ const rgb = hex.replace("#", "").match(/.{2}/g);
151
+ if (!rgb) return 0;
152
+ const [r, g, b] = rgb.map((c) => {
153
+ const val = parseInt(c, 16) / 255;
154
+ return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);
155
+ });
156
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
157
+ }
158
+ function getContrastTextColor(bgColor) {
159
+ const luminance = getLuminanceForContrast(bgColor);
160
+ return luminance < 0.4 ? "#FFFFFF" : "#212121";
161
+ }
162
+ function createPaletteColorFromScale(scale, mode = "light") {
163
+ const mainColor = mode === "dark" ? scale[400] : scale[500];
164
+ const contrastText = getContrastTextColor(mainColor);
165
+ if (mode === "dark") {
166
+ return {
167
+ lighter: scale[950],
168
+ light: scale[700],
169
+ main: mainColor,
170
+ dark: scale[300],
171
+ darker: scale[100],
172
+ contrastText
173
+ };
174
+ }
175
+ return {
176
+ lighter: scale[50],
177
+ light: scale[400],
178
+ main: mainColor,
179
+ dark: scale[600],
180
+ darker: scale[900],
181
+ contrastText
182
+ };
183
+ }
184
+ function invertColorScale(scale) {
185
+ return {
186
+ 50: scale[950],
187
+ 100: scale[800],
188
+ 200: scale[700],
189
+ 300: scale[600],
190
+ 400: scale[500],
191
+ 500: scale[400],
192
+ 600: scale[300],
193
+ 700: scale[200],
194
+ 800: scale[100],
195
+ 900: scale[50],
196
+ 950: "#FFFFFF"
197
+ };
198
+ }
199
+ function getLuminance(hex) {
200
+ const [r, g, b] = hexToRgb(hex).map((c) => {
201
+ const sRgb = c / 255;
202
+ return sRgb <= 0.03928 ? sRgb / 12.92 : Math.pow((sRgb + 0.055) / 1.055, 2.4);
203
+ });
204
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
205
+ }
206
+ function getContrastRatio(color1, color2) {
207
+ const l1 = getLuminance(color1);
208
+ const l2 = getLuminance(color2);
209
+ const lighter = Math.max(l1, l2);
210
+ const darker = Math.min(l1, l2);
211
+ return (lighter + 0.05) / (darker + 0.05);
212
+ }
213
+ function isLightColor(hex) {
214
+ return getLuminance(hex) > 0.5;
215
+ }
216
+ function getContrastText(background, lightText = "#FFFFFF", darkText = "#000000") {
217
+ return isLightColor(background) ? darkText : lightText;
218
+ }
219
+ function lighten(hex, amount) {
220
+ const hsl = hexToHsl(hex);
221
+ const newL = clamp(hsl.l + amount, 0, 100);
222
+ return hslToHex(hsl.h, hsl.s, newL);
223
+ }
224
+ function darken(hex, amount) {
225
+ const hsl = hexToHsl(hex);
226
+ const newL = clamp(hsl.l - amount, 0, 100);
227
+ return hslToHex(hsl.h, hsl.s, newL);
228
+ }
229
+ function mix(color1, color2, weight = 0.5) {
230
+ const [r1, g1, b1] = hexToRgb(color1);
231
+ const [r2, g2, b2] = hexToRgb(color2);
232
+ const w = clamp(weight, 0, 1);
233
+ const newR = Math.round(r1 * w + r2 * (1 - w));
234
+ const newG = Math.round(g1 * w + g2 * (1 - w));
235
+ const newB = Math.round(b1 * w + b2 * (1 - w));
236
+ return rgbToHex(newR, newG, newB);
237
+ }
238
+ function validateOpacity(opacity, color) {
239
+ const isCSSVar = (val) => val.includes("var(--");
240
+ const isPercentage = (val) => val.trim().endsWith("%");
241
+ const errors = {
242
+ invalid: `[varAlpha]: Invalid opacity "${opacity}" for "${color}".`,
243
+ range: "Must be a number between 0 and 1 (e.g., 0.48).",
244
+ format: 'Must be a percentage (e.g., "48%") or CSS variable (e.g., "var(--opacity)").'
245
+ };
246
+ if (typeof opacity === "string") {
247
+ if (isPercentage(opacity)) return opacity;
248
+ if (isCSSVar(opacity)) return `calc(${opacity} * 100%)`;
249
+ const parsed = parseFloat(opacity.trim());
250
+ if (!isNaN(parsed) && parsed >= 0 && parsed <= 1) {
251
+ return `${Number((parsed * 100).toFixed(2))}%`;
252
+ }
253
+ throw new Error(`${errors.invalid} ${errors.format}`);
254
+ }
255
+ if (typeof opacity === "number") {
256
+ if (opacity >= 0 && opacity <= 1) {
257
+ return `${Number((opacity * 100).toFixed(2))}%`;
258
+ }
259
+ throw new Error(`${errors.invalid} ${errors.range}`);
260
+ }
261
+ throw new Error(`${errors.invalid}`);
262
+ }
263
+ function varAlpha(color, opacity = 1) {
264
+ if (!color?.trim()) {
265
+ throw new Error("[varAlpha]: Color is undefined or empty!");
266
+ }
267
+ const isUnsupported = color.startsWith("#") || color.startsWith("rgb(") || color.startsWith("rgba(") || !color.includes("var") && color.includes("Channel");
268
+ if (isUnsupported) {
269
+ throw new Error(
270
+ [
271
+ `[varAlpha]: Unsupported color format "${color}"`,
272
+ "\u2705 Supported formats:",
273
+ ' - RGB channels: "0 184 217"',
274
+ ' - CSS variables: "var(--palette-primary-mainChannel)"',
275
+ " - currentColor",
276
+ "\u274C Unsupported formats:",
277
+ ' - Hex: "#00B8D9"',
278
+ ' - RGB: "rgb(0, 184, 217)"',
279
+ ' - RGBA: "rgba(0, 184, 217, 1)"'
280
+ ].join("\n")
281
+ );
282
+ }
283
+ const alpha = validateOpacity(opacity, color);
284
+ if (color.toLowerCase() === "currentcolor") {
285
+ return `color-mix(in srgb, currentColor ${alpha}, transparent)`;
286
+ }
287
+ return `rgba(${color} / ${alpha})`;
288
+ }
289
+
290
+ // src/theme/colors/base.ts
291
+ var grey = {
292
+ 50: "#F7FAFC",
293
+ 100: "#EBF2F5",
294
+ 200: "#DBE6EB",
295
+ 300: "#C3D3DB",
296
+ 400: "#9CAEB8",
297
+ 500: "#77878F",
298
+ 600: "#4D595E",
299
+ 700: "#262D30",
300
+ 800: "#1B2124",
301
+ 900: "#111417",
302
+ 950: "#06080A"
303
+ };
304
+ var blue = {
305
+ 50: "#EAF3FD",
306
+ 100: "#C6DDFB",
307
+ 200: "#A1C7F8",
308
+ 300: "#7DB1F5",
309
+ 400: "#589BF3",
310
+ 500: "#3385F0",
311
+ 600: "#2B71CC",
312
+ 700: "#245DA8",
313
+ 800: "#1C4984",
314
+ 900: "#143560",
315
+ 950: "#0A1B30"
316
+ };
317
+ var green = {
318
+ 50: "#E6F5F0",
319
+ 100: "#BBE4D5",
320
+ 200: "#8ED3BA",
321
+ 300: "#62C29F",
322
+ 400: "#35B084",
323
+ 500: "#099F69",
324
+ 600: "#088759",
325
+ 700: "#066F49",
326
+ 800: "#05573A",
327
+ 900: "#04402A",
328
+ 950: "#022015"
329
+ };
330
+ var purple = {
331
+ 50: "#F2E4FE",
332
+ 100: "#E6CAFE",
333
+ 200: "#D6A8FD",
334
+ 300: "#C686FC",
335
+ 400: "#B663FB",
336
+ 500: "#A641FA",
337
+ 600: "#8D37D5",
338
+ 700: "#742DAF",
339
+ 800: "#5B2489",
340
+ 900: "#421A64",
341
+ 950: "#210D32"
342
+ };
343
+ var red = {
344
+ 50: "#F9E2E6",
345
+ 100: "#F2C1CA",
346
+ 200: "#E99AA8",
347
+ 300: "#E17286",
348
+ 400: "#D84A63",
349
+ 500: "#D02241",
350
+ 600: "#B11D37",
351
+ 700: "#91182D",
352
+ 800: "#721324",
353
+ 900: "#530E1A",
354
+ 950: "#3A0A12"
355
+ };
356
+ var orange = {
357
+ 50: "#FEEFE1",
358
+ 100: "#FCDFC4",
359
+ 200: "#FBCB9D",
360
+ 300: "#F9B677",
361
+ 400: "#F8A250",
362
+ 500: "#F68D2A",
363
+ 600: "#D17824",
364
+ 700: "#AC631D",
365
+ 800: "#874E17",
366
+ 900: "#623811",
367
+ 950: "#372412"
368
+ };
369
+ var lightBlue = {
370
+ 50: "#E0F3FA",
371
+ 100: "#BCE6F4",
372
+ 200: "#90D6EC",
373
+ 300: "#64C6E5",
374
+ 400: "#39B6DD",
375
+ 500: "#0DA6D6",
376
+ 600: "#0B8DB6",
377
+ 700: "#097496",
378
+ 800: "#075B76",
379
+ 900: "#054256",
380
+ 950: "#03212B"
381
+ };
382
+ var basic = {
383
+ white: "#FFFFFF",
384
+ black: "#000000"
385
+ };
386
+ var baseColors = {
387
+ grey,
388
+ blue,
389
+ green,
390
+ purple,
391
+ red,
392
+ orange,
393
+ lightBlue,
394
+ basic
395
+ };
396
+
397
+ // src/theme/palette/builder.ts
398
+ function getLuminance2(hex) {
399
+ const rgb = hex.replace("#", "").match(/.{2}/g);
400
+ if (!rgb) return 0;
401
+ const [r, g, b] = rgb.map((c) => {
402
+ const val = parseInt(c, 16) / 255;
403
+ return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);
404
+ });
405
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
406
+ }
407
+ function getContrastText2(bgColor) {
408
+ const luminance = getLuminance2(bgColor);
409
+ return luminance < 0.3 ? "#FFFFFF" : "#212121";
410
+ }
411
+ function buildPaletteColor(scale, mode = "light") {
412
+ const mainColor = mode === "dark" ? scale[400] : scale[500];
413
+ const contrastText = getContrastText2(mainColor);
414
+ const color = mode === "dark" ? {
415
+ lighter: scale[950],
416
+ light: scale[700],
417
+ main: mainColor,
418
+ dark: scale[300],
419
+ darker: scale[100],
420
+ contrastText
421
+ } : {
422
+ lighter: scale[50],
423
+ light: scale[400],
424
+ main: mainColor,
425
+ dark: scale[600],
426
+ darker: scale[900],
427
+ contrastText
428
+ };
429
+ return generatePaletteColorWithChannels(color);
430
+ }
431
+ function buildBackground(grey2, mode = "light") {
432
+ if (mode === "dark") {
433
+ return {
434
+ default: grey2[950],
435
+ paper: grey2[900],
436
+ neutral: grey2[800],
437
+ elevation1: grey2[800],
438
+ elevation2: grey2[700],
439
+ elevation3: grey2[600],
440
+ elevation4: grey2[500],
441
+ menu: grey2[900],
442
+ menuElevation1: grey2[800],
443
+ menuElevation2: grey2[700]
444
+ };
445
+ }
446
+ return {
447
+ default: "#FFFFFF",
448
+ paper: "#FFFFFF",
449
+ neutral: grey2[50],
450
+ elevation1: grey2[50],
451
+ elevation2: grey2[100],
452
+ elevation3: grey2[200],
453
+ elevation4: grey2[300],
454
+ menu: "#FFFFFF",
455
+ menuElevation1: grey2[50],
456
+ menuElevation2: grey2[100]
457
+ };
458
+ }
459
+ function buildText(grey2, mode = "light") {
460
+ const colors = mode === "dark" ? {
461
+ primary: grey2[50],
462
+ secondary: grey2[300],
463
+ disabled: grey2[500]
464
+ } : {
465
+ primary: grey2[900],
466
+ secondary: grey2[600],
467
+ disabled: grey2[400]
468
+ };
469
+ return {
470
+ ...colors,
471
+ primaryChannel: hexToRgbChannel(colors.primary),
472
+ secondaryChannel: hexToRgbChannel(colors.secondary),
473
+ disabledChannel: hexToRgbChannel(colors.disabled)
474
+ };
475
+ }
476
+ function buildAction(grey2, mode = "light") {
477
+ if (mode === "dark") {
478
+ return {
479
+ active: grey2[400],
480
+ hover: grey2[700],
481
+ selected: grey2[700],
482
+ disabled: grey2[600],
483
+ disabledBackground: grey2[800],
484
+ focus: grey2[600]
485
+ };
486
+ }
487
+ return {
488
+ active: grey2[500],
489
+ hover: grey2[100],
490
+ selected: grey2[100],
491
+ disabled: grey2[400],
492
+ disabledBackground: grey2[200],
493
+ focus: grey2[300]
494
+ };
495
+ }
496
+ function buildVibrant(commonWhiteChannel, textPrimary, mode = "light") {
497
+ const textChannel = hexToRgbChannel(textPrimary);
498
+ return {
499
+ listItemHover: cssVarRgba(commonWhiteChannel, mode === "dark" ? 0.08 : 0.5),
500
+ buttonHover: cssVarRgba(commonWhiteChannel, mode === "dark" ? 0.12 : 0.7),
501
+ textFieldHover: cssVarRgba(commonWhiteChannel, mode === "dark" ? 0.12 : 0.7),
502
+ text: {
503
+ secondary: cssVarRgba(textChannel, 0.76),
504
+ disabled: cssVarRgba(textChannel, 0.4)
505
+ },
506
+ overlay: cssVarRgba(commonWhiteChannel, mode === "dark" ? 0.16 : 0.7)
507
+ };
508
+ }
509
+ function buildChartColors(options) {
510
+ return {
511
+ chGrey: generateColorScaleWithChannels(options.grey),
512
+ chRed: generateColorScaleWithChannels(options.red),
513
+ chBlue: generateColorScaleWithChannels(options.blue),
514
+ chGreen: generateColorScaleWithChannels(options.green),
515
+ chOrange: generateColorScaleWithChannels(options.orange),
516
+ chLightBlue: generateColorScaleWithChannels(options.lightBlue),
517
+ chPurple: generateColorScaleWithChannels(options.purple)
518
+ };
519
+ }
520
+ function buildPalette(options) {
521
+ const { primary, secondary, info, success, warning, error, grey: grey2, mode, backgroundDefault, paperColor } = options;
522
+ const greyWithChannels = generateColorScaleWithChannels(grey2);
523
+ const background = buildBackground(grey2, mode);
524
+ const text = buildText(grey2, mode);
525
+ const action = buildAction(grey2, mode);
526
+ if (backgroundDefault) {
527
+ background.default = backgroundDefault;
528
+ }
529
+ if (paperColor) {
530
+ background.paper = paperColor;
531
+ background.menu = paperColor;
532
+ }
533
+ const common = {
534
+ black: basic.black,
535
+ white: basic.white,
536
+ blackChannel: hexToRgbChannel(basic.black),
537
+ whiteChannel: hexToRgbChannel(basic.white)
538
+ };
539
+ const vibrant = buildVibrant(common.whiteChannel, text.primary, mode);
540
+ const chart = buildChartColors({
541
+ grey: grey2,
542
+ red,
543
+ blue,
544
+ green,
545
+ orange,
546
+ lightBlue,
547
+ purple
548
+ });
549
+ const divider = mode === "dark" ? grey2[700] : grey2[300];
550
+ const dividerLight = cssVarRgba(hexToRgbChannel(grey2[mode === "dark" ? 700 : 300]), 0.6);
551
+ const menuDivider = cssVarRgba(hexToRgbChannel(grey2[700]), 0);
552
+ return {
553
+ mode,
554
+ common,
555
+ grey: greyWithChannels,
556
+ primary: buildPaletteColor(primary, mode),
557
+ secondary: buildPaletteColor(secondary, mode),
558
+ info: buildPaletteColor(info, mode),
559
+ success: buildPaletteColor(success, mode),
560
+ warning: buildPaletteColor(warning, mode),
561
+ error: buildPaletteColor(error, mode),
562
+ neutral: buildPaletteColor(grey2, mode),
563
+ background,
564
+ text,
565
+ action,
566
+ divider,
567
+ dividerLight,
568
+ menuDivider,
569
+ vibrant,
570
+ chart
571
+ };
572
+ }
573
+ var defaultLightPalette = buildPalette({
574
+ primary: blue,
575
+ secondary: purple,
576
+ info: lightBlue,
577
+ success: green,
578
+ warning: orange,
579
+ error: red,
580
+ grey,
581
+ mode: "light"
582
+ });
583
+ var defaultDarkPalette = buildPalette({
584
+ primary: blue,
585
+ secondary: purple,
586
+ info: lightBlue,
587
+ success: green,
588
+ warning: orange,
589
+ error: red,
590
+ grey,
591
+ mode: "dark"
592
+ });
593
+
594
+ // src/theme/components/theme-utils.ts
595
+ function getGreyChannel(theme, shade = "500") {
596
+ const channelKey = `${shade}Channel`;
597
+ const vars = theme.vars?.palette.grey;
598
+ const fallbacks = {
599
+ "500": "145 158 171",
600
+ "900": "0 0 0"
601
+ };
602
+ return vars?.[channelKey] ?? fallbacks[shade];
603
+ }
604
+ function getColorChannel(theme, color) {
605
+ const vars = theme.vars?.palette[color];
606
+ const fallbacks = {
607
+ primary: "51 133 240",
608
+ success: "9 159 105",
609
+ error: "208 34 65",
610
+ warning: "246 141 42",
611
+ info: "13 166 214"
612
+ };
613
+ return vars?.mainChannel ?? fallbacks[color];
614
+ }
615
+ function getDensityMultiplier(density) {
616
+ switch (density) {
617
+ case "compact":
618
+ return 0.75;
619
+ case "comfortable":
620
+ return 1.25;
621
+ default:
622
+ return 1;
623
+ }
624
+ }
625
+
626
+ // src/theme/components/Button.ts
627
+ var btnColors = ["primary", "secondary", "info", "success", "warning", "error"];
628
+ var softVariants = [
629
+ ...btnColors.map((color) => ({
630
+ props: { variant: "soft", color },
631
+ style: ({ theme }) => ({
632
+ backgroundColor: `rgba(var(--prism-${color}-main-channel, 51 133 240) / 0.16)`,
633
+ color: theme.vars?.palette[color]?.dark || theme.palette[color].dark,
634
+ boxShadow: "none",
635
+ "&:hover": {
636
+ backgroundColor: `rgba(var(--prism-${color}-main-channel, 51 133 240) / 0.32)`,
637
+ boxShadow: "none"
638
+ },
639
+ "&:active": {
640
+ backgroundColor: `rgba(var(--prism-${color}-main-channel, 51 133 240) / 0.4)`
641
+ }
642
+ })
643
+ })),
644
+ // Neutral soft variant
645
+ {
646
+ props: { variant: "soft", color: "neutral" },
647
+ style: ({ theme }) => ({
648
+ backgroundColor: theme.vars?.palette.background.elevation2 || theme.palette.grey[100],
649
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary,
650
+ boxShadow: "none",
651
+ "&:hover": {
652
+ backgroundColor: theme.vars?.palette.background.elevation3 || theme.palette.grey[200],
653
+ boxShadow: "none"
654
+ }
655
+ })
656
+ },
657
+ // Inherit soft variant
658
+ {
659
+ props: { variant: "soft", color: "inherit" },
660
+ style: ({ theme }) => ({
661
+ backgroundColor: theme.vars?.palette.action.selected || theme.palette.action.selected,
662
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary,
663
+ boxShadow: "none",
664
+ "&:hover": {
665
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover,
666
+ boxShadow: "none"
667
+ }
668
+ })
669
+ }
670
+ ];
671
+ var dashedVariants = [
672
+ ...btnColors.map((color) => ({
673
+ props: { variant: "dashed", color },
674
+ style: ({ theme }) => ({
675
+ border: `1px dashed ${theme.vars?.palette[color]?.main || theme.palette[color].main}`,
676
+ backgroundColor: "transparent",
677
+ color: theme.vars?.palette[color]?.main || theme.palette[color].main,
678
+ "&:hover": {
679
+ backgroundColor: `rgba(var(--prism-${color}-main-channel, 51 133 240) / 0.08)`,
680
+ borderColor: theme.vars?.palette[color]?.dark || theme.palette[color].dark
681
+ }
682
+ })
683
+ })),
684
+ // Inherit dashed variant
685
+ {
686
+ props: { variant: "dashed", color: "inherit" },
687
+ style: ({ theme }) => ({
688
+ border: `1px dashed ${theme.vars?.palette.grey?.[500] || theme.palette.grey[500]}`,
689
+ backgroundColor: "transparent",
690
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary,
691
+ "&:hover": {
692
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover,
693
+ borderColor: theme.vars?.palette.text.primary || theme.palette.text.primary
694
+ }
695
+ })
696
+ }
697
+ ];
698
+ var shapes = ["circle", "square"];
699
+ var shapeSizes = { small: 30, medium: 36, large: 42, xLarge: 52 };
700
+ var shapeVariants = shapes.flatMap(
701
+ (shape) => Object.keys(shapeSizes).map((size) => ({
702
+ props: { shape, size },
703
+ style: {
704
+ height: shapeSizes[size],
705
+ minWidth: shapeSizes[size],
706
+ padding: 0,
707
+ borderRadius: shape === "circle" ? "50%" : void 0
708
+ }
709
+ }))
710
+ );
711
+ var outlinedNeutralVariants = [
712
+ {
713
+ props: { variant: "outlined", color: "neutral" },
714
+ style: ({ theme }) => ({
715
+ borderColor: theme.vars?.palette.divider || theme.palette.divider,
716
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary,
717
+ "&:hover": {
718
+ backgroundColor: theme.vars?.palette.background.elevation2 || theme.palette.grey[100],
719
+ borderColor: theme.vars?.palette.text.secondary || theme.palette.text.secondary
720
+ }
721
+ })
722
+ }
723
+ ];
724
+ var disabledVariants = [
725
+ {
726
+ props: { variant: "soft" },
727
+ style: ({ theme }) => ({
728
+ [`&.${buttonClasses.disabled}`]: {
729
+ backgroundColor: theme.vars?.palette.action.disabledBackground || theme.palette.action.disabledBackground
730
+ }
731
+ })
732
+ },
733
+ {
734
+ props: { variant: "dashed" },
735
+ style: ({ theme }) => ({
736
+ [`&.${buttonClasses.disabled}`]: {
737
+ borderStyle: "dashed"
738
+ }
739
+ })
740
+ }
741
+ ];
742
+ function createButtonOverrides(config) {
743
+ const { borderRadius, density } = config;
744
+ const dm = getDensityMultiplier(density);
745
+ const sizeVariants = [
746
+ {
747
+ props: { size: "xLarge" },
748
+ style: {
749
+ minHeight: 56,
750
+ fontSize: "15px",
751
+ padding: `${10 * dm}px ${22 * dm}px`,
752
+ lineHeight: 1.467
753
+ }
754
+ }
755
+ ];
756
+ return {
757
+ defaultProps: {
758
+ disableElevation: true
759
+ },
760
+ styleOverrides: {
761
+ root: {
762
+ textTransform: "none",
763
+ fontSize: "14px",
764
+ fontWeight: 600,
765
+ borderRadius,
766
+ padding: `${8 * dm}px ${16 * dm}px`,
767
+ lineHeight: 1.429,
768
+ variants: [
769
+ ...softVariants,
770
+ ...dashedVariants,
771
+ ...shapeVariants,
772
+ ...outlinedNeutralVariants,
773
+ ...sizeVariants,
774
+ ...disabledVariants
775
+ ]
776
+ },
777
+ sizeLarge: {
778
+ fontSize: "16px",
779
+ padding: `${10 * dm}px ${22 * dm}px`,
780
+ lineHeight: 1.375
781
+ },
782
+ sizeSmall: {
783
+ padding: `${6 * dm}px ${10 * dm}px`,
784
+ fontSize: "13px",
785
+ lineHeight: 1.286
786
+ },
787
+ outlinedSizeLarge: {
788
+ paddingTop: 9 * dm,
789
+ paddingBottom: 9 * dm
790
+ },
791
+ outlinedSizeMedium: {
792
+ paddingTop: 7 * dm,
793
+ paddingBottom: 7 * dm
794
+ },
795
+ outlinedSizeSmall: {
796
+ paddingTop: 5 * dm,
797
+ paddingBottom: 5 * dm
798
+ },
799
+ startIcon: {
800
+ marginRight: 4,
801
+ [`& > *:first-of-type`]: {
802
+ fontSize: 16
803
+ }
804
+ },
805
+ endIcon: {
806
+ marginLeft: 4,
807
+ [`& > *:first-of-type`]: {
808
+ fontSize: 16
809
+ }
810
+ }
811
+ }
812
+ };
813
+ }
814
+ function createButtonBaseOverrides() {
815
+ return {
816
+ defaultProps: {
817
+ disableRipple: false
818
+ }
819
+ };
820
+ }
821
+ function createButtonGroupOverrides(config) {
822
+ return {
823
+ defaultProps: {
824
+ disableElevation: true
825
+ },
826
+ styleOverrides: {
827
+ root: {
828
+ borderRadius: config.borderRadius
829
+ }
830
+ }
831
+ };
832
+ }
833
+
834
+ // src/theme/mixins.ts
835
+ function getHoverStyles(hoverOption, hoverBase) {
836
+ if (!hoverOption) return {};
837
+ return {
838
+ "&:hover": {
839
+ ...hoverBase,
840
+ ...typeof hoverOption === "object" ? hoverOption : {}
841
+ }
842
+ };
843
+ }
844
+ function filledStyles(theme, colorKey, options) {
845
+ if (!colorKey) {
846
+ if (process.env.NODE_ENV !== "production") {
847
+ console.warn("[Prism filledStyles] Missing colorKey parameter.");
848
+ }
849
+ return {};
850
+ }
851
+ const palette = theme.vars?.palette || theme.palette;
852
+ const grey2 = palette.grey;
853
+ if (colorKey === "default") {
854
+ const base2 = {
855
+ color: grey2[800],
856
+ backgroundColor: grey2[300]
857
+ };
858
+ const hover2 = getHoverStyles(options?.hover, {
859
+ backgroundColor: grey2[400]
860
+ });
861
+ return { ...base2, ...hover2 };
862
+ }
863
+ if (colorKey === "inherit") {
864
+ const base2 = {
865
+ color: palette.common.white,
866
+ backgroundColor: grey2[800]
867
+ };
868
+ const hover2 = getHoverStyles(options?.hover, {
869
+ backgroundColor: grey2[700]
870
+ });
871
+ return { ...base2, ...hover2 };
872
+ }
873
+ if (colorKey === "white" || colorKey === "black") {
874
+ const oppositeColor = colorKey === "white" ? "black" : "white";
875
+ const base2 = {
876
+ color: palette.common[oppositeColor],
877
+ backgroundColor: palette.common[colorKey]
878
+ };
879
+ const hover2 = getHoverStyles(options?.hover, {
880
+ opacity: 0.8
881
+ });
882
+ return { ...base2, ...hover2 };
883
+ }
884
+ const paletteColor = palette[colorKey];
885
+ const base = {
886
+ color: paletteColor.contrastText,
887
+ backgroundColor: paletteColor.main
888
+ };
889
+ const hover = getHoverStyles(options?.hover, {
890
+ backgroundColor: paletteColor.dark
891
+ });
892
+ return { ...base, ...hover };
893
+ }
894
+ function softStyles(theme, colorKey, options) {
895
+ if (!colorKey) {
896
+ if (process.env.NODE_ENV !== "production") {
897
+ console.warn("[Prism softStyles] Missing colorKey parameter.");
898
+ }
899
+ return {};
900
+ }
901
+ const palette = theme.vars?.palette || theme.palette;
902
+ const grey2 = palette.grey;
903
+ if (colorKey === "default") {
904
+ return {
905
+ ...filledStyles(theme, "default", options),
906
+ boxShadow: "none"
907
+ };
908
+ }
909
+ if (colorKey === "inherit") {
910
+ const greyChannel = grey2["500Channel"] || "145, 158, 171";
911
+ const base2 = {
912
+ boxShadow: "none",
913
+ backgroundColor: varAlpha(greyChannel, 0.16)
914
+ };
915
+ const hover2 = getHoverStyles(options?.hover, {
916
+ backgroundColor: varAlpha(greyChannel, 0.32)
917
+ });
918
+ return { ...base2, ...hover2 };
919
+ }
920
+ if (colorKey === "white" || colorKey === "black") {
921
+ const base2 = {
922
+ boxShadow: "none",
923
+ color: palette.common[colorKey],
924
+ backgroundColor: varAlpha("currentColor", 0.08)
925
+ };
926
+ const hover2 = getHoverStyles(options?.hover, {
927
+ backgroundColor: varAlpha("currentColor", 0.16)
928
+ });
929
+ return { ...base2, ...hover2 };
930
+ }
931
+ const paletteColor = palette[colorKey];
932
+ const mainChannel = paletteColor.mainChannel || palette.primary.mainChannel || "51, 133, 240";
933
+ const base = {
934
+ boxShadow: "none",
935
+ color: paletteColor.dark,
936
+ backgroundColor: varAlpha(mainChannel, 0.16)
937
+ };
938
+ const hover = getHoverStyles(options?.hover, {
939
+ backgroundColor: varAlpha(mainChannel, 0.32)
940
+ });
941
+ return { ...base, ...hover };
942
+ }
943
+ function bgGradient(options) {
944
+ const { images, sizes, positions, colors, direction = "to bottom" } = options;
945
+ if (colors && colors.length > 0) {
946
+ return {
947
+ background: `linear-gradient(${direction}, ${colors.join(", ")})`
948
+ };
949
+ }
950
+ if (images && images.length > 0) {
951
+ return {
952
+ backgroundImage: images.join(", "),
953
+ backgroundSize: sizes?.join(", ") || "cover",
954
+ backgroundPosition: positions?.join(", ") || "center",
955
+ backgroundRepeat: "no-repeat"
956
+ };
957
+ }
958
+ return {};
959
+ }
960
+ function bgBlur(options) {
961
+ const { blur = 20, color = "rgba(255, 255, 255, 0.8)" } = options;
962
+ return {
963
+ backdropFilter: `blur(${blur}px)`,
964
+ WebkitBackdropFilter: `blur(${blur}px)`,
965
+ backgroundColor: color
966
+ };
967
+ }
968
+ function paperStyles(theme, options) {
969
+ const { blur = 20, color, dropdown } = options ?? {};
970
+ const palette = theme.vars?.palette || theme.palette;
971
+ const baseStyles = {
972
+ backdropFilter: `blur(${blur}px)`,
973
+ WebkitBackdropFilter: `blur(${blur}px)`,
974
+ backgroundColor: color ?? varAlpha("255, 255, 255", 0.9)
975
+ };
976
+ if (dropdown) {
977
+ const customShadows = theme.customShadows;
978
+ const greyChannel = palette.grey["500Channel"] || "145, 158, 171";
979
+ return {
980
+ ...baseStyles,
981
+ padding: theme.spacing(0.5),
982
+ boxShadow: customShadows?.dropdown || `0 0 2px 0 rgba(${greyChannel}, 0.24), -20px 20px 40px -4px rgba(${greyChannel}, 0.24)`,
983
+ borderRadius: `${Number(theme.shape.borderRadius) * 1.25}px`
984
+ };
985
+ }
986
+ return baseStyles;
987
+ }
988
+ function menuItemStyles(theme) {
989
+ const palette = theme.vars?.palette || theme.palette;
990
+ return {
991
+ ...theme.typography.body2,
992
+ padding: theme.spacing(0.75, 1),
993
+ borderRadius: Number(theme.shape.borderRadius) * 0.75,
994
+ "&:not(:last-of-type)": {
995
+ marginBottom: 4
996
+ },
997
+ "&.Mui-selected": {
998
+ fontWeight: theme.typography.fontWeightMedium,
999
+ backgroundColor: palette.action.selected,
1000
+ "&:hover": { backgroundColor: palette.action.hover }
1001
+ }
1002
+ };
1003
+ }
1004
+ function maxLine(options) {
1005
+ const { lines, lineHeight = 1.5 } = options;
1006
+ return {
1007
+ overflow: "hidden",
1008
+ display: "-webkit-box",
1009
+ WebkitBoxOrient: "vertical",
1010
+ WebkitLineClamp: lines,
1011
+ textOverflow: "ellipsis",
1012
+ ...lineHeight && { lineHeight }
1013
+ };
1014
+ }
1015
+ function textGradient(direction, ...colors) {
1016
+ return {
1017
+ background: `linear-gradient(${direction}, ${colors.join(", ")})`,
1018
+ WebkitBackgroundClip: "text",
1019
+ WebkitTextFillColor: "transparent",
1020
+ backgroundClip: "text",
1021
+ textFillColor: "transparent",
1022
+ display: "inline-block"
1023
+ };
1024
+ }
1025
+ function borderGradient(options) {
1026
+ const { color = "linear-gradient(135deg, #FF5630, #00AB55)", borderWidth = 2, borderRadius = 0 } = options;
1027
+ return {
1028
+ position: "relative",
1029
+ border: "none",
1030
+ borderRadius,
1031
+ "&::before": {
1032
+ content: '""',
1033
+ position: "absolute",
1034
+ inset: 0,
1035
+ borderRadius: "inherit",
1036
+ padding: borderWidth,
1037
+ background: color,
1038
+ WebkitMask: "linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",
1039
+ WebkitMaskComposite: "xor",
1040
+ maskComposite: "exclude",
1041
+ pointerEvents: "none"
1042
+ }
1043
+ };
1044
+ }
1045
+ function scrollbarStyles(theme) {
1046
+ const palette = theme.vars?.palette || theme.palette;
1047
+ const greyChannel = palette.grey["500Channel"] || "145, 158, 171";
1048
+ return {
1049
+ scrollbarWidth: "thin",
1050
+ scrollbarColor: `${varAlpha(greyChannel, 0.4)} ${varAlpha(greyChannel, 0.08)}`,
1051
+ "&::-webkit-scrollbar": {
1052
+ width: 6,
1053
+ height: 6
1054
+ },
1055
+ "&::-webkit-scrollbar-track": {
1056
+ backgroundColor: "transparent"
1057
+ },
1058
+ "&::-webkit-scrollbar-thumb": {
1059
+ backgroundColor: varAlpha(greyChannel, 0.4),
1060
+ borderRadius: 3,
1061
+ "&:hover": {
1062
+ backgroundColor: varAlpha(greyChannel, 0.6)
1063
+ }
1064
+ }
1065
+ };
1066
+ }
1067
+ var mixins = {
1068
+ toolbar: {
1069
+ minHeight: 56,
1070
+ "@media (min-width:0px)": {
1071
+ "@media (orientation: landscape)": {
1072
+ minHeight: 48
1073
+ }
1074
+ },
1075
+ "@media (min-width:600px)": {
1076
+ minHeight: 64
1077
+ }
1078
+ },
1079
+ // Extended mixins
1080
+ hideScrollX: {
1081
+ msOverflowStyle: "none",
1082
+ scrollbarWidth: "none",
1083
+ overflowX: "auto",
1084
+ "&::-webkit-scrollbar": { display: "none" }
1085
+ },
1086
+ hideScrollY: {
1087
+ msOverflowStyle: "none",
1088
+ scrollbarWidth: "none",
1089
+ overflowY: "auto",
1090
+ "&::-webkit-scrollbar": { display: "none" }
1091
+ },
1092
+ // Style functions (attached at theme creation)
1093
+ bgBlur,
1094
+ bgGradient,
1095
+ maxLine,
1096
+ softStyles,
1097
+ filledStyles,
1098
+ paperStyles,
1099
+ menuItemStyles,
1100
+ varAlpha,
1101
+ textGradient,
1102
+ borderGradient,
1103
+ scrollbarStyles
1104
+ };
1105
+ var hideScrollbarMixin = {
1106
+ scrollbarWidth: "none",
1107
+ msOverflowStyle: "none",
1108
+ "&::-webkit-scrollbar": {
1109
+ display: "none"
1110
+ }
1111
+ };
1112
+ function customScrollbarMixin(theme) {
1113
+ const palette = theme.vars?.palette || theme.palette;
1114
+ const greyChannel = palette.grey["500Channel"] || "145, 158, 171";
1115
+ return {
1116
+ scrollbarWidth: "thin",
1117
+ scrollbarColor: `${varAlpha(greyChannel, 0.4)} ${varAlpha(greyChannel, 0.08)}`,
1118
+ "&::-webkit-scrollbar": {
1119
+ width: 6,
1120
+ height: 6
1121
+ },
1122
+ "&::-webkit-scrollbar-track": {
1123
+ backgroundColor: "transparent"
1124
+ },
1125
+ "&::-webkit-scrollbar-thumb": {
1126
+ backgroundColor: varAlpha(greyChannel, 0.4),
1127
+ borderRadius: 3,
1128
+ "&:hover": {
1129
+ backgroundColor: varAlpha(greyChannel, 0.6)
1130
+ }
1131
+ }
1132
+ };
1133
+ }
1134
+ var textEllipsisMixin = {
1135
+ overflow: "hidden",
1136
+ textOverflow: "ellipsis",
1137
+ whiteSpace: "nowrap"
1138
+ };
1139
+ function multiLineEllipsisMixin(lines) {
1140
+ return {
1141
+ overflow: "hidden",
1142
+ display: "-webkit-box",
1143
+ WebkitBoxOrient: "vertical",
1144
+ WebkitLineClamp: lines
1145
+ };
1146
+ }
1147
+ var focusRingMixin = {
1148
+ "&:focus-visible": {
1149
+ outline: "none",
1150
+ boxShadow: "0 0 0 2px var(--prism-background, #FFF), 0 0 0 4px var(--prism-primary, #3385F0)"
1151
+ }
1152
+ };
1153
+ var glassMixin = {
1154
+ backdropFilter: "blur(20px)",
1155
+ backgroundColor: "var(--prism-vibrant-overlay, rgba(255, 255, 255, 0.7))"
1156
+ };
1157
+ var chipColors = ["primary", "secondary", "info", "success", "warning", "error"];
1158
+ var softVariants2 = [
1159
+ ...chipColors.map((color) => ({
1160
+ props: (props) => props.variant === "soft" && props.color === color,
1161
+ style: ({ theme }) => ({
1162
+ backgroundColor: `rgba(var(--prism-${color}-main-channel, 51 133 240) / 0.16)`,
1163
+ color: theme.vars?.palette[color]?.dark || theme.palette[color].dark
1164
+ })
1165
+ })),
1166
+ // Neutral soft variant
1167
+ {
1168
+ props: (props) => props.variant === "soft" && props.color === "neutral",
1169
+ style: ({ theme }) => ({
1170
+ backgroundColor: theme.vars?.palette.background.elevation2 || theme.palette.grey[100],
1171
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
1172
+ })
1173
+ },
1174
+ // Default soft variant (no color specified)
1175
+ {
1176
+ props: (props) => props.variant === "soft" && !props.color,
1177
+ style: ({ theme }) => ({
1178
+ backgroundColor: theme.vars?.palette.background.elevation2 || theme.palette.grey[100],
1179
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
1180
+ })
1181
+ }
1182
+ ];
1183
+ var dashedVariants2 = [
1184
+ ...chipColors.map((color) => ({
1185
+ props: (props) => props.variant === "dashed" && props.color === color,
1186
+ style: ({ theme }) => ({
1187
+ border: `1px dashed ${theme.vars?.palette[color]?.main || theme.palette[color].main}`,
1188
+ backgroundColor: "transparent",
1189
+ color: theme.vars?.palette[color]?.main || theme.palette[color].main
1190
+ })
1191
+ })),
1192
+ // Neutral dashed variant
1193
+ {
1194
+ props: (props) => props.variant === "dashed" && props.color === "neutral",
1195
+ style: ({ theme }) => ({
1196
+ border: `1px dashed ${theme.vars?.palette.divider || theme.palette.divider}`,
1197
+ backgroundColor: "transparent",
1198
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
1199
+ })
1200
+ }
1201
+ ];
1202
+ var outlinedNeutralVariant = [
1203
+ {
1204
+ props: (props) => props.variant === "outlined" && props.color === "neutral",
1205
+ style: ({ theme }) => ({
1206
+ borderColor: theme.vars?.palette.divider || theme.palette.divider,
1207
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
1208
+ })
1209
+ }
1210
+ ];
1211
+ var filledNeutralVariant = [
1212
+ {
1213
+ props: (props) => props.variant === "filled" && props.color === "neutral",
1214
+ style: ({ theme }) => ({
1215
+ backgroundColor: theme.vars?.palette.grey[300] || theme.palette.grey[300],
1216
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
1217
+ })
1218
+ }
1219
+ ];
1220
+ var disabledVariants2 = [
1221
+ {
1222
+ props: {},
1223
+ style: ({ theme }) => ({
1224
+ [`&.${chipClasses.disabled}`]: {
1225
+ opacity: 1,
1226
+ color: theme.vars?.palette.action.disabled || theme.palette.action.disabled,
1227
+ [`&:not(.${chipClasses.outlined})`]: {
1228
+ backgroundColor: theme.vars?.palette.action.disabledBackground || theme.palette.action.disabledBackground
1229
+ },
1230
+ [`&.${chipClasses.outlined}`]: {
1231
+ borderColor: theme.vars?.palette.action.disabledBackground || theme.palette.action.disabledBackground
1232
+ }
1233
+ }
1234
+ })
1235
+ }
1236
+ ];
1237
+ var xSmallVariant = [
1238
+ {
1239
+ props: { size: "xSmall" },
1240
+ style: {
1241
+ height: 20,
1242
+ fontSize: "0.6875rem",
1243
+ padding: "0 6px"
1244
+ }
1245
+ }
1246
+ ];
1247
+ function createChipOverrides(config) {
1248
+ const { borderRadius, density } = config;
1249
+ const densityMultiplier = getDensityMultiplier(density);
1250
+ return {
1251
+ styleOverrides: {
1252
+ root: {
1253
+ borderRadius,
1254
+ fontWeight: 500,
1255
+ variants: [
1256
+ ...softVariants2,
1257
+ ...dashedVariants2,
1258
+ ...outlinedNeutralVariant,
1259
+ ...filledNeutralVariant,
1260
+ ...disabledVariants2,
1261
+ ...xSmallVariant
1262
+ ]
1263
+ },
1264
+ sizeSmall: {
1265
+ height: 24 * densityMultiplier
1266
+ },
1267
+ sizeMedium: {
1268
+ height: 32 * densityMultiplier
1269
+ },
1270
+ label: {
1271
+ fontWeight: 500
1272
+ },
1273
+ labelSmall: {
1274
+ fontSize: "0.75rem",
1275
+ paddingLeft: 8,
1276
+ paddingRight: 8
1277
+ },
1278
+ labelMedium: {
1279
+ fontSize: "0.8125rem",
1280
+ paddingLeft: 12,
1281
+ paddingRight: 12
1282
+ },
1283
+ icon: {
1284
+ fontSize: 18,
1285
+ color: "currentColor"
1286
+ },
1287
+ deleteIcon: {
1288
+ fontSize: 18,
1289
+ opacity: 0.48,
1290
+ color: "currentColor",
1291
+ "&:hover": {
1292
+ opacity: 0.8,
1293
+ color: "currentColor"
1294
+ }
1295
+ }
1296
+ }
1297
+ };
1298
+ }
1299
+ var INPUT_TYPOGRAPHY = {
1300
+ fontSize: { base: 15, responsive: 16 },
1301
+ lineHeight: 24
1302
+ };
1303
+ var INPUT_PADDING = {
1304
+ outlined: {
1305
+ small: { paddingTop: 8, paddingBottom: 8 },
1306
+ medium: { paddingTop: 16, paddingBottom: 16 }
1307
+ },
1308
+ filled: {
1309
+ small: { paddingTop: 20 },
1310
+ medium: { paddingTop: 24 }}
1311
+ };
1312
+ function getInputTypography(theme, keys) {
1313
+ const { fontSize, lineHeight } = INPUT_TYPOGRAPHY;
1314
+ const baseStyles = {
1315
+ fontSize: theme.typography.pxToRem(fontSize.base),
1316
+ height: `${lineHeight}px`,
1317
+ lineHeight: `${lineHeight}px`
1318
+ };
1319
+ const responsiveStyles = {
1320
+ fontSize: theme.typography.pxToRem(fontSize.responsive),
1321
+ height: `${lineHeight}px`,
1322
+ lineHeight: `${lineHeight}px`
1323
+ };
1324
+ return {
1325
+ ...Object.fromEntries(keys.map((k) => [k, baseStyles[k]])),
1326
+ [theme.breakpoints.down("sm")]: Object.fromEntries(keys.map((k) => [k, responsiveStyles[k]]))
1327
+ };
1328
+ }
1329
+ function getErrorChannel(theme) {
1330
+ const vars = theme.vars?.palette.error;
1331
+ return vars?.mainChannel ?? "208 34 65";
1332
+ }
1333
+ function createInputBaseOverrides(_config) {
1334
+ return {
1335
+ styleOverrides: {
1336
+ root: ({ theme }) => ({
1337
+ "--disabled-color": theme.vars?.palette.action.disabled || theme.palette.action.disabled,
1338
+ ...getInputTypography(theme, ["lineHeight"]),
1339
+ [`&.${inputBaseClasses.disabled}`]: {
1340
+ [`& .${inputAdornmentClasses.root} *`]: { color: "var(--disabled-color)" }
1341
+ }
1342
+ }),
1343
+ input: ({ theme }) => ({
1344
+ ...getInputTypography(theme, ["fontSize", "height", "lineHeight"]),
1345
+ "&:focus": { borderRadius: "inherit" },
1346
+ "&::placeholder": {
1347
+ color: theme.vars?.palette.text.disabled || theme.palette.text.disabled,
1348
+ opacity: 1
1349
+ }
1350
+ })
1351
+ }
1352
+ };
1353
+ }
1354
+ function createInputOverrides(_config) {
1355
+ return {
1356
+ styleOverrides: {
1357
+ root: ({ theme }) => ({
1358
+ "&::before": {
1359
+ borderBottomColor: varAlpha(getGreyChannel(theme), 0.2)
1360
+ },
1361
+ "&::after": {
1362
+ borderBottomColor: theme.vars?.palette.text.primary || theme.palette.text.primary
1363
+ }
1364
+ })
1365
+ }
1366
+ };
1367
+ }
1368
+ function createOutlinedInputOverrides(config) {
1369
+ const { borderRadius } = config;
1370
+ return {
1371
+ styleOverrides: {
1372
+ root: ({ theme }) => ({
1373
+ borderRadius,
1374
+ [`&.${outlinedInputClasses.focused}:not(.${outlinedInputClasses.error})`]: {
1375
+ [`& .${outlinedInputClasses.notchedOutline}`]: {
1376
+ borderColor: theme.vars?.palette.text.primary || theme.palette.text.primary
1377
+ }
1378
+ },
1379
+ [`&.${outlinedInputClasses.disabled}`]: {
1380
+ [`& .${outlinedInputClasses.notchedOutline}`]: {
1381
+ borderColor: theme.vars?.palette.action.disabledBackground || theme.palette.action.disabledBackground
1382
+ }
1383
+ }
1384
+ }),
1385
+ input: {
1386
+ ...INPUT_PADDING.outlined.medium,
1387
+ "&.MuiInputBase-inputSizeSmall": {
1388
+ ...INPUT_PADDING.outlined.small
1389
+ },
1390
+ "&.MuiInputBase-inputMultiline": {
1391
+ paddingTop: 0,
1392
+ paddingBottom: 0
1393
+ }
1394
+ },
1395
+ notchedOutline: ({ theme }) => ({
1396
+ borderColor: varAlpha(getGreyChannel(theme), 0.2),
1397
+ transition: theme.transitions.create(["border-color"], {
1398
+ duration: theme.transitions.duration.shortest
1399
+ }),
1400
+ // Align fieldset font-size with InputLabel (14px) so the legend
1401
+ // notch width (0.75em) matches the visually-scaled label exactly.
1402
+ fontSize: theme.typography.pxToRem(14),
1403
+ "& legend > span": { paddingInline: 3 }
1404
+ })
1405
+ }
1406
+ };
1407
+ }
1408
+ function createFilledInputOverrides(config) {
1409
+ const { borderRadius } = config;
1410
+ return {
1411
+ defaultProps: {
1412
+ disableUnderline: true
1413
+ },
1414
+ styleOverrides: {
1415
+ root: ({ theme }) => {
1416
+ const greyChannel = getGreyChannel(theme);
1417
+ const errChannel = getErrorChannel(theme);
1418
+ const baseBg = varAlpha(greyChannel, 0.08);
1419
+ const hoverBg = varAlpha(greyChannel, 0.16);
1420
+ const errorBg = varAlpha(errChannel, 0.08);
1421
+ const errorHoverBg = varAlpha(errChannel, 0.16);
1422
+ const disabledBg = theme.vars?.palette.action.disabledBackground || theme.palette.action.disabledBackground;
1423
+ return {
1424
+ backgroundColor: baseBg,
1425
+ borderRadius,
1426
+ [`&:hover, &.${filledInputClasses.focused}`]: { backgroundColor: hoverBg },
1427
+ [`&.${filledInputClasses.error}`]: {
1428
+ backgroundColor: errorBg,
1429
+ [`&:hover, &.${filledInputClasses.focused}`]: { backgroundColor: errorHoverBg }
1430
+ },
1431
+ [`&.${filledInputClasses.disabled}`]: { backgroundColor: disabledBg }
1432
+ };
1433
+ },
1434
+ input: {
1435
+ ...INPUT_PADDING.filled.medium,
1436
+ "&.MuiInputBase-inputSizeSmall": {
1437
+ ...INPUT_PADDING.filled.small
1438
+ },
1439
+ "&.MuiInputBase-inputMultiline": {
1440
+ paddingTop: 0,
1441
+ paddingBottom: 0
1442
+ }
1443
+ }
1444
+ }
1445
+ };
1446
+ }
1447
+ function createTextFieldOverrides(config) {
1448
+ return {
1449
+ defaultProps: {
1450
+ variant: "outlined",
1451
+ size: config.density === "compact" ? "small" : "medium"
1452
+ }
1453
+ };
1454
+ }
1455
+ function createInputLabelOverrides(_config) {
1456
+ return {
1457
+ styleOverrides: {
1458
+ root: ({ theme }) => ({
1459
+ fontSize: theme.typography.pxToRem(14),
1460
+ lineHeight: 1.5,
1461
+ variants: [
1462
+ {
1463
+ props: (props) => !props.shrink,
1464
+ style: {
1465
+ ...getInputTypography(theme, ["fontSize", "lineHeight"]),
1466
+ color: theme.vars?.palette.text.disabled || theme.palette.text.disabled
1467
+ }
1468
+ },
1469
+ {
1470
+ props: (props) => !!props.shrink,
1471
+ style: {
1472
+ fontWeight: 600,
1473
+ [`&.${inputLabelClasses.focused}:not(.${inputLabelClasses.error})`]: {
1474
+ color: "inherit"
1475
+ }
1476
+ }
1477
+ }
1478
+ ]
1479
+ })
1480
+ }
1481
+ };
1482
+ }
1483
+ function createFormHelperTextOverrides(_config) {
1484
+ return {
1485
+ defaultProps: {
1486
+ component: "div"
1487
+ },
1488
+ styleOverrides: {
1489
+ root: ({ theme }) => ({
1490
+ display: "flex",
1491
+ alignItems: "center",
1492
+ gap: theme.spacing(0.5),
1493
+ marginTop: theme.spacing(0.75),
1494
+ fontSize: theme.typography.pxToRem(12),
1495
+ lineHeight: 1.5,
1496
+ "& > svg": { width: 16, height: 16 }
1497
+ })
1498
+ }
1499
+ };
1500
+ }
1501
+ function CheckboxIcon(props) {
1502
+ return /* @__PURE__ */ jsx(SvgIcon, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M17.9 2.318A5 5 0 0 1 22.895 7.1l.005.217v10a5 5 0 0 1-4.783 4.995l-.217.005h-10a5 5 0 0 1-4.995-4.783l-.005-.217v-10a5 5 0 0 1 4.783-4.996l.217-.004h10Zm-.5 1.5h-9a4 4 0 0 0-4 4v9a4 4 0 0 0 4 4h9a4 4 0 0 0 4-4v-9a4 4 0 0 0-4-4Z" }) });
1503
+ }
1504
+ function CheckboxCheckedIcon(props) {
1505
+ return /* @__PURE__ */ jsx(SvgIcon, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M17 2a5 5 0 0 1 5 5v10a5 5 0 0 1-5 5H7a5 5 0 0 1-5-5V7a5 5 0 0 1 5-5Zm-1.625 7.255-4.13 4.13-1.75-1.75a.881.881 0 0 0-1.24 0c-.34.34-.34.89 0 1.24l2.38 2.37c.17.17.39.25.61.25.23 0 .45-.08.62-.25l4.75-4.75c.34-.34.34-.89 0-1.24a.881.881 0 0 0-1.24 0Z" }) });
1506
+ }
1507
+ function CheckboxIndeterminateIcon(props) {
1508
+ return /* @__PURE__ */ jsx(SvgIcon, { ...props, children: /* @__PURE__ */ jsx("path", { d: "M17,2 C19.7614,2 22,4.23858 22,7 L22,7 L22,17 C22,19.7614 19.7614,22 17,22 L17,22 L7,22 C4.23858,22 2,19.7614 2,17 L2,17 L2,7 C2,4.23858 4.23858,2 7,2 L7,2 Z M15,11 L9,11 C8.44772,11 8,11.4477 8,12 C8,12.5523 8.44772,13 9,13 L15,13 C15.5523,13 16,12.5523 16,12 C16,11.4477 15.5523,11 15,11 Z" }) });
1509
+ }
1510
+ var SWITCH_DIMENSIONS = {
1511
+ small: { thumb: 10, track: 16, trackRadius: 8, translateX: "10px" },
1512
+ medium: { thumb: 14, track: 20, trackRadius: 10, translateX: "14px" }
1513
+ };
1514
+ var switchColorVariants = [
1515
+ {
1516
+ props: (props) => props.color === "default",
1517
+ style: ({ theme }) => ({
1518
+ [`&.${switchClasses.checked}`]: {
1519
+ [`& + .${switchClasses.track}`]: {
1520
+ backgroundColor: theme.vars?.palette.text.primary
1521
+ },
1522
+ [`& .${switchClasses.thumb}`]: {
1523
+ ...theme.applyStyles("dark", {
1524
+ color: theme.vars?.palette.grey[800]
1525
+ })
1526
+ }
1527
+ }
1528
+ })
1529
+ }
1530
+ ];
1531
+ var switchCheckedVariants = [
1532
+ {
1533
+ props: {},
1534
+ style: {
1535
+ [`&.${switchClasses.checked}`]: {
1536
+ transform: `translateX(${SWITCH_DIMENSIONS.medium.translateX})`,
1537
+ [`& + .${switchClasses.track}`]: {
1538
+ opacity: 1
1539
+ }
1540
+ }
1541
+ }
1542
+ }
1543
+ ];
1544
+ var switchDisabledVariants = [
1545
+ {
1546
+ props: {},
1547
+ style: ({ theme }) => ({
1548
+ [`&.${switchClasses.disabled}`]: {
1549
+ [`& + .${switchClasses.track}`]: {
1550
+ opacity: 0.48
1551
+ },
1552
+ [`& .${switchClasses.thumb}`]: {
1553
+ ...theme.applyStyles("dark", {
1554
+ opacity: 0.48
1555
+ })
1556
+ }
1557
+ }
1558
+ })
1559
+ }
1560
+ ];
1561
+ var switchSizeVariants = [
1562
+ {
1563
+ props: (props) => props.size === "small",
1564
+ style: {
1565
+ [`& .${switchClasses.switchBase}`]: {
1566
+ [`&.${switchClasses.checked}`]: {
1567
+ transform: `translateX(${SWITCH_DIMENSIONS.small.translateX})`
1568
+ }
1569
+ },
1570
+ [`& .${switchClasses.thumb}`]: {
1571
+ width: SWITCH_DIMENSIONS.small.thumb,
1572
+ height: SWITCH_DIMENSIONS.small.thumb
1573
+ },
1574
+ [`& .${switchClasses.track}`]: {
1575
+ height: SWITCH_DIMENSIONS.small.track,
1576
+ borderRadius: SWITCH_DIMENSIONS.small.trackRadius
1577
+ }
1578
+ }
1579
+ }
1580
+ ];
1581
+ function createCheckboxOverrides(config) {
1582
+ return {
1583
+ defaultProps: {
1584
+ size: config.density === "compact" ? "small" : "medium",
1585
+ icon: /* @__PURE__ */ jsx(CheckboxIcon, {}),
1586
+ checkedIcon: /* @__PURE__ */ jsx(CheckboxCheckedIcon, {}),
1587
+ indeterminateIcon: /* @__PURE__ */ jsx(CheckboxIndeterminateIcon, {})
1588
+ },
1589
+ styleOverrides: {
1590
+ root: ({ theme }) => ({
1591
+ padding: theme.spacing(1),
1592
+ variants: [
1593
+ {
1594
+ props: (props) => props.color === "default",
1595
+ style: {
1596
+ [`&.${checkboxClasses.checked}`]: {
1597
+ color: theme.vars?.palette.text.primary
1598
+ }
1599
+ }
1600
+ },
1601
+ ...["primary", "secondary", "info", "success", "warning", "error"].map((color) => ({
1602
+ props: { color },
1603
+ style: {
1604
+ "&:hover": {
1605
+ backgroundColor: varAlpha(
1606
+ theme.vars?.palette[color]?.mainChannel ?? "51 133 240",
1607
+ 0.12
1608
+ )
1609
+ }
1610
+ }
1611
+ }))
1612
+ ]
1613
+ }),
1614
+ sizeSmall: {
1615
+ "& svg": { fontSize: 16 }
1616
+ },
1617
+ sizeMedium: {
1618
+ "& svg": { fontSize: 20 }
1619
+ }
1620
+ }
1621
+ };
1622
+ }
1623
+ function createRadioOverrides(config) {
1624
+ return {
1625
+ defaultProps: {
1626
+ size: config.density === "compact" ? "small" : "medium"
1627
+ },
1628
+ styleOverrides: {
1629
+ root: ({ theme }) => ({
1630
+ padding: theme.spacing(1),
1631
+ variants: [
1632
+ {
1633
+ props: (props) => props.color === "default",
1634
+ style: {
1635
+ [`&.${radioClasses.checked}`]: {
1636
+ color: theme.vars?.palette.text.primary
1637
+ }
1638
+ }
1639
+ }
1640
+ ]
1641
+ })
1642
+ }
1643
+ };
1644
+ }
1645
+ function createSwitchOverrides(config) {
1646
+ return {
1647
+ defaultProps: {
1648
+ size: config.density === "compact" ? "small" : "medium"
1649
+ },
1650
+ styleOverrides: {
1651
+ root: {
1652
+ alignItems: "center",
1653
+ variants: [...switchSizeVariants]
1654
+ },
1655
+ switchBase: {
1656
+ top: "auto",
1657
+ left: "6px",
1658
+ variants: [...switchColorVariants, ...switchCheckedVariants, ...switchDisabledVariants]
1659
+ },
1660
+ thumb: ({ theme }) => ({
1661
+ width: SWITCH_DIMENSIONS.medium.thumb,
1662
+ height: SWITCH_DIMENSIONS.medium.thumb,
1663
+ color: theme.vars?.palette.common.white
1664
+ }),
1665
+ track: ({ theme }) => ({
1666
+ height: SWITCH_DIMENSIONS.medium.track,
1667
+ borderRadius: SWITCH_DIMENSIONS.medium.trackRadius,
1668
+ backgroundColor: varAlpha(getGreyChannel(theme), 0.48),
1669
+ opacity: 1
1670
+ })
1671
+ }
1672
+ };
1673
+ }
1674
+ function createFormLabelOverrides(_config) {
1675
+ return {
1676
+ styleOverrides: {
1677
+ root: ({ theme }) => ({
1678
+ [`&.${formLabelClasses.disabled}`]: {
1679
+ color: theme.vars?.palette.action.disabled
1680
+ },
1681
+ variants: [
1682
+ {
1683
+ props: (props) => !props.error,
1684
+ style: {
1685
+ [`&.${formLabelClasses.focused}`]: {
1686
+ color: theme.vars?.palette.text.secondary
1687
+ }
1688
+ }
1689
+ }
1690
+ ]
1691
+ })
1692
+ }
1693
+ };
1694
+ }
1695
+ function createFormControlLabelOverrides(_config) {
1696
+ return {
1697
+ styleOverrides: {
1698
+ label: ({ theme }) => ({
1699
+ ...theme.typography.body2
1700
+ })
1701
+ }
1702
+ };
1703
+ }
1704
+ function createFormControlOverrides(_config) {
1705
+ return {
1706
+ defaultProps: {
1707
+ variant: "outlined"
1708
+ },
1709
+ styleOverrides: {
1710
+ root: {
1711
+ "& .MuiFormLabel-root": {
1712
+ marginBottom: 8
1713
+ }
1714
+ }
1715
+ }
1716
+ };
1717
+ }
1718
+ var tabsVariants = {
1719
+ root: [
1720
+ {
1721
+ props: (props) => props.indicatorColor === "inherit",
1722
+ style: {
1723
+ "& .MuiTabs-indicator": {
1724
+ backgroundColor: "currentColor"
1725
+ }
1726
+ }
1727
+ }
1728
+ ],
1729
+ list: [
1730
+ {
1731
+ props: {},
1732
+ style: ({ theme }) => ({
1733
+ gap: theme.spacing(1)
1734
+ })
1735
+ }
1736
+ ]
1737
+ };
1738
+ var tabVariants = [
1739
+ {
1740
+ props: {},
1741
+ style: ({ theme }) => ({
1742
+ [`&.${tabClasses.selected}`]: {
1743
+ fontWeight: 600,
1744
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
1745
+ }
1746
+ })
1747
+ },
1748
+ {
1749
+ props: (props) => !!props.icon && !!props.label,
1750
+ style: {
1751
+ minHeight: "auto"
1752
+ }
1753
+ }
1754
+ ];
1755
+ function createTabsOverrides(config) {
1756
+ const dm = getDensityMultiplier(config.density);
1757
+ return {
1758
+ defaultProps: {
1759
+ variant: "scrollable",
1760
+ textColor: "inherit",
1761
+ indicatorColor: "primary",
1762
+ allowScrollButtonsMobile: true
1763
+ },
1764
+ styleOverrides: {
1765
+ root: ({ theme }) => ({
1766
+ minHeight: 36 * dm,
1767
+ variants: [...tabsVariants.root]
1768
+ }),
1769
+ list: {
1770
+ variants: [...tabsVariants.list]
1771
+ },
1772
+ indicator: {
1773
+ borderRadius: 2
1774
+ }
1775
+ }
1776
+ };
1777
+ }
1778
+ function createTabOverrides(config) {
1779
+ const dm = getDensityMultiplier(config.density);
1780
+ return {
1781
+ defaultProps: {
1782
+ disableRipple: true,
1783
+ iconPosition: "start"
1784
+ },
1785
+ styleOverrides: {
1786
+ root: ({ theme }) => ({
1787
+ padding: 8 * dm,
1788
+ minHeight: 36 * dm,
1789
+ minWidth: 36 * dm,
1790
+ opacity: 1,
1791
+ textTransform: "none",
1792
+ fontWeight: theme.typography.fontWeightMedium,
1793
+ color: theme.vars?.palette.text.secondary || theme.palette.text.secondary,
1794
+ lineHeight: theme.typography.body2.lineHeight,
1795
+ [`& .${svgIconClasses.root}`]: {
1796
+ fontSize: 20
1797
+ },
1798
+ variants: [...tabVariants]
1799
+ })
1800
+ }
1801
+ };
1802
+ }
1803
+
1804
+ // src/theme/components/index.ts
1805
+ function componentOverrides(config) {
1806
+ const { density, borderRadius } = config;
1807
+ const dm = getDensityMultiplier(density);
1808
+ return {
1809
+ // =========================================================================
1810
+ // BUTTONS (Modular)
1811
+ // =========================================================================
1812
+ MuiButton: createButtonOverrides(config),
1813
+ MuiButtonBase: createButtonBaseOverrides(),
1814
+ MuiButtonGroup: createButtonGroupOverrides(config),
1815
+ // =========================================================================
1816
+ // ICON BUTTON
1817
+ // =========================================================================
1818
+ MuiIconButton: {
1819
+ styleOverrides: {
1820
+ root: ({ theme }) => ({
1821
+ borderRadius,
1822
+ "&:hover": {
1823
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
1824
+ }
1825
+ })
1826
+ }
1827
+ },
1828
+ MuiInputAdornment: {
1829
+ styleOverrides: {
1830
+ root: {
1831
+ [`& .${iconButtonClasses.root}:hover`]: {
1832
+ backgroundColor: "transparent"
1833
+ }
1834
+ }
1835
+ }
1836
+ },
1837
+ // =========================================================================
1838
+ // FAB
1839
+ // =========================================================================
1840
+ MuiFab: {
1841
+ defaultProps: {
1842
+ color: "primary"
1843
+ },
1844
+ styleOverrides: {
1845
+ root: ({ theme }) => ({
1846
+ boxShadow: `0 8px 16px 0 rgba(${getColorChannel(theme, "primary")} / 0.24)`,
1847
+ "&:hover": {
1848
+ boxShadow: `0 8px 16px 0 rgba(${getColorChannel(theme, "primary")} / 0.32)`
1849
+ }
1850
+ })
1851
+ }
1852
+ },
1853
+ // =========================================================================
1854
+ // INPUTS (Refined - from Minimals patterns)
1855
+ // =========================================================================
1856
+ MuiInputBase: createInputBaseOverrides(),
1857
+ MuiInput: createInputOverrides(),
1858
+ MuiTextField: createTextFieldOverrides(config),
1859
+ MuiOutlinedInput: createOutlinedInputOverrides(config),
1860
+ MuiFilledInput: createFilledInputOverrides(config),
1861
+ MuiInputLabel: createInputLabelOverrides(),
1862
+ MuiFormHelperText: createFormHelperTextOverrides(),
1863
+ MuiSelect: {
1864
+ styleOverrides: {
1865
+ select: {
1866
+ // Reset minHeight so Select matches TextField height exactly.
1867
+ minHeight: "auto",
1868
+ display: "flex",
1869
+ alignItems: "center"
1870
+ },
1871
+ icon: {
1872
+ right: 10,
1873
+ width: 18,
1874
+ height: 18,
1875
+ top: "calc(50% - 9px)"
1876
+ }
1877
+ }
1878
+ },
1879
+ MuiNativeSelect: {
1880
+ styleOverrides: {
1881
+ icon: {
1882
+ right: 10,
1883
+ width: 18,
1884
+ height: 18,
1885
+ top: "calc(50% - 9px)"
1886
+ }
1887
+ }
1888
+ },
1889
+ MuiAutocomplete: {
1890
+ styleOverrides: {
1891
+ paper: ({ theme }) => ({
1892
+ borderRadius,
1893
+ boxShadow: `0 0 2px 0 rgba(${getGreyChannel(theme)} / 0.24), -20px 20px 40px -4px rgba(${getGreyChannel(theme)} / 0.24)`
1894
+ }),
1895
+ listbox: {
1896
+ padding: 4
1897
+ },
1898
+ option: ({ theme }) => ({
1899
+ borderRadius: borderRadius - 2,
1900
+ margin: 2,
1901
+ [`&.${autocompleteClasses.focused}`]: {
1902
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
1903
+ },
1904
+ '&[aria-selected="true"]': {
1905
+ backgroundColor: theme.vars?.palette.action.selected || theme.palette.action.selected,
1906
+ fontWeight: 500,
1907
+ [`&.${autocompleteClasses.focused}`]: {
1908
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
1909
+ }
1910
+ }
1911
+ }),
1912
+ popupIndicator: {
1913
+ [`& .${svgIconClasses.root}`]: {
1914
+ fontSize: 20
1915
+ }
1916
+ },
1917
+ clearIndicator: {
1918
+ [`& .${svgIconClasses.root}`]: {
1919
+ fontSize: 18
1920
+ }
1921
+ }
1922
+ }
1923
+ },
1924
+ // =========================================================================
1925
+ // CARDS
1926
+ // =========================================================================
1927
+ MuiCard: {
1928
+ defaultProps: {
1929
+ elevation: 0
1930
+ },
1931
+ styleOverrides: {
1932
+ root: ({ theme }) => ({
1933
+ position: "relative",
1934
+ zIndex: 0,
1935
+ // Safari stacking context fix
1936
+ borderRadius: borderRadius * 1.5,
1937
+ border: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`,
1938
+ backgroundImage: "none",
1939
+ boxShadow: `0 0 2px 0 rgba(${getGreyChannel(theme)} / 0.2), 0 12px 24px -4px rgba(${getGreyChannel(theme)} / 0.12)`
1940
+ })
1941
+ }
1942
+ },
1943
+ MuiCardHeader: {
1944
+ defaultProps: {
1945
+ titleTypographyProps: { variant: "h6" },
1946
+ subheaderTypographyProps: { variant: "body2" }
1947
+ },
1948
+ styleOverrides: {
1949
+ root: {
1950
+ padding: `${16 * dm}px ${20 * dm}px`
1951
+ },
1952
+ title: ({ theme }) => ({
1953
+ fontSize: theme.typography.pxToRem(16),
1954
+ fontWeight: 600,
1955
+ lineHeight: 1.5
1956
+ }),
1957
+ subheader: ({ theme }) => ({
1958
+ fontSize: theme.typography.pxToRem(14),
1959
+ lineHeight: 22 / 14,
1960
+ color: theme.vars?.palette.text.secondary || theme.palette.text.secondary
1961
+ })
1962
+ }
1963
+ },
1964
+ MuiCardContent: {
1965
+ styleOverrides: {
1966
+ root: {
1967
+ padding: `${16 * dm}px ${20 * dm}px`,
1968
+ "&:last-child": {
1969
+ paddingBottom: 16 * dm
1970
+ }
1971
+ }
1972
+ }
1973
+ },
1974
+ MuiCardActions: {
1975
+ styleOverrides: {
1976
+ root: {
1977
+ padding: `${12 * dm}px ${20 * dm}px`,
1978
+ gap: 8
1979
+ }
1980
+ }
1981
+ },
1982
+ // =========================================================================
1983
+ // PAPER & SURFACES
1984
+ // =========================================================================
1985
+ MuiPaper: {
1986
+ defaultProps: {
1987
+ elevation: 0
1988
+ },
1989
+ styleOverrides: {
1990
+ root: {
1991
+ backgroundImage: "none"
1992
+ },
1993
+ rounded: {
1994
+ borderRadius: borderRadius * 1.5
1995
+ },
1996
+ outlined: ({ theme }) => ({
1997
+ borderColor: `rgba(${getGreyChannel(theme)} / 0.16)`
1998
+ }),
1999
+ elevation1: ({ theme }) => ({
2000
+ boxShadow: `0 1px 2px 0 rgba(${getGreyChannel(theme, "900")} / 0.08)`
2001
+ }),
2002
+ elevation2: ({ theme }) => ({
2003
+ boxShadow: `0 2px 4px 0 rgba(${getGreyChannel(theme, "900")} / 0.08), 0 1px 2px 0 rgba(${getGreyChannel(theme, "900")} / 0.04)`
2004
+ }),
2005
+ elevation3: ({ theme }) => ({
2006
+ boxShadow: `0 4px 8px 0 rgba(${getGreyChannel(theme, "900")} / 0.08), 0 2px 4px 0 rgba(${getGreyChannel(theme, "900")} / 0.04)`
2007
+ }),
2008
+ elevation4: ({ theme }) => ({
2009
+ boxShadow: `0 8px 16px 0 rgba(${getGreyChannel(theme, "900")} / 0.08), 0 4px 8px 0 rgba(${getGreyChannel(theme, "900")} / 0.04)`
2010
+ }),
2011
+ elevation5: ({ theme }) => ({
2012
+ boxShadow: `0 12px 24px -4px rgba(${getGreyChannel(theme, "900")} / 0.08), 0 8px 16px 0 rgba(${getGreyChannel(theme, "900")} / 0.04)`
2013
+ })
2014
+ }
2015
+ },
2016
+ // =========================================================================
2017
+ // DIALOGS
2018
+ // =========================================================================
2019
+ MuiDialog: {
2020
+ styleOverrides: {
2021
+ paper: ({ theme }) => ({
2022
+ boxShadow: `0 24px 48px -12px rgba(${getGreyChannel(theme, "900")} / 0.24)`,
2023
+ // Mobile-first: fullscreen on < sm (600px)
2024
+ [theme.breakpoints.down("sm")]: {
2025
+ margin: 0,
2026
+ width: "100% !important",
2027
+ maxWidth: "none !important",
2028
+ maxHeight: "none !important",
2029
+ height: "100%",
2030
+ borderRadius: "0 !important"
2031
+ },
2032
+ variants: [
2033
+ {
2034
+ props: (props) => !props.fullScreen,
2035
+ style: {
2036
+ borderRadius: borderRadius * 2,
2037
+ [theme.breakpoints.up("sm")]: {
2038
+ margin: theme.spacing(2)
2039
+ }
2040
+ }
2041
+ }
2042
+ ]
2043
+ })
2044
+ }
2045
+ },
2046
+ MuiDialogTitle: {
2047
+ styleOverrides: {
2048
+ root: ({ theme }) => ({
2049
+ padding: `${20 * dm}px ${24 * dm}px`,
2050
+ fontSize: theme.typography.pxToRem(18),
2051
+ fontWeight: 600,
2052
+ lineHeight: 28 / 18
2053
+ })
2054
+ }
2055
+ },
2056
+ MuiDialogContent: {
2057
+ styleOverrides: {
2058
+ root: {
2059
+ padding: `${16 * dm}px ${24 * dm}px`
2060
+ }
2061
+ }
2062
+ },
2063
+ MuiDialogActions: {
2064
+ styleOverrides: {
2065
+ root: {
2066
+ padding: `${16 * dm}px ${24 * dm}px`,
2067
+ gap: 8
2068
+ }
2069
+ }
2070
+ },
2071
+ // =========================================================================
2072
+ // NAVIGATION
2073
+ // =========================================================================
2074
+ MuiDrawer: {
2075
+ styleOverrides: {
2076
+ paper: {
2077
+ backgroundImage: "none"
2078
+ }
2079
+ }
2080
+ },
2081
+ MuiAppBar: {
2082
+ defaultProps: {
2083
+ elevation: 0
2084
+ },
2085
+ styleOverrides: {
2086
+ root: ({ theme }) => ({
2087
+ backgroundImage: "none",
2088
+ borderBottom: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`
2089
+ })
2090
+ }
2091
+ },
2092
+ // Tabs (Refined - combining Aurora compact + Minimals indicators)
2093
+ MuiTabs: createTabsOverrides(config),
2094
+ MuiTab: createTabOverrides(config),
2095
+ MuiBreadcrumbs: {
2096
+ styleOverrides: {
2097
+ separator: {
2098
+ marginLeft: 8,
2099
+ marginRight: 8
2100
+ }
2101
+ }
2102
+ },
2103
+ // =========================================================================
2104
+ // ACCORDION
2105
+ // =========================================================================
2106
+ MuiAccordion: {
2107
+ defaultProps: {
2108
+ disableGutters: true,
2109
+ elevation: 0
2110
+ },
2111
+ styleOverrides: {
2112
+ root: ({ theme }) => ({
2113
+ border: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`,
2114
+ borderRadius,
2115
+ "&::before": {
2116
+ display: "none"
2117
+ },
2118
+ "&:first-of-type": {
2119
+ borderTopLeftRadius: borderRadius,
2120
+ borderTopRightRadius: borderRadius
2121
+ },
2122
+ "&:last-of-type": {
2123
+ borderBottomLeftRadius: borderRadius,
2124
+ borderBottomRightRadius: borderRadius
2125
+ },
2126
+ "&:not(:last-of-type)": {
2127
+ borderBottom: 0
2128
+ },
2129
+ [`&.${accordionClasses.expanded}`]: {
2130
+ margin: 0,
2131
+ "&:first-of-type": { marginTop: 0 },
2132
+ "&:last-of-type": { marginBottom: 0 }
2133
+ },
2134
+ [`&.${accordionClasses.disabled}`]: {
2135
+ backgroundColor: "transparent"
2136
+ }
2137
+ })
2138
+ }
2139
+ },
2140
+ MuiAccordionSummary: {
2141
+ styleOverrides: {
2142
+ root: ({ theme }) => ({
2143
+ minHeight: 48 * dm,
2144
+ padding: `0 ${16 * dm}px`,
2145
+ fontWeight: 500,
2146
+ [`&.${accordionSummaryClasses.expanded}`]: {
2147
+ minHeight: 48 * dm
2148
+ },
2149
+ [`&.${accordionSummaryClasses.disabled}`]: {
2150
+ opacity: 0.5
2151
+ }
2152
+ }),
2153
+ content: {
2154
+ margin: `${12 * dm}px 0`,
2155
+ [`&.${accordionSummaryClasses.expanded}`]: {
2156
+ margin: `${12 * dm}px 0`
2157
+ }
2158
+ },
2159
+ expandIconWrapper: ({ theme }) => ({
2160
+ color: theme.vars?.palette.text.secondary || theme.palette.text.secondary
2161
+ })
2162
+ }
2163
+ },
2164
+ MuiAccordionDetails: {
2165
+ styleOverrides: {
2166
+ root: ({ theme }) => ({
2167
+ padding: `${8 * dm}px ${16 * dm}px ${16 * dm}px`,
2168
+ borderTop: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`
2169
+ })
2170
+ }
2171
+ },
2172
+ // =========================================================================
2173
+ // STEPPER
2174
+ // =========================================================================
2175
+ MuiStep: {
2176
+ styleOverrides: {
2177
+ root: {
2178
+ padding: 0
2179
+ }
2180
+ }
2181
+ },
2182
+ MuiStepLabel: {
2183
+ styleOverrides: {
2184
+ label: ({ theme }) => ({
2185
+ fontSize: theme.typography.pxToRem(14),
2186
+ fontWeight: 500,
2187
+ [`&.${stepLabelClasses.active}`]: {
2188
+ fontWeight: 600,
2189
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
2190
+ },
2191
+ [`&.${stepLabelClasses.completed}`]: {
2192
+ fontWeight: 500,
2193
+ color: theme.vars?.palette.text.primary || theme.palette.text.primary
2194
+ }
2195
+ }),
2196
+ iconContainer: {
2197
+ paddingRight: 12 * dm
2198
+ }
2199
+ }
2200
+ },
2201
+ MuiStepConnector: {
2202
+ styleOverrides: {
2203
+ line: ({ theme }) => ({
2204
+ borderColor: theme.vars?.palette.divider || theme.palette.divider,
2205
+ borderTopWidth: 2
2206
+ })
2207
+ }
2208
+ },
2209
+ MuiStepIcon: {
2210
+ styleOverrides: {
2211
+ root: ({ theme }) => ({
2212
+ color: theme.vars?.palette.grey?.[300] || theme.palette.grey[300],
2213
+ [`&.${stepIconClasses.active}`]: {
2214
+ color: theme.vars?.palette.primary.main || theme.palette.primary.main
2215
+ },
2216
+ [`&.${stepIconClasses.completed}`]: {
2217
+ color: theme.vars?.palette.primary.main || theme.palette.primary.main
2218
+ }
2219
+ }),
2220
+ text: {
2221
+ fontWeight: 600,
2222
+ fontSize: "0.75rem"
2223
+ }
2224
+ }
2225
+ },
2226
+ MuiStepContent: {
2227
+ styleOverrides: {
2228
+ root: ({ theme }) => ({
2229
+ borderLeft: `2px solid ${theme.vars?.palette.divider || theme.palette.divider}`,
2230
+ marginLeft: 11,
2231
+ paddingLeft: 20,
2232
+ paddingRight: 8
2233
+ })
2234
+ }
2235
+ },
2236
+ // =========================================================================
2237
+ // PAGINATION
2238
+ // =========================================================================
2239
+ MuiPagination: {
2240
+ defaultProps: {
2241
+ shape: "rounded",
2242
+ size: density === "compact" ? "small" : "medium"
2243
+ }
2244
+ },
2245
+ MuiPaginationItem: {
2246
+ styleOverrides: {
2247
+ root: ({ theme }) => ({
2248
+ borderRadius: borderRadius - 2,
2249
+ fontWeight: 500,
2250
+ [`&.${paginationItemClasses.selected}`]: {
2251
+ fontWeight: 600
2252
+ }
2253
+ }),
2254
+ outlined: ({ theme }) => ({
2255
+ borderColor: theme.vars?.palette.divider || theme.palette.divider,
2256
+ [`&.${paginationItemClasses.selected}`]: {
2257
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.08)`,
2258
+ borderColor: theme.vars?.palette.primary.main || theme.palette.primary.main
2259
+ }
2260
+ }),
2261
+ text: ({ theme }) => ({
2262
+ [`&.${paginationItemClasses.selected}`]: {
2263
+ backgroundColor: theme.vars?.palette.primary.main || theme.palette.primary.main,
2264
+ color: theme.vars?.palette.primary.contrastText || theme.palette.primary.contrastText,
2265
+ "&:hover": {
2266
+ backgroundColor: theme.vars?.palette.primary.dark || theme.palette.primary.dark
2267
+ }
2268
+ }
2269
+ }),
2270
+ previousNext: ({ theme }) => ({
2271
+ borderRadius: borderRadius - 2,
2272
+ "&:hover": {
2273
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
2274
+ }
2275
+ }),
2276
+ firstLast: ({ theme }) => ({
2277
+ borderRadius: borderRadius - 2
2278
+ })
2279
+ }
2280
+ },
2281
+ // =========================================================================
2282
+ // DATA DISPLAY
2283
+ // =========================================================================
2284
+ MuiChip: createChipOverrides(config),
2285
+ MuiAvatar: {
2286
+ styleOverrides: {
2287
+ root: ({ theme }) => ({
2288
+ fontSize: theme.typography.pxToRem(14),
2289
+ fontWeight: 600
2290
+ })
2291
+ }
2292
+ },
2293
+ MuiBadge: {
2294
+ styleOverrides: {
2295
+ badge: {
2296
+ fontWeight: 600
2297
+ }
2298
+ }
2299
+ },
2300
+ MuiTooltip: {
2301
+ defaultProps: {
2302
+ arrow: true
2303
+ },
2304
+ styleOverrides: {
2305
+ tooltip: ({ theme }) => ({
2306
+ borderRadius: borderRadius - 2,
2307
+ fontSize: theme.typography.pxToRem(12),
2308
+ padding: "6px 12px",
2309
+ backgroundColor: theme.vars?.palette.grey?.[800] || theme.palette.grey[800]
2310
+ }),
2311
+ arrow: ({ theme }) => ({
2312
+ color: theme.vars?.palette.grey?.[800] || theme.palette.grey[800]
2313
+ })
2314
+ }
2315
+ },
2316
+ // =========================================================================
2317
+ // TABLES
2318
+ // =========================================================================
2319
+ MuiTableContainer: {
2320
+ styleOverrides: {
2321
+ root: {
2322
+ position: "relative"
2323
+ }
2324
+ }
2325
+ },
2326
+ MuiTableHead: {
2327
+ styleOverrides: {
2328
+ root: ({ theme }) => ({
2329
+ [`& .${tableCellClasses.head}`]: {
2330
+ fontWeight: 600,
2331
+ backgroundColor: theme.vars?.palette.background.neutral || theme.palette.grey[50],
2332
+ color: theme.vars?.palette.text.secondary || theme.palette.text.secondary
2333
+ }
2334
+ })
2335
+ }
2336
+ },
2337
+ MuiTableCell: {
2338
+ styleOverrides: {
2339
+ root: ({ theme }) => ({
2340
+ padding: `${12 * dm}px ${16 * dm}px`,
2341
+ borderBottomColor: `rgba(${getGreyChannel(theme)} / 0.2)`
2342
+ }),
2343
+ sizeSmall: {
2344
+ padding: `${8 * dm}px ${12 * dm}px`
2345
+ }
2346
+ }
2347
+ },
2348
+ MuiTableRow: {
2349
+ styleOverrides: {
2350
+ root: ({ theme }) => ({
2351
+ [`&:last-child .${tableCellClasses.root}`]: {
2352
+ borderBottom: "none"
2353
+ },
2354
+ [`&.${tableRowClasses.selected}`]: {
2355
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.08)`,
2356
+ "&:hover": {
2357
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.12)`
2358
+ }
2359
+ }
2360
+ })
2361
+ }
2362
+ },
2363
+ MuiTablePagination: {
2364
+ defaultProps: {
2365
+ backIconButtonProps: { size: "small" },
2366
+ nextIconButtonProps: { size: "small" },
2367
+ slotProps: { select: { name: "table-pagination-select" } }
2368
+ },
2369
+ styleOverrides: {
2370
+ root: ({ theme }) => ({
2371
+ borderTop: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`
2372
+ }),
2373
+ toolbar: {
2374
+ minHeight: 44 * dm,
2375
+ paddingLeft: 8 * dm,
2376
+ paddingRight: 8 * dm
2377
+ },
2378
+ actions: {
2379
+ marginRight: 8
2380
+ },
2381
+ select: {
2382
+ display: "flex",
2383
+ alignItems: "center"
2384
+ },
2385
+ selectIcon: {
2386
+ right: 4,
2387
+ width: 16,
2388
+ height: 16,
2389
+ top: "calc(50% - 8px)"
2390
+ },
2391
+ selectLabel: ({ theme }) => ({
2392
+ ...theme.typography.body2
2393
+ }),
2394
+ displayedRows: ({ theme }) => ({
2395
+ ...theme.typography.body2
2396
+ })
2397
+ }
2398
+ },
2399
+ // =========================================================================
2400
+ // FEEDBACK
2401
+ // =========================================================================
2402
+ MuiAlert: {
2403
+ styleOverrides: {
2404
+ root: {
2405
+ borderRadius
2406
+ },
2407
+ standardSuccess: ({ theme }) => ({
2408
+ backgroundColor: `rgba(${getColorChannel(theme, "success")} / 0.08)`,
2409
+ color: theme.vars?.palette.success.dark || theme.palette.success.dark
2410
+ }),
2411
+ standardError: ({ theme }) => ({
2412
+ backgroundColor: `rgba(${getColorChannel(theme, "error")} / 0.08)`,
2413
+ color: theme.vars?.palette.error.dark || theme.palette.error.dark
2414
+ }),
2415
+ standardWarning: ({ theme }) => ({
2416
+ backgroundColor: `rgba(${getColorChannel(theme, "warning")} / 0.08)`,
2417
+ color: theme.vars?.palette.warning.dark || theme.palette.warning.dark
2418
+ }),
2419
+ standardInfo: ({ theme }) => ({
2420
+ backgroundColor: `rgba(${getColorChannel(theme, "info")} / 0.08)`,
2421
+ color: theme.vars?.palette.info.dark || theme.palette.info.dark
2422
+ })
2423
+ }
2424
+ },
2425
+ MuiSnackbar: {
2426
+ styleOverrides: {
2427
+ root: {
2428
+ "& .MuiPaper-root": {
2429
+ borderRadius
2430
+ }
2431
+ }
2432
+ }
2433
+ },
2434
+ MuiLinearProgress: {
2435
+ styleOverrides: {
2436
+ root: {
2437
+ borderRadius: 4,
2438
+ height: 6
2439
+ }
2440
+ }
2441
+ },
2442
+ // =========================================================================
2443
+ // SLIDER
2444
+ // =========================================================================
2445
+ MuiSlider: {
2446
+ defaultProps: {
2447
+ size: density === "compact" ? "small" : "medium"
2448
+ },
2449
+ styleOverrides: {
2450
+ root: ({ theme }) => ({
2451
+ "&.Mui-disabled": {
2452
+ color: theme.vars?.palette.action.disabled || theme.palette.action.disabled
2453
+ }
2454
+ }),
2455
+ rail: ({ theme }) => ({
2456
+ opacity: 0.32,
2457
+ backgroundColor: theme.vars?.palette.grey?.[500] || theme.palette.grey[500]
2458
+ }),
2459
+ track: {
2460
+ border: "none"
2461
+ },
2462
+ thumb: ({ theme }) => ({
2463
+ width: density === "compact" ? 16 : 20,
2464
+ height: density === "compact" ? 16 : 20,
2465
+ backgroundColor: theme.vars?.palette.common.white || theme.palette.common.white,
2466
+ border: "2px solid currentColor",
2467
+ boxShadow: `0 1px 3px 0 rgba(${getGreyChannel(theme, "900")} / 0.2)`,
2468
+ "&::before": {
2469
+ display: "none"
2470
+ },
2471
+ "&:hover, &.Mui-focusVisible": {
2472
+ boxShadow: `0 0 0 8px rgba(${getColorChannel(theme, "primary")} / 0.16)`
2473
+ },
2474
+ "&.Mui-active": {
2475
+ boxShadow: `0 0 0 12px rgba(${getColorChannel(theme, "primary")} / 0.24)`
2476
+ }
2477
+ }),
2478
+ valueLabel: ({ theme }) => ({
2479
+ borderRadius: borderRadius - 2,
2480
+ backgroundColor: theme.vars?.palette.grey?.[800] || theme.palette.grey[800],
2481
+ "&::before": {
2482
+ display: "none"
2483
+ }
2484
+ }),
2485
+ mark: ({ theme }) => ({
2486
+ width: 4,
2487
+ height: 4,
2488
+ borderRadius: "50%",
2489
+ backgroundColor: theme.vars?.palette.grey?.[400] || theme.palette.grey[400]
2490
+ }),
2491
+ markActive: ({ theme }) => ({
2492
+ backgroundColor: theme.vars?.palette.common.white || theme.palette.common.white
2493
+ })
2494
+ }
2495
+ },
2496
+ // =========================================================================
2497
+ // RATING
2498
+ // =========================================================================
2499
+ MuiRating: {
2500
+ defaultProps: {
2501
+ size: density === "compact" ? "small" : "medium",
2502
+ emptyIcon: void 0
2503
+ // Use default empty icon
2504
+ },
2505
+ styleOverrides: {
2506
+ root: ({ theme }) => ({
2507
+ "&.Mui-disabled": {
2508
+ opacity: 0.48
2509
+ }
2510
+ }),
2511
+ icon: {
2512
+ fontSize: "inherit"
2513
+ },
2514
+ iconEmpty: ({ theme }) => ({
2515
+ color: theme.vars?.palette.grey?.[300] || theme.palette.grey[300]
2516
+ }),
2517
+ iconFilled: ({ theme }) => ({
2518
+ color: theme.vars?.palette.warning.main || theme.palette.warning.main
2519
+ }),
2520
+ iconHover: ({ theme }) => ({
2521
+ color: theme.vars?.palette.warning.dark || theme.palette.warning.dark
2522
+ }),
2523
+ sizeSmall: {
2524
+ fontSize: "1.125rem"
2525
+ },
2526
+ sizeMedium: {
2527
+ fontSize: "1.5rem"
2528
+ },
2529
+ sizeLarge: {
2530
+ fontSize: "2rem"
2531
+ }
2532
+ }
2533
+ },
2534
+ // =========================================================================
2535
+ // FORMS (Refined - with custom icons)
2536
+ // =========================================================================
2537
+ MuiCheckbox: createCheckboxOverrides(config),
2538
+ MuiRadio: createRadioOverrides(config),
2539
+ MuiSwitch: createSwitchOverrides(config),
2540
+ MuiFormControl: createFormControlOverrides(),
2541
+ MuiFormControlLabel: createFormControlLabelOverrides(),
2542
+ MuiFormLabel: createFormLabelOverrides(),
2543
+ // =========================================================================
2544
+ // LISTS
2545
+ // =========================================================================
2546
+ MuiListItemButton: {
2547
+ styleOverrides: {
2548
+ root: ({ theme }) => ({
2549
+ borderRadius: borderRadius - 2,
2550
+ margin: 2,
2551
+ "&.Mui-selected": {
2552
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.08)`,
2553
+ fontWeight: 500
2554
+ },
2555
+ "&:hover": {
2556
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
2557
+ }
2558
+ })
2559
+ }
2560
+ },
2561
+ MuiListItemIcon: {
2562
+ styleOverrides: {
2563
+ root: {
2564
+ minWidth: 40
2565
+ }
2566
+ }
2567
+ },
2568
+ // =========================================================================
2569
+ // MENUS (Refined - with proper menu item styles)
2570
+ // =========================================================================
2571
+ MuiMenu: {
2572
+ styleOverrides: {
2573
+ paper: ({ theme }) => ({
2574
+ borderRadius,
2575
+ marginTop: 4,
2576
+ boxShadow: `0 0 2px 0 rgba(${getGreyChannel(theme)} / 0.24), -20px 20px 40px -4px rgba(${getGreyChannel(theme)} / 0.24)`
2577
+ }),
2578
+ list: {
2579
+ padding: 4
2580
+ }
2581
+ }
2582
+ },
2583
+ MuiMenuItem: {
2584
+ styleOverrides: {
2585
+ root: ({ theme }) => ({
2586
+ ...theme.typography.body2,
2587
+ borderRadius: borderRadius - 2,
2588
+ margin: 2,
2589
+ padding: `${8 * dm}px ${12 * dm}px`,
2590
+ "&:not(:last-of-type)": {
2591
+ marginBottom: 4
2592
+ },
2593
+ "&.Mui-selected": {
2594
+ fontWeight: 500,
2595
+ backgroundColor: theme.vars?.palette.action.selected || theme.palette.action.selected,
2596
+ "&:hover": {
2597
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
2598
+ }
2599
+ }
2600
+ })
2601
+ }
2602
+ },
2603
+ MuiPopover: {
2604
+ styleOverrides: {
2605
+ paper: ({ theme }) => ({
2606
+ borderRadius,
2607
+ boxShadow: `0 0 2px 0 rgba(${getGreyChannel(theme)} / 0.24), -20px 20px 40px -4px rgba(${getGreyChannel(theme)} / 0.24)`
2608
+ })
2609
+ }
2610
+ },
2611
+ // =========================================================================
2612
+ // MISC
2613
+ // =========================================================================
2614
+ MuiDivider: {
2615
+ styleOverrides: {
2616
+ root: ({ theme }) => ({
2617
+ borderColor: `rgba(${getGreyChannel(theme)} / 0.2)`
2618
+ })
2619
+ }
2620
+ },
2621
+ MuiSkeleton: {
2622
+ styleOverrides: {
2623
+ rounded: {
2624
+ borderRadius
2625
+ }
2626
+ }
2627
+ },
2628
+ MuiBackdrop: {
2629
+ styleOverrides: {
2630
+ root: ({ theme }) => ({
2631
+ backgroundColor: `rgba(${getGreyChannel(theme, "900")} / 0.5)`
2632
+ })
2633
+ }
2634
+ },
2635
+ // =========================================================================
2636
+ // LINK
2637
+ // =========================================================================
2638
+ MuiLink: {
2639
+ defaultProps: {
2640
+ underline: "hover"
2641
+ },
2642
+ styleOverrides: {
2643
+ root: ({ theme }) => ({
2644
+ color: theme.vars?.palette.primary.main || theme.palette.primary.main,
2645
+ textDecorationColor: "transparent",
2646
+ transition: "color 150ms, text-decoration-color 150ms",
2647
+ "&:hover": {
2648
+ textDecorationColor: "currentColor"
2649
+ }
2650
+ })
2651
+ }
2652
+ },
2653
+ // =========================================================================
2654
+ // TOGGLE BUTTON
2655
+ // =========================================================================
2656
+ MuiToggleButton: {
2657
+ styleOverrides: {
2658
+ root: ({ theme }) => ({
2659
+ borderRadius,
2660
+ fontWeight: 500,
2661
+ textTransform: "none",
2662
+ border: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`,
2663
+ [`&.${toggleButtonClasses.selected}`]: {
2664
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.08)`,
2665
+ borderColor: theme.vars?.palette.primary.main || theme.palette.primary.main,
2666
+ color: theme.vars?.palette.primary.main || theme.palette.primary.main,
2667
+ "&:hover": {
2668
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.16)`
2669
+ }
2670
+ },
2671
+ [`&.${toggleButtonClasses.disabled}`]: {
2672
+ borderColor: theme.vars?.palette.action.disabledBackground || theme.palette.action.disabledBackground
2673
+ }
2674
+ }),
2675
+ sizeSmall: {
2676
+ padding: `${4 * dm}px ${8 * dm}px`,
2677
+ fontSize: "0.8125rem"
2678
+ },
2679
+ sizeMedium: {
2680
+ padding: `${6 * dm}px ${12 * dm}px`
2681
+ },
2682
+ sizeLarge: {
2683
+ padding: `${8 * dm}px ${16 * dm}px`,
2684
+ fontSize: "0.9375rem"
2685
+ }
2686
+ }
2687
+ },
2688
+ MuiToggleButtonGroup: {
2689
+ styleOverrides: {
2690
+ root: {
2691
+ gap: 4,
2692
+ "& .MuiToggleButton-root": {
2693
+ border: "1px solid",
2694
+ borderRadius: `${borderRadius}px !important`
2695
+ }
2696
+ },
2697
+ grouped: {
2698
+ "&:not(:first-of-type)": {
2699
+ marginLeft: 0,
2700
+ borderLeft: "1px solid"
2701
+ }
2702
+ }
2703
+ }
2704
+ },
2705
+ // =========================================================================
2706
+ // TIMELINE
2707
+ // =========================================================================
2708
+ MuiTimeline: {
2709
+ styleOverrides: {
2710
+ root: {
2711
+ padding: 0
2712
+ }
2713
+ }
2714
+ },
2715
+ MuiTimelineItem: {
2716
+ styleOverrides: {
2717
+ root: {
2718
+ "&::before": {
2719
+ display: "none"
2720
+ }
2721
+ }
2722
+ }
2723
+ },
2724
+ MuiTimelineDot: {
2725
+ styleOverrides: {
2726
+ root: ({ theme }) => ({
2727
+ boxShadow: "none",
2728
+ borderColor: "transparent",
2729
+ padding: 3
2730
+ }),
2731
+ outlined: ({ theme }) => ({
2732
+ borderColor: theme.vars?.palette.divider || theme.palette.divider,
2733
+ backgroundColor: "transparent"
2734
+ })
2735
+ }
2736
+ },
2737
+ MuiTimelineConnector: {
2738
+ styleOverrides: {
2739
+ root: ({ theme }) => ({
2740
+ backgroundColor: theme.vars?.palette.divider || theme.palette.divider,
2741
+ width: 2
2742
+ })
2743
+ }
2744
+ },
2745
+ MuiTimelineContent: {
2746
+ styleOverrides: {
2747
+ root: ({ theme }) => ({
2748
+ ...theme.typography.body2,
2749
+ padding: `${6 * dm}px ${16 * dm}px`
2750
+ })
2751
+ }
2752
+ },
2753
+ // =========================================================================
2754
+ // DATA GRID (MUI X)
2755
+ // =========================================================================
2756
+ MuiDataGrid: {
2757
+ styleOverrides: {
2758
+ root: ({ theme }) => ({
2759
+ border: "none",
2760
+ borderRadius,
2761
+ "--DataGrid-containerBackground": theme.vars?.palette.background.neutral || theme.palette.grey[50],
2762
+ "--DataGrid-pinnedBackground": theme.vars?.palette.background.paper || theme.palette.background.paper,
2763
+ "& .MuiDataGrid-columnHeaders": {
2764
+ borderBottom: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`
2765
+ },
2766
+ "& .MuiDataGrid-columnHeader": {
2767
+ fontWeight: 600,
2768
+ fontSize: theme.typography.pxToRem(14),
2769
+ color: theme.vars?.palette.text.secondary || theme.palette.text.secondary,
2770
+ "&:focus, &:focus-within": {
2771
+ outline: "none"
2772
+ }
2773
+ },
2774
+ "& .MuiDataGrid-cell": {
2775
+ borderBottom: `1px solid rgba(${getGreyChannel(theme)} / 0.12)`,
2776
+ "&:focus, &:focus-within": {
2777
+ outline: "none"
2778
+ }
2779
+ },
2780
+ "& .MuiDataGrid-row": {
2781
+ "&:hover": {
2782
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
2783
+ },
2784
+ "&.Mui-selected": {
2785
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.08)`,
2786
+ "&:hover": {
2787
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.12)`
2788
+ }
2789
+ }
2790
+ },
2791
+ "& .MuiDataGrid-footerContainer": {
2792
+ borderTop: `1px solid ${theme.vars?.palette.divider || theme.palette.divider}`
2793
+ },
2794
+ "& .MuiDataGrid-selectedRowCount": {
2795
+ whiteSpace: "nowrap"
2796
+ },
2797
+ "& .MuiDataGrid-toolbarContainer": {
2798
+ padding: theme.spacing(1.5, 1.5, 0.5),
2799
+ gap: theme.spacing(1)
2800
+ },
2801
+ "& .MuiDataGrid-columnSeparator": {
2802
+ color: theme.vars?.palette.divider || theme.palette.divider
2803
+ }
2804
+ })
2805
+ }
2806
+ },
2807
+ // =========================================================================
2808
+ // DATE/TIME PICKERS (MUI X)
2809
+ // =========================================================================
2810
+ MuiDatePicker: {
2811
+ defaultProps: {
2812
+ slotProps: {
2813
+ openPickerButton: {
2814
+ size: density === "compact" ? "small" : "medium"
2815
+ }
2816
+ }
2817
+ }
2818
+ },
2819
+ MuiPickersLayout: {
2820
+ styleOverrides: {
2821
+ root: ({ theme }) => ({
2822
+ "& .MuiPickersLayout-actionBar": {
2823
+ padding: theme.spacing(1, 2)
2824
+ }
2825
+ })
2826
+ }
2827
+ },
2828
+ MuiPickersDay: {
2829
+ styleOverrides: {
2830
+ root: ({ theme }) => ({
2831
+ borderRadius: borderRadius - 2,
2832
+ fontWeight: 400,
2833
+ "&.Mui-selected": {
2834
+ fontWeight: 600
2835
+ }
2836
+ }),
2837
+ today: ({ theme }) => ({
2838
+ borderColor: theme.vars?.palette.primary.main || theme.palette.primary.main,
2839
+ "&:not(.Mui-selected)": {
2840
+ backgroundColor: "transparent"
2841
+ }
2842
+ })
2843
+ }
2844
+ },
2845
+ MuiPickersYear: {
2846
+ styleOverrides: {
2847
+ yearButton: ({ theme }) => ({
2848
+ borderRadius,
2849
+ "&.Mui-selected": {
2850
+ fontWeight: 600
2851
+ }
2852
+ })
2853
+ }
2854
+ },
2855
+ MuiPickersMonth: {
2856
+ styleOverrides: {
2857
+ monthButton: ({ theme }) => ({
2858
+ borderRadius,
2859
+ "&.Mui-selected": {
2860
+ fontWeight: 600
2861
+ }
2862
+ })
2863
+ }
2864
+ },
2865
+ // =========================================================================
2866
+ // TREE VIEW (MUI X)
2867
+ // =========================================================================
2868
+ MuiTreeItem: {
2869
+ styleOverrides: {
2870
+ root: {
2871
+ // Default styling
2872
+ },
2873
+ content: ({ theme }) => ({
2874
+ borderRadius: borderRadius - 2,
2875
+ padding: `${4 * dm}px ${8 * dm}px`,
2876
+ "&.Mui-selected": {
2877
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.08)`,
2878
+ "&:hover": {
2879
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.16)`
2880
+ },
2881
+ "&.Mui-focused": {
2882
+ backgroundColor: `rgba(${getColorChannel(theme, "primary")} / 0.12)`
2883
+ }
2884
+ },
2885
+ "&:hover": {
2886
+ backgroundColor: theme.vars?.palette.action.hover || theme.palette.action.hover
2887
+ }
2888
+ }),
2889
+ label: ({ theme }) => ({
2890
+ ...theme.typography.body2,
2891
+ fontWeight: 500
2892
+ }),
2893
+ iconContainer: {
2894
+ width: "auto"
2895
+ }
2896
+ }
2897
+ },
2898
+ MuiCssBaseline: {
2899
+ styleOverrides: (theme) => ({
2900
+ html: {
2901
+ scrollBehavior: "smooth"
2902
+ },
2903
+ body: {
2904
+ scrollbarWidth: "thin",
2905
+ scrollbarColor: `rgba(${getGreyChannel(theme)} / 0.4) rgba(${getGreyChannel(theme)} / 0.08)`
2906
+ },
2907
+ "*, *::before, *::after": {
2908
+ boxSizing: "border-box"
2909
+ },
2910
+ "#root, #__next": {
2911
+ height: "100%"
2912
+ },
2913
+ // Webkit scrollbar styling
2914
+ "::-webkit-scrollbar": {
2915
+ width: 6,
2916
+ height: 6
2917
+ },
2918
+ "::-webkit-scrollbar-track": {
2919
+ backgroundColor: "transparent"
2920
+ },
2921
+ "::-webkit-scrollbar-thumb": {
2922
+ backgroundColor: `rgba(${getGreyChannel(theme)} / 0.4)`,
2923
+ borderRadius: 3
2924
+ },
2925
+ "::-webkit-scrollbar-thumb:hover": {
2926
+ backgroundColor: `rgba(${getGreyChannel(theme)} / 0.6)`
2927
+ },
2928
+ // Vision Mode Accessibility Filters
2929
+ // These apply SVG color matrix filters to simulate color blindness
2930
+ 'html[data-vision="protanopia"]:not([data-showcase])': {
2931
+ filter: 'url("#protanopia-filter")'
2932
+ },
2933
+ 'html[data-vision="deuteranopia"]:not([data-showcase])': {
2934
+ filter: 'url("#deuteranopia-filter")'
2935
+ },
2936
+ 'html[data-vision="tritanopia"]:not([data-showcase])': {
2937
+ filter: 'url("#tritanopia-filter")'
2938
+ },
2939
+ 'html[data-vision="achromatopsia"]:not([data-showcase])': {
2940
+ filter: 'url("#achromatopsia-filter")'
2941
+ }
2942
+ })
2943
+ }
2944
+ };
2945
+ }
2946
+
2947
+ // src/theme/shadows.ts
2948
+ var shadows = [
2949
+ "none",
2950
+ "0px 1px 2px 0px rgba(0, 0, 0, 0.05)",
2951
+ "0px 1px 3px 0px rgba(0, 0, 0, 0.1), 0px 1px 2px -1px rgba(0, 0, 0, 0.1)",
2952
+ "0px 4px 6px -1px rgba(0, 0, 0, 0.1), 0px 2px 4px -2px rgba(0, 0, 0, 0.1)",
2953
+ "0px 10px 15px -3px rgba(0, 0, 0, 0.1), 0px 4px 6px -4px rgba(0, 0, 0, 0.1)",
2954
+ "0px 20px 25px -5px rgba(0, 0, 0, 0.1), 0px 8px 10px -6px rgba(0, 0, 0, 0.1)",
2955
+ "0px 25px 50px -12px rgba(0, 0, 0, 0.25)",
2956
+ // Cards and dropdowns
2957
+ "0px 2px 4px rgba(0, 0, 0, 0.08)",
2958
+ "0px 4px 8px rgba(0, 0, 0, 0.08)",
2959
+ "0px 8px 16px rgba(0, 0, 0, 0.08)",
2960
+ "0px 12px 24px rgba(0, 0, 0, 0.08)",
2961
+ "0px 16px 32px rgba(0, 0, 0, 0.08)",
2962
+ "0px 20px 40px rgba(0, 0, 0, 0.08)",
2963
+ // Modals and dialogs
2964
+ "0px 4px 6px -2px rgba(0, 0, 0, 0.05), 0px 10px 15px -3px rgba(0, 0, 0, 0.1)",
2965
+ "0px 10px 10px -5px rgba(0, 0, 0, 0.04), 0px 20px 25px -5px rgba(0, 0, 0, 0.1)",
2966
+ "0px 20px 20px -10px rgba(0, 0, 0, 0.04), 0px 25px 50px -12px rgba(0, 0, 0, 0.25)",
2967
+ // Navigation
2968
+ "0px 0px 0px 1px rgba(0, 0, 0, 0.05)",
2969
+ "0px 1px 2px rgba(0, 0, 0, 0.05), 0px 0px 0px 1px rgba(0, 0, 0, 0.05)",
2970
+ "0px 2px 4px rgba(0, 0, 0, 0.05), 0px 0px 0px 1px rgba(0, 0, 0, 0.05)",
2971
+ // Focus rings
2972
+ "0px 0px 0px 3px rgba(66, 153, 225, 0.5)",
2973
+ "0px 0px 0px 3px rgba(72, 187, 120, 0.5)",
2974
+ "0px 0px 0px 3px rgba(245, 101, 101, 0.5)",
2975
+ // Inset
2976
+ "inset 0px 2px 4px rgba(0, 0, 0, 0.06)",
2977
+ "inset 0px 4px 6px rgba(0, 0, 0, 0.1)",
2978
+ "inset 0px 0px 0px 1px rgba(0, 0, 0, 0.1)"
2979
+ ];
2980
+ function createShadows(primaryColor, opacityMultiplier = 1) {
2981
+ if (opacityMultiplier === 1) {
2982
+ return [...shadows];
2983
+ }
2984
+ return shadows.map((shadow) => {
2985
+ if (shadow === "none") return shadow;
2986
+ return shadow.replace(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/g, (_, r, g, b, a) => {
2987
+ const newAlpha = Math.min(1, parseFloat(a) * opacityMultiplier);
2988
+ return `rgba(${r}, ${g}, ${b}, ${newAlpha.toFixed(2)})`;
2989
+ });
2990
+ });
2991
+ }
2992
+ ({
2993
+ /** No shadow */
2994
+ none: shadows[0],
2995
+ /** Extra small shadow */
2996
+ xs: shadows[1],
2997
+ /** Small shadow */
2998
+ sm: shadows[2],
2999
+ /** Medium shadow */
3000
+ md: shadows[3],
3001
+ /** Large shadow */
3002
+ lg: shadows[4],
3003
+ /** Extra large shadow */
3004
+ xl: shadows[5],
3005
+ /** 2x extra large shadow */
3006
+ "2xl": shadows[6],
3007
+ /** Card shadow */
3008
+ card: shadows[8],
3009
+ /** Dropdown shadow */
3010
+ dropdown: shadows[9],
3011
+ /** Modal shadow */
3012
+ modal: shadows[14],
3013
+ /** Dialog shadow */
3014
+ dialog: shadows[15],
3015
+ /** Focus ring (primary) */
3016
+ focusPrimary: shadows[19],
3017
+ /** Focus ring (success) */
3018
+ focusSuccess: shadows[20],
3019
+ /** Focus ring (error) */
3020
+ focusError: shadows[21],
3021
+ /** Inset shadow */
3022
+ inset: shadows[22]
3023
+ });
3024
+ var darkShadow = "0px 0px 0px 1px rgba(255, 255, 255, 0.1)";
3025
+
3026
+ // src/theme/typography.ts
3027
+ var typography = {
3028
+ fontFamily: {
3029
+ primary: '"Nunito Sans Variable", "Nunito Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
3030
+ secondary: '"Exo 2", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
3031
+ mono: '"JetBrains Mono", "Fira Code", Consolas, Monaco, monospace'
3032
+ },
3033
+ fontWeights: {
3034
+ light: 300,
3035
+ regular: 400,
3036
+ medium: 500,
3037
+ semiBold: 600,
3038
+ bold: 700
3039
+ }
3040
+ };
3041
+ var fontSizes = {
3042
+ xs: "0.75rem",
3043
+ // 12px
3044
+ sm: "0.875rem",
3045
+ // 14px
3046
+ md: "1rem",
3047
+ // 16px
3048
+ lg: "1.125rem",
3049
+ // 18px
3050
+ xl: "1.25rem",
3051
+ // 20px
3052
+ "2xl": "1.5rem",
3053
+ // 24px
3054
+ "3xl": "1.875rem",
3055
+ // 30px
3056
+ "4xl": "2.25rem",
3057
+ // 36px
3058
+ "5xl": "3rem"};
3059
+ var lineHeights = {
3060
+ tight: 1.25,
3061
+ snug: 1.375,
3062
+ normal: 1.5,
3063
+ relaxed: 1.625};
3064
+ function createTypography(config) {
3065
+ const { fontFamily, fontWeights } = config;
3066
+ return {
3067
+ fontFamily: fontFamily.primary,
3068
+ fontWeightLight: fontWeights.light,
3069
+ fontWeightRegular: fontWeights.regular,
3070
+ fontWeightMedium: fontWeights.medium,
3071
+ fontWeightBold: fontWeights.bold,
3072
+ // Headings
3073
+ h1: {
3074
+ fontFamily: fontFamily.secondary || fontFamily.primary,
3075
+ fontWeight: fontWeights.bold,
3076
+ fontSize: fontSizes["5xl"],
3077
+ lineHeight: lineHeights.tight,
3078
+ letterSpacing: "-0.025em"
3079
+ },
3080
+ h2: {
3081
+ fontFamily: fontFamily.secondary || fontFamily.primary,
3082
+ fontWeight: fontWeights.bold,
3083
+ fontSize: fontSizes["4xl"],
3084
+ lineHeight: lineHeights.tight,
3085
+ letterSpacing: "-0.025em"
3086
+ },
3087
+ h3: {
3088
+ fontFamily: fontFamily.secondary || fontFamily.primary,
3089
+ fontWeight: fontWeights.semiBold,
3090
+ fontSize: fontSizes["3xl"],
3091
+ lineHeight: lineHeights.snug,
3092
+ letterSpacing: "-0.02em"
3093
+ },
3094
+ h4: {
3095
+ fontFamily: fontFamily.secondary || fontFamily.primary,
3096
+ fontWeight: fontWeights.semiBold,
3097
+ fontSize: fontSizes["2xl"],
3098
+ lineHeight: lineHeights.snug,
3099
+ letterSpacing: "-0.02em"
3100
+ },
3101
+ h5: {
3102
+ fontFamily: fontFamily.secondary || fontFamily.primary,
3103
+ fontWeight: fontWeights.semiBold,
3104
+ fontSize: fontSizes.xl,
3105
+ lineHeight: lineHeights.snug
3106
+ },
3107
+ h6: {
3108
+ fontFamily: fontFamily.secondary || fontFamily.primary,
3109
+ fontWeight: fontWeights.semiBold,
3110
+ fontSize: fontSizes.lg,
3111
+ lineHeight: lineHeights.snug
3112
+ },
3113
+ // Body text
3114
+ body1: {
3115
+ fontSize: fontSizes.md,
3116
+ lineHeight: lineHeights.relaxed
3117
+ },
3118
+ body2: {
3119
+ fontSize: fontSizes.sm,
3120
+ lineHeight: lineHeights.relaxed
3121
+ },
3122
+ // Subtitles
3123
+ subtitle1: {
3124
+ fontSize: fontSizes.md,
3125
+ fontWeight: fontWeights.medium,
3126
+ lineHeight: lineHeights.normal
3127
+ },
3128
+ subtitle2: {
3129
+ fontSize: fontSizes.sm,
3130
+ fontWeight: fontWeights.medium,
3131
+ lineHeight: lineHeights.normal
3132
+ },
3133
+ // Captions and overlines
3134
+ caption: {
3135
+ fontSize: fontSizes.xs,
3136
+ lineHeight: lineHeights.normal
3137
+ },
3138
+ overline: {
3139
+ fontSize: fontSizes.xs,
3140
+ fontWeight: fontWeights.semiBold,
3141
+ lineHeight: lineHeights.normal,
3142
+ textTransform: "uppercase",
3143
+ letterSpacing: "0.08em"
3144
+ },
3145
+ // Buttons
3146
+ button: {
3147
+ fontSize: fontSizes.sm,
3148
+ fontWeight: fontWeights.semiBold,
3149
+ lineHeight: lineHeights.normal,
3150
+ textTransform: "none"
3151
+ }
3152
+ };
3153
+ }
3154
+
3155
+ // src/theme/colors/luxury.ts
3156
+ var luxuryPrimary = {
3157
+ 50: "#FBF7E8",
3158
+ 100: "#F5EBC9",
3159
+ 200: "#EDDFA8",
3160
+ 300: "#E3D086",
3161
+ 400: "#D9C164",
3162
+ 500: "#C9A227",
3163
+ 600: "#A88820",
3164
+ 700: "#876D1A",
3165
+ 800: "#665314",
3166
+ 900: "#45380E",
3167
+ 950: "#241D07"
3168
+ };
3169
+ var luxurySecondary = {
3170
+ 50: "#F5EEF5",
3171
+ 100: "#E8D5E8",
3172
+ 200: "#D4B3D4",
3173
+ 300: "#B38AB3",
3174
+ 400: "#996399",
3175
+ 500: "#6B3A6B",
3176
+ 600: "#5A305A",
3177
+ 700: "#4A284A",
3178
+ 800: "#3A1F3A",
3179
+ 900: "#2A172A",
3180
+ 950: "#1A0F1A"
3181
+ };
3182
+ var luxuryNeutral = {
3183
+ 50: "#FAF9F7",
3184
+ 100: "#F5F3F0",
3185
+ 200: "#E8E4DE",
3186
+ 300: "#D4CEC4",
3187
+ 400: "#B8AFA0",
3188
+ 500: "#9C917C",
3189
+ 600: "#7A6F5C",
3190
+ 700: "#5C5244",
3191
+ 800: "#3E362C",
3192
+ 900: "#201C16",
3193
+ 950: "#100E0B"
3194
+ };
3195
+ var luxuryError = {
3196
+ 50: "#F9E8E8",
3197
+ 100: "#F0C9C9",
3198
+ 200: "#E4A3A3",
3199
+ 300: "#D57C7C",
3200
+ 400: "#C65656",
3201
+ 500: "#B82E2E",
3202
+ 600: "#9A2626",
3203
+ 700: "#7D1E1E",
3204
+ 800: "#5F1717",
3205
+ 900: "#42100F",
3206
+ 950: "#250908"
3207
+ };
3208
+ var luxuryWarning = {
3209
+ 50: "#FEF8E6",
3210
+ 100: "#FCEFC2",
3211
+ 200: "#F9E394",
3212
+ 300: "#F5D566",
3213
+ 400: "#F0C538",
3214
+ 500: "#D4A012",
3215
+ 600: "#B1850F",
3216
+ 700: "#8E6B0C",
3217
+ 800: "#6B5009",
3218
+ 900: "#483606",
3219
+ 950: "#251B03"
3220
+ };
3221
+ var luxurySuccess = {
3222
+ 50: "#E8F4E8",
3223
+ 100: "#C9E4C9",
3224
+ 200: "#A3D1A3",
3225
+ 300: "#7DBD7D",
3226
+ 400: "#56A956",
3227
+ 500: "#2E8B2E",
3228
+ 600: "#267426",
3229
+ 700: "#1E5D1E",
3230
+ 800: "#174717",
3231
+ 900: "#0F300F",
3232
+ 950: "#081A08"
3233
+ };
3234
+ var luxuryInfo = {
3235
+ 50: "#E8F0F6",
3236
+ 100: "#C9DCEB",
3237
+ 200: "#A3C4DD",
3238
+ 300: "#7DACCE",
3239
+ 400: "#5694C0",
3240
+ 500: "#2E7AB8",
3241
+ 600: "#26669A",
3242
+ 700: "#1E527C",
3243
+ 800: "#173E5E",
3244
+ 900: "#0F2A40",
3245
+ 950: "#081520"
3246
+ };
3247
+ var luxuryColors = {
3248
+ primary: luxuryPrimary,
3249
+ secondary: luxurySecondary,
3250
+ neutral: luxuryNeutral,
3251
+ error: luxuryError,
3252
+ warning: luxuryWarning,
3253
+ success: luxurySuccess,
3254
+ info: luxuryInfo
3255
+ };
3256
+
3257
+ // src/theme/presets/arctic.ts
3258
+ var lightPalette = {
3259
+ primary: {
3260
+ lighter: "#D6E9F8",
3261
+ light: "#7BC1F0",
3262
+ main: "#1E88E5",
3263
+ dark: "#1565C0",
3264
+ darker: "#0D47A1",
3265
+ contrastText: "#FFFFFF"
3266
+ },
3267
+ secondary: {
3268
+ lighter: "#E3F2FD",
3269
+ light: "#90CAF9",
3270
+ main: "#42A5F5",
3271
+ dark: "#1E88E5",
3272
+ darker: "#1565C0",
3273
+ contrastText: "#FFFFFF"
3274
+ },
3275
+ info: {
3276
+ lighter: "#E0F7FA",
3277
+ light: "#80DEEA",
3278
+ main: "#26C6DA",
3279
+ dark: "#00ACC1",
3280
+ darker: "#00838F",
3281
+ contrastText: "#FFFFFF"
3282
+ },
3283
+ success: {
3284
+ lighter: "#E8F5E9",
3285
+ light: "#A5D6A7",
3286
+ main: "#66BB6A",
3287
+ dark: "#43A047",
3288
+ darker: "#2E7D32",
3289
+ contrastText: "#FFFFFF"
3290
+ },
3291
+ warning: {
3292
+ lighter: "#FFF8E1",
3293
+ light: "#FFE082",
3294
+ main: "#FFB300",
3295
+ dark: "#FF8F00",
3296
+ darker: "#FF6F00",
3297
+ contrastText: "#212121"
3298
+ },
3299
+ error: {
3300
+ lighter: "#FFEBEE",
3301
+ light: "#EF9A9A",
3302
+ main: "#EF5350",
3303
+ dark: "#E53935",
3304
+ darker: "#C62828",
3305
+ contrastText: "#FFFFFF"
3306
+ },
3307
+ grey: {
3308
+ 50: "#FAFBFC",
3309
+ 100: "#F4F6F8",
3310
+ 200: "#E4E9ED",
3311
+ 300: "#D0D7DE",
3312
+ 400: "#AFB8C1",
3313
+ 500: "#8C959F",
3314
+ 600: "#6E7781",
3315
+ 700: "#57606A",
3316
+ 800: "#424A53",
3317
+ 900: "#32383F",
3318
+ 950: "#272C31"
3319
+ },
3320
+ common: {
3321
+ black: "#1B1F23",
3322
+ white: "#FFFFFF"
3323
+ },
3324
+ background: {
3325
+ default: "#E8F0F6",
3326
+ paper: "#F1F9FB",
3327
+ neutral: "#E4E9ED"
3328
+ },
3329
+ text: {
3330
+ primary: "#1B1F23",
3331
+ secondary: "#57606A",
3332
+ disabled: "#8C959F"
3333
+ }
3334
+ };
3335
+ var darkPalette = {
3336
+ primary: {
3337
+ lighter: "#D6E9F8",
3338
+ light: "#7BC1F0",
3339
+ main: "#42A5F5",
3340
+ dark: "#1E88E5",
3341
+ darker: "#1565C0",
3342
+ contrastText: "#FFFFFF"
3343
+ },
3344
+ secondary: {
3345
+ lighter: "#E3F2FD",
3346
+ light: "#90CAF9",
3347
+ main: "#64B5F6",
3348
+ dark: "#42A5F5",
3349
+ darker: "#1E88E5",
3350
+ contrastText: "#FFFFFF"
3351
+ },
3352
+ info: {
3353
+ lighter: "#E0F7FA",
3354
+ light: "#80DEEA",
3355
+ main: "#4DD0E1",
3356
+ dark: "#26C6DA",
3357
+ darker: "#00ACC1",
3358
+ contrastText: "#FFFFFF"
3359
+ },
3360
+ success: {
3361
+ lighter: "#E8F5E9",
3362
+ light: "#A5D6A7",
3363
+ main: "#81C784",
3364
+ dark: "#66BB6A",
3365
+ darker: "#4CAF50",
3366
+ contrastText: "#FFFFFF"
3367
+ },
3368
+ warning: {
3369
+ lighter: "#FFF8E1",
3370
+ light: "#FFE082",
3371
+ main: "#FFCA28",
3372
+ dark: "#FFB300",
3373
+ darker: "#FFA000",
3374
+ contrastText: "#212121"
3375
+ },
3376
+ error: {
3377
+ lighter: "#FFEBEE",
3378
+ light: "#EF9A9A",
3379
+ main: "#EF5350",
3380
+ dark: "#F44336",
3381
+ darker: "#E53935",
3382
+ contrastText: "#FFFFFF"
3383
+ },
3384
+ grey: {
3385
+ 50: "#0D1117",
3386
+ 100: "#161B22",
3387
+ 200: "#21262D",
3388
+ 300: "#30363D",
3389
+ 400: "#484F58",
3390
+ 500: "#6E7681",
3391
+ 600: "#8B949E",
3392
+ 700: "#B1BAC4",
3393
+ 800: "#C9D1D9",
3394
+ 900: "#F0F6FC"
3395
+ },
3396
+ common: {
3397
+ black: "#010409",
3398
+ white: "#FFFFFF"
3399
+ },
3400
+ background: {
3401
+ default: "#0D1117",
3402
+ paper: "#161B22",
3403
+ neutral: "#21262D"
3404
+ },
3405
+ text: {
3406
+ primary: "#F0F6FC",
3407
+ secondary: "#B1BAC4",
3408
+ disabled: "#6E7681"
3409
+ }
3410
+ };
3411
+ var arcticPreset = {
3412
+ name: "arctic",
3413
+ displayName: "Arctic",
3414
+ description: "A cool, crisp blue theme inspired by northern landscapes.",
3415
+ preferredMode: "light",
3416
+ lightPalette,
3417
+ darkPalette,
3418
+ typography: {
3419
+ fontFamily: {
3420
+ primary: '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
3421
+ secondary: '"Poppins", -apple-system, BlinkMacSystemFont, sans-serif',
3422
+ mono: '"Fira Code", Consolas, Monaco, monospace'
3423
+ },
3424
+ fontWeights: {
3425
+ light: 300,
3426
+ regular: 400,
3427
+ medium: 500,
3428
+ semiBold: 600,
3429
+ bold: 700
3430
+ }
3431
+ },
3432
+ colorGroup: {
3433
+ key: "arctic",
3434
+ main: "#1E88E5"
3435
+ }
3436
+ };
3437
+
3438
+ // src/theme/presets/dracula.ts
3439
+ var draculaPurple = {
3440
+ 50: "#F9F5FF",
3441
+ 100: "#F0E6FF",
3442
+ 200: "#E3CFFF",
3443
+ 300: "#CEA9FF",
3444
+ 400: "#B574FF",
3445
+ 500: "#BD93F9",
3446
+ // Main Dracula purple
3447
+ 600: "#A57EE0",
3448
+ 700: "#8666B8",
3449
+ 800: "#6E5394",
3450
+ 900: "#5B4579",
3451
+ 950: "#3B2D4D"
3452
+ };
3453
+ var draculaPink = {
3454
+ 50: "#FFF5F7",
3455
+ 100: "#FFE5EA",
3456
+ 200: "#FFCCD6",
3457
+ 300: "#FFA4B5",
3458
+ 400: "#FF6E8B",
3459
+ 500: "#FF79C6",
3460
+ // Main Dracula pink
3461
+ 600: "#E85AA1",
3462
+ 700: "#C4407F",
3463
+ 800: "#A2356A",
3464
+ 900: "#87305B",
3465
+ 950: "#4E1533"
3466
+ };
3467
+ var draculaCyan = {
3468
+ 50: "#ECFFFE",
3469
+ 100: "#CFFFFE",
3470
+ 200: "#A5FFFE",
3471
+ 300: "#67FFFC",
3472
+ 400: "#22FFF5",
3473
+ 500: "#8BE9FD",
3474
+ // Main Dracula cyan
3475
+ 600: "#06D1E7",
3476
+ 700: "#0BA6BC",
3477
+ 800: "#118497",
3478
+ 900: "#136C7D",
3479
+ 950: "#05484E"
3480
+ };
3481
+ var draculaPreset = {
3482
+ name: "dracula",
3483
+ displayName: "Dracula",
3484
+ description: "A dark theme inspired by the popular Dracula color scheme.",
3485
+ preferredMode: "dark",
3486
+ typography: {
3487
+ fontFamily: {
3488
+ primary: '"Fira Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
3489
+ secondary: '"DM Sans", -apple-system, BlinkMacSystemFont, sans-serif',
3490
+ mono: '"Fira Code", Consolas, Monaco, monospace'
3491
+ },
3492
+ fontWeights: {
3493
+ light: 300,
3494
+ regular: 400,
3495
+ medium: 500,
3496
+ semiBold: 600,
3497
+ bold: 700
3498
+ }
3499
+ },
3500
+ colorGroup: {
3501
+ key: "dracula",
3502
+ main: draculaPurple[500],
3503
+ palette: draculaPurple
3504
+ }
3505
+ };
3506
+
3507
+ // src/theme/presets/ember.ts
3508
+ var emberPrimary = {
3509
+ 50: "#FFF4ED",
3510
+ 100: "#FFE4D4",
3511
+ 200: "#FFC9A8",
3512
+ 300: "#FFAA71",
3513
+ 400: "#FF8038",
3514
+ 500: "#FF5F11",
3515
+ 600: "#F04006",
3516
+ 700: "#C72D07",
3517
+ 800: "#9E250E",
3518
+ 900: "#7F230F",
3519
+ 950: "#450E05"
3520
+ };
3521
+ var emberSecondary = {
3522
+ 50: "#FFF1F2",
3523
+ 100: "#FFE1E3",
3524
+ 200: "#FFC8CD",
3525
+ 300: "#FFA1A9",
3526
+ 400: "#FF6B78",
3527
+ 500: "#FA3D4D",
3528
+ 600: "#E81B2D",
3529
+ 700: "#C31323",
3530
+ 800: "#A11421",
3531
+ 900: "#861721",
3532
+ 950: "#49060C"
3533
+ };
3534
+ var emberPreset = {
3535
+ name: "ember",
3536
+ displayName: "Ember",
3537
+ description: "A warm, fiery theme with deep oranges and reds.",
3538
+ preferredMode: "dark",
3539
+ typography: {
3540
+ fontFamily: {
3541
+ primary: '"Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
3542
+ secondary: '"Playfair Display", Georgia, serif',
3543
+ mono: '"Source Code Pro", Consolas, Monaco, monospace'
3544
+ },
3545
+ fontWeights: {
3546
+ light: 300,
3547
+ regular: 400,
3548
+ medium: 500,
3549
+ semiBold: 600,
3550
+ bold: 700
3551
+ }
3552
+ },
3553
+ colorGroup: {
3554
+ key: "ember",
3555
+ main: emberPrimary[500],
3556
+ palette: emberPrimary
3557
+ }
3558
+ };
3559
+
3560
+ // src/theme/presets/midnight.ts
3561
+ var midnightIndigo = {
3562
+ 50: "#EEF2FF",
3563
+ 100: "#E0E7FF",
3564
+ 200: "#C7D2FE",
3565
+ 300: "#A5B4FC",
3566
+ 400: "#818CF8",
3567
+ 500: "#6366F1",
3568
+ // Main indigo
3569
+ 600: "#4F46E5",
3570
+ 700: "#4338CA",
3571
+ 800: "#3730A3",
3572
+ 900: "#312E81",
3573
+ 950: "#1E1B4B"
3574
+ };
3575
+ var midnightBackground = {
3576
+ 50: "#F8FAFC",
3577
+ 100: "#F1F5F9",
3578
+ 200: "#E2E8F0",
3579
+ 300: "#CBD5E1",
3580
+ 400: "#94A3B8",
3581
+ 500: "#64748B",
3582
+ 600: "#475569",
3583
+ 700: "#334155",
3584
+ 800: "#1E293B",
3585
+ 900: "#0F172A",
3586
+ // Main dark background
3587
+ 950: "#020617"
3588
+ };
3589
+ var midnightPreset = {
3590
+ name: "midnight",
3591
+ displayName: "Midnight",
3592
+ description: "A deep blue-black theme for late night coding sessions.",
3593
+ preferredMode: "dark",
3594
+ typography: {
3595
+ fontFamily: {
3596
+ primary: '"Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
3597
+ secondary: '"Sora", -apple-system, BlinkMacSystemFont, sans-serif',
3598
+ mono: '"IBM Plex Mono", Consolas, Monaco, monospace'
3599
+ },
3600
+ fontWeights: {
3601
+ light: 300,
3602
+ regular: 400,
3603
+ medium: 500,
3604
+ semiBold: 600,
3605
+ bold: 700
3606
+ }
3607
+ },
3608
+ colorGroup: {
3609
+ key: "midnight",
3610
+ main: midnightIndigo[500],
3611
+ palette: midnightIndigo
3612
+ }
3613
+ };
3614
+
3615
+ // src/theme/presets/retro.ts
3616
+ var retroAmber = {
3617
+ 50: "#FFFBEB",
3618
+ 100: "#FEF3C7",
3619
+ 200: "#FDE68A",
3620
+ 300: "#FCD34D",
3621
+ 400: "#FBBF24",
3622
+ 500: "#F59E0B",
3623
+ // Main amber
3624
+ 600: "#D97706",
3625
+ 700: "#B45309",
3626
+ 800: "#92400E",
3627
+ 900: "#78350F",
3628
+ 950: "#451A03"
3629
+ };
3630
+ var retroTeal = {
3631
+ 50: "#F0FDFA",
3632
+ 100: "#CCFBF1",
3633
+ 200: "#99F6E4",
3634
+ 300: "#5EEAD4",
3635
+ 400: "#2DD4BF",
3636
+ 500: "#14B8A6",
3637
+ // Main teal
3638
+ 600: "#0D9488",
3639
+ 700: "#0F766E",
3640
+ 800: "#115E59",
3641
+ 900: "#134E4A",
3642
+ 950: "#042F2E"
3643
+ };
3644
+ var retroPreset = {
3645
+ name: "retro",
3646
+ displayName: "Retro",
3647
+ description: "A nostalgic theme with vintage computer aesthetics.",
3648
+ preferredMode: "light",
3649
+ typography: {
3650
+ fontFamily: {
3651
+ primary: '"VT323", "Courier New", Courier, monospace',
3652
+ secondary: '"Press Start 2P", "Courier New", monospace',
3653
+ mono: '"VT323", "Courier New", Courier, monospace'
3654
+ },
3655
+ fontWeights: {
3656
+ light: 400,
3657
+ regular: 400,
3658
+ medium: 400,
3659
+ semiBold: 400,
3660
+ bold: 400
3661
+ }
3662
+ },
3663
+ colorGroup: {
3664
+ key: "retro",
3665
+ main: retroAmber[500],
3666
+ palette: retroAmber
3667
+ }
3668
+ };
3669
+
3670
+ // src/theme/presets/minimal.ts
3671
+ var minimalNeutral = {
3672
+ 50: "#FAFAFA",
3673
+ 100: "#F5F5F5",
3674
+ 200: "#E5E5E5",
3675
+ 300: "#D4D4D4",
3676
+ 400: "#A3A3A3",
3677
+ 500: "#737373",
3678
+ // Main neutral
3679
+ 600: "#525252",
3680
+ 700: "#404040",
3681
+ 800: "#262626",
3682
+ 900: "#171717",
3683
+ 950: "#0A0A0A"
3684
+ };
3685
+ var minimalAccent = {
3686
+ 50: "#F8FAFC",
3687
+ 100: "#F1F5F9",
3688
+ 200: "#E2E8F0",
3689
+ 300: "#CBD5E1",
3690
+ 400: "#94A3B8",
3691
+ 500: "#64748B",
3692
+ // Main slate
3693
+ 600: "#475569",
3694
+ 700: "#334155",
3695
+ 800: "#1E293B",
3696
+ 900: "#0F172A",
3697
+ 950: "#020617"
3698
+ };
3699
+ var minimalPreset = {
3700
+ name: "minimal",
3701
+ displayName: "Minimal",
3702
+ description: "A clean, minimalist theme with subtle grays and muted accents.",
3703
+ preferredMode: "light",
3704
+ typography: {
3705
+ fontFamily: {
3706
+ primary: '"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
3707
+ secondary: '"Inter", -apple-system, BlinkMacSystemFont, sans-serif',
3708
+ mono: '"SF Mono", Menlo, Consolas, Monaco, monospace'
3709
+ },
3710
+ fontWeights: {
3711
+ light: 300,
3712
+ regular: 400,
3713
+ medium: 500,
3714
+ semiBold: 600,
3715
+ bold: 700
3716
+ }
3717
+ },
3718
+ colorGroup: {
3719
+ key: "minimal",
3720
+ main: minimalNeutral[500],
3721
+ palette: minimalNeutral
3722
+ }
3723
+ };
3724
+
3725
+ // src/theme/create-theme.ts
3726
+ function getPresetConfig(preset) {
3727
+ switch (preset) {
3728
+ case "luxury":
3729
+ return {
3730
+ lightPalette: buildPalette({
3731
+ primary: luxuryPrimary,
3732
+ secondary: luxurySecondary,
3733
+ info: luxuryInfo,
3734
+ success: luxurySuccess,
3735
+ warning: luxuryWarning,
3736
+ error: luxuryError,
3737
+ grey: luxuryNeutral,
3738
+ mode: "light",
3739
+ backgroundDefault: "#FAF7F5",
3740
+ paperColor: "#FDFBFB"
3741
+ }),
3742
+ darkPalette: buildPalette({
3743
+ primary: luxuryPrimary,
3744
+ secondary: luxurySecondary,
3745
+ info: luxuryInfo,
3746
+ success: luxurySuccess,
3747
+ warning: luxuryWarning,
3748
+ error: luxuryError,
3749
+ grey: luxuryNeutral,
3750
+ mode: "dark"
3751
+ }),
3752
+ colorGroup: {
3753
+ key: "luxury",
3754
+ main: luxuryPrimary[500],
3755
+ palette: luxuryPrimary
3756
+ }
3757
+ };
3758
+ case "arctic":
3759
+ return {
3760
+ lightPalette: buildPaletteFromPreset(arcticPreset.lightPalette, "light"),
3761
+ darkPalette: buildPaletteFromPreset(arcticPreset.darkPalette, "dark"),
3762
+ colorGroup: {
3763
+ key: "arctic",
3764
+ main: "#1E88E5",
3765
+ palette: blue
3766
+ // Use blue as base for color group
3767
+ }
3768
+ };
3769
+ case "dracula":
3770
+ return {
3771
+ lightPalette: buildPalette({
3772
+ primary: draculaPurple,
3773
+ secondary: draculaPink,
3774
+ info: draculaCyan,
3775
+ success: green,
3776
+ warning: orange,
3777
+ error: red,
3778
+ grey,
3779
+ mode: "light",
3780
+ backgroundDefault: "#F5F0FA",
3781
+ paperColor: "#FAF7FC"
3782
+ }),
3783
+ darkPalette: buildPalette({
3784
+ primary: draculaPurple,
3785
+ secondary: draculaPink,
3786
+ info: draculaCyan,
3787
+ success: green,
3788
+ warning: orange,
3789
+ error: red,
3790
+ grey,
3791
+ mode: "dark",
3792
+ backgroundDefault: "#282A36",
3793
+ // Dracula background
3794
+ paperColor: "#21222C"
3795
+ }),
3796
+ colorGroup: {
3797
+ key: "dracula",
3798
+ main: draculaPurple[500],
3799
+ palette: draculaPurple
3800
+ }
3801
+ };
3802
+ case "ember":
3803
+ return {
3804
+ lightPalette: buildPalette({
3805
+ primary: emberPrimary,
3806
+ secondary: emberSecondary,
3807
+ info: lightBlue,
3808
+ success: green,
3809
+ warning: orange,
3810
+ error: emberSecondary,
3811
+ grey,
3812
+ mode: "light",
3813
+ backgroundDefault: "#FFF5F0",
3814
+ paperColor: "#FFFAF7"
3815
+ }),
3816
+ darkPalette: buildPalette({
3817
+ primary: emberPrimary,
3818
+ secondary: emberSecondary,
3819
+ info: lightBlue,
3820
+ success: green,
3821
+ warning: orange,
3822
+ error: emberSecondary,
3823
+ grey,
3824
+ mode: "dark",
3825
+ backgroundDefault: "#1A0A05",
3826
+ paperColor: "#2D1610"
3827
+ }),
3828
+ colorGroup: {
3829
+ key: "ember",
3830
+ main: emberPrimary[500],
3831
+ palette: emberPrimary
3832
+ }
3833
+ };
3834
+ case "midnight":
3835
+ return {
3836
+ lightPalette: buildPalette({
3837
+ primary: midnightIndigo,
3838
+ secondary: purple,
3839
+ info: lightBlue,
3840
+ success: green,
3841
+ warning: orange,
3842
+ error: red,
3843
+ grey: midnightBackground,
3844
+ mode: "light",
3845
+ backgroundDefault: "#F0F0F8",
3846
+ paperColor: "#F7F7FC"
3847
+ }),
3848
+ darkPalette: buildPalette({
3849
+ primary: midnightIndigo,
3850
+ secondary: purple,
3851
+ info: lightBlue,
3852
+ success: green,
3853
+ warning: orange,
3854
+ error: red,
3855
+ grey: midnightBackground,
3856
+ mode: "dark",
3857
+ backgroundDefault: midnightBackground[950],
3858
+ paperColor: midnightBackground[900]
3859
+ }),
3860
+ colorGroup: {
3861
+ key: "midnight",
3862
+ main: midnightIndigo[500],
3863
+ palette: midnightIndigo
3864
+ }
3865
+ };
3866
+ case "retro":
3867
+ return {
3868
+ lightPalette: buildPalette({
3869
+ primary: retroAmber,
3870
+ secondary: retroTeal,
3871
+ info: lightBlue,
3872
+ success: retroTeal,
3873
+ warning: retroAmber,
3874
+ error: red,
3875
+ grey,
3876
+ mode: "light",
3877
+ backgroundDefault: "#F8F1E0",
3878
+ paperColor: "#FDF8EE"
3879
+ }),
3880
+ darkPalette: buildPalette({
3881
+ primary: retroAmber,
3882
+ secondary: retroTeal,
3883
+ info: lightBlue,
3884
+ success: retroTeal,
3885
+ warning: retroAmber,
3886
+ error: red,
3887
+ grey,
3888
+ mode: "dark",
3889
+ backgroundDefault: "#1A1814",
3890
+ paperColor: "#252218"
3891
+ }),
3892
+ colorGroup: {
3893
+ key: "retro",
3894
+ main: retroAmber[500],
3895
+ palette: retroAmber
3896
+ }
3897
+ };
3898
+ case "minimal":
3899
+ return {
3900
+ lightPalette: buildPalette({
3901
+ primary: minimalAccent,
3902
+ secondary: minimalNeutral,
3903
+ info: lightBlue,
3904
+ success: green,
3905
+ warning: orange,
3906
+ error: red,
3907
+ grey: minimalNeutral,
3908
+ mode: "light",
3909
+ backgroundDefault: "#FAFAFA",
3910
+ paperColor: "#FFFFFF"
3911
+ }),
3912
+ darkPalette: buildPalette({
3913
+ primary: minimalAccent,
3914
+ secondary: minimalNeutral,
3915
+ info: lightBlue,
3916
+ success: green,
3917
+ warning: orange,
3918
+ error: red,
3919
+ grey: minimalNeutral,
3920
+ mode: "dark",
3921
+ backgroundDefault: "#0A0A0A",
3922
+ paperColor: "#171717"
3923
+ }),
3924
+ colorGroup: {
3925
+ key: "minimal",
3926
+ main: minimalAccent[500],
3927
+ palette: minimalAccent
3928
+ }
3929
+ };
3930
+ case "nature":
3931
+ return {
3932
+ lightPalette: buildPalette({
3933
+ primary: green,
3934
+ secondary: purple,
3935
+ info: lightBlue,
3936
+ success: green,
3937
+ warning: orange,
3938
+ error: red,
3939
+ grey,
3940
+ mode: "light",
3941
+ backgroundDefault: "#EEF6EE",
3942
+ paperColor: "#F5FAF5"
3943
+ }),
3944
+ darkPalette: buildPalette({
3945
+ primary: green,
3946
+ secondary: purple,
3947
+ info: lightBlue,
3948
+ success: green,
3949
+ warning: orange,
3950
+ error: red,
3951
+ grey,
3952
+ mode: "dark",
3953
+ backgroundDefault: "#0A1A0A",
3954
+ paperColor: "#0F1F0F"
3955
+ }),
3956
+ colorGroup: {
3957
+ key: "nature",
3958
+ main: green[500],
3959
+ palette: green
3960
+ }
3961
+ };
3962
+ case "default-dark":
3963
+ return {
3964
+ lightPalette: defaultLightPalette,
3965
+ darkPalette: defaultDarkPalette,
3966
+ colorGroup: {
3967
+ key: "default-dark",
3968
+ main: blue[400],
3969
+ palette: blue
3970
+ }
3971
+ };
3972
+ case "default-light":
3973
+ default:
3974
+ return {
3975
+ lightPalette: defaultLightPalette,
3976
+ darkPalette: defaultDarkPalette,
3977
+ colorGroup: {
3978
+ key: "default-light",
3979
+ main: blue[500],
3980
+ palette: blue
3981
+ }
3982
+ };
3983
+ }
3984
+ }
3985
+ function buildPaletteFromPreset(presetPalette, mode) {
3986
+ const grey2 = presetPalette.grey;
3987
+ return {
3988
+ mode,
3989
+ primary: generatePaletteColorWithChannels(presetPalette.primary),
3990
+ secondary: generatePaletteColorWithChannels(presetPalette.secondary),
3991
+ info: generatePaletteColorWithChannels(presetPalette.info),
3992
+ success: generatePaletteColorWithChannels(presetPalette.success),
3993
+ warning: generatePaletteColorWithChannels(presetPalette.warning),
3994
+ error: generatePaletteColorWithChannels(presetPalette.error),
3995
+ grey: grey2,
3996
+ common: presetPalette.common,
3997
+ background: presetPalette.background,
3998
+ text: presetPalette.text
3999
+ };
4000
+ }
4001
+ var COLOR_GROUPS = [
4002
+ // Default presets
4003
+ { key: "default-light", main: blue[500], palette: blue },
4004
+ { key: "default-dark", main: blue[400], palette: blue },
4005
+ // Base colors
4006
+ { key: "green", main: green[500], palette: green },
4007
+ { key: "purple", main: purple[500], palette: purple },
4008
+ { key: "red", main: red[500], palette: red },
4009
+ { key: "orange", main: orange[500], palette: orange },
4010
+ { key: "lightBlue", main: lightBlue[500], palette: lightBlue },
4011
+ // Preset colors
4012
+ { key: "luxury", main: luxuryPrimary[500], palette: luxuryPrimary },
4013
+ { key: "dracula", main: draculaPurple[500], palette: draculaPurple },
4014
+ { key: "ember", main: emberPrimary[500], palette: emberPrimary },
4015
+ { key: "midnight", main: midnightIndigo[500], palette: midnightIndigo },
4016
+ { key: "retro", main: retroAmber[500], palette: retroAmber },
4017
+ { key: "minimal", main: minimalAccent[500], palette: minimalAccent },
4018
+ { key: "nature", main: green[500], palette: green },
4019
+ { key: "arctic", main: "#1E88E5", palette: blue }
4020
+ ];
4021
+ function applyPrimaryOverride(basePalette, primaryColor, mode) {
4022
+ if (!primaryColor) return basePalette;
4023
+ const colorGroup = COLOR_GROUPS.find((group) => group.main === primaryColor);
4024
+ if (colorGroup?.palette) {
4025
+ const newPrimary2 = mode === "dark" ? generatePaletteColorWithChannels({
4026
+ lighter: colorGroup.palette[950],
4027
+ light: colorGroup.palette[700],
4028
+ main: primaryColor,
4029
+ dark: colorGroup.palette[300],
4030
+ darker: colorGroup.palette[100],
4031
+ contrastText: colorGroup.palette[950]
4032
+ }) : generatePaletteColorWithChannels({
4033
+ lighter: colorGroup.palette[50],
4034
+ light: colorGroup.palette[400],
4035
+ main: primaryColor,
4036
+ dark: colorGroup.palette[600],
4037
+ darker: colorGroup.palette[900],
4038
+ contrastText: colorGroup.palette[50]
4039
+ });
4040
+ return { ...basePalette, primary: newPrimary2 };
4041
+ }
4042
+ const generatedScale = generateColorScale(primaryColor);
4043
+ const newPrimary = mode === "dark" ? generatePaletteColorWithChannels({
4044
+ lighter: generatedScale[950],
4045
+ light: generatedScale[700],
4046
+ main: generatedScale[400],
4047
+ dark: generatedScale[300],
4048
+ darker: generatedScale[100],
4049
+ contrastText: generatedScale[950]
4050
+ }) : generatePaletteColorWithChannels({
4051
+ lighter: generatedScale[50],
4052
+ light: generatedScale[400],
4053
+ main: generatedScale[500],
4054
+ dark: generatedScale[600],
4055
+ darker: generatedScale[900],
4056
+ contrastText: generatedScale[50]
4057
+ });
4058
+ return { ...basePalette, primary: newPrimary };
4059
+ }
4060
+ function getDensityMultiplier2(density) {
4061
+ switch (density) {
4062
+ case "compact":
4063
+ return 0.75;
4064
+ case "comfortable":
4065
+ return 1.25;
4066
+ case "standard":
4067
+ default:
4068
+ return 1;
4069
+ }
4070
+ }
4071
+ function deepMergeThemeOptions(base, overrides) {
4072
+ const result = { ...base };
4073
+ for (const key of Object.keys(overrides)) {
4074
+ const baseVal = base[key];
4075
+ const overrideVal = overrides[key];
4076
+ if (overrideVal !== null && typeof overrideVal === "object" && !Array.isArray(overrideVal) && typeof overrideVal !== "function" && baseVal !== null && typeof baseVal === "object" && !Array.isArray(baseVal) && typeof baseVal !== "function") {
4077
+ result[key] = deepMergeThemeOptions(baseVal, overrideVal);
4078
+ } else {
4079
+ result[key] = overrideVal;
4080
+ }
4081
+ }
4082
+ return result;
4083
+ }
4084
+ function createPrismTheme(options = {}) {
4085
+ const {
4086
+ preset = "default-light",
4087
+ mode = "light",
4088
+ direction = "ltr",
4089
+ locale = "enUS",
4090
+ primaryColor = null,
4091
+ cssVarPrefix = "prism",
4092
+ density = "standard",
4093
+ borderRadius = 8,
4094
+ responsiveFonts = true,
4095
+ contrast = "default",
4096
+ overrides
4097
+ } = options;
4098
+ const presetConfig = getPresetConfig(preset);
4099
+ let lightPalette2 = applyPrimaryOverride(presetConfig.lightPalette, primaryColor, "light");
4100
+ let darkPalette2 = applyPrimaryOverride(presetConfig.darkPalette, primaryColor, "dark");
4101
+ if (contrast === "high") {
4102
+ lightPalette2 = {
4103
+ ...lightPalette2,
4104
+ background: {
4105
+ ...lightPalette2.background,
4106
+ default: grey[200],
4107
+ paper: "#FFFFFF"
4108
+ }
4109
+ };
4110
+ darkPalette2 = {
4111
+ ...darkPalette2,
4112
+ background: {
4113
+ ...darkPalette2.background,
4114
+ default: "#000000",
4115
+ paper: grey[900]
4116
+ }
4117
+ };
4118
+ }
4119
+ const densityMultiplier = getDensityMultiplier2(density);
4120
+ const componentsConfig = {
4121
+ density,
4122
+ borderRadius};
4123
+ const cssVariablesConfig = {
4124
+ prefix: cssVarPrefix,
4125
+ colorSchemeSelector: `data-${cssVarPrefix}-color-scheme`,
4126
+ enabled: true
4127
+ };
4128
+ const muiLocale = locales[locale] || locales.enUS;
4129
+ const primaryMain = lightPalette2.primary?.main || blue[500];
4130
+ const lightShadows = createShadows();
4131
+ const darkShadows = createShadows(primaryMain, 0.4);
4132
+ const effectiveMode = mode === "dark" ? "dark" : "light";
4133
+ const activePalette = effectiveMode === "dark" ? darkPalette2 : lightPalette2;
4134
+ const activeShadows = effectiveMode === "dark" ? darkShadows : lightShadows;
4135
+ const themeOptions = {
4136
+ // CSS Variables integration - enables theme.vars.palette.*
4137
+ cssVariables: {
4138
+ cssVarPrefix,
4139
+ colorSchemeSelector: cssVariablesConfig.colorSchemeSelector
4140
+ },
4141
+ // Active palette based on resolved mode
4142
+ // PrismProvider recreates the theme on mode change, so we use the resolved palette directly
4143
+ palette: activePalette,
4144
+ // Active shadows based on resolved mode
4145
+ shadows: activeShadows,
4146
+ // Typography (uses Nunito Sans / Exo 2 defaults, overridable via options)
4147
+ typography: createTypography({
4148
+ fontFamily: {
4149
+ primary: options.fontFamily ? `"${options.fontFamily}", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif` : typography.fontFamily.primary,
4150
+ secondary: typography.fontFamily.secondary,
4151
+ mono: typography.fontFamily.mono
4152
+ },
4153
+ fontWeights: typography.fontWeights
4154
+ }),
4155
+ // Note: actual html font-size is set by PrismProvider via useEffect.
4156
+ // Do NOT set htmlFontSize here — MUI would compensate its rem values,
4157
+ // cancelling out the scaling effect we want.
4158
+ // Direction (RTL support)
4159
+ direction,
4160
+ // Shape
4161
+ shape: {
4162
+ borderRadius
4163
+ },
4164
+ // Mixins
4165
+ mixins,
4166
+ // Component overrides with density support
4167
+ components: componentOverrides(componentsConfig)
4168
+ };
4169
+ const finalOptions = overrides ? deepMergeThemeOptions(themeOptions, overrides) : themeOptions;
4170
+ let theme = createTheme(finalOptions, muiLocale);
4171
+ if (responsiveFonts) {
4172
+ theme = responsiveFontSizes(theme);
4173
+ }
4174
+ const prismTheme = theme;
4175
+ prismTheme.prism = {
4176
+ preset,
4177
+ mode,
4178
+ direction,
4179
+ density,
4180
+ densityMultiplier,
4181
+ cssVariables: cssVariablesConfig
4182
+ };
4183
+ return prismTheme;
4184
+ }
4185
+ var PRESET_NAMES = [
4186
+ "default-light",
4187
+ "default-dark",
4188
+ "luxury",
4189
+ "arctic",
4190
+ "nature",
4191
+ "ember",
4192
+ "dracula",
4193
+ "midnight",
4194
+ "retro",
4195
+ "minimal"
4196
+ ];
4197
+ var PRESET_DISPLAY_NAMES = {
4198
+ "default-light": "Default (Light)",
4199
+ "default-dark": "Default (Dark)",
4200
+ luxury: "Luxury",
4201
+ arctic: "Arctic",
4202
+ nature: "Nature",
4203
+ ember: "Ember",
4204
+ dracula: "Dracula",
4205
+ midnight: "Midnight",
4206
+ retro: "Retro",
4207
+ minimal: "Minimal"
4208
+ };
4209
+ var PRESET_INHERENT_MODE = {
4210
+ "default-light": "light",
4211
+ "default-dark": "dark",
4212
+ luxury: "light",
4213
+ arctic: "light",
4214
+ nature: "light",
4215
+ retro: "light",
4216
+ minimal: "light",
4217
+ ember: "dark",
4218
+ dracula: "dark",
4219
+ midnight: "dark"
4220
+ };
4221
+ function getPresetDisplayName(preset) {
4222
+ return PRESET_DISPLAY_NAMES[preset];
4223
+ }
4224
+
4225
+ export { COLOR_GROUPS, PRESET_DISPLAY_NAMES, PRESET_INHERENT_MODE, PRESET_NAMES, arcticPreset, baseColors, basic, blue, buildAction, buildBackground, buildChartColors, buildPalette, buildPaletteColor, buildText, buildVibrant, componentOverrides, createButtonBaseOverrides, createButtonGroupOverrides, createButtonOverrides, createPaletteColorFromScale, createPrismTheme, createShadows, createTypography, cssVarRgba, customScrollbarMixin, darkShadow, darken, defaultDarkPalette, defaultLightPalette, draculaPreset, emberPreset, focusRingMixin, generateColorScale, generateColorScaleWithChannels, generatePaletteColorWithChannels, getContrastRatio, getContrastText, getLuminance, getPresetDisplayName, glassMixin, green, grey, hexToHsl, hexToRgb, hexToRgbChannel, hideScrollbarMixin, hslToHex, invertColorScale, isLightColor, lightBlue, lighten, luxuryColors, luxuryError, luxuryInfo, luxuryNeutral, luxuryPrimary, luxurySecondary, luxurySuccess, luxuryWarning, midnightPreset, minimalPreset, mix, mixins, multiLineEllipsisMixin, orange, purple, red, retroPreset, rgbToHex, rgba, shadows, textEllipsisMixin, typography };
4226
+ //# sourceMappingURL=chunk-DXXZ3ITR.js.map
4227
+ //# sourceMappingURL=chunk-DXXZ3ITR.js.map