@structyl/themes 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/index.cjs +21 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.mjs +22 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +12 -1
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026
|
|
3
|
+
Copyright (c) 2026 Mohammed Irfanul Alam Tanveer
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -145,7 +145,7 @@ import '@structyl/themes/themes/slate.css'; // a specific theme's variables
|
|
|
145
145
|
|
|
146
146
|
## Part of structyl
|
|
147
147
|
|
|
148
|
-
This package is part of [structyl](https://github.com/imirfanul/structyl) — the React UI library with structure. See the full documentation at [structyl.
|
|
148
|
+
This package is part of [structyl](https://github.com/imirfanul/structyl) — the React UI library with structure. See the full documentation at [www.structyl.com](https://www.structyl.com).
|
|
149
149
|
|
|
150
150
|
## License
|
|
151
151
|
|
package/dist/index.cjs
CHANGED
|
@@ -681,7 +681,7 @@ var ThemeContext = React__namespace.createContext(void 0);
|
|
|
681
681
|
function ThemeProvider(props) {
|
|
682
682
|
const {
|
|
683
683
|
children,
|
|
684
|
-
defaultTheme = "
|
|
684
|
+
defaultTheme = "structyl",
|
|
685
685
|
defaultMode = "system",
|
|
686
686
|
storageKey = "structyl-theme",
|
|
687
687
|
enableTransitions = true,
|
|
@@ -772,7 +772,7 @@ function tokensToVars(tokens) {
|
|
|
772
772
|
return Object.entries(tokens).map(([k, v]) => `--color-${k}:${v}`).join(";");
|
|
773
773
|
}
|
|
774
774
|
function ThemeScript({
|
|
775
|
-
defaultTheme = "
|
|
775
|
+
defaultTheme = "structyl",
|
|
776
776
|
defaultMode = "system",
|
|
777
777
|
storageKey = "structyl-theme",
|
|
778
778
|
attribute = "data-theme"
|
|
@@ -873,10 +873,15 @@ function clearColorPreset() {
|
|
|
873
873
|
}
|
|
874
874
|
var DEFAULT_STORAGE_KEY = "structyl-color-preset";
|
|
875
875
|
function useColorPreset(options = {}) {
|
|
876
|
-
const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY } = options;
|
|
877
|
-
|
|
878
|
-
const [activeId, setActiveId] = React.useState(null);
|
|
876
|
+
const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY, defaultPresetId } = options;
|
|
877
|
+
useTheme();
|
|
879
878
|
const allPresets = [...COLOR_PRESETS, ...extraPresets];
|
|
879
|
+
const [activeId, setActiveId] = React.useState(
|
|
880
|
+
defaultPresetId && allPresets.some((p) => p.id === defaultPresetId) ? defaultPresetId : null
|
|
881
|
+
);
|
|
882
|
+
const activeHex = allPresets.find((p) => p.id === activeId)?.hex ?? null;
|
|
883
|
+
const activeHexRef = React.useRef(activeHex);
|
|
884
|
+
activeHexRef.current = activeHex;
|
|
880
885
|
React.useEffect(() => {
|
|
881
886
|
try {
|
|
882
887
|
const stored = localStorage.getItem(storageKey);
|
|
@@ -887,10 +892,17 @@ function useColorPreset(options = {}) {
|
|
|
887
892
|
}
|
|
888
893
|
}, [storageKey]);
|
|
889
894
|
React.useEffect(() => {
|
|
890
|
-
if (
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
895
|
+
if (activeHex) applyColorPreset(activeHex);
|
|
896
|
+
}, [activeId]);
|
|
897
|
+
React.useEffect(() => {
|
|
898
|
+
if (typeof document === "undefined") return;
|
|
899
|
+
const root = document.documentElement;
|
|
900
|
+
const observer = new MutationObserver(() => {
|
|
901
|
+
if (activeHexRef.current) applyColorPreset(activeHexRef.current);
|
|
902
|
+
});
|
|
903
|
+
observer.observe(root, { attributes: true, attributeFilter: ["data-theme", "data-mode"] });
|
|
904
|
+
return () => observer.disconnect();
|
|
905
|
+
}, []);
|
|
894
906
|
const setPreset = React.useCallback((id, hex) => {
|
|
895
907
|
setActiveId(id);
|
|
896
908
|
applyColorPreset(hex);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/palette.ts","../src/themes.ts","../src/theme-provider.tsx","../src/use-theme.ts","../src/theme-script.tsx","../src/color-presets.ts","../src/use-color-preset.ts"],"names":["React","value","React2","React3","useState","useEffect","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ThemeTokens } from './types';\nimport type { StaticPalette } from './palette.types';\n\n// ── Shared semantic sub-tokens ────────────────────────────────────────────────\n// error/warning/info/success are semantic colors that don't change between\n// UI themes (slate/zinc/rose/structyl). Only light/dark mode changes their values.\n\nexport const sharedSemanticLight: Partial<ThemeTokens> = {\n // Error\n 'error-light': '249 218 223',\n 'error-dark': '131 24 63',\n 'error-contrast': '255 255 255',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(167, 56, 95, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.1)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(60, 47, 58, 0.9)',\n 'error-alert-content': 'rgba(114, 52, 76, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '249 220 210',\n 'warning-dark': '122 45 16',\n 'warning-contrast': '255 255 255',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(191, 75, 30, 0.9)',\n 'warning-state-outlined': 'rgba(255, 87, 20, 0.1)',\n 'warning-state-resting': 'rgba(255, 87, 20, 0.5)',\n 'warning-alert-bg': 'rgba(85, 54, 46, 0.9)',\n 'warning-alert-content': 'rgba(127, 62, 39, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '227 223 252',\n 'info-dark': '47 32 159',\n 'info-contrast': '255 255 255',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(95, 88, 179, 0.9)',\n 'info-state-outlined': 'rgba(117, 106, 234, 0.1)',\n 'info-state-resting': 'rgba(117, 106, 234, 0.5)',\n 'info-alert-bg': 'rgba(49, 52, 70, 0.9)',\n 'info-alert-content': 'rgba(72, 70, 125, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '153 252 128',\n 'success-dark': '33 82 25',\n 'success-contrast': '255 255 255',\n 'success-dark-bg': '33 82 25',\n 'success-state-contained': 'rgba(56, 159, 63, 0.9)',\n 'success-state-outlined': 'rgba(62, 208, 68, 0.1)',\n 'success-state-resting': 'rgba(62, 208, 68, 0.5)',\n 'success-alert-bg': 'rgba(44, 62, 54, 0.9)',\n 'success-alert-content': 'rgba(50, 111, 58, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\nexport const sharedSemanticDark: Partial<ThemeTokens> = {\n // Error\n 'error-light': '166 44 85',\n 'error-dark': '249 218 223',\n 'error-contrast': '143 0 63',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(184, 140, 151, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.05)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(253, 240, 243, 1)',\n 'error-alert-content': 'rgba(251, 225, 230, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '159 61 25',\n 'warning-dark': '249 220 210',\n 'warning-contrast': '132 38 0',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(184, 143, 128, 0.9)',\n 'warning-state-outlined': 'rgba(244, 184, 161, 0.2)',\n 'warning-state-resting': 'rgba(244, 184, 161, 0.6)',\n 'warning-alert-bg': 'rgba(253, 241, 236, 1)',\n 'warning-alert-content': 'rgba(251, 227, 217, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '85 74 195',\n 'info-dark': '226 223 252',\n 'info-contrast': '63 47 177',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(150, 148, 191, 1)',\n 'info-state-outlined': 'rgba(196, 192, 250, 0.2)',\n 'info-state-resting': 'rgba(196, 192, 250, 0.6)',\n 'info-alert-bg': 'rgba(243, 242, 254, 1)',\n 'info-alert-content': 'rgba(231, 230, 253, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '46 108 36',\n 'success-dark': '153 252 128',\n 'success-contrast': '0 83 12',\n 'success-dark-bg': '46 108 36',\n 'success-state-contained': 'rgba(100, 170, 88, 0.9)',\n 'success-state-outlined': 'rgba(125, 223, 103, 0.2)',\n 'success-state-resting': 'rgba(125, 223, 103, 0.6)',\n 'success-alert-bg': 'rgba(229, 249, 225, 1)',\n 'success-alert-content': 'rgba(203, 242, 194, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\n// ── Structyl theme token values ───────────────────────────────────────────────────\n// Light mode values derived from MUI colorsLight palette\n\nexport const structylSubTokensLight: Partial<ThemeTokens> = {\n // Primary (#5754A3)\n 'primary-light': '195 192 250',\n 'primary-dark': '27 20 100',\n 'primary-contrast': '255 255 255',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(87, 84, 163, 0.1)',\n 'primary-state-resting': 'rgba(87, 84, 163, 0.5)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#2578FF)\n 'secondary-light': '219 226 252',\n 'secondary-dark': '25 65 149',\n 'secondary-contrast': '255 255 255',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(37, 120, 255, 0.1)',\n 'secondary-state-resting': 'rgba(37, 120, 255, 0.5)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '42 46 52',\n 'text-secondary': 'rgba(42, 46, 52, 0.6)',\n 'text-disabled': 'rgba(42, 46, 52, 0.38)',\n 'text-info': '117 106 234',\n 'text-fill': '27 20 100',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '250 250 250',\n 'surface-paper': '255 255 255',\n // Divider / borders\n divider: 'rgba(42, 46, 52, 0.23)',\n 'outlined-border': 'rgba(42, 46, 52, 0.12)',\n 'input-line': 'rgba(42, 46, 52, 0.42)',\n // Action\n 'action-active': 'rgba(42, 46, 52, 0.54)',\n 'action-hover': 'rgba(37, 120, 255, 0.05)',\n 'action-selected': 'rgba(42, 46, 52, 0.08)',\n 'action-disabled': 'rgba(42, 46, 52, 0.26)',\n 'action-disabled-bg': 'rgba(42, 46, 52, 0.12)',\n 'action-focus': 'rgba(42, 46, 52, 0.12)',\n // Misc\n 'snackbar-bg': '42 46 52',\n 'map-grid': '255 255 255',\n // Table\n 'table-top-header': '238 245 255',\n 'table-header': '238 239 239',\n 'table-row': '255 255 255',\n 'table-col-border': '250 250 250',\n 'table-border': 'rgba(229, 229, 230, 1)',\n ...sharedSemanticLight,\n};\n\n// Dark mode values derived from MUI colorsDark palette\n\nexport const structylSubTokensDark: Partial<ThemeTokens> = {\n // Primary (#C3C0FA in dark)\n 'primary-light': '75 72 150',\n 'primary-dark': '219 226 252',\n 'primary-contrast': '27 20 100',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(195, 192, 250, 0.2)',\n 'primary-state-resting': 'rgba(195, 192, 250, 0.6)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#B4C5FA in dark)\n 'secondary-light': '36 87 195',\n 'secondary-dark': '219 226 252',\n 'secondary-contrast': '0 45 110',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(180, 197, 250, 0.2)',\n 'secondary-state-resting': 'rgba(180, 197, 250, 0.6)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '255 255 255',\n 'text-secondary': 'rgba(255, 255, 255, 0.7)',\n 'text-disabled': 'rgba(255, 255, 255, 0.5)',\n 'text-info': '117 106 234',\n 'text-fill': '255 255 255',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '42 46 52',\n 'surface-paper': '46 50 56',\n // Divider / borders\n divider: 'rgba(255, 255, 255, 0.23)',\n 'outlined-border': 'rgba(255, 255, 255, 0.12)',\n 'input-line': 'rgba(255, 255, 255, 0.42)',\n // Action\n 'action-active': 'rgba(255, 255, 255, 0.54)',\n 'action-hover': 'rgba(180, 197, 250, 0.05)',\n 'action-selected': 'rgba(255, 255, 255, 0.08)',\n 'action-disabled': 'rgba(255, 255, 255, 0.26)',\n 'action-disabled-bg': 'rgba(255, 255, 255, 0.12)',\n 'action-focus': 'rgba(255, 255, 255, 0.12)',\n // Misc\n 'snackbar-bg': '255 255 255',\n 'map-grid': '37 120 255',\n // Table\n 'table-top-header': '50 52 65',\n 'table-header': '57 60 66',\n 'table-row': '46 50 56',\n 'table-col-border': '42 46 52',\n 'table-border': 'rgba(81, 81, 81, 1)',\n ...sharedSemanticDark,\n};\n\n// ── Static material palette scales ────────────────────────────────────────────\n// These are baked into the Tailwind preset directly (not CSS variables).\n\nexport const staticPalette: StaticPalette = {\n yellow: { '50': '#fffde7', '100': '#fff9c4', '200': '#fff59d', '300': '#fff176', '400': '#ffee58', '500': '#ffeb3b', '600': '#fdd835', '700': '#fbc02d', '800': '#f9a825', '900': '#f57f17', A100: '#ffff8d', A200: '#ffff00', A400: '#ffea00', A700: '#ffd600' },\n amber: { '50': '#fff8e1', '100': '#ffecb3', '200': '#ffe082', '300': '#ffd54f', '400': '#ffca28', '500': '#ffc107', '600': '#ffb300', '700': '#ffa000', '800': '#ff8f00', '900': '#ff6f00', A100: '#ffe57f', A200: '#ffd740', A400: '#ffc400', A700: '#ffab00' },\n blue: { '50': '#e3f2fd', '100': '#bbdefb', '200': '#90caf9', '300': '#64b5f6', '400': '#42a5f5', '500': '#2196f3', '600': '#1e88e5', '700': '#1976d2', '800': '#1565c0', '900': '#0d47a1', A100: '#82b1ff', A200: '#448aff', A400: '#2979ff', A700: '#2962ff' },\n blueGrey: { '50': '#eceff1', '100': '#cfd8dc', '200': '#b0bec5', '300': '#90a4ae', '400': '#78909c', '500': '#607d8b', '600': '#546e7a', '700': '#455a64', '800': '#37474f', '900': '#263238', A100: '#cfd8dc', A200: '#b0bec5', A400: '#78909c', A700: '#455a64' },\n brown: { '50': '#efebe9', '100': '#d7ccc8', '200': '#bcaaa4', '300': '#a1887f', '400': '#8d6e63', '500': '#795548', '600': '#6d4c41', '700': '#5d4037', '800': '#4e342e', '900': '#3e2723', A100: '#d7ccc8', A200: '#bcaaa4', A400: '#8d6e63', A700: '#5d4037' },\n teal: { '50': '#e0f2f1', '100': '#b2dfdb', '200': '#80cbc4', '300': '#4db6ac', '400': '#26a69a', '500': '#009688', '600': '#00897b', '700': '#00796b', '800': '#00695c', '900': '#004d40', A100: '#a7ffeb', A200: '#64ffda', A400: '#1de9b6', A700: '#00bfa5' },\n red: { '50': '#ffebee', '100': '#ffcdd2', '200': '#ef9a9a', '300': '#e57373', '400': '#ef5350', '500': '#f44336', '600': '#e53935', '700': '#d32f2f', '800': '#c62828', '900': '#b71c1c', A100: '#ff8a80', A200: '#ff5252', A400: '#ff1744', A700: '#d50000' },\n purple: { '50': '#f3e5f5', '100': '#e1bee7', '200': '#ce93d8', '300': '#ba68c8', '400': '#ab47bc', '500': '#9c27b0', '600': '#8e24aa', '700': '#7b1fa2', '800': '#6a1b9a', '900': '#4a148c', A100: '#ea80fc', A200: '#e040fb', A400: '#d500f9', A700: '#aa00ff' },\n pink: { '50': '#fce4ec', '100': '#f8bbd0', '200': '#f48fb1', '300': '#f06292', '400': '#ec407a', '500': '#e91e63', '600': '#d81b60', '700': '#c2185b', '800': '#ad1457', '900': '#880e4f', A100: '#ff80ab', A200: '#ff4081', A400: '#f50057', A700: '#c51162' },\n orange: { '50': '#fff3e0', '100': '#ffe0b2', '200': '#ffcc80', '300': '#ffb74d', '400': '#ffa726', '500': '#ff9800', '600': '#fb8c00', '700': '#f57c00', '800': '#ef6c00', '900': '#e65100', A100: '#ffd180', A200: '#ffab40', A400: '#ff9100', A700: '#ff6d00' },\n lime: { '50': '#f9fbe7', '100': '#f0f4c3', '200': '#e6ee9c', '300': '#dce775', '400': '#d4e157', '500': '#cddc39', '600': '#c0ca33', '700': '#afb42b', '800': '#9e9d24', '900': '#827717', A100: '#f4ff81', A200: '#eeff41', A400: '#c6ff00', A700: '#aeea00' },\n lightGreen: { '50': '#f1f8e9', '100': '#dcedc8', '200': '#c5e1a5', '300': '#aed581', '400': '#9ccc65', '500': '#8bc34a', '600': '#7cb342', '700': '#689f38', '800': '#558b2f', '900': '#33691e', A100: '#ccff90', A200: '#b2ff59', A400: '#76ff03', A700: '#64dd17' },\n cyan: { '50': '#e0f7fa', '100': '#b2ebf2', '200': '#80deea', '300': '#4dd0e1', '400': '#26c6da', '500': '#00bcd4', '600': '#00acc1', '700': '#0097a7', '800': '#00838f', '900': '#006064', A100: '#84ffff', A200: '#18ffff', A400: '#00e5ff', A700: '#00b8d4' },\n deepOrange: { '50': '#fbe9e7', '100': '#ffccbc', '200': '#ffab91', '300': '#ff8a65', '400': '#ff7043', '500': '#ff5722', '600': '#f4511e', '700': '#e64a19', '800': '#d84315', '900': '#bf360c', A100: '#ff9e80', A200: '#ff6e40', A400: '#ff3d00', A700: '#dd2c00' },\n deepPurple: { '50': '#ede7f6', '100': '#d1c4e9', '200': '#b39ddb', '300': '#9575cd', '400': '#7e57c2', '500': '#673ab7', '600': '#5e35b1', '700': '#512da8', '800': '#4527a0', '900': '#311b92', A100: '#b388ff', A200: '#7c4dff', A400: '#651fff', A700: '#6200ea' },\n green: { '50': '#e8f5e9', '100': '#c8e6c9', '200': '#a5d6a7', '300': '#81c784', '400': '#66bb6a', '500': '#4caf50', '600': '#43a047', '700': '#388e3c', '800': '#2e7d32', '900': '#1b5e20', A100: '#b9f6ca', A200: '#69f0ae', A400: '#00e676', A700: '#00c853' },\n grey: { '50': '#fafafa', '100': '#f5f5f5', '200': '#eeeeee', '300': '#e0e0e0', '400': '#bdbdbd', '500': '#9e9e9e', '600': '#757575', '700': '#616161', '800': '#424242', '900': '#212121', A100: '#f5f5f5', A200: '#eeeeee', A400: '#bdbdbd', A700: '#616161' },\n indigo: { '50': '#e8eaf6', '100': '#c5cae9', '200': '#9fa8da', '300': '#7986cb', '400': '#5c6bc0', '500': '#3f51b5', '600': '#3949ab', '700': '#303f9f', '800': '#283593', '900': '#1a237e', A100: '#8c9eff', A200: '#536dfe', A400: '#3d5afe', A700: '#304ffe' },\n lightBlue: { '50': '#e1f5fe', '100': '#b3e5fc', '200': '#81d4fa', '300': '#4fc3f7', '400': '#29b6f6', '500': '#03a9f4', '600': '#039be5', '700': '#0288d1', '800': '#0277bd', '900': '#01579b', A100: '#80d8ff', A200: '#40c4ff', A400: '#00b0ff', A700: '#0091ea' },\n};\n\n// ── General named colors (static, rgba) ───────────────────────────────────────\n\nexport const generalColors = {\n 'yellow-golden': 'rgba(255, 215, 0, 0.6)',\n 'yellow-pale': 'rgba(255, 255, 153, 0.4)',\n 'yellow-amber': 'rgba(255, 191, 0, 0.7)',\n 'yellow-sunshine': 'rgba(255, 239, 0, 0.5)',\n 'yellow-light': 'rgba(255, 255, 0, 0.5)',\n 'yellow-warm': 'rgba(255, 204, 0, 0.8)',\n 'yellow-soft': 'rgba(255, 229, 153, 0.7)',\n 'red-rose': 'rgba(255, 51, 51, 0.5)',\n 'red-crimson': 'rgba(220, 20, 60, 0.6)',\n 'red-light-coral': 'rgba(240, 128, 128, 0.5)',\n 'red-fire-brick': 'rgba(178, 34, 34, 0.8)',\n 'red-bright': 'rgba(255, 0, 0, 0.7)',\n 'red-soft-coral': 'rgba(255, 102, 102, 0.6)',\n 'red-dark': 'rgba(204, 0, 0, 0.8)',\n 'blue-turquoise': 'rgba(64, 224, 208, 0.6)',\n 'blue-dodger': 'rgba(30, 144, 255, 0.5)',\n 'blue-navy': 'rgba(0, 0, 128, 0.8)',\n 'blue-steel': 'rgba(70, 130, 180, 0.7)',\n 'blue-sky': 'rgba(0, 153, 255, 0.5)',\n 'blue-light': 'rgba(51, 204, 255, 0.7)',\n 'blue-deep': 'rgba(0, 51, 204, 0.8)',\n 'green-lime': 'rgba(50, 205, 50, 0.5)',\n 'green-pale': 'rgba(152, 251, 152, 0.4)',\n 'green-forest': 'rgba(34, 139, 34, 0.7)',\n 'green-olive': 'rgba(128, 128, 0, 0.6)',\n 'green-fresh': 'rgba(0, 204, 0, 0.6)',\n 'green-soft-mint': 'rgba(102, 255, 153, 0.7)',\n 'green-dark': 'rgba(0, 153, 76, 0.8)',\n 'orange-tangerine': 'rgba(255, 140, 0, 0.6)',\n 'orange-apricot': 'rgba(251, 206, 177, 0.5)',\n 'orange-burnt': 'rgba(204, 85, 0, 0.7)',\n 'orange-carrot': 'rgba(237, 145, 33, 0.6)',\n 'orange-bright': 'rgba(255, 102, 0, 0.7)',\n 'orange-soft-peach': 'rgba(255, 178, 102, 0.6)',\n 'orange-deep': 'rgba(204, 85, 0, 0.8)',\n} as const;\n","import type { ThemeConfig } from './types';\nimport {\n sharedSemanticLight,\n sharedSemanticDark,\n structylSubTokensLight,\n structylSubTokensDark,\n} from './palette';\n\n// ── Helper: build per-theme primary/secondary sub-tokens ─────────────────────\n\nfunction primarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'primary-light': lightRgb,\n 'primary-dark': darkRgb,\n 'primary-contrast': contrastRgb,\n 'primary-dark-bg': darkBgRgb,\n 'primary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'primary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'primary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'primary-shade-12': `rgba(${darkRgb.split(' ').join(', ')}, 0.12)`,\n 'primary-shade-16': `rgba(${darkRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\nfunction secondarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'secondary-light': lightRgb,\n 'secondary-dark': darkRgb,\n 'secondary-contrast': contrastRgb,\n 'secondary-dark-bg': darkBgRgb,\n 'secondary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'secondary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'secondary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'secondary-shade-12': `rgba(${mainRgb.split(' ').join(', ')}, 0.12)`,\n 'secondary-shade-16': `rgba(${mainRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\n// RGB channel format required: values must be space-separated (e.g. \"15 23 41\"), not comma-separated,\n// because they are interpolated into rgba() as `rgba(${rgb.split(' ').join(', ')}, alpha)`.\nfunction textSurfaceTokens(fgRgb: string, bgRgb: string, paperRgb: string, infoRgb: string, snackbarRgb: string): Record<string, string> {\n return {\n text: fgRgb,\n 'text-secondary': `rgba(${fgRgb.split(' ').join(', ')}, 0.6)`,\n 'text-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.38)`,\n 'text-info': infoRgb,\n 'text-fill': fgRgb,\n 'text-shade-12': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'text-shade-16': `rgba(${fgRgb.split(' ').join(', ')}, 0.16)`,\n surface: bgRgb,\n 'surface-paper': paperRgb,\n divider: `rgba(${fgRgb.split(' ').join(', ')}, 0.23)`,\n 'outlined-border': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'input-line': `rgba(${fgRgb.split(' ').join(', ')}, 0.42)`,\n 'action-active': `rgba(${fgRgb.split(' ').join(', ')}, 0.54)`,\n 'action-hover': `rgba(${fgRgb.split(' ').join(', ')}, 0.05)`,\n 'action-selected': `rgba(${fgRgb.split(' ').join(', ')}, 0.08)`,\n 'action-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.26)`,\n 'action-disabled-bg': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'action-focus': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'snackbar-bg': snackbarRgb,\n 'map-grid': '255 255 255',\n };\n}\n\nfunction tableTokens({ topHeader, header, row, colBorder, border }: {\n topHeader: string; header: string; row: string; colBorder: string; border: string;\n}): Record<string, string> {\n return {\n 'table-top-header': topHeader,\n 'table-header': header,\n 'table-row': row,\n 'table-col-border': colBorder,\n 'table-border': border,\n };\n}\n\n// ── Slate ────────────────────────────────────────────────────────────────────\n\nconst slate: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '222 47% 11%',\n card: '0 0% 100%',\n 'card-fg': '222 47% 11%',\n popover: '0 0% 100%',\n 'popover-fg': '222 47% 11%',\n primary: '222 47% 11%',\n 'primary-fg': '210 40% 98%',\n 'primary-hover': '222 47% 20%',\n 'primary-active': '222 47% 8%',\n secondary: '210 40% 96%',\n 'secondary-fg': '222 47% 11%',\n muted: '210 40% 96%',\n 'muted-fg': '215 16% 47%',\n accent: '210 40% 96%',\n 'accent-fg': '222 47% 11%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '214 32% 91%',\n 'border-strong': '214 24% 80%',\n input: '214 32% 91%',\n ring: '222 47% 11%',\n overlay: '222 47% 11%',\n shadow: '222 47% 11%',\n // New sub-tokens — primary: '222 47% 11%' ≈ RGB(15, 23, 41)\n ...primarySubTokensLight('124 149 208', '7 10 19', '255 255 255', '11 15 26', '15 23 41'),\n // secondary: '210 40% 96%' ≈ RGB(237, 241, 247)\n ...secondarySubTokensLight('245 248 252', '180 196 220', '15 23 41', '200 210 225', '201 212 228'),\n // fg ≈ RGB(15, 23, 41); bg = white; info = sky blue\n ...textSurfaceTokens('15 23 41', '255 255 255', '255 255 255', '14 165 233', '15 23 41'),\n ...tableTokens({ topHeader: '238 242 255', header: '241 245 249', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(214, 219, 228, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '222 47% 6%',\n fg: '210 40% 98%',\n card: '222 47% 8%',\n 'card-fg': '210 40% 98%',\n popover: '222 35% 10%',\n 'popover-fg': '210 40% 98%',\n primary: '210 40% 98%',\n 'primary-fg': '222 47% 11%',\n 'primary-hover': '210 40% 90%',\n 'primary-active': '210 40% 95%',\n secondary: '217 33% 17%',\n 'secondary-fg': '210 40% 98%',\n muted: '217 33% 17%',\n 'muted-fg': '215 20% 65%',\n accent: '217 33% 20%',\n 'accent-fg': '210 40% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '217 33% 20%',\n 'border-strong': '217 25% 30%',\n input: '217 33% 20%',\n ring: '213 27% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '210 40% 98%' ≈ RGB(248, 251, 254)\n ...primarySubTokensLight('210 220 235', '255 255 255', '15 23 41', '25 35 55', '248 251 254'),\n // secondary dark: '217 33% 17%' ≈ RGB(29, 40, 58)\n ...secondarySubTokensLight('22 30 45', '44 60 87', '248 251 254', '35 50 72', '29 40 58'),\n // fg dark ≈ RGB(248, 251, 254)\n ...textSurfaceTokens('248 251 254', '8 11 22', '12 16 30', '56 189 248', '248 251 254'),\n ...tableTokens({ topHeader: '17 25 41', header: '22 31 51', row: '12 16 30', colBorder: '8 11 22', border: 'rgba(51, 65, 86, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '248 251 254',\n },\n};\n\n// ── Zinc ─────────────────────────────────────────────────────────────────────\n\nconst zinc: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '240 6% 10%',\n 'primary-fg': '0 0% 98%',\n 'primary-hover': '240 6% 20%',\n 'primary-active': '240 6% 6%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '240 10% 4%',\n overlay: '240 10% 4%',\n shadow: '240 10% 4%',\n // primary: '240 6% 10%' ≈ RGB(24, 24, 27)\n ...primarySubTokensLight('158 158 164', '10 10 11', '255 255 255', '18 18 22', '24 24 27'),\n // secondary: '240 5% 96%' ≈ RGB(245, 245, 246)\n ...secondarySubTokensLight('248 248 249', '186 186 191', '24 24 27', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '240 240 244', header: '244 244 245', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(228, 228, 231, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '240 10% 6%',\n fg: '0 0% 98%',\n card: '240 10% 8%',\n 'card-fg': '0 0% 98%',\n popover: '240 8% 10%',\n 'popover-fg': '0 0% 98%',\n primary: '0 0% 98%',\n 'primary-fg': '240 6% 10%',\n 'primary-hover': '0 0% 90%',\n 'primary-active': '0 0% 95%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '240 4% 16%',\n 'muted-fg': '240 5% 65%',\n accent: '240 4% 20%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 20%',\n 'border-strong': '240 5% 30%',\n input: '240 4% 20%',\n ring: '240 5% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '0 0% 98%' ≈ RGB(250, 250, 250)\n ...primarySubTokensLight('200 200 202', '255 255 255', '10 10 11', '20 20 24', '250 250 250'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '250 250 250', '44 44 49', '38 38 42'),\n // fg dark ≈ RGB(250, 250, 250)\n ...textSurfaceTokens('250 250 250', '14 14 17', '19 19 22', '56 189 248', '250 250 250'),\n ...tableTokens({ topHeader: '22 22 26', header: '28 28 32', row: '19 19 22', colBorder: '14 14 17', border: 'rgba(63, 63, 70, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '250 250 250',\n },\n};\n\n// ── Rose ─────────────────────────────────────────────────────────────────────\n\nconst rose: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '347 77% 50%',\n overlay: '240 10% 4%',\n shadow: '347 60% 30%',\n // primary: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary: same as zinc secondary\n ...secondarySubTokensLight('248 248 249', '186 186 191', '10 10 11', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '255 241 242', header: '255 245 246', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(244, 227, 229, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '20 14% 5%',\n fg: '0 0% 95%',\n card: '24 10% 8%',\n 'card-fg': '0 0% 95%',\n popover: '0 0% 9%',\n 'popover-fg': '0 0% 95%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '0 0% 15%',\n 'muted-fg': '240 5% 65%',\n accent: '12 7% 15%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 86% 97%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 16%',\n 'border-strong': '240 5% 26%',\n input: '240 4% 20%',\n ring: '347 77% 50%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary rose same in dark: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '242 242 242', '44 44 49', '38 38 42'),\n // fg ≈ RGB(242, 242, 242) ('0 0% 95%')\n ...textSurfaceTokens('242 242 242', '14 12 10', '22 20 17', '56 189 248', '242 242 242'),\n ...tableTokens({ topHeader: '28 20 20', header: '36 28 28', row: '22 20 17', colBorder: '14 12 10', border: 'rgba(70, 55, 55, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '242 242 242',\n },\n};\n\n// ── Structyl ─────────────────────────────────────────────────────────────────────\n// Full MUI-inspired palette with exact colorsLight/colorsDark values\n\nconst structyl: ThemeConfig = {\n light: {\n bg: '0 0% 98%',\n fg: '217 11% 18%',\n card: '0 0% 100%',\n 'card-fg': '217 11% 18%',\n popover: '0 0% 100%',\n 'popover-fg': '217 11% 18%',\n primary: '242 32% 48%',\n 'primary-fg': '0 0% 100%',\n 'primary-hover': '242 32% 55%',\n 'primary-active': '245 67% 24%',\n secondary: '217 100% 57%',\n 'secondary-fg': '0 0% 100%',\n muted: '0 0% 96%',\n 'muted-fg': '0 0% 62%',\n accent: '253 80% 94%',\n 'accent-fg': '253 76% 67%',\n destructive: '340 71% 55%',\n 'destructive-fg': '0 0% 5%',\n success: '123 57% 53%',\n 'success-fg': '0 0% 5%',\n warning: '17 100% 54%',\n 'warning-fg': '38 92% 8%',\n info: '253 76% 67%',\n 'info-fg': '0 0% 5%',\n border: '240 2% 90%',\n 'border-strong': '0 0% 78%',\n input: '240 2% 90%',\n ring: '242 32% 48%',\n overlay: '217 11% 18%',\n shadow: '217 11% 18%',\n ...structylSubTokensLight,\n },\n dark: {\n bg: '217 11% 18%',\n fg: '0 0% 100%',\n card: '216 10% 20%',\n 'card-fg': '0 0% 100%',\n popover: '216 10% 20%',\n 'popover-fg': '0 0% 100%',\n primary: '243 85% 87%',\n 'primary-fg': '245 67% 24%',\n 'primary-hover': '243 85% 80%',\n 'primary-active': '243 85% 91%',\n secondary: '225 87% 84%',\n 'secondary-fg': '215 100% 22%',\n muted: '217 12% 26%',\n 'muted-fg': '207 12% 63%',\n accent: '217 13% 28%',\n 'accent-fg': '243 85% 87%',\n destructive: '348 75% 83%',\n 'destructive-fg': '334 100% 28%',\n success: '109 65% 64%',\n 'success-fg': '127 100% 16%',\n warning: '17 79% 79%',\n 'warning-fg': '18 100% 26%',\n info: '243 85% 87%',\n 'info-fg': '247 58% 44%',\n border: '0 0% 32%',\n 'border-strong': '0 0% 39%',\n input: '217 12% 26%',\n ring: '243 85% 87%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n ...structylSubTokensDark,\n },\n};\n\nexport const defaultThemes: Record<string, ThemeConfig> = { slate, zinc, rose, structyl };\n","'use client';\n\nimport * as React from 'react';\nimport { defaultThemes } from './themes';\nimport type { ResolvedMode, Theme, ThemeConfig, ThemeMode } from './types';\n\nexport interface ThemeContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n resolvedMode: ResolvedMode;\n themes: string[];\n}\n\nconst ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n defaultMode?: ThemeMode;\n storageKey?: string | false;\n enableTransitions?: boolean;\n themes?: Record<string, ThemeConfig>;\n attribute?: string;\n}\n\nexport function ThemeProvider(props: ThemeProviderProps): React.JSX.Element {\n const {\n children,\n defaultTheme = 'slate',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n enableTransitions = true,\n themes: customThemes,\n attribute = 'data-theme',\n } = props;\n\n const themes = React.useMemo(\n () => ({ ...defaultThemes, ...customThemes }),\n [customThemes],\n );\n\n const [theme, setThemeState] = React.useState<Theme>(defaultTheme);\n const [mode, setModeState] = React.useState<ThemeMode>(defaultMode);\n const [systemMode, setSystemMode] = React.useState<ResolvedMode>('light');\n\n // Hydrate from storage on mount\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as { theme?: Theme; mode?: ThemeMode };\n if (parsed.theme) setThemeState(parsed.theme);\n if (parsed.mode) setModeState(parsed.mode);\n }\n } catch {\n // ignore corrupted storage\n }\n }, [storageKey]);\n\n // Track system preference\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const update = () => setSystemMode(mql.matches ? 'dark' : 'light');\n update();\n mql.addEventListener('change', update);\n return () => mql.removeEventListener('change', update);\n }, []);\n\n const resolvedMode: ResolvedMode = mode === 'system' ? systemMode : mode;\n\n // Apply data-* attributes and inject CSS variables\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n\n if (!enableTransitions) {\n const css = document.createElement('style');\n css.appendChild(\n document.createTextNode(\n '*,*::before,*::after{transition:none!important;animation:none!important}',\n ),\n );\n document.head.appendChild(css);\n // force reflow then remove\n void window.getComputedStyle(document.body);\n requestAnimationFrame(() => document.head.removeChild(css));\n }\n\n root.setAttribute(attribute, theme);\n root.setAttribute('data-mode', resolvedMode);\n root.style.colorScheme = resolvedMode;\n\n // Inject CSS variables from current theme\n const cfg = themes[theme];\n if (cfg) {\n const tokens = cfg[resolvedMode];\n for (const [key, value] of Object.entries(tokens)) {\n root.style.setProperty(`--color-${key}`, value);\n }\n }\n }, [theme, resolvedMode, themes, attribute, enableTransitions]);\n\n // Persist to storage on change\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify({ theme, mode }));\n } catch {\n // storage may be unavailable (Safari private mode, etc.)\n }\n }, [theme, mode, storageKey]);\n\n const value = React.useMemo<ThemeContextValue>(\n () => ({\n theme,\n setTheme: setThemeState,\n mode,\n setMode: setModeState,\n resolvedMode,\n themes: Object.keys(themes),\n }),\n [theme, mode, resolvedMode, themes],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport { ThemeContext };\n","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from './theme-provider';\n\nexport function useTheme() {\n const context = React.useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a <ThemeProvider>');\n }\n return context;\n}\n","import * as React from 'react';\nimport type { ThemeMode } from './types';\nimport { defaultThemes } from './themes';\n\ninterface ThemeScriptProps {\n defaultTheme?: string;\n defaultMode?: ThemeMode;\n storageKey?: string;\n attribute?: string;\n}\n\nfunction tokensToVars(tokens: Record<string, string>): string {\n return Object.entries(tokens)\n .map(([k, v]) => `--color-${k}:${v}`)\n .join(';');\n}\n\n/**\n * Renders a <style> block with the default theme's CSS variables plus an inline\n * script that updates them from localStorage before first paint. Place inside\n * <head> of your root layout to prevent flash of unstyled content.\n */\nexport function ThemeScript({\n defaultTheme = 'slate',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n attribute = 'data-theme',\n}: ThemeScriptProps): React.JSX.Element {\n const cfg = defaultThemes[defaultTheme as keyof typeof defaultThemes];\n const lightVars = cfg ? tokensToVars(cfg.light as Record<string, string>) : '';\n const darkVars = cfg ? tokensToVars(cfg.dark as Record<string, string>) : '';\n\n // Static CSS covers the default theme before JS runs (SSR + initial paint).\n // [data-mode=\"dark\"] overrides are picked up as soon as the script below sets\n // the attribute on <html>, which happens before the browser paints.\n const staticCss = lightVars\n ? `:root{${lightVars}}:root[data-mode=\"dark\"]{${darkVars}}`\n : '';\n\n const script = `\n(function(){\n try {\n var stored = JSON.parse(localStorage.getItem(${JSON.stringify(storageKey)}) || '{}');\n var theme = stored.theme || ${JSON.stringify(defaultTheme)};\n var mode = stored.mode || ${JSON.stringify(defaultMode)};\n var resolved = mode === 'system'\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n : mode;\n var root = document.documentElement;\n root.setAttribute(${JSON.stringify(attribute)}, theme);\n root.setAttribute('data-mode', resolved);\n root.style.colorScheme = resolved;\n } catch (e) {}\n})();`.trim();\n\n return (\n <>\n {staticCss && (\n <style dangerouslySetInnerHTML={{ __html: staticCss }} suppressHydrationWarning />\n )}\n <script dangerouslySetInnerHTML={{ __html: script }} suppressHydrationWarning />\n </>\n );\n}\n","/**\n * Color accent presets for @structyl/themes.\n *\n * Built-in presets cover 10 common accent colors. Users can extend the list\n * by creating additional `ColorPreset` objects and passing them to\n * `useColorPreset({ extraPresets: [...] })` or calling `applyColorPreset`\n * with any arbitrary hex color.\n */\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\n/** A single accent-color preset. */\nexport interface ColorPreset {\n /** Unique machine-readable identifier. */\n id: string;\n /** Human-readable display name. */\n name: string;\n /** Primary hex color value (e.g. `'#6366f1'`). */\n hex: string;\n}\n\n/* ── Built-in catalogue ─────────────────────────────────────────────────────── */\n\n/**\n * The 10 built-in accent presets shipped with @structyl/themes.\n * Typed `as const` so that `ColorPresetId` is a precise union of literal IDs.\n */\nexport const COLOR_PRESETS = [\n { id: 'structyl', name: 'Structyl', hex: '#5754a3' },\n { id: 'indigo', name: 'Indigo', hex: '#6366f1' },\n { id: 'ocean', name: 'Ocean', hex: '#0284c7' },\n { id: 'rose', name: 'Rose', hex: '#e11d48' },\n { id: 'forest', name: 'Forest', hex: '#16a34a' },\n { id: 'sunset', name: 'Sunset', hex: '#f97316' },\n { id: 'violet', name: 'Violet', hex: '#7c3aed' },\n { id: 'slate', name: 'Slate', hex: '#475569' },\n { id: 'ember', name: 'Ember', hex: '#be123c' },\n { id: 'zinc', name: 'Zinc', hex: '#71717a' },\n] as const satisfies ReadonlyArray<ColorPreset>;\n\n/** Union of all built-in preset IDs (e.g. `'structyl' | 'indigo' | 'ocean' | ...`). */\nexport type ColorPresetId = (typeof COLOR_PRESETS)[number]['id'];\n\n/**\n * Create a custom preset object. Useful for building typed preset lists\n * that will be passed to `useColorPreset({ extraPresets: [...] })`.\n *\n * @example\n * const myPreset = createColorPreset('brand', 'My Brand', '#ff5500');\n */\nexport function createColorPreset(id: string, name: string, hex: string): ColorPreset {\n return { id, name, hex };\n}\n\n/* ── HSL utilities (zero deps) ──────────────────────────────────────────────── */\n\nfunction hexToHslParts(hex: string): { h: number; s: number; l: number } {\n const h = hex.replace('#', '');\n const r = parseInt(h.slice(0, 2), 16) / 255;\n const g = parseInt(h.slice(2, 4), 16) / 255;\n const b = parseInt(h.slice(4, 6), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n let sat = 0;\n const lum = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n sat = lum > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === r) hue = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n else if (max === g) hue = ((b - r) / d + 2) / 6;\n else hue = ((r - g) / d + 4) / 6;\n }\n return { h: Math.round(hue * 360), s: Math.round(sat * 100), l: Math.round(lum * 100) };\n}\n\nfunction hslStr({ h, s, l }: { h: number; s: number; l: number }): string {\n return `${h} ${s}% ${l}%`;\n}\n\nfunction shiftL(p: { h: number; s: number; l: number }, d: number) {\n return { ...p, l: Math.max(2, Math.min(97, p.l + d)) };\n}\n\nfunction relativeLuminance(hex: string): number {\n const h = hex.replace('#', '');\n const lin = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n };\n return (\n 0.2126 * lin(parseInt(h.slice(0, 2), 16)) +\n 0.7152 * lin(parseInt(h.slice(2, 4), 16)) +\n 0.0722 * lin(parseInt(h.slice(4, 6), 16))\n );\n}\n\n/* ── DOM utilities ──────────────────────────────────────────────────────────── */\n\n/** CSS custom properties overridden by `applyColorPreset`. */\nconst PRESET_CSS_VARS = [\n '--color-primary',\n '--color-ring',\n '--color-primary-hover',\n '--color-primary-active',\n '--color-primary-fg',\n] as const;\n\n/**\n * Apply an accent preset to the document root by overriding the five\n * primary-color CSS custom properties. Safe to call on every theme/mode\n * change — the ThemeProvider will reset base vars first, then this re-applies.\n *\n * No-op in SSR environments.\n *\n * @param hex - The hex color string (e.g. `'#6366f1'`).\n */\nexport function applyColorPreset(hex: string): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const p = hexToHslParts(hex);\n const fg = relativeLuminance(hex) > 0.179 ? '222 47% 11%' : '0 0% 100%';\n root.style.setProperty('--color-primary', hslStr(p));\n root.style.setProperty('--color-ring', hslStr(p));\n root.style.setProperty('--color-primary-hover', hslStr(shiftL(p, 6)));\n root.style.setProperty('--color-primary-active', hslStr(shiftL(p, -8)));\n root.style.setProperty('--color-primary-fg', fg);\n}\n\n/**\n * Remove all CSS custom properties applied by `applyColorPreset`,\n * restoring whatever values the active ThemeProvider theme supplies.\n *\n * No-op in SSR environments.\n */\nexport function clearColorPreset(): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n PRESET_CSS_VARS.forEach(k => root.style.removeProperty(k));\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useTheme } from './use-theme';\nimport {\n COLOR_PRESETS,\n applyColorPreset,\n clearColorPreset,\n type ColorPreset,\n} from './color-presets';\n\nconst DEFAULT_STORAGE_KEY = 'structyl-color-preset';\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface UseColorPresetOptions {\n /**\n * Custom presets to add on top of the 10 built-ins.\n * Built-ins always come first in `presets`.\n *\n * @example\n * const brandPreset = createColorPreset('brand', 'Brand Blue', '#1a6cf0');\n * const { setPreset } = useColorPreset({ extraPresets: [brandPreset] });\n */\n extraPresets?: ColorPreset[];\n\n /**\n * localStorage key used to persist the active preset across page loads.\n * Override if you need multiple independent pickers on the same origin.\n *\n * @default 'structyl-color-preset'\n */\n storageKey?: string;\n}\n\nexport interface UseColorPresetReturn {\n /** All available presets: built-ins first, then any `extraPresets`. */\n presets: ColorPreset[];\n /** ID of the currently active preset, or `null` when using the default theme. */\n activeId: string | null;\n /** Full preset object for the active ID, or `null`. */\n activePreset: ColorPreset | null;\n /**\n * Activate a preset by its `id` and `hex` color.\n * Applies CSS variables immediately and persists to localStorage.\n */\n setPreset: (id: string, hex: string) => void;\n /**\n * Clear the active preset, restoring the ThemeProvider's base theme colors.\n * Also removes the stored value from localStorage.\n */\n clearPreset: () => void;\n}\n\n/* ── Hook ───────────────────────────────────────────────────────────────────── */\n\n/**\n * Manages an accent-color preset on top of the active structyl theme.\n *\n * Must be used inside a `<ThemeProvider>`. Persists the selection to\n * localStorage and re-applies it whenever the base theme or color-mode\n * changes (because ThemeProvider resets `--color-primary` on change).\n *\n * @example\n * function AccentPicker() {\n * const { presets, activeId, setPreset, clearPreset } = useColorPreset();\n * return (\n * <>\n * {presets.map(p => (\n * <button key={p.id} onClick={() => setPreset(p.id, p.hex)}\n * style={{ background: p.hex }}>\n * {p.name}\n * </button>\n * ))}\n * {activeId && <button onClick={clearPreset}>Reset</button>}\n * </>\n * );\n * }\n *\n * @example Adding custom presets\n * const brandPreset = createColorPreset('brand', 'Company Blue', '#1a6cf0');\n * const { presets } = useColorPreset({ extraPresets: [brandPreset] });\n */\nexport function useColorPreset(options: UseColorPresetOptions = {}): UseColorPresetReturn {\n const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY } = options;\n\n const { theme, resolvedMode } = useTheme();\n const [activeId, setActiveId] = useState<string | null>(null);\n\n const allPresets: ColorPreset[] = [...(COLOR_PRESETS as unknown as ColorPreset[]), ...extraPresets];\n\n // Hydrate from localStorage on mount\n useEffect(() => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored && allPresets.some(p => p.id === stored)) {\n setActiveId(stored);\n }\n } catch {\n // localStorage unavailable (e.g. private browsing with strict settings)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storageKey]);\n\n // Re-apply CSS vars whenever base theme or color-mode changes (ThemeProvider resets them)\n useEffect(() => {\n if (!activeId) return;\n const preset = allPresets.find(p => p.id === activeId);\n if (preset) applyColorPreset(preset.hex);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeId, theme, resolvedMode]);\n\n const setPreset = useCallback((id: string, hex: string) => {\n setActiveId(id);\n applyColorPreset(hex);\n try { localStorage.setItem(storageKey, id); } catch { /* ignore */ }\n }, [storageKey]);\n\n const clearPreset = useCallback(() => {\n setActiveId(null);\n clearColorPreset();\n try { localStorage.removeItem(storageKey); } catch { /* ignore */ }\n }, [storageKey]);\n\n const activePreset = allPresets.find(p => p.id === activeId) ?? null;\n\n return { presets: allPresets, activeId, activePreset, setPreset, clearPreset };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/palette.ts","../src/themes.ts","../src/theme-provider.tsx","../src/use-theme.ts","../src/theme-script.tsx","../src/color-presets.ts","../src/use-color-preset.ts"],"names":["React","value","React2","React3","useState","useRef","useEffect","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ThemeTokens } from './types';\nimport type { StaticPalette } from './palette.types';\n\n// ── Shared semantic sub-tokens ────────────────────────────────────────────────\n// error/warning/info/success are semantic colors that don't change between\n// UI themes (slate/zinc/rose/structyl). Only light/dark mode changes their values.\n\nexport const sharedSemanticLight: Partial<ThemeTokens> = {\n // Error\n 'error-light': '249 218 223',\n 'error-dark': '131 24 63',\n 'error-contrast': '255 255 255',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(167, 56, 95, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.1)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(60, 47, 58, 0.9)',\n 'error-alert-content': 'rgba(114, 52, 76, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '249 220 210',\n 'warning-dark': '122 45 16',\n 'warning-contrast': '255 255 255',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(191, 75, 30, 0.9)',\n 'warning-state-outlined': 'rgba(255, 87, 20, 0.1)',\n 'warning-state-resting': 'rgba(255, 87, 20, 0.5)',\n 'warning-alert-bg': 'rgba(85, 54, 46, 0.9)',\n 'warning-alert-content': 'rgba(127, 62, 39, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '227 223 252',\n 'info-dark': '47 32 159',\n 'info-contrast': '255 255 255',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(95, 88, 179, 0.9)',\n 'info-state-outlined': 'rgba(117, 106, 234, 0.1)',\n 'info-state-resting': 'rgba(117, 106, 234, 0.5)',\n 'info-alert-bg': 'rgba(49, 52, 70, 0.9)',\n 'info-alert-content': 'rgba(72, 70, 125, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '153 252 128',\n 'success-dark': '33 82 25',\n 'success-contrast': '255 255 255',\n 'success-dark-bg': '33 82 25',\n 'success-state-contained': 'rgba(56, 159, 63, 0.9)',\n 'success-state-outlined': 'rgba(62, 208, 68, 0.1)',\n 'success-state-resting': 'rgba(62, 208, 68, 0.5)',\n 'success-alert-bg': 'rgba(44, 62, 54, 0.9)',\n 'success-alert-content': 'rgba(50, 111, 58, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\nexport const sharedSemanticDark: Partial<ThemeTokens> = {\n // Error\n 'error-light': '166 44 85',\n 'error-dark': '249 218 223',\n 'error-contrast': '143 0 63',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(184, 140, 151, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.05)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(253, 240, 243, 1)',\n 'error-alert-content': 'rgba(251, 225, 230, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '159 61 25',\n 'warning-dark': '249 220 210',\n 'warning-contrast': '132 38 0',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(184, 143, 128, 0.9)',\n 'warning-state-outlined': 'rgba(244, 184, 161, 0.2)',\n 'warning-state-resting': 'rgba(244, 184, 161, 0.6)',\n 'warning-alert-bg': 'rgba(253, 241, 236, 1)',\n 'warning-alert-content': 'rgba(251, 227, 217, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '85 74 195',\n 'info-dark': '226 223 252',\n 'info-contrast': '63 47 177',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(150, 148, 191, 1)',\n 'info-state-outlined': 'rgba(196, 192, 250, 0.2)',\n 'info-state-resting': 'rgba(196, 192, 250, 0.6)',\n 'info-alert-bg': 'rgba(243, 242, 254, 1)',\n 'info-alert-content': 'rgba(231, 230, 253, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '46 108 36',\n 'success-dark': '153 252 128',\n 'success-contrast': '0 83 12',\n 'success-dark-bg': '46 108 36',\n 'success-state-contained': 'rgba(100, 170, 88, 0.9)',\n 'success-state-outlined': 'rgba(125, 223, 103, 0.2)',\n 'success-state-resting': 'rgba(125, 223, 103, 0.6)',\n 'success-alert-bg': 'rgba(229, 249, 225, 1)',\n 'success-alert-content': 'rgba(203, 242, 194, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\n// ── Structyl theme token values ───────────────────────────────────────────────────\n// Light mode values derived from MUI colorsLight palette\n\nexport const structylSubTokensLight: Partial<ThemeTokens> = {\n // Primary (#5754A3)\n 'primary-light': '195 192 250',\n 'primary-dark': '27 20 100',\n 'primary-contrast': '255 255 255',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(87, 84, 163, 0.1)',\n 'primary-state-resting': 'rgba(87, 84, 163, 0.5)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#2578FF)\n 'secondary-light': '219 226 252',\n 'secondary-dark': '25 65 149',\n 'secondary-contrast': '255 255 255',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(37, 120, 255, 0.1)',\n 'secondary-state-resting': 'rgba(37, 120, 255, 0.5)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '42 46 52',\n 'text-secondary': 'rgba(42, 46, 52, 0.6)',\n 'text-disabled': 'rgba(42, 46, 52, 0.38)',\n 'text-info': '117 106 234',\n 'text-fill': '27 20 100',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '250 250 250',\n 'surface-paper': '255 255 255',\n // Divider / borders\n divider: 'rgba(42, 46, 52, 0.23)',\n 'outlined-border': 'rgba(42, 46, 52, 0.12)',\n 'input-line': 'rgba(42, 46, 52, 0.42)',\n // Action\n 'action-active': 'rgba(42, 46, 52, 0.54)',\n 'action-hover': 'rgba(37, 120, 255, 0.05)',\n 'action-selected': 'rgba(42, 46, 52, 0.08)',\n 'action-disabled': 'rgba(42, 46, 52, 0.26)',\n 'action-disabled-bg': 'rgba(42, 46, 52, 0.12)',\n 'action-focus': 'rgba(42, 46, 52, 0.12)',\n // Misc\n 'snackbar-bg': '42 46 52',\n 'map-grid': '255 255 255',\n // Table\n 'table-top-header': '238 245 255',\n 'table-header': '238 239 239',\n 'table-row': '255 255 255',\n 'table-col-border': '250 250 250',\n 'table-border': 'rgba(229, 229, 230, 1)',\n ...sharedSemanticLight,\n};\n\n// Dark mode values derived from MUI colorsDark palette\n\nexport const structylSubTokensDark: Partial<ThemeTokens> = {\n // Primary (#C3C0FA in dark)\n 'primary-light': '75 72 150',\n 'primary-dark': '219 226 252',\n 'primary-contrast': '27 20 100',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(195, 192, 250, 0.2)',\n 'primary-state-resting': 'rgba(195, 192, 250, 0.6)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#B4C5FA in dark)\n 'secondary-light': '36 87 195',\n 'secondary-dark': '219 226 252',\n 'secondary-contrast': '0 45 110',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(180, 197, 250, 0.2)',\n 'secondary-state-resting': 'rgba(180, 197, 250, 0.6)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '255 255 255',\n 'text-secondary': 'rgba(255, 255, 255, 0.7)',\n 'text-disabled': 'rgba(255, 255, 255, 0.5)',\n 'text-info': '117 106 234',\n 'text-fill': '255 255 255',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '42 46 52',\n 'surface-paper': '46 50 56',\n // Divider / borders\n divider: 'rgba(255, 255, 255, 0.23)',\n 'outlined-border': 'rgba(255, 255, 255, 0.12)',\n 'input-line': 'rgba(255, 255, 255, 0.42)',\n // Action\n 'action-active': 'rgba(255, 255, 255, 0.54)',\n 'action-hover': 'rgba(180, 197, 250, 0.05)',\n 'action-selected': 'rgba(255, 255, 255, 0.08)',\n 'action-disabled': 'rgba(255, 255, 255, 0.26)',\n 'action-disabled-bg': 'rgba(255, 255, 255, 0.12)',\n 'action-focus': 'rgba(255, 255, 255, 0.12)',\n // Misc\n 'snackbar-bg': '255 255 255',\n 'map-grid': '37 120 255',\n // Table\n 'table-top-header': '50 52 65',\n 'table-header': '57 60 66',\n 'table-row': '46 50 56',\n 'table-col-border': '42 46 52',\n 'table-border': 'rgba(81, 81, 81, 1)',\n ...sharedSemanticDark,\n};\n\n// ── Static material palette scales ────────────────────────────────────────────\n// These are baked into the Tailwind preset directly (not CSS variables).\n\nexport const staticPalette: StaticPalette = {\n yellow: { '50': '#fffde7', '100': '#fff9c4', '200': '#fff59d', '300': '#fff176', '400': '#ffee58', '500': '#ffeb3b', '600': '#fdd835', '700': '#fbc02d', '800': '#f9a825', '900': '#f57f17', A100: '#ffff8d', A200: '#ffff00', A400: '#ffea00', A700: '#ffd600' },\n amber: { '50': '#fff8e1', '100': '#ffecb3', '200': '#ffe082', '300': '#ffd54f', '400': '#ffca28', '500': '#ffc107', '600': '#ffb300', '700': '#ffa000', '800': '#ff8f00', '900': '#ff6f00', A100: '#ffe57f', A200: '#ffd740', A400: '#ffc400', A700: '#ffab00' },\n blue: { '50': '#e3f2fd', '100': '#bbdefb', '200': '#90caf9', '300': '#64b5f6', '400': '#42a5f5', '500': '#2196f3', '600': '#1e88e5', '700': '#1976d2', '800': '#1565c0', '900': '#0d47a1', A100: '#82b1ff', A200: '#448aff', A400: '#2979ff', A700: '#2962ff' },\n blueGrey: { '50': '#eceff1', '100': '#cfd8dc', '200': '#b0bec5', '300': '#90a4ae', '400': '#78909c', '500': '#607d8b', '600': '#546e7a', '700': '#455a64', '800': '#37474f', '900': '#263238', A100: '#cfd8dc', A200: '#b0bec5', A400: '#78909c', A700: '#455a64' },\n brown: { '50': '#efebe9', '100': '#d7ccc8', '200': '#bcaaa4', '300': '#a1887f', '400': '#8d6e63', '500': '#795548', '600': '#6d4c41', '700': '#5d4037', '800': '#4e342e', '900': '#3e2723', A100: '#d7ccc8', A200: '#bcaaa4', A400: '#8d6e63', A700: '#5d4037' },\n teal: { '50': '#e0f2f1', '100': '#b2dfdb', '200': '#80cbc4', '300': '#4db6ac', '400': '#26a69a', '500': '#009688', '600': '#00897b', '700': '#00796b', '800': '#00695c', '900': '#004d40', A100: '#a7ffeb', A200: '#64ffda', A400: '#1de9b6', A700: '#00bfa5' },\n red: { '50': '#ffebee', '100': '#ffcdd2', '200': '#ef9a9a', '300': '#e57373', '400': '#ef5350', '500': '#f44336', '600': '#e53935', '700': '#d32f2f', '800': '#c62828', '900': '#b71c1c', A100: '#ff8a80', A200: '#ff5252', A400: '#ff1744', A700: '#d50000' },\n purple: { '50': '#f3e5f5', '100': '#e1bee7', '200': '#ce93d8', '300': '#ba68c8', '400': '#ab47bc', '500': '#9c27b0', '600': '#8e24aa', '700': '#7b1fa2', '800': '#6a1b9a', '900': '#4a148c', A100: '#ea80fc', A200: '#e040fb', A400: '#d500f9', A700: '#aa00ff' },\n pink: { '50': '#fce4ec', '100': '#f8bbd0', '200': '#f48fb1', '300': '#f06292', '400': '#ec407a', '500': '#e91e63', '600': '#d81b60', '700': '#c2185b', '800': '#ad1457', '900': '#880e4f', A100: '#ff80ab', A200: '#ff4081', A400: '#f50057', A700: '#c51162' },\n orange: { '50': '#fff3e0', '100': '#ffe0b2', '200': '#ffcc80', '300': '#ffb74d', '400': '#ffa726', '500': '#ff9800', '600': '#fb8c00', '700': '#f57c00', '800': '#ef6c00', '900': '#e65100', A100: '#ffd180', A200: '#ffab40', A400: '#ff9100', A700: '#ff6d00' },\n lime: { '50': '#f9fbe7', '100': '#f0f4c3', '200': '#e6ee9c', '300': '#dce775', '400': '#d4e157', '500': '#cddc39', '600': '#c0ca33', '700': '#afb42b', '800': '#9e9d24', '900': '#827717', A100: '#f4ff81', A200: '#eeff41', A400: '#c6ff00', A700: '#aeea00' },\n lightGreen: { '50': '#f1f8e9', '100': '#dcedc8', '200': '#c5e1a5', '300': '#aed581', '400': '#9ccc65', '500': '#8bc34a', '600': '#7cb342', '700': '#689f38', '800': '#558b2f', '900': '#33691e', A100: '#ccff90', A200: '#b2ff59', A400: '#76ff03', A700: '#64dd17' },\n cyan: { '50': '#e0f7fa', '100': '#b2ebf2', '200': '#80deea', '300': '#4dd0e1', '400': '#26c6da', '500': '#00bcd4', '600': '#00acc1', '700': '#0097a7', '800': '#00838f', '900': '#006064', A100: '#84ffff', A200: '#18ffff', A400: '#00e5ff', A700: '#00b8d4' },\n deepOrange: { '50': '#fbe9e7', '100': '#ffccbc', '200': '#ffab91', '300': '#ff8a65', '400': '#ff7043', '500': '#ff5722', '600': '#f4511e', '700': '#e64a19', '800': '#d84315', '900': '#bf360c', A100: '#ff9e80', A200: '#ff6e40', A400: '#ff3d00', A700: '#dd2c00' },\n deepPurple: { '50': '#ede7f6', '100': '#d1c4e9', '200': '#b39ddb', '300': '#9575cd', '400': '#7e57c2', '500': '#673ab7', '600': '#5e35b1', '700': '#512da8', '800': '#4527a0', '900': '#311b92', A100: '#b388ff', A200: '#7c4dff', A400: '#651fff', A700: '#6200ea' },\n green: { '50': '#e8f5e9', '100': '#c8e6c9', '200': '#a5d6a7', '300': '#81c784', '400': '#66bb6a', '500': '#4caf50', '600': '#43a047', '700': '#388e3c', '800': '#2e7d32', '900': '#1b5e20', A100: '#b9f6ca', A200: '#69f0ae', A400: '#00e676', A700: '#00c853' },\n grey: { '50': '#fafafa', '100': '#f5f5f5', '200': '#eeeeee', '300': '#e0e0e0', '400': '#bdbdbd', '500': '#9e9e9e', '600': '#757575', '700': '#616161', '800': '#424242', '900': '#212121', A100: '#f5f5f5', A200: '#eeeeee', A400: '#bdbdbd', A700: '#616161' },\n indigo: { '50': '#e8eaf6', '100': '#c5cae9', '200': '#9fa8da', '300': '#7986cb', '400': '#5c6bc0', '500': '#3f51b5', '600': '#3949ab', '700': '#303f9f', '800': '#283593', '900': '#1a237e', A100: '#8c9eff', A200: '#536dfe', A400: '#3d5afe', A700: '#304ffe' },\n lightBlue: { '50': '#e1f5fe', '100': '#b3e5fc', '200': '#81d4fa', '300': '#4fc3f7', '400': '#29b6f6', '500': '#03a9f4', '600': '#039be5', '700': '#0288d1', '800': '#0277bd', '900': '#01579b', A100: '#80d8ff', A200: '#40c4ff', A400: '#00b0ff', A700: '#0091ea' },\n};\n\n// ── General named colors (static, rgba) ───────────────────────────────────────\n\nexport const generalColors = {\n 'yellow-golden': 'rgba(255, 215, 0, 0.6)',\n 'yellow-pale': 'rgba(255, 255, 153, 0.4)',\n 'yellow-amber': 'rgba(255, 191, 0, 0.7)',\n 'yellow-sunshine': 'rgba(255, 239, 0, 0.5)',\n 'yellow-light': 'rgba(255, 255, 0, 0.5)',\n 'yellow-warm': 'rgba(255, 204, 0, 0.8)',\n 'yellow-soft': 'rgba(255, 229, 153, 0.7)',\n 'red-rose': 'rgba(255, 51, 51, 0.5)',\n 'red-crimson': 'rgba(220, 20, 60, 0.6)',\n 'red-light-coral': 'rgba(240, 128, 128, 0.5)',\n 'red-fire-brick': 'rgba(178, 34, 34, 0.8)',\n 'red-bright': 'rgba(255, 0, 0, 0.7)',\n 'red-soft-coral': 'rgba(255, 102, 102, 0.6)',\n 'red-dark': 'rgba(204, 0, 0, 0.8)',\n 'blue-turquoise': 'rgba(64, 224, 208, 0.6)',\n 'blue-dodger': 'rgba(30, 144, 255, 0.5)',\n 'blue-navy': 'rgba(0, 0, 128, 0.8)',\n 'blue-steel': 'rgba(70, 130, 180, 0.7)',\n 'blue-sky': 'rgba(0, 153, 255, 0.5)',\n 'blue-light': 'rgba(51, 204, 255, 0.7)',\n 'blue-deep': 'rgba(0, 51, 204, 0.8)',\n 'green-lime': 'rgba(50, 205, 50, 0.5)',\n 'green-pale': 'rgba(152, 251, 152, 0.4)',\n 'green-forest': 'rgba(34, 139, 34, 0.7)',\n 'green-olive': 'rgba(128, 128, 0, 0.6)',\n 'green-fresh': 'rgba(0, 204, 0, 0.6)',\n 'green-soft-mint': 'rgba(102, 255, 153, 0.7)',\n 'green-dark': 'rgba(0, 153, 76, 0.8)',\n 'orange-tangerine': 'rgba(255, 140, 0, 0.6)',\n 'orange-apricot': 'rgba(251, 206, 177, 0.5)',\n 'orange-burnt': 'rgba(204, 85, 0, 0.7)',\n 'orange-carrot': 'rgba(237, 145, 33, 0.6)',\n 'orange-bright': 'rgba(255, 102, 0, 0.7)',\n 'orange-soft-peach': 'rgba(255, 178, 102, 0.6)',\n 'orange-deep': 'rgba(204, 85, 0, 0.8)',\n} as const;\n","import type { ThemeConfig } from './types';\nimport {\n sharedSemanticLight,\n sharedSemanticDark,\n structylSubTokensLight,\n structylSubTokensDark,\n} from './palette';\n\n// ── Helper: build per-theme primary/secondary sub-tokens ─────────────────────\n\nfunction primarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'primary-light': lightRgb,\n 'primary-dark': darkRgb,\n 'primary-contrast': contrastRgb,\n 'primary-dark-bg': darkBgRgb,\n 'primary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'primary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'primary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'primary-shade-12': `rgba(${darkRgb.split(' ').join(', ')}, 0.12)`,\n 'primary-shade-16': `rgba(${darkRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\nfunction secondarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'secondary-light': lightRgb,\n 'secondary-dark': darkRgb,\n 'secondary-contrast': contrastRgb,\n 'secondary-dark-bg': darkBgRgb,\n 'secondary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'secondary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'secondary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'secondary-shade-12': `rgba(${mainRgb.split(' ').join(', ')}, 0.12)`,\n 'secondary-shade-16': `rgba(${mainRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\n// RGB channel format required: values must be space-separated (e.g. \"15 23 41\"), not comma-separated,\n// because they are interpolated into rgba() as `rgba(${rgb.split(' ').join(', ')}, alpha)`.\nfunction textSurfaceTokens(fgRgb: string, bgRgb: string, paperRgb: string, infoRgb: string, snackbarRgb: string): Record<string, string> {\n return {\n text: fgRgb,\n 'text-secondary': `rgba(${fgRgb.split(' ').join(', ')}, 0.6)`,\n 'text-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.38)`,\n 'text-info': infoRgb,\n 'text-fill': fgRgb,\n 'text-shade-12': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'text-shade-16': `rgba(${fgRgb.split(' ').join(', ')}, 0.16)`,\n surface: bgRgb,\n 'surface-paper': paperRgb,\n divider: `rgba(${fgRgb.split(' ').join(', ')}, 0.23)`,\n 'outlined-border': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'input-line': `rgba(${fgRgb.split(' ').join(', ')}, 0.42)`,\n 'action-active': `rgba(${fgRgb.split(' ').join(', ')}, 0.54)`,\n 'action-hover': `rgba(${fgRgb.split(' ').join(', ')}, 0.05)`,\n 'action-selected': `rgba(${fgRgb.split(' ').join(', ')}, 0.08)`,\n 'action-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.26)`,\n 'action-disabled-bg': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'action-focus': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'snackbar-bg': snackbarRgb,\n 'map-grid': '255 255 255',\n };\n}\n\nfunction tableTokens({ topHeader, header, row, colBorder, border }: {\n topHeader: string; header: string; row: string; colBorder: string; border: string;\n}): Record<string, string> {\n return {\n 'table-top-header': topHeader,\n 'table-header': header,\n 'table-row': row,\n 'table-col-border': colBorder,\n 'table-border': border,\n };\n}\n\n// ── Slate ────────────────────────────────────────────────────────────────────\n\nconst slate: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '222 47% 11%',\n card: '0 0% 100%',\n 'card-fg': '222 47% 11%',\n popover: '0 0% 100%',\n 'popover-fg': '222 47% 11%',\n primary: '222 47% 11%',\n 'primary-fg': '210 40% 98%',\n 'primary-hover': '222 47% 20%',\n 'primary-active': '222 47% 8%',\n secondary: '210 40% 96%',\n 'secondary-fg': '222 47% 11%',\n muted: '210 40% 96%',\n 'muted-fg': '215 16% 47%',\n accent: '210 40% 96%',\n 'accent-fg': '222 47% 11%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '214 32% 91%',\n 'border-strong': '214 24% 80%',\n input: '214 32% 91%',\n ring: '222 47% 11%',\n overlay: '222 47% 11%',\n shadow: '222 47% 11%',\n // New sub-tokens — primary: '222 47% 11%' ≈ RGB(15, 23, 41)\n ...primarySubTokensLight('124 149 208', '7 10 19', '255 255 255', '11 15 26', '15 23 41'),\n // secondary: '210 40% 96%' ≈ RGB(237, 241, 247)\n ...secondarySubTokensLight('245 248 252', '180 196 220', '15 23 41', '200 210 225', '201 212 228'),\n // fg ≈ RGB(15, 23, 41); bg = white; info = sky blue\n ...textSurfaceTokens('15 23 41', '255 255 255', '255 255 255', '14 165 233', '15 23 41'),\n ...tableTokens({ topHeader: '238 242 255', header: '241 245 249', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(214, 219, 228, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '222 47% 6%',\n fg: '210 40% 98%',\n card: '222 47% 8%',\n 'card-fg': '210 40% 98%',\n popover: '222 35% 10%',\n 'popover-fg': '210 40% 98%',\n primary: '210 40% 98%',\n 'primary-fg': '222 47% 11%',\n 'primary-hover': '210 40% 90%',\n 'primary-active': '210 40% 95%',\n secondary: '217 33% 17%',\n 'secondary-fg': '210 40% 98%',\n muted: '217 33% 17%',\n 'muted-fg': '215 20% 65%',\n accent: '217 33% 20%',\n 'accent-fg': '210 40% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '217 33% 20%',\n 'border-strong': '217 25% 30%',\n input: '217 33% 20%',\n ring: '213 27% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '210 40% 98%' ≈ RGB(248, 251, 254)\n ...primarySubTokensLight('210 220 235', '255 255 255', '15 23 41', '25 35 55', '248 251 254'),\n // secondary dark: '217 33% 17%' ≈ RGB(29, 40, 58)\n ...secondarySubTokensLight('22 30 45', '44 60 87', '248 251 254', '35 50 72', '29 40 58'),\n // fg dark ≈ RGB(248, 251, 254)\n ...textSurfaceTokens('248 251 254', '8 11 22', '12 16 30', '56 189 248', '248 251 254'),\n ...tableTokens({ topHeader: '17 25 41', header: '22 31 51', row: '12 16 30', colBorder: '8 11 22', border: 'rgba(51, 65, 86, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '248 251 254',\n },\n};\n\n// ── Zinc ─────────────────────────────────────────────────────────────────────\n\nconst zinc: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '240 6% 10%',\n 'primary-fg': '0 0% 98%',\n 'primary-hover': '240 6% 20%',\n 'primary-active': '240 6% 6%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '240 10% 4%',\n overlay: '240 10% 4%',\n shadow: '240 10% 4%',\n // primary: '240 6% 10%' ≈ RGB(24, 24, 27)\n ...primarySubTokensLight('158 158 164', '10 10 11', '255 255 255', '18 18 22', '24 24 27'),\n // secondary: '240 5% 96%' ≈ RGB(245, 245, 246)\n ...secondarySubTokensLight('248 248 249', '186 186 191', '24 24 27', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '240 240 244', header: '244 244 245', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(228, 228, 231, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '240 10% 6%',\n fg: '0 0% 98%',\n card: '240 10% 8%',\n 'card-fg': '0 0% 98%',\n popover: '240 8% 10%',\n 'popover-fg': '0 0% 98%',\n primary: '0 0% 98%',\n 'primary-fg': '240 6% 10%',\n 'primary-hover': '0 0% 90%',\n 'primary-active': '0 0% 95%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '240 4% 16%',\n 'muted-fg': '240 5% 65%',\n accent: '240 4% 20%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 20%',\n 'border-strong': '240 5% 30%',\n input: '240 4% 20%',\n ring: '240 5% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '0 0% 98%' ≈ RGB(250, 250, 250)\n ...primarySubTokensLight('200 200 202', '255 255 255', '10 10 11', '20 20 24', '250 250 250'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '250 250 250', '44 44 49', '38 38 42'),\n // fg dark ≈ RGB(250, 250, 250)\n ...textSurfaceTokens('250 250 250', '14 14 17', '19 19 22', '56 189 248', '250 250 250'),\n ...tableTokens({ topHeader: '22 22 26', header: '28 28 32', row: '19 19 22', colBorder: '14 14 17', border: 'rgba(63, 63, 70, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '250 250 250',\n },\n};\n\n// ── Rose ─────────────────────────────────────────────────────────────────────\n\nconst rose: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '347 77% 50%',\n overlay: '240 10% 4%',\n shadow: '347 60% 30%',\n // primary: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary: same as zinc secondary\n ...secondarySubTokensLight('248 248 249', '186 186 191', '10 10 11', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '255 241 242', header: '255 245 246', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(244, 227, 229, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '20 14% 5%',\n fg: '0 0% 95%',\n card: '24 10% 8%',\n 'card-fg': '0 0% 95%',\n popover: '0 0% 9%',\n 'popover-fg': '0 0% 95%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '0 0% 15%',\n 'muted-fg': '240 5% 65%',\n accent: '12 7% 15%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 86% 97%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 16%',\n 'border-strong': '240 5% 26%',\n input: '240 4% 20%',\n ring: '347 77% 50%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary rose same in dark: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '242 242 242', '44 44 49', '38 38 42'),\n // fg ≈ RGB(242, 242, 242) ('0 0% 95%')\n ...textSurfaceTokens('242 242 242', '14 12 10', '22 20 17', '56 189 248', '242 242 242'),\n ...tableTokens({ topHeader: '28 20 20', header: '36 28 28', row: '22 20 17', colBorder: '14 12 10', border: 'rgba(70, 55, 55, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '242 242 242',\n },\n};\n\n// ── Structyl ─────────────────────────────────────────────────────────────────────\n// Full MUI-inspired palette with exact colorsLight/colorsDark values\n\nconst structyl: ThemeConfig = {\n light: {\n bg: '0 0% 98%',\n fg: '217 11% 18%',\n card: '0 0% 100%',\n 'card-fg': '217 11% 18%',\n popover: '0 0% 100%',\n 'popover-fg': '217 11% 18%',\n primary: '242 32% 48%',\n 'primary-fg': '0 0% 100%',\n 'primary-hover': '242 32% 55%',\n 'primary-active': '245 67% 24%',\n secondary: '217 100% 57%',\n 'secondary-fg': '0 0% 100%',\n muted: '0 0% 96%',\n 'muted-fg': '0 0% 62%',\n accent: '253 80% 94%',\n 'accent-fg': '253 76% 67%',\n destructive: '340 71% 55%',\n 'destructive-fg': '0 0% 5%',\n success: '123 57% 53%',\n 'success-fg': '0 0% 5%',\n warning: '17 100% 54%',\n 'warning-fg': '38 92% 8%',\n info: '253 76% 67%',\n 'info-fg': '0 0% 5%',\n border: '240 2% 90%',\n 'border-strong': '0 0% 78%',\n input: '240 2% 90%',\n ring: '242 32% 48%',\n overlay: '217 11% 18%',\n shadow: '217 11% 18%',\n ...structylSubTokensLight,\n },\n dark: {\n bg: '217 11% 18%',\n fg: '0 0% 100%',\n card: '216 10% 20%',\n 'card-fg': '0 0% 100%',\n popover: '216 10% 20%',\n 'popover-fg': '0 0% 100%',\n primary: '243 85% 87%',\n 'primary-fg': '245 67% 24%',\n 'primary-hover': '243 85% 80%',\n 'primary-active': '243 85% 91%',\n secondary: '225 87% 84%',\n 'secondary-fg': '215 100% 22%',\n muted: '217 12% 26%',\n 'muted-fg': '207 12% 63%',\n accent: '217 13% 28%',\n 'accent-fg': '243 85% 87%',\n destructive: '348 75% 83%',\n 'destructive-fg': '334 100% 28%',\n success: '109 65% 64%',\n 'success-fg': '127 100% 16%',\n warning: '17 79% 79%',\n 'warning-fg': '18 100% 26%',\n info: '243 85% 87%',\n 'info-fg': '247 58% 44%',\n border: '0 0% 32%',\n 'border-strong': '0 0% 39%',\n input: '217 12% 26%',\n ring: '243 85% 87%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n ...structylSubTokensDark,\n },\n};\n\nexport const defaultThemes: Record<string, ThemeConfig> = { slate, zinc, rose, structyl };\n","'use client';\n\nimport * as React from 'react';\nimport { defaultThemes } from './themes';\nimport type { ResolvedMode, Theme, ThemeConfig, ThemeMode } from './types';\n\nexport interface ThemeContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n resolvedMode: ResolvedMode;\n themes: string[];\n}\n\nconst ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n defaultMode?: ThemeMode;\n storageKey?: string | false;\n enableTransitions?: boolean;\n themes?: Record<string, ThemeConfig>;\n attribute?: string;\n}\n\nexport function ThemeProvider(props: ThemeProviderProps): React.JSX.Element {\n const {\n children,\n defaultTheme = 'structyl',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n enableTransitions = true,\n themes: customThemes,\n attribute = 'data-theme',\n } = props;\n\n const themes = React.useMemo(\n () => ({ ...defaultThemes, ...customThemes }),\n [customThemes],\n );\n\n const [theme, setThemeState] = React.useState<Theme>(defaultTheme);\n const [mode, setModeState] = React.useState<ThemeMode>(defaultMode);\n const [systemMode, setSystemMode] = React.useState<ResolvedMode>('light');\n\n // Hydrate from storage on mount\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as { theme?: Theme; mode?: ThemeMode };\n if (parsed.theme) setThemeState(parsed.theme);\n if (parsed.mode) setModeState(parsed.mode);\n }\n } catch {\n // ignore corrupted storage\n }\n }, [storageKey]);\n\n // Track system preference\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const update = () => setSystemMode(mql.matches ? 'dark' : 'light');\n update();\n mql.addEventListener('change', update);\n return () => mql.removeEventListener('change', update);\n }, []);\n\n const resolvedMode: ResolvedMode = mode === 'system' ? systemMode : mode;\n\n // Apply data-* attributes and inject CSS variables\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n\n if (!enableTransitions) {\n const css = document.createElement('style');\n css.appendChild(\n document.createTextNode(\n '*,*::before,*::after{transition:none!important;animation:none!important}',\n ),\n );\n document.head.appendChild(css);\n // force reflow then remove\n void window.getComputedStyle(document.body);\n requestAnimationFrame(() => document.head.removeChild(css));\n }\n\n root.setAttribute(attribute, theme);\n root.setAttribute('data-mode', resolvedMode);\n root.style.colorScheme = resolvedMode;\n\n // Inject CSS variables from current theme\n const cfg = themes[theme];\n if (cfg) {\n const tokens = cfg[resolvedMode];\n for (const [key, value] of Object.entries(tokens)) {\n root.style.setProperty(`--color-${key}`, value);\n }\n }\n }, [theme, resolvedMode, themes, attribute, enableTransitions]);\n\n // Persist to storage on change\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify({ theme, mode }));\n } catch {\n // storage may be unavailable (Safari private mode, etc.)\n }\n }, [theme, mode, storageKey]);\n\n const value = React.useMemo<ThemeContextValue>(\n () => ({\n theme,\n setTheme: setThemeState,\n mode,\n setMode: setModeState,\n resolvedMode,\n themes: Object.keys(themes),\n }),\n [theme, mode, resolvedMode, themes],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport { ThemeContext };\n","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from './theme-provider';\n\nexport function useTheme() {\n const context = React.useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a <ThemeProvider>');\n }\n return context;\n}\n","import * as React from 'react';\nimport type { ThemeMode } from './types';\nimport { defaultThemes } from './themes';\n\ninterface ThemeScriptProps {\n defaultTheme?: string;\n defaultMode?: ThemeMode;\n storageKey?: string;\n attribute?: string;\n}\n\nfunction tokensToVars(tokens: Record<string, string>): string {\n return Object.entries(tokens)\n .map(([k, v]) => `--color-${k}:${v}`)\n .join(';');\n}\n\n/**\n * Renders a <style> block with the default theme's CSS variables plus an inline\n * script that updates them from localStorage before first paint. Place inside\n * <head> of your root layout to prevent flash of unstyled content.\n */\nexport function ThemeScript({\n defaultTheme = 'structyl',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n attribute = 'data-theme',\n}: ThemeScriptProps): React.JSX.Element {\n const cfg = defaultThemes[defaultTheme as keyof typeof defaultThemes];\n const lightVars = cfg ? tokensToVars(cfg.light as Record<string, string>) : '';\n const darkVars = cfg ? tokensToVars(cfg.dark as Record<string, string>) : '';\n\n // Static CSS covers the default theme before JS runs (SSR + initial paint).\n // [data-mode=\"dark\"] overrides are picked up as soon as the script below sets\n // the attribute on <html>, which happens before the browser paints.\n const staticCss = lightVars\n ? `:root{${lightVars}}:root[data-mode=\"dark\"]{${darkVars}}`\n : '';\n\n const script = `\n(function(){\n try {\n var stored = JSON.parse(localStorage.getItem(${JSON.stringify(storageKey)}) || '{}');\n var theme = stored.theme || ${JSON.stringify(defaultTheme)};\n var mode = stored.mode || ${JSON.stringify(defaultMode)};\n var resolved = mode === 'system'\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n : mode;\n var root = document.documentElement;\n root.setAttribute(${JSON.stringify(attribute)}, theme);\n root.setAttribute('data-mode', resolved);\n root.style.colorScheme = resolved;\n } catch (e) {}\n})();`.trim();\n\n return (\n <>\n {staticCss && (\n <style dangerouslySetInnerHTML={{ __html: staticCss }} suppressHydrationWarning />\n )}\n <script dangerouslySetInnerHTML={{ __html: script }} suppressHydrationWarning />\n </>\n );\n}\n","/**\n * Color accent presets for @structyl/themes.\n *\n * Built-in presets cover 10 common accent colors. Users can extend the list\n * by creating additional `ColorPreset` objects and passing them to\n * `useColorPreset({ extraPresets: [...] })` or calling `applyColorPreset`\n * with any arbitrary hex color.\n */\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\n/** A single accent-color preset. */\nexport interface ColorPreset {\n /** Unique machine-readable identifier. */\n id: string;\n /** Human-readable display name. */\n name: string;\n /** Primary hex color value (e.g. `'#6366f1'`). */\n hex: string;\n}\n\n/* ── Built-in catalogue ─────────────────────────────────────────────────────── */\n\n/**\n * The 10 built-in accent presets shipped with @structyl/themes.\n * Typed `as const` so that `ColorPresetId` is a precise union of literal IDs.\n */\nexport const COLOR_PRESETS = [\n { id: 'structyl', name: 'Structyl', hex: '#5754a3' },\n { id: 'indigo', name: 'Indigo', hex: '#6366f1' },\n { id: 'ocean', name: 'Ocean', hex: '#0284c7' },\n { id: 'rose', name: 'Rose', hex: '#e11d48' },\n { id: 'forest', name: 'Forest', hex: '#16a34a' },\n { id: 'sunset', name: 'Sunset', hex: '#f97316' },\n { id: 'violet', name: 'Violet', hex: '#7c3aed' },\n { id: 'slate', name: 'Slate', hex: '#475569' },\n { id: 'ember', name: 'Ember', hex: '#be123c' },\n { id: 'zinc', name: 'Zinc', hex: '#71717a' },\n] as const satisfies ReadonlyArray<ColorPreset>;\n\n/** Union of all built-in preset IDs (e.g. `'structyl' | 'indigo' | 'ocean' | ...`). */\nexport type ColorPresetId = (typeof COLOR_PRESETS)[number]['id'];\n\n/**\n * Create a custom preset object. Useful for building typed preset lists\n * that will be passed to `useColorPreset({ extraPresets: [...] })`.\n *\n * @example\n * const myPreset = createColorPreset('brand', 'My Brand', '#ff5500');\n */\nexport function createColorPreset(id: string, name: string, hex: string): ColorPreset {\n return { id, name, hex };\n}\n\n/* ── HSL utilities (zero deps) ──────────────────────────────────────────────── */\n\nfunction hexToHslParts(hex: string): { h: number; s: number; l: number } {\n const h = hex.replace('#', '');\n const r = parseInt(h.slice(0, 2), 16) / 255;\n const g = parseInt(h.slice(2, 4), 16) / 255;\n const b = parseInt(h.slice(4, 6), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n let sat = 0;\n const lum = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n sat = lum > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === r) hue = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n else if (max === g) hue = ((b - r) / d + 2) / 6;\n else hue = ((r - g) / d + 4) / 6;\n }\n return { h: Math.round(hue * 360), s: Math.round(sat * 100), l: Math.round(lum * 100) };\n}\n\nfunction hslStr({ h, s, l }: { h: number; s: number; l: number }): string {\n return `${h} ${s}% ${l}%`;\n}\n\nfunction shiftL(p: { h: number; s: number; l: number }, d: number) {\n return { ...p, l: Math.max(2, Math.min(97, p.l + d)) };\n}\n\nfunction relativeLuminance(hex: string): number {\n const h = hex.replace('#', '');\n const lin = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n };\n return (\n 0.2126 * lin(parseInt(h.slice(0, 2), 16)) +\n 0.7152 * lin(parseInt(h.slice(2, 4), 16)) +\n 0.0722 * lin(parseInt(h.slice(4, 6), 16))\n );\n}\n\n/* ── DOM utilities ──────────────────────────────────────────────────────────── */\n\n/** CSS custom properties overridden by `applyColorPreset`. */\nconst PRESET_CSS_VARS = [\n '--color-primary',\n '--color-ring',\n '--color-primary-hover',\n '--color-primary-active',\n '--color-primary-fg',\n] as const;\n\n/**\n * Apply an accent preset to the document root by overriding the five\n * primary-color CSS custom properties. Safe to call on every theme/mode\n * change — the ThemeProvider will reset base vars first, then this re-applies.\n *\n * No-op in SSR environments.\n *\n * @param hex - The hex color string (e.g. `'#6366f1'`).\n */\nexport function applyColorPreset(hex: string): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const p = hexToHslParts(hex);\n const fg = relativeLuminance(hex) > 0.179 ? '222 47% 11%' : '0 0% 100%';\n root.style.setProperty('--color-primary', hslStr(p));\n root.style.setProperty('--color-ring', hslStr(p));\n root.style.setProperty('--color-primary-hover', hslStr(shiftL(p, 6)));\n root.style.setProperty('--color-primary-active', hslStr(shiftL(p, -8)));\n root.style.setProperty('--color-primary-fg', fg);\n}\n\n/**\n * Remove all CSS custom properties applied by `applyColorPreset`,\n * restoring whatever values the active ThemeProvider theme supplies.\n *\n * No-op in SSR environments.\n */\nexport function clearColorPreset(): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n PRESET_CSS_VARS.forEach(k => root.style.removeProperty(k));\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from './use-theme';\nimport {\n COLOR_PRESETS,\n applyColorPreset,\n clearColorPreset,\n type ColorPreset,\n} from './color-presets';\n\nconst DEFAULT_STORAGE_KEY = 'structyl-color-preset';\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface UseColorPresetOptions {\n /**\n * Custom presets to add on top of the 10 built-ins.\n * Built-ins always come first in `presets`.\n *\n * @example\n * const brandPreset = createColorPreset('brand', 'Brand Blue', '#1a6cf0');\n * const { setPreset } = useColorPreset({ extraPresets: [brandPreset] });\n */\n extraPresets?: ColorPreset[];\n\n /**\n * localStorage key used to persist the active preset across page loads.\n * Override if you need multiple independent pickers on the same origin.\n *\n * @default 'structyl-color-preset'\n */\n storageKey?: string;\n\n /**\n * Preset id to activate on first load when nothing is stored yet. Pass e.g.\n * `'structyl'` to make the brand accent the default-selected preset. Once the\n * user picks (or clears) a preset, that stored choice takes over.\n *\n * @default undefined (no preset active — uses the ThemeProvider base theme)\n */\n defaultPresetId?: string;\n}\n\nexport interface UseColorPresetReturn {\n /** All available presets: built-ins first, then any `extraPresets`. */\n presets: ColorPreset[];\n /** ID of the currently active preset, or `null` when using the default theme. */\n activeId: string | null;\n /** Full preset object for the active ID, or `null`. */\n activePreset: ColorPreset | null;\n /**\n * Activate a preset by its `id` and `hex` color.\n * Applies CSS variables immediately and persists to localStorage.\n */\n setPreset: (id: string, hex: string) => void;\n /**\n * Clear the active preset, restoring the ThemeProvider's base theme colors.\n * Also removes the stored value from localStorage.\n */\n clearPreset: () => void;\n}\n\n/* ── Hook ───────────────────────────────────────────────────────────────────── */\n\n/**\n * Manages an accent-color preset on top of the active structyl theme.\n *\n * Must be used inside a `<ThemeProvider>`. Persists the selection to\n * localStorage and re-applies it whenever the base theme or color-mode\n * changes (because ThemeProvider resets `--color-primary` on change).\n *\n * @example\n * function AccentPicker() {\n * const { presets, activeId, setPreset, clearPreset } = useColorPreset();\n * return (\n * <>\n * {presets.map(p => (\n * <button key={p.id} onClick={() => setPreset(p.id, p.hex)}\n * style={{ background: p.hex }}>\n * {p.name}\n * </button>\n * ))}\n * {activeId && <button onClick={clearPreset}>Reset</button>}\n * </>\n * );\n * }\n *\n * @example Adding custom presets\n * const brandPreset = createColorPreset('brand', 'Company Blue', '#1a6cf0');\n * const { presets } = useColorPreset({ extraPresets: [brandPreset] });\n */\nexport function useColorPreset(options: UseColorPresetOptions = {}): UseColorPresetReturn {\n const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY, defaultPresetId } = options;\n\n // Subscribe to the theme context — also enforces that this hook is used\n // inside a <ThemeProvider> (useTheme throws otherwise).\n useTheme();\n\n const allPresets: ColorPreset[] = [...(COLOR_PRESETS as unknown as ColorPreset[]), ...extraPresets];\n\n // Default to `defaultPresetId` (when it's a real preset) on first load, until\n // a stored selection is hydrated from localStorage below.\n const [activeId, setActiveId] = useState<string | null>(\n defaultPresetId && allPresets.some((p) => p.id === defaultPresetId) ? defaultPresetId : null,\n );\n\n // Hex of the active preset, mirrored into a ref so the mount-only\n // MutationObserver below always sees the current selection.\n const activeHex = allPresets.find(p => p.id === activeId)?.hex ?? null;\n const activeHexRef = useRef<string | null>(activeHex);\n activeHexRef.current = activeHex;\n\n // Hydrate from localStorage on mount\n useEffect(() => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored && allPresets.some(p => p.id === stored)) {\n setActiveId(stored);\n }\n } catch {\n // localStorage unavailable (e.g. private browsing with strict settings)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storageKey]);\n\n // Apply when the selection changes (covers localStorage hydration; setPreset\n // also applies directly for instant feedback).\n useEffect(() => {\n if (activeHex) applyColorPreset(activeHex);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeId]);\n\n // ThemeProvider rewrites the base --color-* vars in its OWN effect which,\n // being the parent, runs AFTER this child hook's effects on every theme/mode\n // switch — clobbering the accent override (this is why the preset was \"lost\"\n // after toggling light/dark). Rather than depend on effect ordering, watch the\n // data-theme / data-mode attributes ThemeProvider sets on <html> and re-apply\n // the accent when they change: the MutationObserver callback runs as a\n // microtask after ThemeProvider's synchronous token write, so the accent wins\n // with no flash before paint.\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const observer = new MutationObserver(() => {\n if (activeHexRef.current) applyColorPreset(activeHexRef.current);\n });\n observer.observe(root, { attributes: true, attributeFilter: ['data-theme', 'data-mode'] });\n return () => observer.disconnect();\n }, []);\n\n const setPreset = useCallback((id: string, hex: string) => {\n setActiveId(id);\n applyColorPreset(hex);\n try { localStorage.setItem(storageKey, id); } catch { /* ignore */ }\n }, [storageKey]);\n\n const clearPreset = useCallback(() => {\n setActiveId(null);\n clearColorPreset();\n try { localStorage.removeItem(storageKey); } catch { /* ignore */ }\n }, [storageKey]);\n\n const activePreset = allPresets.find(p => p.id === activeId) ?? null;\n\n return { presets: allPresets, activeId, activePreset, setPreset, clearPreset };\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -374,6 +374,14 @@ interface UseColorPresetOptions {
|
|
|
374
374
|
* @default 'structyl-color-preset'
|
|
375
375
|
*/
|
|
376
376
|
storageKey?: string;
|
|
377
|
+
/**
|
|
378
|
+
* Preset id to activate on first load when nothing is stored yet. Pass e.g.
|
|
379
|
+
* `'structyl'` to make the brand accent the default-selected preset. Once the
|
|
380
|
+
* user picks (or clears) a preset, that stored choice takes over.
|
|
381
|
+
*
|
|
382
|
+
* @default undefined (no preset active — uses the ThemeProvider base theme)
|
|
383
|
+
*/
|
|
384
|
+
defaultPresetId?: string;
|
|
377
385
|
}
|
|
378
386
|
interface UseColorPresetReturn {
|
|
379
387
|
/** All available presets: built-ins first, then any `extraPresets`. */
|
package/dist/index.d.ts
CHANGED
|
@@ -374,6 +374,14 @@ interface UseColorPresetOptions {
|
|
|
374
374
|
* @default 'structyl-color-preset'
|
|
375
375
|
*/
|
|
376
376
|
storageKey?: string;
|
|
377
|
+
/**
|
|
378
|
+
* Preset id to activate on first load when nothing is stored yet. Pass e.g.
|
|
379
|
+
* `'structyl'` to make the brand accent the default-selected preset. Once the
|
|
380
|
+
* user picks (or clears) a preset, that stored choice takes over.
|
|
381
|
+
*
|
|
382
|
+
* @default undefined (no preset active — uses the ThemeProvider base theme)
|
|
383
|
+
*/
|
|
384
|
+
defaultPresetId?: string;
|
|
377
385
|
}
|
|
378
386
|
interface UseColorPresetReturn {
|
|
379
387
|
/** All available presets: built-ins first, then any `extraPresets`. */
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
4
4
|
|
|
5
5
|
// src/theme-provider.tsx
|
|
6
6
|
|
|
@@ -660,7 +660,7 @@ var ThemeContext = React.createContext(void 0);
|
|
|
660
660
|
function ThemeProvider(props) {
|
|
661
661
|
const {
|
|
662
662
|
children,
|
|
663
|
-
defaultTheme = "
|
|
663
|
+
defaultTheme = "structyl",
|
|
664
664
|
defaultMode = "system",
|
|
665
665
|
storageKey = "structyl-theme",
|
|
666
666
|
enableTransitions = true,
|
|
@@ -751,7 +751,7 @@ function tokensToVars(tokens) {
|
|
|
751
751
|
return Object.entries(tokens).map(([k, v]) => `--color-${k}:${v}`).join(";");
|
|
752
752
|
}
|
|
753
753
|
function ThemeScript({
|
|
754
|
-
defaultTheme = "
|
|
754
|
+
defaultTheme = "structyl",
|
|
755
755
|
defaultMode = "system",
|
|
756
756
|
storageKey = "structyl-theme",
|
|
757
757
|
attribute = "data-theme"
|
|
@@ -852,10 +852,15 @@ function clearColorPreset() {
|
|
|
852
852
|
}
|
|
853
853
|
var DEFAULT_STORAGE_KEY = "structyl-color-preset";
|
|
854
854
|
function useColorPreset(options = {}) {
|
|
855
|
-
const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY } = options;
|
|
856
|
-
|
|
857
|
-
const [activeId, setActiveId] = useState(null);
|
|
855
|
+
const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY, defaultPresetId } = options;
|
|
856
|
+
useTheme();
|
|
858
857
|
const allPresets = [...COLOR_PRESETS, ...extraPresets];
|
|
858
|
+
const [activeId, setActiveId] = useState(
|
|
859
|
+
defaultPresetId && allPresets.some((p) => p.id === defaultPresetId) ? defaultPresetId : null
|
|
860
|
+
);
|
|
861
|
+
const activeHex = allPresets.find((p) => p.id === activeId)?.hex ?? null;
|
|
862
|
+
const activeHexRef = useRef(activeHex);
|
|
863
|
+
activeHexRef.current = activeHex;
|
|
859
864
|
useEffect(() => {
|
|
860
865
|
try {
|
|
861
866
|
const stored = localStorage.getItem(storageKey);
|
|
@@ -866,10 +871,17 @@ function useColorPreset(options = {}) {
|
|
|
866
871
|
}
|
|
867
872
|
}, [storageKey]);
|
|
868
873
|
useEffect(() => {
|
|
869
|
-
if (
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
874
|
+
if (activeHex) applyColorPreset(activeHex);
|
|
875
|
+
}, [activeId]);
|
|
876
|
+
useEffect(() => {
|
|
877
|
+
if (typeof document === "undefined") return;
|
|
878
|
+
const root = document.documentElement;
|
|
879
|
+
const observer = new MutationObserver(() => {
|
|
880
|
+
if (activeHexRef.current) applyColorPreset(activeHexRef.current);
|
|
881
|
+
});
|
|
882
|
+
observer.observe(root, { attributes: true, attributeFilter: ["data-theme", "data-mode"] });
|
|
883
|
+
return () => observer.disconnect();
|
|
884
|
+
}, []);
|
|
873
885
|
const setPreset = useCallback((id, hex) => {
|
|
874
886
|
setActiveId(id);
|
|
875
887
|
applyColorPreset(hex);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/palette.ts","../src/themes.ts","../src/theme-provider.tsx","../src/use-theme.ts","../src/theme-script.tsx","../src/color-presets.ts","../src/use-color-preset.ts"],"names":["value","React2","React3","useState","useEffect"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ThemeTokens } from './types';\nimport type { StaticPalette } from './palette.types';\n\n// ── Shared semantic sub-tokens ────────────────────────────────────────────────\n// error/warning/info/success are semantic colors that don't change between\n// UI themes (slate/zinc/rose/structyl). Only light/dark mode changes their values.\n\nexport const sharedSemanticLight: Partial<ThemeTokens> = {\n // Error\n 'error-light': '249 218 223',\n 'error-dark': '131 24 63',\n 'error-contrast': '255 255 255',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(167, 56, 95, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.1)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(60, 47, 58, 0.9)',\n 'error-alert-content': 'rgba(114, 52, 76, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '249 220 210',\n 'warning-dark': '122 45 16',\n 'warning-contrast': '255 255 255',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(191, 75, 30, 0.9)',\n 'warning-state-outlined': 'rgba(255, 87, 20, 0.1)',\n 'warning-state-resting': 'rgba(255, 87, 20, 0.5)',\n 'warning-alert-bg': 'rgba(85, 54, 46, 0.9)',\n 'warning-alert-content': 'rgba(127, 62, 39, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '227 223 252',\n 'info-dark': '47 32 159',\n 'info-contrast': '255 255 255',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(95, 88, 179, 0.9)',\n 'info-state-outlined': 'rgba(117, 106, 234, 0.1)',\n 'info-state-resting': 'rgba(117, 106, 234, 0.5)',\n 'info-alert-bg': 'rgba(49, 52, 70, 0.9)',\n 'info-alert-content': 'rgba(72, 70, 125, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '153 252 128',\n 'success-dark': '33 82 25',\n 'success-contrast': '255 255 255',\n 'success-dark-bg': '33 82 25',\n 'success-state-contained': 'rgba(56, 159, 63, 0.9)',\n 'success-state-outlined': 'rgba(62, 208, 68, 0.1)',\n 'success-state-resting': 'rgba(62, 208, 68, 0.5)',\n 'success-alert-bg': 'rgba(44, 62, 54, 0.9)',\n 'success-alert-content': 'rgba(50, 111, 58, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\nexport const sharedSemanticDark: Partial<ThemeTokens> = {\n // Error\n 'error-light': '166 44 85',\n 'error-dark': '249 218 223',\n 'error-contrast': '143 0 63',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(184, 140, 151, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.05)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(253, 240, 243, 1)',\n 'error-alert-content': 'rgba(251, 225, 230, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '159 61 25',\n 'warning-dark': '249 220 210',\n 'warning-contrast': '132 38 0',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(184, 143, 128, 0.9)',\n 'warning-state-outlined': 'rgba(244, 184, 161, 0.2)',\n 'warning-state-resting': 'rgba(244, 184, 161, 0.6)',\n 'warning-alert-bg': 'rgba(253, 241, 236, 1)',\n 'warning-alert-content': 'rgba(251, 227, 217, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '85 74 195',\n 'info-dark': '226 223 252',\n 'info-contrast': '63 47 177',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(150, 148, 191, 1)',\n 'info-state-outlined': 'rgba(196, 192, 250, 0.2)',\n 'info-state-resting': 'rgba(196, 192, 250, 0.6)',\n 'info-alert-bg': 'rgba(243, 242, 254, 1)',\n 'info-alert-content': 'rgba(231, 230, 253, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '46 108 36',\n 'success-dark': '153 252 128',\n 'success-contrast': '0 83 12',\n 'success-dark-bg': '46 108 36',\n 'success-state-contained': 'rgba(100, 170, 88, 0.9)',\n 'success-state-outlined': 'rgba(125, 223, 103, 0.2)',\n 'success-state-resting': 'rgba(125, 223, 103, 0.6)',\n 'success-alert-bg': 'rgba(229, 249, 225, 1)',\n 'success-alert-content': 'rgba(203, 242, 194, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\n// ── Structyl theme token values ───────────────────────────────────────────────────\n// Light mode values derived from MUI colorsLight palette\n\nexport const structylSubTokensLight: Partial<ThemeTokens> = {\n // Primary (#5754A3)\n 'primary-light': '195 192 250',\n 'primary-dark': '27 20 100',\n 'primary-contrast': '255 255 255',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(87, 84, 163, 0.1)',\n 'primary-state-resting': 'rgba(87, 84, 163, 0.5)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#2578FF)\n 'secondary-light': '219 226 252',\n 'secondary-dark': '25 65 149',\n 'secondary-contrast': '255 255 255',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(37, 120, 255, 0.1)',\n 'secondary-state-resting': 'rgba(37, 120, 255, 0.5)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '42 46 52',\n 'text-secondary': 'rgba(42, 46, 52, 0.6)',\n 'text-disabled': 'rgba(42, 46, 52, 0.38)',\n 'text-info': '117 106 234',\n 'text-fill': '27 20 100',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '250 250 250',\n 'surface-paper': '255 255 255',\n // Divider / borders\n divider: 'rgba(42, 46, 52, 0.23)',\n 'outlined-border': 'rgba(42, 46, 52, 0.12)',\n 'input-line': 'rgba(42, 46, 52, 0.42)',\n // Action\n 'action-active': 'rgba(42, 46, 52, 0.54)',\n 'action-hover': 'rgba(37, 120, 255, 0.05)',\n 'action-selected': 'rgba(42, 46, 52, 0.08)',\n 'action-disabled': 'rgba(42, 46, 52, 0.26)',\n 'action-disabled-bg': 'rgba(42, 46, 52, 0.12)',\n 'action-focus': 'rgba(42, 46, 52, 0.12)',\n // Misc\n 'snackbar-bg': '42 46 52',\n 'map-grid': '255 255 255',\n // Table\n 'table-top-header': '238 245 255',\n 'table-header': '238 239 239',\n 'table-row': '255 255 255',\n 'table-col-border': '250 250 250',\n 'table-border': 'rgba(229, 229, 230, 1)',\n ...sharedSemanticLight,\n};\n\n// Dark mode values derived from MUI colorsDark palette\n\nexport const structylSubTokensDark: Partial<ThemeTokens> = {\n // Primary (#C3C0FA in dark)\n 'primary-light': '75 72 150',\n 'primary-dark': '219 226 252',\n 'primary-contrast': '27 20 100',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(195, 192, 250, 0.2)',\n 'primary-state-resting': 'rgba(195, 192, 250, 0.6)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#B4C5FA in dark)\n 'secondary-light': '36 87 195',\n 'secondary-dark': '219 226 252',\n 'secondary-contrast': '0 45 110',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(180, 197, 250, 0.2)',\n 'secondary-state-resting': 'rgba(180, 197, 250, 0.6)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '255 255 255',\n 'text-secondary': 'rgba(255, 255, 255, 0.7)',\n 'text-disabled': 'rgba(255, 255, 255, 0.5)',\n 'text-info': '117 106 234',\n 'text-fill': '255 255 255',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '42 46 52',\n 'surface-paper': '46 50 56',\n // Divider / borders\n divider: 'rgba(255, 255, 255, 0.23)',\n 'outlined-border': 'rgba(255, 255, 255, 0.12)',\n 'input-line': 'rgba(255, 255, 255, 0.42)',\n // Action\n 'action-active': 'rgba(255, 255, 255, 0.54)',\n 'action-hover': 'rgba(180, 197, 250, 0.05)',\n 'action-selected': 'rgba(255, 255, 255, 0.08)',\n 'action-disabled': 'rgba(255, 255, 255, 0.26)',\n 'action-disabled-bg': 'rgba(255, 255, 255, 0.12)',\n 'action-focus': 'rgba(255, 255, 255, 0.12)',\n // Misc\n 'snackbar-bg': '255 255 255',\n 'map-grid': '37 120 255',\n // Table\n 'table-top-header': '50 52 65',\n 'table-header': '57 60 66',\n 'table-row': '46 50 56',\n 'table-col-border': '42 46 52',\n 'table-border': 'rgba(81, 81, 81, 1)',\n ...sharedSemanticDark,\n};\n\n// ── Static material palette scales ────────────────────────────────────────────\n// These are baked into the Tailwind preset directly (not CSS variables).\n\nexport const staticPalette: StaticPalette = {\n yellow: { '50': '#fffde7', '100': '#fff9c4', '200': '#fff59d', '300': '#fff176', '400': '#ffee58', '500': '#ffeb3b', '600': '#fdd835', '700': '#fbc02d', '800': '#f9a825', '900': '#f57f17', A100: '#ffff8d', A200: '#ffff00', A400: '#ffea00', A700: '#ffd600' },\n amber: { '50': '#fff8e1', '100': '#ffecb3', '200': '#ffe082', '300': '#ffd54f', '400': '#ffca28', '500': '#ffc107', '600': '#ffb300', '700': '#ffa000', '800': '#ff8f00', '900': '#ff6f00', A100: '#ffe57f', A200: '#ffd740', A400: '#ffc400', A700: '#ffab00' },\n blue: { '50': '#e3f2fd', '100': '#bbdefb', '200': '#90caf9', '300': '#64b5f6', '400': '#42a5f5', '500': '#2196f3', '600': '#1e88e5', '700': '#1976d2', '800': '#1565c0', '900': '#0d47a1', A100: '#82b1ff', A200: '#448aff', A400: '#2979ff', A700: '#2962ff' },\n blueGrey: { '50': '#eceff1', '100': '#cfd8dc', '200': '#b0bec5', '300': '#90a4ae', '400': '#78909c', '500': '#607d8b', '600': '#546e7a', '700': '#455a64', '800': '#37474f', '900': '#263238', A100: '#cfd8dc', A200: '#b0bec5', A400: '#78909c', A700: '#455a64' },\n brown: { '50': '#efebe9', '100': '#d7ccc8', '200': '#bcaaa4', '300': '#a1887f', '400': '#8d6e63', '500': '#795548', '600': '#6d4c41', '700': '#5d4037', '800': '#4e342e', '900': '#3e2723', A100: '#d7ccc8', A200: '#bcaaa4', A400: '#8d6e63', A700: '#5d4037' },\n teal: { '50': '#e0f2f1', '100': '#b2dfdb', '200': '#80cbc4', '300': '#4db6ac', '400': '#26a69a', '500': '#009688', '600': '#00897b', '700': '#00796b', '800': '#00695c', '900': '#004d40', A100: '#a7ffeb', A200: '#64ffda', A400: '#1de9b6', A700: '#00bfa5' },\n red: { '50': '#ffebee', '100': '#ffcdd2', '200': '#ef9a9a', '300': '#e57373', '400': '#ef5350', '500': '#f44336', '600': '#e53935', '700': '#d32f2f', '800': '#c62828', '900': '#b71c1c', A100: '#ff8a80', A200: '#ff5252', A400: '#ff1744', A700: '#d50000' },\n purple: { '50': '#f3e5f5', '100': '#e1bee7', '200': '#ce93d8', '300': '#ba68c8', '400': '#ab47bc', '500': '#9c27b0', '600': '#8e24aa', '700': '#7b1fa2', '800': '#6a1b9a', '900': '#4a148c', A100: '#ea80fc', A200: '#e040fb', A400: '#d500f9', A700: '#aa00ff' },\n pink: { '50': '#fce4ec', '100': '#f8bbd0', '200': '#f48fb1', '300': '#f06292', '400': '#ec407a', '500': '#e91e63', '600': '#d81b60', '700': '#c2185b', '800': '#ad1457', '900': '#880e4f', A100: '#ff80ab', A200: '#ff4081', A400: '#f50057', A700: '#c51162' },\n orange: { '50': '#fff3e0', '100': '#ffe0b2', '200': '#ffcc80', '300': '#ffb74d', '400': '#ffa726', '500': '#ff9800', '600': '#fb8c00', '700': '#f57c00', '800': '#ef6c00', '900': '#e65100', A100: '#ffd180', A200: '#ffab40', A400: '#ff9100', A700: '#ff6d00' },\n lime: { '50': '#f9fbe7', '100': '#f0f4c3', '200': '#e6ee9c', '300': '#dce775', '400': '#d4e157', '500': '#cddc39', '600': '#c0ca33', '700': '#afb42b', '800': '#9e9d24', '900': '#827717', A100: '#f4ff81', A200: '#eeff41', A400: '#c6ff00', A700: '#aeea00' },\n lightGreen: { '50': '#f1f8e9', '100': '#dcedc8', '200': '#c5e1a5', '300': '#aed581', '400': '#9ccc65', '500': '#8bc34a', '600': '#7cb342', '700': '#689f38', '800': '#558b2f', '900': '#33691e', A100: '#ccff90', A200: '#b2ff59', A400: '#76ff03', A700: '#64dd17' },\n cyan: { '50': '#e0f7fa', '100': '#b2ebf2', '200': '#80deea', '300': '#4dd0e1', '400': '#26c6da', '500': '#00bcd4', '600': '#00acc1', '700': '#0097a7', '800': '#00838f', '900': '#006064', A100: '#84ffff', A200: '#18ffff', A400: '#00e5ff', A700: '#00b8d4' },\n deepOrange: { '50': '#fbe9e7', '100': '#ffccbc', '200': '#ffab91', '300': '#ff8a65', '400': '#ff7043', '500': '#ff5722', '600': '#f4511e', '700': '#e64a19', '800': '#d84315', '900': '#bf360c', A100: '#ff9e80', A200: '#ff6e40', A400: '#ff3d00', A700: '#dd2c00' },\n deepPurple: { '50': '#ede7f6', '100': '#d1c4e9', '200': '#b39ddb', '300': '#9575cd', '400': '#7e57c2', '500': '#673ab7', '600': '#5e35b1', '700': '#512da8', '800': '#4527a0', '900': '#311b92', A100: '#b388ff', A200: '#7c4dff', A400: '#651fff', A700: '#6200ea' },\n green: { '50': '#e8f5e9', '100': '#c8e6c9', '200': '#a5d6a7', '300': '#81c784', '400': '#66bb6a', '500': '#4caf50', '600': '#43a047', '700': '#388e3c', '800': '#2e7d32', '900': '#1b5e20', A100: '#b9f6ca', A200: '#69f0ae', A400: '#00e676', A700: '#00c853' },\n grey: { '50': '#fafafa', '100': '#f5f5f5', '200': '#eeeeee', '300': '#e0e0e0', '400': '#bdbdbd', '500': '#9e9e9e', '600': '#757575', '700': '#616161', '800': '#424242', '900': '#212121', A100: '#f5f5f5', A200: '#eeeeee', A400: '#bdbdbd', A700: '#616161' },\n indigo: { '50': '#e8eaf6', '100': '#c5cae9', '200': '#9fa8da', '300': '#7986cb', '400': '#5c6bc0', '500': '#3f51b5', '600': '#3949ab', '700': '#303f9f', '800': '#283593', '900': '#1a237e', A100: '#8c9eff', A200: '#536dfe', A400: '#3d5afe', A700: '#304ffe' },\n lightBlue: { '50': '#e1f5fe', '100': '#b3e5fc', '200': '#81d4fa', '300': '#4fc3f7', '400': '#29b6f6', '500': '#03a9f4', '600': '#039be5', '700': '#0288d1', '800': '#0277bd', '900': '#01579b', A100: '#80d8ff', A200: '#40c4ff', A400: '#00b0ff', A700: '#0091ea' },\n};\n\n// ── General named colors (static, rgba) ───────────────────────────────────────\n\nexport const generalColors = {\n 'yellow-golden': 'rgba(255, 215, 0, 0.6)',\n 'yellow-pale': 'rgba(255, 255, 153, 0.4)',\n 'yellow-amber': 'rgba(255, 191, 0, 0.7)',\n 'yellow-sunshine': 'rgba(255, 239, 0, 0.5)',\n 'yellow-light': 'rgba(255, 255, 0, 0.5)',\n 'yellow-warm': 'rgba(255, 204, 0, 0.8)',\n 'yellow-soft': 'rgba(255, 229, 153, 0.7)',\n 'red-rose': 'rgba(255, 51, 51, 0.5)',\n 'red-crimson': 'rgba(220, 20, 60, 0.6)',\n 'red-light-coral': 'rgba(240, 128, 128, 0.5)',\n 'red-fire-brick': 'rgba(178, 34, 34, 0.8)',\n 'red-bright': 'rgba(255, 0, 0, 0.7)',\n 'red-soft-coral': 'rgba(255, 102, 102, 0.6)',\n 'red-dark': 'rgba(204, 0, 0, 0.8)',\n 'blue-turquoise': 'rgba(64, 224, 208, 0.6)',\n 'blue-dodger': 'rgba(30, 144, 255, 0.5)',\n 'blue-navy': 'rgba(0, 0, 128, 0.8)',\n 'blue-steel': 'rgba(70, 130, 180, 0.7)',\n 'blue-sky': 'rgba(0, 153, 255, 0.5)',\n 'blue-light': 'rgba(51, 204, 255, 0.7)',\n 'blue-deep': 'rgba(0, 51, 204, 0.8)',\n 'green-lime': 'rgba(50, 205, 50, 0.5)',\n 'green-pale': 'rgba(152, 251, 152, 0.4)',\n 'green-forest': 'rgba(34, 139, 34, 0.7)',\n 'green-olive': 'rgba(128, 128, 0, 0.6)',\n 'green-fresh': 'rgba(0, 204, 0, 0.6)',\n 'green-soft-mint': 'rgba(102, 255, 153, 0.7)',\n 'green-dark': 'rgba(0, 153, 76, 0.8)',\n 'orange-tangerine': 'rgba(255, 140, 0, 0.6)',\n 'orange-apricot': 'rgba(251, 206, 177, 0.5)',\n 'orange-burnt': 'rgba(204, 85, 0, 0.7)',\n 'orange-carrot': 'rgba(237, 145, 33, 0.6)',\n 'orange-bright': 'rgba(255, 102, 0, 0.7)',\n 'orange-soft-peach': 'rgba(255, 178, 102, 0.6)',\n 'orange-deep': 'rgba(204, 85, 0, 0.8)',\n} as const;\n","import type { ThemeConfig } from './types';\nimport {\n sharedSemanticLight,\n sharedSemanticDark,\n structylSubTokensLight,\n structylSubTokensDark,\n} from './palette';\n\n// ── Helper: build per-theme primary/secondary sub-tokens ─────────────────────\n\nfunction primarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'primary-light': lightRgb,\n 'primary-dark': darkRgb,\n 'primary-contrast': contrastRgb,\n 'primary-dark-bg': darkBgRgb,\n 'primary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'primary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'primary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'primary-shade-12': `rgba(${darkRgb.split(' ').join(', ')}, 0.12)`,\n 'primary-shade-16': `rgba(${darkRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\nfunction secondarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'secondary-light': lightRgb,\n 'secondary-dark': darkRgb,\n 'secondary-contrast': contrastRgb,\n 'secondary-dark-bg': darkBgRgb,\n 'secondary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'secondary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'secondary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'secondary-shade-12': `rgba(${mainRgb.split(' ').join(', ')}, 0.12)`,\n 'secondary-shade-16': `rgba(${mainRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\n// RGB channel format required: values must be space-separated (e.g. \"15 23 41\"), not comma-separated,\n// because they are interpolated into rgba() as `rgba(${rgb.split(' ').join(', ')}, alpha)`.\nfunction textSurfaceTokens(fgRgb: string, bgRgb: string, paperRgb: string, infoRgb: string, snackbarRgb: string): Record<string, string> {\n return {\n text: fgRgb,\n 'text-secondary': `rgba(${fgRgb.split(' ').join(', ')}, 0.6)`,\n 'text-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.38)`,\n 'text-info': infoRgb,\n 'text-fill': fgRgb,\n 'text-shade-12': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'text-shade-16': `rgba(${fgRgb.split(' ').join(', ')}, 0.16)`,\n surface: bgRgb,\n 'surface-paper': paperRgb,\n divider: `rgba(${fgRgb.split(' ').join(', ')}, 0.23)`,\n 'outlined-border': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'input-line': `rgba(${fgRgb.split(' ').join(', ')}, 0.42)`,\n 'action-active': `rgba(${fgRgb.split(' ').join(', ')}, 0.54)`,\n 'action-hover': `rgba(${fgRgb.split(' ').join(', ')}, 0.05)`,\n 'action-selected': `rgba(${fgRgb.split(' ').join(', ')}, 0.08)`,\n 'action-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.26)`,\n 'action-disabled-bg': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'action-focus': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'snackbar-bg': snackbarRgb,\n 'map-grid': '255 255 255',\n };\n}\n\nfunction tableTokens({ topHeader, header, row, colBorder, border }: {\n topHeader: string; header: string; row: string; colBorder: string; border: string;\n}): Record<string, string> {\n return {\n 'table-top-header': topHeader,\n 'table-header': header,\n 'table-row': row,\n 'table-col-border': colBorder,\n 'table-border': border,\n };\n}\n\n// ── Slate ────────────────────────────────────────────────────────────────────\n\nconst slate: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '222 47% 11%',\n card: '0 0% 100%',\n 'card-fg': '222 47% 11%',\n popover: '0 0% 100%',\n 'popover-fg': '222 47% 11%',\n primary: '222 47% 11%',\n 'primary-fg': '210 40% 98%',\n 'primary-hover': '222 47% 20%',\n 'primary-active': '222 47% 8%',\n secondary: '210 40% 96%',\n 'secondary-fg': '222 47% 11%',\n muted: '210 40% 96%',\n 'muted-fg': '215 16% 47%',\n accent: '210 40% 96%',\n 'accent-fg': '222 47% 11%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '214 32% 91%',\n 'border-strong': '214 24% 80%',\n input: '214 32% 91%',\n ring: '222 47% 11%',\n overlay: '222 47% 11%',\n shadow: '222 47% 11%',\n // New sub-tokens — primary: '222 47% 11%' ≈ RGB(15, 23, 41)\n ...primarySubTokensLight('124 149 208', '7 10 19', '255 255 255', '11 15 26', '15 23 41'),\n // secondary: '210 40% 96%' ≈ RGB(237, 241, 247)\n ...secondarySubTokensLight('245 248 252', '180 196 220', '15 23 41', '200 210 225', '201 212 228'),\n // fg ≈ RGB(15, 23, 41); bg = white; info = sky blue\n ...textSurfaceTokens('15 23 41', '255 255 255', '255 255 255', '14 165 233', '15 23 41'),\n ...tableTokens({ topHeader: '238 242 255', header: '241 245 249', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(214, 219, 228, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '222 47% 6%',\n fg: '210 40% 98%',\n card: '222 47% 8%',\n 'card-fg': '210 40% 98%',\n popover: '222 35% 10%',\n 'popover-fg': '210 40% 98%',\n primary: '210 40% 98%',\n 'primary-fg': '222 47% 11%',\n 'primary-hover': '210 40% 90%',\n 'primary-active': '210 40% 95%',\n secondary: '217 33% 17%',\n 'secondary-fg': '210 40% 98%',\n muted: '217 33% 17%',\n 'muted-fg': '215 20% 65%',\n accent: '217 33% 20%',\n 'accent-fg': '210 40% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '217 33% 20%',\n 'border-strong': '217 25% 30%',\n input: '217 33% 20%',\n ring: '213 27% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '210 40% 98%' ≈ RGB(248, 251, 254)\n ...primarySubTokensLight('210 220 235', '255 255 255', '15 23 41', '25 35 55', '248 251 254'),\n // secondary dark: '217 33% 17%' ≈ RGB(29, 40, 58)\n ...secondarySubTokensLight('22 30 45', '44 60 87', '248 251 254', '35 50 72', '29 40 58'),\n // fg dark ≈ RGB(248, 251, 254)\n ...textSurfaceTokens('248 251 254', '8 11 22', '12 16 30', '56 189 248', '248 251 254'),\n ...tableTokens({ topHeader: '17 25 41', header: '22 31 51', row: '12 16 30', colBorder: '8 11 22', border: 'rgba(51, 65, 86, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '248 251 254',\n },\n};\n\n// ── Zinc ─────────────────────────────────────────────────────────────────────\n\nconst zinc: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '240 6% 10%',\n 'primary-fg': '0 0% 98%',\n 'primary-hover': '240 6% 20%',\n 'primary-active': '240 6% 6%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '240 10% 4%',\n overlay: '240 10% 4%',\n shadow: '240 10% 4%',\n // primary: '240 6% 10%' ≈ RGB(24, 24, 27)\n ...primarySubTokensLight('158 158 164', '10 10 11', '255 255 255', '18 18 22', '24 24 27'),\n // secondary: '240 5% 96%' ≈ RGB(245, 245, 246)\n ...secondarySubTokensLight('248 248 249', '186 186 191', '24 24 27', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '240 240 244', header: '244 244 245', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(228, 228, 231, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '240 10% 6%',\n fg: '0 0% 98%',\n card: '240 10% 8%',\n 'card-fg': '0 0% 98%',\n popover: '240 8% 10%',\n 'popover-fg': '0 0% 98%',\n primary: '0 0% 98%',\n 'primary-fg': '240 6% 10%',\n 'primary-hover': '0 0% 90%',\n 'primary-active': '0 0% 95%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '240 4% 16%',\n 'muted-fg': '240 5% 65%',\n accent: '240 4% 20%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 20%',\n 'border-strong': '240 5% 30%',\n input: '240 4% 20%',\n ring: '240 5% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '0 0% 98%' ≈ RGB(250, 250, 250)\n ...primarySubTokensLight('200 200 202', '255 255 255', '10 10 11', '20 20 24', '250 250 250'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '250 250 250', '44 44 49', '38 38 42'),\n // fg dark ≈ RGB(250, 250, 250)\n ...textSurfaceTokens('250 250 250', '14 14 17', '19 19 22', '56 189 248', '250 250 250'),\n ...tableTokens({ topHeader: '22 22 26', header: '28 28 32', row: '19 19 22', colBorder: '14 14 17', border: 'rgba(63, 63, 70, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '250 250 250',\n },\n};\n\n// ── Rose ─────────────────────────────────────────────────────────────────────\n\nconst rose: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '347 77% 50%',\n overlay: '240 10% 4%',\n shadow: '347 60% 30%',\n // primary: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary: same as zinc secondary\n ...secondarySubTokensLight('248 248 249', '186 186 191', '10 10 11', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '255 241 242', header: '255 245 246', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(244, 227, 229, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '20 14% 5%',\n fg: '0 0% 95%',\n card: '24 10% 8%',\n 'card-fg': '0 0% 95%',\n popover: '0 0% 9%',\n 'popover-fg': '0 0% 95%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '0 0% 15%',\n 'muted-fg': '240 5% 65%',\n accent: '12 7% 15%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 86% 97%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 16%',\n 'border-strong': '240 5% 26%',\n input: '240 4% 20%',\n ring: '347 77% 50%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary rose same in dark: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '242 242 242', '44 44 49', '38 38 42'),\n // fg ≈ RGB(242, 242, 242) ('0 0% 95%')\n ...textSurfaceTokens('242 242 242', '14 12 10', '22 20 17', '56 189 248', '242 242 242'),\n ...tableTokens({ topHeader: '28 20 20', header: '36 28 28', row: '22 20 17', colBorder: '14 12 10', border: 'rgba(70, 55, 55, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '242 242 242',\n },\n};\n\n// ── Structyl ─────────────────────────────────────────────────────────────────────\n// Full MUI-inspired palette with exact colorsLight/colorsDark values\n\nconst structyl: ThemeConfig = {\n light: {\n bg: '0 0% 98%',\n fg: '217 11% 18%',\n card: '0 0% 100%',\n 'card-fg': '217 11% 18%',\n popover: '0 0% 100%',\n 'popover-fg': '217 11% 18%',\n primary: '242 32% 48%',\n 'primary-fg': '0 0% 100%',\n 'primary-hover': '242 32% 55%',\n 'primary-active': '245 67% 24%',\n secondary: '217 100% 57%',\n 'secondary-fg': '0 0% 100%',\n muted: '0 0% 96%',\n 'muted-fg': '0 0% 62%',\n accent: '253 80% 94%',\n 'accent-fg': '253 76% 67%',\n destructive: '340 71% 55%',\n 'destructive-fg': '0 0% 5%',\n success: '123 57% 53%',\n 'success-fg': '0 0% 5%',\n warning: '17 100% 54%',\n 'warning-fg': '38 92% 8%',\n info: '253 76% 67%',\n 'info-fg': '0 0% 5%',\n border: '240 2% 90%',\n 'border-strong': '0 0% 78%',\n input: '240 2% 90%',\n ring: '242 32% 48%',\n overlay: '217 11% 18%',\n shadow: '217 11% 18%',\n ...structylSubTokensLight,\n },\n dark: {\n bg: '217 11% 18%',\n fg: '0 0% 100%',\n card: '216 10% 20%',\n 'card-fg': '0 0% 100%',\n popover: '216 10% 20%',\n 'popover-fg': '0 0% 100%',\n primary: '243 85% 87%',\n 'primary-fg': '245 67% 24%',\n 'primary-hover': '243 85% 80%',\n 'primary-active': '243 85% 91%',\n secondary: '225 87% 84%',\n 'secondary-fg': '215 100% 22%',\n muted: '217 12% 26%',\n 'muted-fg': '207 12% 63%',\n accent: '217 13% 28%',\n 'accent-fg': '243 85% 87%',\n destructive: '348 75% 83%',\n 'destructive-fg': '334 100% 28%',\n success: '109 65% 64%',\n 'success-fg': '127 100% 16%',\n warning: '17 79% 79%',\n 'warning-fg': '18 100% 26%',\n info: '243 85% 87%',\n 'info-fg': '247 58% 44%',\n border: '0 0% 32%',\n 'border-strong': '0 0% 39%',\n input: '217 12% 26%',\n ring: '243 85% 87%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n ...structylSubTokensDark,\n },\n};\n\nexport const defaultThemes: Record<string, ThemeConfig> = { slate, zinc, rose, structyl };\n","'use client';\n\nimport * as React from 'react';\nimport { defaultThemes } from './themes';\nimport type { ResolvedMode, Theme, ThemeConfig, ThemeMode } from './types';\n\nexport interface ThemeContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n resolvedMode: ResolvedMode;\n themes: string[];\n}\n\nconst ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n defaultMode?: ThemeMode;\n storageKey?: string | false;\n enableTransitions?: boolean;\n themes?: Record<string, ThemeConfig>;\n attribute?: string;\n}\n\nexport function ThemeProvider(props: ThemeProviderProps): React.JSX.Element {\n const {\n children,\n defaultTheme = 'slate',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n enableTransitions = true,\n themes: customThemes,\n attribute = 'data-theme',\n } = props;\n\n const themes = React.useMemo(\n () => ({ ...defaultThemes, ...customThemes }),\n [customThemes],\n );\n\n const [theme, setThemeState] = React.useState<Theme>(defaultTheme);\n const [mode, setModeState] = React.useState<ThemeMode>(defaultMode);\n const [systemMode, setSystemMode] = React.useState<ResolvedMode>('light');\n\n // Hydrate from storage on mount\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as { theme?: Theme; mode?: ThemeMode };\n if (parsed.theme) setThemeState(parsed.theme);\n if (parsed.mode) setModeState(parsed.mode);\n }\n } catch {\n // ignore corrupted storage\n }\n }, [storageKey]);\n\n // Track system preference\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const update = () => setSystemMode(mql.matches ? 'dark' : 'light');\n update();\n mql.addEventListener('change', update);\n return () => mql.removeEventListener('change', update);\n }, []);\n\n const resolvedMode: ResolvedMode = mode === 'system' ? systemMode : mode;\n\n // Apply data-* attributes and inject CSS variables\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n\n if (!enableTransitions) {\n const css = document.createElement('style');\n css.appendChild(\n document.createTextNode(\n '*,*::before,*::after{transition:none!important;animation:none!important}',\n ),\n );\n document.head.appendChild(css);\n // force reflow then remove\n void window.getComputedStyle(document.body);\n requestAnimationFrame(() => document.head.removeChild(css));\n }\n\n root.setAttribute(attribute, theme);\n root.setAttribute('data-mode', resolvedMode);\n root.style.colorScheme = resolvedMode;\n\n // Inject CSS variables from current theme\n const cfg = themes[theme];\n if (cfg) {\n const tokens = cfg[resolvedMode];\n for (const [key, value] of Object.entries(tokens)) {\n root.style.setProperty(`--color-${key}`, value);\n }\n }\n }, [theme, resolvedMode, themes, attribute, enableTransitions]);\n\n // Persist to storage on change\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify({ theme, mode }));\n } catch {\n // storage may be unavailable (Safari private mode, etc.)\n }\n }, [theme, mode, storageKey]);\n\n const value = React.useMemo<ThemeContextValue>(\n () => ({\n theme,\n setTheme: setThemeState,\n mode,\n setMode: setModeState,\n resolvedMode,\n themes: Object.keys(themes),\n }),\n [theme, mode, resolvedMode, themes],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport { ThemeContext };\n","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from './theme-provider';\n\nexport function useTheme() {\n const context = React.useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a <ThemeProvider>');\n }\n return context;\n}\n","import * as React from 'react';\nimport type { ThemeMode } from './types';\nimport { defaultThemes } from './themes';\n\ninterface ThemeScriptProps {\n defaultTheme?: string;\n defaultMode?: ThemeMode;\n storageKey?: string;\n attribute?: string;\n}\n\nfunction tokensToVars(tokens: Record<string, string>): string {\n return Object.entries(tokens)\n .map(([k, v]) => `--color-${k}:${v}`)\n .join(';');\n}\n\n/**\n * Renders a <style> block with the default theme's CSS variables plus an inline\n * script that updates them from localStorage before first paint. Place inside\n * <head> of your root layout to prevent flash of unstyled content.\n */\nexport function ThemeScript({\n defaultTheme = 'slate',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n attribute = 'data-theme',\n}: ThemeScriptProps): React.JSX.Element {\n const cfg = defaultThemes[defaultTheme as keyof typeof defaultThemes];\n const lightVars = cfg ? tokensToVars(cfg.light as Record<string, string>) : '';\n const darkVars = cfg ? tokensToVars(cfg.dark as Record<string, string>) : '';\n\n // Static CSS covers the default theme before JS runs (SSR + initial paint).\n // [data-mode=\"dark\"] overrides are picked up as soon as the script below sets\n // the attribute on <html>, which happens before the browser paints.\n const staticCss = lightVars\n ? `:root{${lightVars}}:root[data-mode=\"dark\"]{${darkVars}}`\n : '';\n\n const script = `\n(function(){\n try {\n var stored = JSON.parse(localStorage.getItem(${JSON.stringify(storageKey)}) || '{}');\n var theme = stored.theme || ${JSON.stringify(defaultTheme)};\n var mode = stored.mode || ${JSON.stringify(defaultMode)};\n var resolved = mode === 'system'\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n : mode;\n var root = document.documentElement;\n root.setAttribute(${JSON.stringify(attribute)}, theme);\n root.setAttribute('data-mode', resolved);\n root.style.colorScheme = resolved;\n } catch (e) {}\n})();`.trim();\n\n return (\n <>\n {staticCss && (\n <style dangerouslySetInnerHTML={{ __html: staticCss }} suppressHydrationWarning />\n )}\n <script dangerouslySetInnerHTML={{ __html: script }} suppressHydrationWarning />\n </>\n );\n}\n","/**\n * Color accent presets for @structyl/themes.\n *\n * Built-in presets cover 10 common accent colors. Users can extend the list\n * by creating additional `ColorPreset` objects and passing them to\n * `useColorPreset({ extraPresets: [...] })` or calling `applyColorPreset`\n * with any arbitrary hex color.\n */\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\n/** A single accent-color preset. */\nexport interface ColorPreset {\n /** Unique machine-readable identifier. */\n id: string;\n /** Human-readable display name. */\n name: string;\n /** Primary hex color value (e.g. `'#6366f1'`). */\n hex: string;\n}\n\n/* ── Built-in catalogue ─────────────────────────────────────────────────────── */\n\n/**\n * The 10 built-in accent presets shipped with @structyl/themes.\n * Typed `as const` so that `ColorPresetId` is a precise union of literal IDs.\n */\nexport const COLOR_PRESETS = [\n { id: 'structyl', name: 'Structyl', hex: '#5754a3' },\n { id: 'indigo', name: 'Indigo', hex: '#6366f1' },\n { id: 'ocean', name: 'Ocean', hex: '#0284c7' },\n { id: 'rose', name: 'Rose', hex: '#e11d48' },\n { id: 'forest', name: 'Forest', hex: '#16a34a' },\n { id: 'sunset', name: 'Sunset', hex: '#f97316' },\n { id: 'violet', name: 'Violet', hex: '#7c3aed' },\n { id: 'slate', name: 'Slate', hex: '#475569' },\n { id: 'ember', name: 'Ember', hex: '#be123c' },\n { id: 'zinc', name: 'Zinc', hex: '#71717a' },\n] as const satisfies ReadonlyArray<ColorPreset>;\n\n/** Union of all built-in preset IDs (e.g. `'structyl' | 'indigo' | 'ocean' | ...`). */\nexport type ColorPresetId = (typeof COLOR_PRESETS)[number]['id'];\n\n/**\n * Create a custom preset object. Useful for building typed preset lists\n * that will be passed to `useColorPreset({ extraPresets: [...] })`.\n *\n * @example\n * const myPreset = createColorPreset('brand', 'My Brand', '#ff5500');\n */\nexport function createColorPreset(id: string, name: string, hex: string): ColorPreset {\n return { id, name, hex };\n}\n\n/* ── HSL utilities (zero deps) ──────────────────────────────────────────────── */\n\nfunction hexToHslParts(hex: string): { h: number; s: number; l: number } {\n const h = hex.replace('#', '');\n const r = parseInt(h.slice(0, 2), 16) / 255;\n const g = parseInt(h.slice(2, 4), 16) / 255;\n const b = parseInt(h.slice(4, 6), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n let sat = 0;\n const lum = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n sat = lum > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === r) hue = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n else if (max === g) hue = ((b - r) / d + 2) / 6;\n else hue = ((r - g) / d + 4) / 6;\n }\n return { h: Math.round(hue * 360), s: Math.round(sat * 100), l: Math.round(lum * 100) };\n}\n\nfunction hslStr({ h, s, l }: { h: number; s: number; l: number }): string {\n return `${h} ${s}% ${l}%`;\n}\n\nfunction shiftL(p: { h: number; s: number; l: number }, d: number) {\n return { ...p, l: Math.max(2, Math.min(97, p.l + d)) };\n}\n\nfunction relativeLuminance(hex: string): number {\n const h = hex.replace('#', '');\n const lin = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n };\n return (\n 0.2126 * lin(parseInt(h.slice(0, 2), 16)) +\n 0.7152 * lin(parseInt(h.slice(2, 4), 16)) +\n 0.0722 * lin(parseInt(h.slice(4, 6), 16))\n );\n}\n\n/* ── DOM utilities ──────────────────────────────────────────────────────────── */\n\n/** CSS custom properties overridden by `applyColorPreset`. */\nconst PRESET_CSS_VARS = [\n '--color-primary',\n '--color-ring',\n '--color-primary-hover',\n '--color-primary-active',\n '--color-primary-fg',\n] as const;\n\n/**\n * Apply an accent preset to the document root by overriding the five\n * primary-color CSS custom properties. Safe to call on every theme/mode\n * change — the ThemeProvider will reset base vars first, then this re-applies.\n *\n * No-op in SSR environments.\n *\n * @param hex - The hex color string (e.g. `'#6366f1'`).\n */\nexport function applyColorPreset(hex: string): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const p = hexToHslParts(hex);\n const fg = relativeLuminance(hex) > 0.179 ? '222 47% 11%' : '0 0% 100%';\n root.style.setProperty('--color-primary', hslStr(p));\n root.style.setProperty('--color-ring', hslStr(p));\n root.style.setProperty('--color-primary-hover', hslStr(shiftL(p, 6)));\n root.style.setProperty('--color-primary-active', hslStr(shiftL(p, -8)));\n root.style.setProperty('--color-primary-fg', fg);\n}\n\n/**\n * Remove all CSS custom properties applied by `applyColorPreset`,\n * restoring whatever values the active ThemeProvider theme supplies.\n *\n * No-op in SSR environments.\n */\nexport function clearColorPreset(): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n PRESET_CSS_VARS.forEach(k => root.style.removeProperty(k));\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useTheme } from './use-theme';\nimport {\n COLOR_PRESETS,\n applyColorPreset,\n clearColorPreset,\n type ColorPreset,\n} from './color-presets';\n\nconst DEFAULT_STORAGE_KEY = 'structyl-color-preset';\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface UseColorPresetOptions {\n /**\n * Custom presets to add on top of the 10 built-ins.\n * Built-ins always come first in `presets`.\n *\n * @example\n * const brandPreset = createColorPreset('brand', 'Brand Blue', '#1a6cf0');\n * const { setPreset } = useColorPreset({ extraPresets: [brandPreset] });\n */\n extraPresets?: ColorPreset[];\n\n /**\n * localStorage key used to persist the active preset across page loads.\n * Override if you need multiple independent pickers on the same origin.\n *\n * @default 'structyl-color-preset'\n */\n storageKey?: string;\n}\n\nexport interface UseColorPresetReturn {\n /** All available presets: built-ins first, then any `extraPresets`. */\n presets: ColorPreset[];\n /** ID of the currently active preset, or `null` when using the default theme. */\n activeId: string | null;\n /** Full preset object for the active ID, or `null`. */\n activePreset: ColorPreset | null;\n /**\n * Activate a preset by its `id` and `hex` color.\n * Applies CSS variables immediately and persists to localStorage.\n */\n setPreset: (id: string, hex: string) => void;\n /**\n * Clear the active preset, restoring the ThemeProvider's base theme colors.\n * Also removes the stored value from localStorage.\n */\n clearPreset: () => void;\n}\n\n/* ── Hook ───────────────────────────────────────────────────────────────────── */\n\n/**\n * Manages an accent-color preset on top of the active structyl theme.\n *\n * Must be used inside a `<ThemeProvider>`. Persists the selection to\n * localStorage and re-applies it whenever the base theme or color-mode\n * changes (because ThemeProvider resets `--color-primary` on change).\n *\n * @example\n * function AccentPicker() {\n * const { presets, activeId, setPreset, clearPreset } = useColorPreset();\n * return (\n * <>\n * {presets.map(p => (\n * <button key={p.id} onClick={() => setPreset(p.id, p.hex)}\n * style={{ background: p.hex }}>\n * {p.name}\n * </button>\n * ))}\n * {activeId && <button onClick={clearPreset}>Reset</button>}\n * </>\n * );\n * }\n *\n * @example Adding custom presets\n * const brandPreset = createColorPreset('brand', 'Company Blue', '#1a6cf0');\n * const { presets } = useColorPreset({ extraPresets: [brandPreset] });\n */\nexport function useColorPreset(options: UseColorPresetOptions = {}): UseColorPresetReturn {\n const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY } = options;\n\n const { theme, resolvedMode } = useTheme();\n const [activeId, setActiveId] = useState<string | null>(null);\n\n const allPresets: ColorPreset[] = [...(COLOR_PRESETS as unknown as ColorPreset[]), ...extraPresets];\n\n // Hydrate from localStorage on mount\n useEffect(() => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored && allPresets.some(p => p.id === stored)) {\n setActiveId(stored);\n }\n } catch {\n // localStorage unavailable (e.g. private browsing with strict settings)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storageKey]);\n\n // Re-apply CSS vars whenever base theme or color-mode changes (ThemeProvider resets them)\n useEffect(() => {\n if (!activeId) return;\n const preset = allPresets.find(p => p.id === activeId);\n if (preset) applyColorPreset(preset.hex);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeId, theme, resolvedMode]);\n\n const setPreset = useCallback((id: string, hex: string) => {\n setActiveId(id);\n applyColorPreset(hex);\n try { localStorage.setItem(storageKey, id); } catch { /* ignore */ }\n }, [storageKey]);\n\n const clearPreset = useCallback(() => {\n setActiveId(null);\n clearColorPreset();\n try { localStorage.removeItem(storageKey); } catch { /* ignore */ }\n }, [storageKey]);\n\n const activePreset = allPresets.find(p => p.id === activeId) ?? null;\n\n return { presets: allPresets, activeId, activePreset, setPreset, clearPreset };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/palette.ts","../src/themes.ts","../src/theme-provider.tsx","../src/use-theme.ts","../src/theme-script.tsx","../src/color-presets.ts","../src/use-color-preset.ts"],"names":["value","React2","React3","useState","useEffect"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ThemeTokens } from './types';\nimport type { StaticPalette } from './palette.types';\n\n// ── Shared semantic sub-tokens ────────────────────────────────────────────────\n// error/warning/info/success are semantic colors that don't change between\n// UI themes (slate/zinc/rose/structyl). Only light/dark mode changes their values.\n\nexport const sharedSemanticLight: Partial<ThemeTokens> = {\n // Error\n 'error-light': '249 218 223',\n 'error-dark': '131 24 63',\n 'error-contrast': '255 255 255',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(167, 56, 95, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.1)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(60, 47, 58, 0.9)',\n 'error-alert-content': 'rgba(114, 52, 76, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '249 220 210',\n 'warning-dark': '122 45 16',\n 'warning-contrast': '255 255 255',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(191, 75, 30, 0.9)',\n 'warning-state-outlined': 'rgba(255, 87, 20, 0.1)',\n 'warning-state-resting': 'rgba(255, 87, 20, 0.5)',\n 'warning-alert-bg': 'rgba(85, 54, 46, 0.9)',\n 'warning-alert-content': 'rgba(127, 62, 39, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '227 223 252',\n 'info-dark': '47 32 159',\n 'info-contrast': '255 255 255',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(95, 88, 179, 0.9)',\n 'info-state-outlined': 'rgba(117, 106, 234, 0.1)',\n 'info-state-resting': 'rgba(117, 106, 234, 0.5)',\n 'info-alert-bg': 'rgba(49, 52, 70, 0.9)',\n 'info-alert-content': 'rgba(72, 70, 125, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '153 252 128',\n 'success-dark': '33 82 25',\n 'success-contrast': '255 255 255',\n 'success-dark-bg': '33 82 25',\n 'success-state-contained': 'rgba(56, 159, 63, 0.9)',\n 'success-state-outlined': 'rgba(62, 208, 68, 0.1)',\n 'success-state-resting': 'rgba(62, 208, 68, 0.5)',\n 'success-alert-bg': 'rgba(44, 62, 54, 0.9)',\n 'success-alert-content': 'rgba(50, 111, 58, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\nexport const sharedSemanticDark: Partial<ThemeTokens> = {\n // Error\n 'error-light': '166 44 85',\n 'error-dark': '249 218 223',\n 'error-contrast': '143 0 63',\n 'error-dark-bg': '167 56 95',\n 'error-state-contained': 'rgba(184, 140, 151, 0.9)',\n 'error-state-outlined': 'rgba(221, 60, 113, 0.05)',\n 'error-state-resting': 'rgba(221, 60, 113, 0.5)',\n 'error-alert-bg': 'rgba(253, 240, 243, 1)',\n 'error-alert-content': 'rgba(251, 225, 230, 1)',\n 'error-shade-12': 'rgba(221, 60, 113, 0.12)',\n 'error-shade-16': 'rgba(221, 60, 113, 0.16)',\n // Warning\n 'warning-light': '159 61 25',\n 'warning-dark': '249 220 210',\n 'warning-contrast': '132 38 0',\n 'warning-dark-bg': '191 75 30',\n 'warning-state-contained': 'rgba(184, 143, 128, 0.9)',\n 'warning-state-outlined': 'rgba(244, 184, 161, 0.2)',\n 'warning-state-resting': 'rgba(244, 184, 161, 0.6)',\n 'warning-alert-bg': 'rgba(253, 241, 236, 1)',\n 'warning-alert-content': 'rgba(251, 227, 217, 1)',\n 'warning-shade-12': 'rgba(255, 87, 20, 0.12)',\n 'warning-shade-16': 'rgba(255, 87, 20, 0.16)',\n // Info\n 'info-light': '85 74 195',\n 'info-dark': '226 223 252',\n 'info-contrast': '63 47 177',\n 'info-dark-bg': '95 88 179',\n 'info-state-contained': 'rgba(150, 148, 191, 1)',\n 'info-state-outlined': 'rgba(196, 192, 250, 0.2)',\n 'info-state-resting': 'rgba(196, 192, 250, 0.6)',\n 'info-alert-bg': 'rgba(243, 242, 254, 1)',\n 'info-alert-content': 'rgba(231, 230, 253, 1)',\n 'info-shade-12': 'rgba(117, 106, 234, 0.12)',\n 'info-shade-16': 'rgba(117, 106, 234, 0.16)',\n // Success\n 'success-light': '46 108 36',\n 'success-dark': '153 252 128',\n 'success-contrast': '0 83 12',\n 'success-dark-bg': '46 108 36',\n 'success-state-contained': 'rgba(100, 170, 88, 0.9)',\n 'success-state-outlined': 'rgba(125, 223, 103, 0.2)',\n 'success-state-resting': 'rgba(125, 223, 103, 0.6)',\n 'success-alert-bg': 'rgba(229, 249, 225, 1)',\n 'success-alert-content': 'rgba(203, 242, 194, 1)',\n 'success-shade-12': 'rgba(62, 208, 68, 0.12)',\n 'success-shade-16': 'rgba(62, 208, 68, 0.16)',\n backdrop: 'rgba(0, 0, 0, 0.5)',\n 'rating-active': '251 191 36',\n};\n\n// ── Structyl theme token values ───────────────────────────────────────────────────\n// Light mode values derived from MUI colorsLight palette\n\nexport const structylSubTokensLight: Partial<ThemeTokens> = {\n // Primary (#5754A3)\n 'primary-light': '195 192 250',\n 'primary-dark': '27 20 100',\n 'primary-contrast': '255 255 255',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(87, 84, 163, 0.1)',\n 'primary-state-resting': 'rgba(87, 84, 163, 0.5)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#2578FF)\n 'secondary-light': '219 226 252',\n 'secondary-dark': '25 65 149',\n 'secondary-contrast': '255 255 255',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(37, 120, 255, 0.1)',\n 'secondary-state-resting': 'rgba(37, 120, 255, 0.5)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '42 46 52',\n 'text-secondary': 'rgba(42, 46, 52, 0.6)',\n 'text-disabled': 'rgba(42, 46, 52, 0.38)',\n 'text-info': '117 106 234',\n 'text-fill': '27 20 100',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '250 250 250',\n 'surface-paper': '255 255 255',\n // Divider / borders\n divider: 'rgba(42, 46, 52, 0.23)',\n 'outlined-border': 'rgba(42, 46, 52, 0.12)',\n 'input-line': 'rgba(42, 46, 52, 0.42)',\n // Action\n 'action-active': 'rgba(42, 46, 52, 0.54)',\n 'action-hover': 'rgba(37, 120, 255, 0.05)',\n 'action-selected': 'rgba(42, 46, 52, 0.08)',\n 'action-disabled': 'rgba(42, 46, 52, 0.26)',\n 'action-disabled-bg': 'rgba(42, 46, 52, 0.12)',\n 'action-focus': 'rgba(42, 46, 52, 0.12)',\n // Misc\n 'snackbar-bg': '42 46 52',\n 'map-grid': '255 255 255',\n // Table\n 'table-top-header': '238 245 255',\n 'table-header': '238 239 239',\n 'table-row': '255 255 255',\n 'table-col-border': '250 250 250',\n 'table-border': 'rgba(229, 229, 230, 1)',\n ...sharedSemanticLight,\n};\n\n// Dark mode values derived from MUI colorsDark palette\n\nexport const structylSubTokensDark: Partial<ThemeTokens> = {\n // Primary (#C3C0FA in dark)\n 'primary-light': '75 72 150',\n 'primary-dark': '219 226 252',\n 'primary-contrast': '27 20 100',\n 'primary-dark-bg': '32 28 86',\n 'primary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'primary-state-outlined': 'rgba(195, 192, 250, 0.2)',\n 'primary-state-resting': 'rgba(195, 192, 250, 0.6)',\n 'primary-shade-12': 'rgba(27, 20, 100, 0.12)',\n 'primary-shade-16': 'rgba(27, 20, 100, 0.16)',\n // Secondary (#B4C5FA in dark)\n 'secondary-light': '36 87 195',\n 'secondary-dark': '219 226 252',\n 'secondary-contrast': '0 45 110',\n 'secondary-dark-bg': '39 98 194',\n 'secondary-state-contained': 'rgba(42, 46, 52, 0.3)',\n 'secondary-state-outlined': 'rgba(180, 197, 250, 0.2)',\n 'secondary-state-resting': 'rgba(180, 197, 250, 0.6)',\n 'secondary-shade-12': 'rgba(37, 120, 255, 0.12)',\n 'secondary-shade-16': 'rgba(37, 120, 255, 0.16)',\n // Text\n text: '255 255 255',\n 'text-secondary': 'rgba(255, 255, 255, 0.7)',\n 'text-disabled': 'rgba(255, 255, 255, 0.5)',\n 'text-info': '117 106 234',\n 'text-fill': '255 255 255',\n 'text-shade-12': 'rgba(42, 46, 52, 0.12)',\n 'text-shade-16': 'rgba(42, 46, 52, 0.16)',\n // Surface\n surface: '42 46 52',\n 'surface-paper': '46 50 56',\n // Divider / borders\n divider: 'rgba(255, 255, 255, 0.23)',\n 'outlined-border': 'rgba(255, 255, 255, 0.12)',\n 'input-line': 'rgba(255, 255, 255, 0.42)',\n // Action\n 'action-active': 'rgba(255, 255, 255, 0.54)',\n 'action-hover': 'rgba(180, 197, 250, 0.05)',\n 'action-selected': 'rgba(255, 255, 255, 0.08)',\n 'action-disabled': 'rgba(255, 255, 255, 0.26)',\n 'action-disabled-bg': 'rgba(255, 255, 255, 0.12)',\n 'action-focus': 'rgba(255, 255, 255, 0.12)',\n // Misc\n 'snackbar-bg': '255 255 255',\n 'map-grid': '37 120 255',\n // Table\n 'table-top-header': '50 52 65',\n 'table-header': '57 60 66',\n 'table-row': '46 50 56',\n 'table-col-border': '42 46 52',\n 'table-border': 'rgba(81, 81, 81, 1)',\n ...sharedSemanticDark,\n};\n\n// ── Static material palette scales ────────────────────────────────────────────\n// These are baked into the Tailwind preset directly (not CSS variables).\n\nexport const staticPalette: StaticPalette = {\n yellow: { '50': '#fffde7', '100': '#fff9c4', '200': '#fff59d', '300': '#fff176', '400': '#ffee58', '500': '#ffeb3b', '600': '#fdd835', '700': '#fbc02d', '800': '#f9a825', '900': '#f57f17', A100: '#ffff8d', A200: '#ffff00', A400: '#ffea00', A700: '#ffd600' },\n amber: { '50': '#fff8e1', '100': '#ffecb3', '200': '#ffe082', '300': '#ffd54f', '400': '#ffca28', '500': '#ffc107', '600': '#ffb300', '700': '#ffa000', '800': '#ff8f00', '900': '#ff6f00', A100: '#ffe57f', A200: '#ffd740', A400: '#ffc400', A700: '#ffab00' },\n blue: { '50': '#e3f2fd', '100': '#bbdefb', '200': '#90caf9', '300': '#64b5f6', '400': '#42a5f5', '500': '#2196f3', '600': '#1e88e5', '700': '#1976d2', '800': '#1565c0', '900': '#0d47a1', A100: '#82b1ff', A200: '#448aff', A400: '#2979ff', A700: '#2962ff' },\n blueGrey: { '50': '#eceff1', '100': '#cfd8dc', '200': '#b0bec5', '300': '#90a4ae', '400': '#78909c', '500': '#607d8b', '600': '#546e7a', '700': '#455a64', '800': '#37474f', '900': '#263238', A100: '#cfd8dc', A200: '#b0bec5', A400: '#78909c', A700: '#455a64' },\n brown: { '50': '#efebe9', '100': '#d7ccc8', '200': '#bcaaa4', '300': '#a1887f', '400': '#8d6e63', '500': '#795548', '600': '#6d4c41', '700': '#5d4037', '800': '#4e342e', '900': '#3e2723', A100: '#d7ccc8', A200: '#bcaaa4', A400: '#8d6e63', A700: '#5d4037' },\n teal: { '50': '#e0f2f1', '100': '#b2dfdb', '200': '#80cbc4', '300': '#4db6ac', '400': '#26a69a', '500': '#009688', '600': '#00897b', '700': '#00796b', '800': '#00695c', '900': '#004d40', A100: '#a7ffeb', A200: '#64ffda', A400: '#1de9b6', A700: '#00bfa5' },\n red: { '50': '#ffebee', '100': '#ffcdd2', '200': '#ef9a9a', '300': '#e57373', '400': '#ef5350', '500': '#f44336', '600': '#e53935', '700': '#d32f2f', '800': '#c62828', '900': '#b71c1c', A100: '#ff8a80', A200: '#ff5252', A400: '#ff1744', A700: '#d50000' },\n purple: { '50': '#f3e5f5', '100': '#e1bee7', '200': '#ce93d8', '300': '#ba68c8', '400': '#ab47bc', '500': '#9c27b0', '600': '#8e24aa', '700': '#7b1fa2', '800': '#6a1b9a', '900': '#4a148c', A100: '#ea80fc', A200: '#e040fb', A400: '#d500f9', A700: '#aa00ff' },\n pink: { '50': '#fce4ec', '100': '#f8bbd0', '200': '#f48fb1', '300': '#f06292', '400': '#ec407a', '500': '#e91e63', '600': '#d81b60', '700': '#c2185b', '800': '#ad1457', '900': '#880e4f', A100: '#ff80ab', A200: '#ff4081', A400: '#f50057', A700: '#c51162' },\n orange: { '50': '#fff3e0', '100': '#ffe0b2', '200': '#ffcc80', '300': '#ffb74d', '400': '#ffa726', '500': '#ff9800', '600': '#fb8c00', '700': '#f57c00', '800': '#ef6c00', '900': '#e65100', A100: '#ffd180', A200: '#ffab40', A400: '#ff9100', A700: '#ff6d00' },\n lime: { '50': '#f9fbe7', '100': '#f0f4c3', '200': '#e6ee9c', '300': '#dce775', '400': '#d4e157', '500': '#cddc39', '600': '#c0ca33', '700': '#afb42b', '800': '#9e9d24', '900': '#827717', A100: '#f4ff81', A200: '#eeff41', A400: '#c6ff00', A700: '#aeea00' },\n lightGreen: { '50': '#f1f8e9', '100': '#dcedc8', '200': '#c5e1a5', '300': '#aed581', '400': '#9ccc65', '500': '#8bc34a', '600': '#7cb342', '700': '#689f38', '800': '#558b2f', '900': '#33691e', A100: '#ccff90', A200: '#b2ff59', A400: '#76ff03', A700: '#64dd17' },\n cyan: { '50': '#e0f7fa', '100': '#b2ebf2', '200': '#80deea', '300': '#4dd0e1', '400': '#26c6da', '500': '#00bcd4', '600': '#00acc1', '700': '#0097a7', '800': '#00838f', '900': '#006064', A100: '#84ffff', A200: '#18ffff', A400: '#00e5ff', A700: '#00b8d4' },\n deepOrange: { '50': '#fbe9e7', '100': '#ffccbc', '200': '#ffab91', '300': '#ff8a65', '400': '#ff7043', '500': '#ff5722', '600': '#f4511e', '700': '#e64a19', '800': '#d84315', '900': '#bf360c', A100: '#ff9e80', A200: '#ff6e40', A400: '#ff3d00', A700: '#dd2c00' },\n deepPurple: { '50': '#ede7f6', '100': '#d1c4e9', '200': '#b39ddb', '300': '#9575cd', '400': '#7e57c2', '500': '#673ab7', '600': '#5e35b1', '700': '#512da8', '800': '#4527a0', '900': '#311b92', A100: '#b388ff', A200: '#7c4dff', A400: '#651fff', A700: '#6200ea' },\n green: { '50': '#e8f5e9', '100': '#c8e6c9', '200': '#a5d6a7', '300': '#81c784', '400': '#66bb6a', '500': '#4caf50', '600': '#43a047', '700': '#388e3c', '800': '#2e7d32', '900': '#1b5e20', A100: '#b9f6ca', A200: '#69f0ae', A400: '#00e676', A700: '#00c853' },\n grey: { '50': '#fafafa', '100': '#f5f5f5', '200': '#eeeeee', '300': '#e0e0e0', '400': '#bdbdbd', '500': '#9e9e9e', '600': '#757575', '700': '#616161', '800': '#424242', '900': '#212121', A100: '#f5f5f5', A200: '#eeeeee', A400: '#bdbdbd', A700: '#616161' },\n indigo: { '50': '#e8eaf6', '100': '#c5cae9', '200': '#9fa8da', '300': '#7986cb', '400': '#5c6bc0', '500': '#3f51b5', '600': '#3949ab', '700': '#303f9f', '800': '#283593', '900': '#1a237e', A100: '#8c9eff', A200: '#536dfe', A400: '#3d5afe', A700: '#304ffe' },\n lightBlue: { '50': '#e1f5fe', '100': '#b3e5fc', '200': '#81d4fa', '300': '#4fc3f7', '400': '#29b6f6', '500': '#03a9f4', '600': '#039be5', '700': '#0288d1', '800': '#0277bd', '900': '#01579b', A100: '#80d8ff', A200: '#40c4ff', A400: '#00b0ff', A700: '#0091ea' },\n};\n\n// ── General named colors (static, rgba) ───────────────────────────────────────\n\nexport const generalColors = {\n 'yellow-golden': 'rgba(255, 215, 0, 0.6)',\n 'yellow-pale': 'rgba(255, 255, 153, 0.4)',\n 'yellow-amber': 'rgba(255, 191, 0, 0.7)',\n 'yellow-sunshine': 'rgba(255, 239, 0, 0.5)',\n 'yellow-light': 'rgba(255, 255, 0, 0.5)',\n 'yellow-warm': 'rgba(255, 204, 0, 0.8)',\n 'yellow-soft': 'rgba(255, 229, 153, 0.7)',\n 'red-rose': 'rgba(255, 51, 51, 0.5)',\n 'red-crimson': 'rgba(220, 20, 60, 0.6)',\n 'red-light-coral': 'rgba(240, 128, 128, 0.5)',\n 'red-fire-brick': 'rgba(178, 34, 34, 0.8)',\n 'red-bright': 'rgba(255, 0, 0, 0.7)',\n 'red-soft-coral': 'rgba(255, 102, 102, 0.6)',\n 'red-dark': 'rgba(204, 0, 0, 0.8)',\n 'blue-turquoise': 'rgba(64, 224, 208, 0.6)',\n 'blue-dodger': 'rgba(30, 144, 255, 0.5)',\n 'blue-navy': 'rgba(0, 0, 128, 0.8)',\n 'blue-steel': 'rgba(70, 130, 180, 0.7)',\n 'blue-sky': 'rgba(0, 153, 255, 0.5)',\n 'blue-light': 'rgba(51, 204, 255, 0.7)',\n 'blue-deep': 'rgba(0, 51, 204, 0.8)',\n 'green-lime': 'rgba(50, 205, 50, 0.5)',\n 'green-pale': 'rgba(152, 251, 152, 0.4)',\n 'green-forest': 'rgba(34, 139, 34, 0.7)',\n 'green-olive': 'rgba(128, 128, 0, 0.6)',\n 'green-fresh': 'rgba(0, 204, 0, 0.6)',\n 'green-soft-mint': 'rgba(102, 255, 153, 0.7)',\n 'green-dark': 'rgba(0, 153, 76, 0.8)',\n 'orange-tangerine': 'rgba(255, 140, 0, 0.6)',\n 'orange-apricot': 'rgba(251, 206, 177, 0.5)',\n 'orange-burnt': 'rgba(204, 85, 0, 0.7)',\n 'orange-carrot': 'rgba(237, 145, 33, 0.6)',\n 'orange-bright': 'rgba(255, 102, 0, 0.7)',\n 'orange-soft-peach': 'rgba(255, 178, 102, 0.6)',\n 'orange-deep': 'rgba(204, 85, 0, 0.8)',\n} as const;\n","import type { ThemeConfig } from './types';\nimport {\n sharedSemanticLight,\n sharedSemanticDark,\n structylSubTokensLight,\n structylSubTokensDark,\n} from './palette';\n\n// ── Helper: build per-theme primary/secondary sub-tokens ─────────────────────\n\nfunction primarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'primary-light': lightRgb,\n 'primary-dark': darkRgb,\n 'primary-contrast': contrastRgb,\n 'primary-dark-bg': darkBgRgb,\n 'primary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'primary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'primary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'primary-shade-12': `rgba(${darkRgb.split(' ').join(', ')}, 0.12)`,\n 'primary-shade-16': `rgba(${darkRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\nfunction secondarySubTokensLight(\n lightRgb: string,\n darkRgb: string,\n contrastRgb: string,\n darkBgRgb: string,\n mainRgb: string,\n): Record<string, string> {\n return {\n 'secondary-light': lightRgb,\n 'secondary-dark': darkRgb,\n 'secondary-contrast': contrastRgb,\n 'secondary-dark-bg': darkBgRgb,\n 'secondary-state-contained': `rgba(${mainRgb.split(' ').join(', ')}, 0.3)`,\n 'secondary-state-outlined': `rgba(${mainRgb.split(' ').join(', ')}, 0.1)`,\n 'secondary-state-resting': `rgba(${mainRgb.split(' ').join(', ')}, 0.5)`,\n 'secondary-shade-12': `rgba(${mainRgb.split(' ').join(', ')}, 0.12)`,\n 'secondary-shade-16': `rgba(${mainRgb.split(' ').join(', ')}, 0.16)`,\n };\n}\n\n// RGB channel format required: values must be space-separated (e.g. \"15 23 41\"), not comma-separated,\n// because they are interpolated into rgba() as `rgba(${rgb.split(' ').join(', ')}, alpha)`.\nfunction textSurfaceTokens(fgRgb: string, bgRgb: string, paperRgb: string, infoRgb: string, snackbarRgb: string): Record<string, string> {\n return {\n text: fgRgb,\n 'text-secondary': `rgba(${fgRgb.split(' ').join(', ')}, 0.6)`,\n 'text-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.38)`,\n 'text-info': infoRgb,\n 'text-fill': fgRgb,\n 'text-shade-12': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'text-shade-16': `rgba(${fgRgb.split(' ').join(', ')}, 0.16)`,\n surface: bgRgb,\n 'surface-paper': paperRgb,\n divider: `rgba(${fgRgb.split(' ').join(', ')}, 0.23)`,\n 'outlined-border': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'input-line': `rgba(${fgRgb.split(' ').join(', ')}, 0.42)`,\n 'action-active': `rgba(${fgRgb.split(' ').join(', ')}, 0.54)`,\n 'action-hover': `rgba(${fgRgb.split(' ').join(', ')}, 0.05)`,\n 'action-selected': `rgba(${fgRgb.split(' ').join(', ')}, 0.08)`,\n 'action-disabled': `rgba(${fgRgb.split(' ').join(', ')}, 0.26)`,\n 'action-disabled-bg': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'action-focus': `rgba(${fgRgb.split(' ').join(', ')}, 0.12)`,\n 'snackbar-bg': snackbarRgb,\n 'map-grid': '255 255 255',\n };\n}\n\nfunction tableTokens({ topHeader, header, row, colBorder, border }: {\n topHeader: string; header: string; row: string; colBorder: string; border: string;\n}): Record<string, string> {\n return {\n 'table-top-header': topHeader,\n 'table-header': header,\n 'table-row': row,\n 'table-col-border': colBorder,\n 'table-border': border,\n };\n}\n\n// ── Slate ────────────────────────────────────────────────────────────────────\n\nconst slate: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '222 47% 11%',\n card: '0 0% 100%',\n 'card-fg': '222 47% 11%',\n popover: '0 0% 100%',\n 'popover-fg': '222 47% 11%',\n primary: '222 47% 11%',\n 'primary-fg': '210 40% 98%',\n 'primary-hover': '222 47% 20%',\n 'primary-active': '222 47% 8%',\n secondary: '210 40% 96%',\n 'secondary-fg': '222 47% 11%',\n muted: '210 40% 96%',\n 'muted-fg': '215 16% 47%',\n accent: '210 40% 96%',\n 'accent-fg': '222 47% 11%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '214 32% 91%',\n 'border-strong': '214 24% 80%',\n input: '214 32% 91%',\n ring: '222 47% 11%',\n overlay: '222 47% 11%',\n shadow: '222 47% 11%',\n // New sub-tokens — primary: '222 47% 11%' ≈ RGB(15, 23, 41)\n ...primarySubTokensLight('124 149 208', '7 10 19', '255 255 255', '11 15 26', '15 23 41'),\n // secondary: '210 40% 96%' ≈ RGB(237, 241, 247)\n ...secondarySubTokensLight('245 248 252', '180 196 220', '15 23 41', '200 210 225', '201 212 228'),\n // fg ≈ RGB(15, 23, 41); bg = white; info = sky blue\n ...textSurfaceTokens('15 23 41', '255 255 255', '255 255 255', '14 165 233', '15 23 41'),\n ...tableTokens({ topHeader: '238 242 255', header: '241 245 249', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(214, 219, 228, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '222 47% 6%',\n fg: '210 40% 98%',\n card: '222 47% 8%',\n 'card-fg': '210 40% 98%',\n popover: '222 35% 10%',\n 'popover-fg': '210 40% 98%',\n primary: '210 40% 98%',\n 'primary-fg': '222 47% 11%',\n 'primary-hover': '210 40% 90%',\n 'primary-active': '210 40% 95%',\n secondary: '217 33% 17%',\n 'secondary-fg': '210 40% 98%',\n muted: '217 33% 17%',\n 'muted-fg': '215 20% 65%',\n accent: '217 33% 20%',\n 'accent-fg': '210 40% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '217 33% 20%',\n 'border-strong': '217 25% 30%',\n input: '217 33% 20%',\n ring: '213 27% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '210 40% 98%' ≈ RGB(248, 251, 254)\n ...primarySubTokensLight('210 220 235', '255 255 255', '15 23 41', '25 35 55', '248 251 254'),\n // secondary dark: '217 33% 17%' ≈ RGB(29, 40, 58)\n ...secondarySubTokensLight('22 30 45', '44 60 87', '248 251 254', '35 50 72', '29 40 58'),\n // fg dark ≈ RGB(248, 251, 254)\n ...textSurfaceTokens('248 251 254', '8 11 22', '12 16 30', '56 189 248', '248 251 254'),\n ...tableTokens({ topHeader: '17 25 41', header: '22 31 51', row: '12 16 30', colBorder: '8 11 22', border: 'rgba(51, 65, 86, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '248 251 254',\n },\n};\n\n// ── Zinc ─────────────────────────────────────────────────────────────────────\n\nconst zinc: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '240 6% 10%',\n 'primary-fg': '0 0% 98%',\n 'primary-hover': '240 6% 20%',\n 'primary-active': '240 6% 6%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '240 10% 4%',\n overlay: '240 10% 4%',\n shadow: '240 10% 4%',\n // primary: '240 6% 10%' ≈ RGB(24, 24, 27)\n ...primarySubTokensLight('158 158 164', '10 10 11', '255 255 255', '18 18 22', '24 24 27'),\n // secondary: '240 5% 96%' ≈ RGB(245, 245, 246)\n ...secondarySubTokensLight('248 248 249', '186 186 191', '24 24 27', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '240 240 244', header: '244 244 245', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(228, 228, 231, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '240 10% 6%',\n fg: '0 0% 98%',\n card: '240 10% 8%',\n 'card-fg': '0 0% 98%',\n popover: '240 8% 10%',\n 'popover-fg': '0 0% 98%',\n primary: '0 0% 98%',\n 'primary-fg': '240 6% 10%',\n 'primary-hover': '0 0% 90%',\n 'primary-active': '0 0% 95%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '240 4% 16%',\n 'muted-fg': '240 5% 65%',\n accent: '240 4% 20%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 0% 100%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 20%',\n 'border-strong': '240 5% 30%',\n input: '240 4% 20%',\n ring: '240 5% 84%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary dark: '0 0% 98%' ≈ RGB(250, 250, 250)\n ...primarySubTokensLight('200 200 202', '255 255 255', '10 10 11', '20 20 24', '250 250 250'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '250 250 250', '44 44 49', '38 38 42'),\n // fg dark ≈ RGB(250, 250, 250)\n ...textSurfaceTokens('250 250 250', '14 14 17', '19 19 22', '56 189 248', '250 250 250'),\n ...tableTokens({ topHeader: '22 22 26', header: '28 28 32', row: '19 19 22', colBorder: '14 14 17', border: 'rgba(63, 63, 70, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '250 250 250',\n },\n};\n\n// ── Rose ─────────────────────────────────────────────────────────────────────\n\nconst rose: ThemeConfig = {\n light: {\n bg: '0 0% 100%',\n fg: '240 10% 4%',\n card: '0 0% 100%',\n 'card-fg': '240 10% 4%',\n popover: '0 0% 100%',\n 'popover-fg': '240 10% 4%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 5% 96%',\n 'secondary-fg': '240 6% 10%',\n muted: '240 5% 96%',\n 'muted-fg': '240 4% 46%',\n accent: '240 5% 96%',\n 'accent-fg': '240 6% 10%',\n destructive: '0 84% 60%',\n 'destructive-fg': '0 0% 5%',\n success: '142 71% 45%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 50%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 48%',\n 'info-fg': '0 0% 5%',\n border: '240 6% 90%',\n 'border-strong': '240 5% 80%',\n input: '240 6% 90%',\n ring: '347 77% 50%',\n overlay: '240 10% 4%',\n shadow: '347 60% 30%',\n // primary: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary: same as zinc secondary\n ...secondarySubTokensLight('248 248 249', '186 186 191', '10 10 11', '196 196 201', '186 186 191'),\n // fg ≈ RGB(10, 10, 11)\n ...textSurfaceTokens('10 10 11', '255 255 255', '255 255 255', '14 165 233', '10 10 11'),\n ...tableTokens({ topHeader: '255 241 242', header: '255 245 246', row: '255 255 255', colBorder: '250 250 250', border: 'rgba(244, 227, 229, 1)' }),\n ...sharedSemanticLight,\n },\n dark: {\n bg: '20 14% 5%',\n fg: '0 0% 95%',\n card: '24 10% 8%',\n 'card-fg': '0 0% 95%',\n popover: '0 0% 9%',\n 'popover-fg': '0 0% 95%',\n primary: '347 77% 50%',\n 'primary-fg': '356 100% 97%',\n 'primary-hover': '347 80% 56%',\n 'primary-active': '347 75% 44%',\n secondary: '240 4% 16%',\n 'secondary-fg': '0 0% 98%',\n muted: '0 0% 15%',\n 'muted-fg': '240 5% 65%',\n accent: '12 7% 15%',\n 'accent-fg': '0 0% 98%',\n destructive: '0 70% 50%',\n 'destructive-fg': '0 86% 97%',\n success: '142 65% 50%',\n 'success-fg': '0 0% 5%',\n warning: '38 92% 55%',\n 'warning-fg': '38 92% 8%',\n info: '199 89% 55%',\n 'info-fg': '0 0% 5%',\n border: '240 4% 16%',\n 'border-strong': '240 5% 26%',\n input: '240 4% 20%',\n ring: '347 77% 50%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n // primary rose same in dark: '347 77% 50%' ≈ RGB(226, 29, 72)\n ...primarySubTokensLight('237 120 145', '135 18 43', '255 255 255', '107 14 34', '226 29 72'),\n // secondary dark: '240 4% 16%' ≈ RGB(38, 38, 42)\n ...secondarySubTokensLight('30 30 34', '52 52 58', '242 242 242', '44 44 49', '38 38 42'),\n // fg ≈ RGB(242, 242, 242) ('0 0% 95%')\n ...textSurfaceTokens('242 242 242', '14 12 10', '22 20 17', '56 189 248', '242 242 242'),\n ...tableTokens({ topHeader: '28 20 20', header: '36 28 28', row: '22 20 17', colBorder: '14 12 10', border: 'rgba(70, 55, 55, 1)' }),\n ...sharedSemanticDark,\n 'map-grid': '242 242 242',\n },\n};\n\n// ── Structyl ─────────────────────────────────────────────────────────────────────\n// Full MUI-inspired palette with exact colorsLight/colorsDark values\n\nconst structyl: ThemeConfig = {\n light: {\n bg: '0 0% 98%',\n fg: '217 11% 18%',\n card: '0 0% 100%',\n 'card-fg': '217 11% 18%',\n popover: '0 0% 100%',\n 'popover-fg': '217 11% 18%',\n primary: '242 32% 48%',\n 'primary-fg': '0 0% 100%',\n 'primary-hover': '242 32% 55%',\n 'primary-active': '245 67% 24%',\n secondary: '217 100% 57%',\n 'secondary-fg': '0 0% 100%',\n muted: '0 0% 96%',\n 'muted-fg': '0 0% 62%',\n accent: '253 80% 94%',\n 'accent-fg': '253 76% 67%',\n destructive: '340 71% 55%',\n 'destructive-fg': '0 0% 5%',\n success: '123 57% 53%',\n 'success-fg': '0 0% 5%',\n warning: '17 100% 54%',\n 'warning-fg': '38 92% 8%',\n info: '253 76% 67%',\n 'info-fg': '0 0% 5%',\n border: '240 2% 90%',\n 'border-strong': '0 0% 78%',\n input: '240 2% 90%',\n ring: '242 32% 48%',\n overlay: '217 11% 18%',\n shadow: '217 11% 18%',\n ...structylSubTokensLight,\n },\n dark: {\n bg: '217 11% 18%',\n fg: '0 0% 100%',\n card: '216 10% 20%',\n 'card-fg': '0 0% 100%',\n popover: '216 10% 20%',\n 'popover-fg': '0 0% 100%',\n primary: '243 85% 87%',\n 'primary-fg': '245 67% 24%',\n 'primary-hover': '243 85% 80%',\n 'primary-active': '243 85% 91%',\n secondary: '225 87% 84%',\n 'secondary-fg': '215 100% 22%',\n muted: '217 12% 26%',\n 'muted-fg': '207 12% 63%',\n accent: '217 13% 28%',\n 'accent-fg': '243 85% 87%',\n destructive: '348 75% 83%',\n 'destructive-fg': '334 100% 28%',\n success: '109 65% 64%',\n 'success-fg': '127 100% 16%',\n warning: '17 79% 79%',\n 'warning-fg': '18 100% 26%',\n info: '243 85% 87%',\n 'info-fg': '247 58% 44%',\n border: '0 0% 32%',\n 'border-strong': '0 0% 39%',\n input: '217 12% 26%',\n ring: '243 85% 87%',\n overlay: '0 0% 0%',\n shadow: '0 0% 0%',\n ...structylSubTokensDark,\n },\n};\n\nexport const defaultThemes: Record<string, ThemeConfig> = { slate, zinc, rose, structyl };\n","'use client';\n\nimport * as React from 'react';\nimport { defaultThemes } from './themes';\nimport type { ResolvedMode, Theme, ThemeConfig, ThemeMode } from './types';\n\nexport interface ThemeContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n resolvedMode: ResolvedMode;\n themes: string[];\n}\n\nconst ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n defaultMode?: ThemeMode;\n storageKey?: string | false;\n enableTransitions?: boolean;\n themes?: Record<string, ThemeConfig>;\n attribute?: string;\n}\n\nexport function ThemeProvider(props: ThemeProviderProps): React.JSX.Element {\n const {\n children,\n defaultTheme = 'structyl',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n enableTransitions = true,\n themes: customThemes,\n attribute = 'data-theme',\n } = props;\n\n const themes = React.useMemo(\n () => ({ ...defaultThemes, ...customThemes }),\n [customThemes],\n );\n\n const [theme, setThemeState] = React.useState<Theme>(defaultTheme);\n const [mode, setModeState] = React.useState<ThemeMode>(defaultMode);\n const [systemMode, setSystemMode] = React.useState<ResolvedMode>('light');\n\n // Hydrate from storage on mount\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n const stored = window.localStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as { theme?: Theme; mode?: ThemeMode };\n if (parsed.theme) setThemeState(parsed.theme);\n if (parsed.mode) setModeState(parsed.mode);\n }\n } catch {\n // ignore corrupted storage\n }\n }, [storageKey]);\n\n // Track system preference\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const update = () => setSystemMode(mql.matches ? 'dark' : 'light');\n update();\n mql.addEventListener('change', update);\n return () => mql.removeEventListener('change', update);\n }, []);\n\n const resolvedMode: ResolvedMode = mode === 'system' ? systemMode : mode;\n\n // Apply data-* attributes and inject CSS variables\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n\n if (!enableTransitions) {\n const css = document.createElement('style');\n css.appendChild(\n document.createTextNode(\n '*,*::before,*::after{transition:none!important;animation:none!important}',\n ),\n );\n document.head.appendChild(css);\n // force reflow then remove\n void window.getComputedStyle(document.body);\n requestAnimationFrame(() => document.head.removeChild(css));\n }\n\n root.setAttribute(attribute, theme);\n root.setAttribute('data-mode', resolvedMode);\n root.style.colorScheme = resolvedMode;\n\n // Inject CSS variables from current theme\n const cfg = themes[theme];\n if (cfg) {\n const tokens = cfg[resolvedMode];\n for (const [key, value] of Object.entries(tokens)) {\n root.style.setProperty(`--color-${key}`, value);\n }\n }\n }, [theme, resolvedMode, themes, attribute, enableTransitions]);\n\n // Persist to storage on change\n React.useEffect(() => {\n if (!storageKey || typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify({ theme, mode }));\n } catch {\n // storage may be unavailable (Safari private mode, etc.)\n }\n }, [theme, mode, storageKey]);\n\n const value = React.useMemo<ThemeContextValue>(\n () => ({\n theme,\n setTheme: setThemeState,\n mode,\n setMode: setModeState,\n resolvedMode,\n themes: Object.keys(themes),\n }),\n [theme, mode, resolvedMode, themes],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport { ThemeContext };\n","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from './theme-provider';\n\nexport function useTheme() {\n const context = React.useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a <ThemeProvider>');\n }\n return context;\n}\n","import * as React from 'react';\nimport type { ThemeMode } from './types';\nimport { defaultThemes } from './themes';\n\ninterface ThemeScriptProps {\n defaultTheme?: string;\n defaultMode?: ThemeMode;\n storageKey?: string;\n attribute?: string;\n}\n\nfunction tokensToVars(tokens: Record<string, string>): string {\n return Object.entries(tokens)\n .map(([k, v]) => `--color-${k}:${v}`)\n .join(';');\n}\n\n/**\n * Renders a <style> block with the default theme's CSS variables plus an inline\n * script that updates them from localStorage before first paint. Place inside\n * <head> of your root layout to prevent flash of unstyled content.\n */\nexport function ThemeScript({\n defaultTheme = 'structyl',\n defaultMode = 'system',\n storageKey = 'structyl-theme',\n attribute = 'data-theme',\n}: ThemeScriptProps): React.JSX.Element {\n const cfg = defaultThemes[defaultTheme as keyof typeof defaultThemes];\n const lightVars = cfg ? tokensToVars(cfg.light as Record<string, string>) : '';\n const darkVars = cfg ? tokensToVars(cfg.dark as Record<string, string>) : '';\n\n // Static CSS covers the default theme before JS runs (SSR + initial paint).\n // [data-mode=\"dark\"] overrides are picked up as soon as the script below sets\n // the attribute on <html>, which happens before the browser paints.\n const staticCss = lightVars\n ? `:root{${lightVars}}:root[data-mode=\"dark\"]{${darkVars}}`\n : '';\n\n const script = `\n(function(){\n try {\n var stored = JSON.parse(localStorage.getItem(${JSON.stringify(storageKey)}) || '{}');\n var theme = stored.theme || ${JSON.stringify(defaultTheme)};\n var mode = stored.mode || ${JSON.stringify(defaultMode)};\n var resolved = mode === 'system'\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n : mode;\n var root = document.documentElement;\n root.setAttribute(${JSON.stringify(attribute)}, theme);\n root.setAttribute('data-mode', resolved);\n root.style.colorScheme = resolved;\n } catch (e) {}\n})();`.trim();\n\n return (\n <>\n {staticCss && (\n <style dangerouslySetInnerHTML={{ __html: staticCss }} suppressHydrationWarning />\n )}\n <script dangerouslySetInnerHTML={{ __html: script }} suppressHydrationWarning />\n </>\n );\n}\n","/**\n * Color accent presets for @structyl/themes.\n *\n * Built-in presets cover 10 common accent colors. Users can extend the list\n * by creating additional `ColorPreset` objects and passing them to\n * `useColorPreset({ extraPresets: [...] })` or calling `applyColorPreset`\n * with any arbitrary hex color.\n */\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\n/** A single accent-color preset. */\nexport interface ColorPreset {\n /** Unique machine-readable identifier. */\n id: string;\n /** Human-readable display name. */\n name: string;\n /** Primary hex color value (e.g. `'#6366f1'`). */\n hex: string;\n}\n\n/* ── Built-in catalogue ─────────────────────────────────────────────────────── */\n\n/**\n * The 10 built-in accent presets shipped with @structyl/themes.\n * Typed `as const` so that `ColorPresetId` is a precise union of literal IDs.\n */\nexport const COLOR_PRESETS = [\n { id: 'structyl', name: 'Structyl', hex: '#5754a3' },\n { id: 'indigo', name: 'Indigo', hex: '#6366f1' },\n { id: 'ocean', name: 'Ocean', hex: '#0284c7' },\n { id: 'rose', name: 'Rose', hex: '#e11d48' },\n { id: 'forest', name: 'Forest', hex: '#16a34a' },\n { id: 'sunset', name: 'Sunset', hex: '#f97316' },\n { id: 'violet', name: 'Violet', hex: '#7c3aed' },\n { id: 'slate', name: 'Slate', hex: '#475569' },\n { id: 'ember', name: 'Ember', hex: '#be123c' },\n { id: 'zinc', name: 'Zinc', hex: '#71717a' },\n] as const satisfies ReadonlyArray<ColorPreset>;\n\n/** Union of all built-in preset IDs (e.g. `'structyl' | 'indigo' | 'ocean' | ...`). */\nexport type ColorPresetId = (typeof COLOR_PRESETS)[number]['id'];\n\n/**\n * Create a custom preset object. Useful for building typed preset lists\n * that will be passed to `useColorPreset({ extraPresets: [...] })`.\n *\n * @example\n * const myPreset = createColorPreset('brand', 'My Brand', '#ff5500');\n */\nexport function createColorPreset(id: string, name: string, hex: string): ColorPreset {\n return { id, name, hex };\n}\n\n/* ── HSL utilities (zero deps) ──────────────────────────────────────────────── */\n\nfunction hexToHslParts(hex: string): { h: number; s: number; l: number } {\n const h = hex.replace('#', '');\n const r = parseInt(h.slice(0, 2), 16) / 255;\n const g = parseInt(h.slice(2, 4), 16) / 255;\n const b = parseInt(h.slice(4, 6), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n let sat = 0;\n const lum = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n sat = lum > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === r) hue = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n else if (max === g) hue = ((b - r) / d + 2) / 6;\n else hue = ((r - g) / d + 4) / 6;\n }\n return { h: Math.round(hue * 360), s: Math.round(sat * 100), l: Math.round(lum * 100) };\n}\n\nfunction hslStr({ h, s, l }: { h: number; s: number; l: number }): string {\n return `${h} ${s}% ${l}%`;\n}\n\nfunction shiftL(p: { h: number; s: number; l: number }, d: number) {\n return { ...p, l: Math.max(2, Math.min(97, p.l + d)) };\n}\n\nfunction relativeLuminance(hex: string): number {\n const h = hex.replace('#', '');\n const lin = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n };\n return (\n 0.2126 * lin(parseInt(h.slice(0, 2), 16)) +\n 0.7152 * lin(parseInt(h.slice(2, 4), 16)) +\n 0.0722 * lin(parseInt(h.slice(4, 6), 16))\n );\n}\n\n/* ── DOM utilities ──────────────────────────────────────────────────────────── */\n\n/** CSS custom properties overridden by `applyColorPreset`. */\nconst PRESET_CSS_VARS = [\n '--color-primary',\n '--color-ring',\n '--color-primary-hover',\n '--color-primary-active',\n '--color-primary-fg',\n] as const;\n\n/**\n * Apply an accent preset to the document root by overriding the five\n * primary-color CSS custom properties. Safe to call on every theme/mode\n * change — the ThemeProvider will reset base vars first, then this re-applies.\n *\n * No-op in SSR environments.\n *\n * @param hex - The hex color string (e.g. `'#6366f1'`).\n */\nexport function applyColorPreset(hex: string): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const p = hexToHslParts(hex);\n const fg = relativeLuminance(hex) > 0.179 ? '222 47% 11%' : '0 0% 100%';\n root.style.setProperty('--color-primary', hslStr(p));\n root.style.setProperty('--color-ring', hslStr(p));\n root.style.setProperty('--color-primary-hover', hslStr(shiftL(p, 6)));\n root.style.setProperty('--color-primary-active', hslStr(shiftL(p, -8)));\n root.style.setProperty('--color-primary-fg', fg);\n}\n\n/**\n * Remove all CSS custom properties applied by `applyColorPreset`,\n * restoring whatever values the active ThemeProvider theme supplies.\n *\n * No-op in SSR environments.\n */\nexport function clearColorPreset(): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n PRESET_CSS_VARS.forEach(k => root.style.removeProperty(k));\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from './use-theme';\nimport {\n COLOR_PRESETS,\n applyColorPreset,\n clearColorPreset,\n type ColorPreset,\n} from './color-presets';\n\nconst DEFAULT_STORAGE_KEY = 'structyl-color-preset';\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface UseColorPresetOptions {\n /**\n * Custom presets to add on top of the 10 built-ins.\n * Built-ins always come first in `presets`.\n *\n * @example\n * const brandPreset = createColorPreset('brand', 'Brand Blue', '#1a6cf0');\n * const { setPreset } = useColorPreset({ extraPresets: [brandPreset] });\n */\n extraPresets?: ColorPreset[];\n\n /**\n * localStorage key used to persist the active preset across page loads.\n * Override if you need multiple independent pickers on the same origin.\n *\n * @default 'structyl-color-preset'\n */\n storageKey?: string;\n\n /**\n * Preset id to activate on first load when nothing is stored yet. Pass e.g.\n * `'structyl'` to make the brand accent the default-selected preset. Once the\n * user picks (or clears) a preset, that stored choice takes over.\n *\n * @default undefined (no preset active — uses the ThemeProvider base theme)\n */\n defaultPresetId?: string;\n}\n\nexport interface UseColorPresetReturn {\n /** All available presets: built-ins first, then any `extraPresets`. */\n presets: ColorPreset[];\n /** ID of the currently active preset, or `null` when using the default theme. */\n activeId: string | null;\n /** Full preset object for the active ID, or `null`. */\n activePreset: ColorPreset | null;\n /**\n * Activate a preset by its `id` and `hex` color.\n * Applies CSS variables immediately and persists to localStorage.\n */\n setPreset: (id: string, hex: string) => void;\n /**\n * Clear the active preset, restoring the ThemeProvider's base theme colors.\n * Also removes the stored value from localStorage.\n */\n clearPreset: () => void;\n}\n\n/* ── Hook ───────────────────────────────────────────────────────────────────── */\n\n/**\n * Manages an accent-color preset on top of the active structyl theme.\n *\n * Must be used inside a `<ThemeProvider>`. Persists the selection to\n * localStorage and re-applies it whenever the base theme or color-mode\n * changes (because ThemeProvider resets `--color-primary` on change).\n *\n * @example\n * function AccentPicker() {\n * const { presets, activeId, setPreset, clearPreset } = useColorPreset();\n * return (\n * <>\n * {presets.map(p => (\n * <button key={p.id} onClick={() => setPreset(p.id, p.hex)}\n * style={{ background: p.hex }}>\n * {p.name}\n * </button>\n * ))}\n * {activeId && <button onClick={clearPreset}>Reset</button>}\n * </>\n * );\n * }\n *\n * @example Adding custom presets\n * const brandPreset = createColorPreset('brand', 'Company Blue', '#1a6cf0');\n * const { presets } = useColorPreset({ extraPresets: [brandPreset] });\n */\nexport function useColorPreset(options: UseColorPresetOptions = {}): UseColorPresetReturn {\n const { extraPresets = [], storageKey = DEFAULT_STORAGE_KEY, defaultPresetId } = options;\n\n // Subscribe to the theme context — also enforces that this hook is used\n // inside a <ThemeProvider> (useTheme throws otherwise).\n useTheme();\n\n const allPresets: ColorPreset[] = [...(COLOR_PRESETS as unknown as ColorPreset[]), ...extraPresets];\n\n // Default to `defaultPresetId` (when it's a real preset) on first load, until\n // a stored selection is hydrated from localStorage below.\n const [activeId, setActiveId] = useState<string | null>(\n defaultPresetId && allPresets.some((p) => p.id === defaultPresetId) ? defaultPresetId : null,\n );\n\n // Hex of the active preset, mirrored into a ref so the mount-only\n // MutationObserver below always sees the current selection.\n const activeHex = allPresets.find(p => p.id === activeId)?.hex ?? null;\n const activeHexRef = useRef<string | null>(activeHex);\n activeHexRef.current = activeHex;\n\n // Hydrate from localStorage on mount\n useEffect(() => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored && allPresets.some(p => p.id === stored)) {\n setActiveId(stored);\n }\n } catch {\n // localStorage unavailable (e.g. private browsing with strict settings)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storageKey]);\n\n // Apply when the selection changes (covers localStorage hydration; setPreset\n // also applies directly for instant feedback).\n useEffect(() => {\n if (activeHex) applyColorPreset(activeHex);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeId]);\n\n // ThemeProvider rewrites the base --color-* vars in its OWN effect which,\n // being the parent, runs AFTER this child hook's effects on every theme/mode\n // switch — clobbering the accent override (this is why the preset was \"lost\"\n // after toggling light/dark). Rather than depend on effect ordering, watch the\n // data-theme / data-mode attributes ThemeProvider sets on <html> and re-apply\n // the accent when they change: the MutationObserver callback runs as a\n // microtask after ThemeProvider's synchronous token write, so the accent wins\n // with no flash before paint.\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const observer = new MutationObserver(() => {\n if (activeHexRef.current) applyColorPreset(activeHexRef.current);\n });\n observer.observe(root, { attributes: true, attributeFilter: ['data-theme', 'data-mode'] });\n return () => observer.disconnect();\n }, []);\n\n const setPreset = useCallback((id: string, hex: string) => {\n setActiveId(id);\n applyColorPreset(hex);\n try { localStorage.setItem(storageKey, id); } catch { /* ignore */ }\n }, [storageKey]);\n\n const clearPreset = useCallback(() => {\n setActiveId(null);\n clearColorPreset();\n try { localStorage.removeItem(storageKey); } catch { /* ignore */ }\n }, [storageKey]);\n\n const activePreset = allPresets.find(p => p.id === activeId) ?? null;\n\n return { presets: allPresets, activeId, activePreset, setPreset, clearPreset };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@structyl/themes",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/imirfanul/structyl.git",
|
|
7
|
+
"directory": "packages/themes"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://www.structyl.com",
|
|
10
|
+
"bugs": "https://github.com/imirfanul/structyl/issues",
|
|
11
|
+
"author": {
|
|
12
|
+
"name": "Mohammed Irfanul Alam Tanveer",
|
|
13
|
+
"url": "https://www.imirfanul.com"
|
|
14
|
+
},
|
|
4
15
|
"publishConfig": {
|
|
5
16
|
"access": "public"
|
|
6
17
|
},
|