@structyl/themes 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +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"]}
@@ -0,0 +1,425 @@
1
+ import * as React from 'react';
2
+
3
+ type ThemeMode = 'light' | 'dark' | 'system';
4
+ type ResolvedMode = 'light' | 'dark';
5
+ type Theme = string;
6
+ interface ThemeTokens {
7
+ bg: string;
8
+ fg: string;
9
+ card: string;
10
+ 'card-fg': string;
11
+ popover: string;
12
+ 'popover-fg': string;
13
+ primary: string;
14
+ 'primary-fg': string;
15
+ 'primary-hover': string;
16
+ 'primary-active': string;
17
+ secondary: string;
18
+ 'secondary-fg': string;
19
+ muted: string;
20
+ 'muted-fg': string;
21
+ accent: string;
22
+ 'accent-fg': string;
23
+ destructive: string;
24
+ 'destructive-fg': string;
25
+ success: string;
26
+ 'success-fg': string;
27
+ warning: string;
28
+ 'warning-fg': string;
29
+ info: string;
30
+ 'info-fg': string;
31
+ border: string;
32
+ 'border-strong': string;
33
+ input: string;
34
+ ring: string;
35
+ overlay: string;
36
+ shadow: string;
37
+ 'primary-light': string;
38
+ 'primary-dark': string;
39
+ 'primary-contrast': string;
40
+ 'primary-dark-bg': string;
41
+ 'secondary-light': string;
42
+ 'secondary-dark': string;
43
+ 'secondary-contrast': string;
44
+ 'secondary-dark-bg': string;
45
+ 'error-light': string;
46
+ 'error-dark': string;
47
+ 'error-contrast': string;
48
+ 'error-dark-bg': string;
49
+ 'warning-light': string;
50
+ 'warning-dark': string;
51
+ 'warning-contrast': string;
52
+ 'warning-dark-bg': string;
53
+ 'info-light': string;
54
+ 'info-dark': string;
55
+ 'info-contrast': string;
56
+ 'info-dark-bg': string;
57
+ 'success-light': string;
58
+ 'success-dark': string;
59
+ 'success-contrast': string;
60
+ 'success-dark-bg': string;
61
+ 'primary-state-contained': string;
62
+ 'primary-state-outlined': string;
63
+ 'primary-state-resting': string;
64
+ 'primary-shade-12': string;
65
+ 'primary-shade-16': string;
66
+ 'secondary-state-contained': string;
67
+ 'secondary-state-outlined': string;
68
+ 'secondary-state-resting': string;
69
+ 'secondary-shade-12': string;
70
+ 'secondary-shade-16': string;
71
+ 'error-state-contained': string;
72
+ 'error-state-outlined': string;
73
+ 'error-state-resting': string;
74
+ 'error-alert-bg': string;
75
+ 'error-alert-content': string;
76
+ 'error-shade-12': string;
77
+ 'error-shade-16': string;
78
+ 'warning-state-contained': string;
79
+ 'warning-state-outlined': string;
80
+ 'warning-state-resting': string;
81
+ 'warning-alert-bg': string;
82
+ 'warning-alert-content': string;
83
+ 'warning-shade-12': string;
84
+ 'warning-shade-16': string;
85
+ 'info-state-contained': string;
86
+ 'info-state-outlined': string;
87
+ 'info-state-resting': string;
88
+ 'info-alert-bg': string;
89
+ 'info-alert-content': string;
90
+ 'info-shade-12': string;
91
+ 'info-shade-16': string;
92
+ 'success-state-contained': string;
93
+ 'success-state-outlined': string;
94
+ 'success-state-resting': string;
95
+ 'success-alert-bg': string;
96
+ 'success-alert-content': string;
97
+ 'success-shade-12': string;
98
+ 'success-shade-16': string;
99
+ text: string;
100
+ 'text-secondary': string;
101
+ 'text-disabled': string;
102
+ 'text-info': string;
103
+ 'text-fill': string;
104
+ 'text-shade-12': string;
105
+ 'text-shade-16': string;
106
+ surface: string;
107
+ 'surface-paper': string;
108
+ divider: string;
109
+ 'outlined-border': string;
110
+ 'input-line': string;
111
+ 'action-active': string;
112
+ 'action-hover': string;
113
+ 'action-selected': string;
114
+ 'action-disabled': string;
115
+ 'action-disabled-bg': string;
116
+ 'action-focus': string;
117
+ backdrop: string;
118
+ 'rating-active': string;
119
+ 'snackbar-bg': string;
120
+ 'map-grid': string;
121
+ 'table-top-header': string;
122
+ 'table-header': string;
123
+ 'table-row': string;
124
+ 'table-col-border': string;
125
+ 'table-border': string;
126
+ [key: string]: string;
127
+ }
128
+ interface ThemeConfig {
129
+ light: Partial<ThemeTokens> & Record<string, string>;
130
+ dark: Partial<ThemeTokens> & Record<string, string>;
131
+ }
132
+
133
+ interface ThemeContextValue {
134
+ theme: Theme;
135
+ setTheme: (theme: Theme) => void;
136
+ mode: ThemeMode;
137
+ setMode: (mode: ThemeMode) => void;
138
+ resolvedMode: ResolvedMode;
139
+ themes: string[];
140
+ }
141
+ interface ThemeProviderProps {
142
+ children: React.ReactNode;
143
+ defaultTheme?: Theme;
144
+ defaultMode?: ThemeMode;
145
+ storageKey?: string | false;
146
+ enableTransitions?: boolean;
147
+ themes?: Record<string, ThemeConfig>;
148
+ attribute?: string;
149
+ }
150
+ declare function ThemeProvider(props: ThemeProviderProps): React.JSX.Element;
151
+
152
+ declare function useTheme(): ThemeContextValue;
153
+
154
+ interface ThemeScriptProps {
155
+ defaultTheme?: string;
156
+ defaultMode?: ThemeMode;
157
+ storageKey?: string;
158
+ attribute?: string;
159
+ }
160
+ /**
161
+ * Renders a <style> block with the default theme's CSS variables plus an inline
162
+ * script that updates them from localStorage before first paint. Place inside
163
+ * <head> of your root layout to prevent flash of unstyled content.
164
+ */
165
+ declare function ThemeScript({ defaultTheme, defaultMode, storageKey, attribute, }: ThemeScriptProps): React.JSX.Element;
166
+
167
+ interface PaletteColor {
168
+ main: string;
169
+ light: string;
170
+ dark: string;
171
+ contrastText: string;
172
+ darkBackground?: string;
173
+ state: {
174
+ containedHover: string;
175
+ outlinedHover: string;
176
+ outlinedResting: string;
177
+ };
178
+ shade: {
179
+ 12: string;
180
+ 16: string;
181
+ };
182
+ }
183
+ interface AlertPaletteColor extends PaletteColor {
184
+ alert: {
185
+ background: string;
186
+ content: string;
187
+ };
188
+ }
189
+ interface StructylScale {
190
+ '50': string;
191
+ '100': string;
192
+ '200': string;
193
+ '300': string;
194
+ '400': string;
195
+ '500': string;
196
+ '600': string;
197
+ '700': string;
198
+ '800': string;
199
+ '900': string;
200
+ A100: string;
201
+ A200: string;
202
+ A400: string;
203
+ A700: string;
204
+ }
205
+ interface StaticPalette {
206
+ yellow: StructylScale;
207
+ amber: StructylScale;
208
+ blue: StructylScale;
209
+ blueGrey: StructylScale;
210
+ brown: StructylScale;
211
+ teal: StructylScale;
212
+ red: StructylScale;
213
+ purple: StructylScale;
214
+ pink: StructylScale;
215
+ orange: StructylScale;
216
+ lime: StructylScale;
217
+ lightGreen: StructylScale;
218
+ cyan: StructylScale;
219
+ deepOrange: StructylScale;
220
+ deepPurple: StructylScale;
221
+ green: StructylScale;
222
+ grey: StructylScale;
223
+ indigo: StructylScale;
224
+ lightBlue: StructylScale;
225
+ }
226
+
227
+ declare const defaultThemes: Record<string, ThemeConfig>;
228
+
229
+ declare const sharedSemanticLight: Partial<ThemeTokens>;
230
+ declare const sharedSemanticDark: Partial<ThemeTokens>;
231
+ declare const staticPalette: StaticPalette;
232
+ declare const generalColors: {
233
+ readonly 'yellow-golden': "rgba(255, 215, 0, 0.6)";
234
+ readonly 'yellow-pale': "rgba(255, 255, 153, 0.4)";
235
+ readonly 'yellow-amber': "rgba(255, 191, 0, 0.7)";
236
+ readonly 'yellow-sunshine': "rgba(255, 239, 0, 0.5)";
237
+ readonly 'yellow-light': "rgba(255, 255, 0, 0.5)";
238
+ readonly 'yellow-warm': "rgba(255, 204, 0, 0.8)";
239
+ readonly 'yellow-soft': "rgba(255, 229, 153, 0.7)";
240
+ readonly 'red-rose': "rgba(255, 51, 51, 0.5)";
241
+ readonly 'red-crimson': "rgba(220, 20, 60, 0.6)";
242
+ readonly 'red-light-coral': "rgba(240, 128, 128, 0.5)";
243
+ readonly 'red-fire-brick': "rgba(178, 34, 34, 0.8)";
244
+ readonly 'red-bright': "rgba(255, 0, 0, 0.7)";
245
+ readonly 'red-soft-coral': "rgba(255, 102, 102, 0.6)";
246
+ readonly 'red-dark': "rgba(204, 0, 0, 0.8)";
247
+ readonly 'blue-turquoise': "rgba(64, 224, 208, 0.6)";
248
+ readonly 'blue-dodger': "rgba(30, 144, 255, 0.5)";
249
+ readonly 'blue-navy': "rgba(0, 0, 128, 0.8)";
250
+ readonly 'blue-steel': "rgba(70, 130, 180, 0.7)";
251
+ readonly 'blue-sky': "rgba(0, 153, 255, 0.5)";
252
+ readonly 'blue-light': "rgba(51, 204, 255, 0.7)";
253
+ readonly 'blue-deep': "rgba(0, 51, 204, 0.8)";
254
+ readonly 'green-lime': "rgba(50, 205, 50, 0.5)";
255
+ readonly 'green-pale': "rgba(152, 251, 152, 0.4)";
256
+ readonly 'green-forest': "rgba(34, 139, 34, 0.7)";
257
+ readonly 'green-olive': "rgba(128, 128, 0, 0.6)";
258
+ readonly 'green-fresh': "rgba(0, 204, 0, 0.6)";
259
+ readonly 'green-soft-mint': "rgba(102, 255, 153, 0.7)";
260
+ readonly 'green-dark': "rgba(0, 153, 76, 0.8)";
261
+ readonly 'orange-tangerine': "rgba(255, 140, 0, 0.6)";
262
+ readonly 'orange-apricot': "rgba(251, 206, 177, 0.5)";
263
+ readonly 'orange-burnt': "rgba(204, 85, 0, 0.7)";
264
+ readonly 'orange-carrot': "rgba(237, 145, 33, 0.6)";
265
+ readonly 'orange-bright': "rgba(255, 102, 0, 0.7)";
266
+ readonly 'orange-soft-peach': "rgba(255, 178, 102, 0.6)";
267
+ readonly 'orange-deep': "rgba(204, 85, 0, 0.8)";
268
+ };
269
+
270
+ /**
271
+ * Color accent presets for @structyl/themes.
272
+ *
273
+ * Built-in presets cover 10 common accent colors. Users can extend the list
274
+ * by creating additional `ColorPreset` objects and passing them to
275
+ * `useColorPreset({ extraPresets: [...] })` or calling `applyColorPreset`
276
+ * with any arbitrary hex color.
277
+ */
278
+ /** A single accent-color preset. */
279
+ interface ColorPreset {
280
+ /** Unique machine-readable identifier. */
281
+ id: string;
282
+ /** Human-readable display name. */
283
+ name: string;
284
+ /** Primary hex color value (e.g. `'#6366f1'`). */
285
+ hex: string;
286
+ }
287
+ /**
288
+ * The 10 built-in accent presets shipped with @structyl/themes.
289
+ * Typed `as const` so that `ColorPresetId` is a precise union of literal IDs.
290
+ */
291
+ declare const COLOR_PRESETS: readonly [{
292
+ readonly id: "structyl";
293
+ readonly name: "Structyl";
294
+ readonly hex: "#5754a3";
295
+ }, {
296
+ readonly id: "indigo";
297
+ readonly name: "Indigo";
298
+ readonly hex: "#6366f1";
299
+ }, {
300
+ readonly id: "ocean";
301
+ readonly name: "Ocean";
302
+ readonly hex: "#0284c7";
303
+ }, {
304
+ readonly id: "rose";
305
+ readonly name: "Rose";
306
+ readonly hex: "#e11d48";
307
+ }, {
308
+ readonly id: "forest";
309
+ readonly name: "Forest";
310
+ readonly hex: "#16a34a";
311
+ }, {
312
+ readonly id: "sunset";
313
+ readonly name: "Sunset";
314
+ readonly hex: "#f97316";
315
+ }, {
316
+ readonly id: "violet";
317
+ readonly name: "Violet";
318
+ readonly hex: "#7c3aed";
319
+ }, {
320
+ readonly id: "slate";
321
+ readonly name: "Slate";
322
+ readonly hex: "#475569";
323
+ }, {
324
+ readonly id: "ember";
325
+ readonly name: "Ember";
326
+ readonly hex: "#be123c";
327
+ }, {
328
+ readonly id: "zinc";
329
+ readonly name: "Zinc";
330
+ readonly hex: "#71717a";
331
+ }];
332
+ /** Union of all built-in preset IDs (e.g. `'structyl' | 'indigo' | 'ocean' | ...`). */
333
+ type ColorPresetId = (typeof COLOR_PRESETS)[number]['id'];
334
+ /**
335
+ * Create a custom preset object. Useful for building typed preset lists
336
+ * that will be passed to `useColorPreset({ extraPresets: [...] })`.
337
+ *
338
+ * @example
339
+ * const myPreset = createColorPreset('brand', 'My Brand', '#ff5500');
340
+ */
341
+ declare function createColorPreset(id: string, name: string, hex: string): ColorPreset;
342
+ /**
343
+ * Apply an accent preset to the document root by overriding the five
344
+ * primary-color CSS custom properties. Safe to call on every theme/mode
345
+ * change — the ThemeProvider will reset base vars first, then this re-applies.
346
+ *
347
+ * No-op in SSR environments.
348
+ *
349
+ * @param hex - The hex color string (e.g. `'#6366f1'`).
350
+ */
351
+ declare function applyColorPreset(hex: string): void;
352
+ /**
353
+ * Remove all CSS custom properties applied by `applyColorPreset`,
354
+ * restoring whatever values the active ThemeProvider theme supplies.
355
+ *
356
+ * No-op in SSR environments.
357
+ */
358
+ declare function clearColorPreset(): void;
359
+
360
+ interface UseColorPresetOptions {
361
+ /**
362
+ * Custom presets to add on top of the 10 built-ins.
363
+ * Built-ins always come first in `presets`.
364
+ *
365
+ * @example
366
+ * const brandPreset = createColorPreset('brand', 'Brand Blue', '#1a6cf0');
367
+ * const { setPreset } = useColorPreset({ extraPresets: [brandPreset] });
368
+ */
369
+ extraPresets?: ColorPreset[];
370
+ /**
371
+ * localStorage key used to persist the active preset across page loads.
372
+ * Override if you need multiple independent pickers on the same origin.
373
+ *
374
+ * @default 'structyl-color-preset'
375
+ */
376
+ storageKey?: string;
377
+ }
378
+ interface UseColorPresetReturn {
379
+ /** All available presets: built-ins first, then any `extraPresets`. */
380
+ presets: ColorPreset[];
381
+ /** ID of the currently active preset, or `null` when using the default theme. */
382
+ activeId: string | null;
383
+ /** Full preset object for the active ID, or `null`. */
384
+ activePreset: ColorPreset | null;
385
+ /**
386
+ * Activate a preset by its `id` and `hex` color.
387
+ * Applies CSS variables immediately and persists to localStorage.
388
+ */
389
+ setPreset: (id: string, hex: string) => void;
390
+ /**
391
+ * Clear the active preset, restoring the ThemeProvider's base theme colors.
392
+ * Also removes the stored value from localStorage.
393
+ */
394
+ clearPreset: () => void;
395
+ }
396
+ /**
397
+ * Manages an accent-color preset on top of the active structyl theme.
398
+ *
399
+ * Must be used inside a `<ThemeProvider>`. Persists the selection to
400
+ * localStorage and re-applies it whenever the base theme or color-mode
401
+ * changes (because ThemeProvider resets `--color-primary` on change).
402
+ *
403
+ * @example
404
+ * function AccentPicker() {
405
+ * const { presets, activeId, setPreset, clearPreset } = useColorPreset();
406
+ * return (
407
+ * <>
408
+ * {presets.map(p => (
409
+ * <button key={p.id} onClick={() => setPreset(p.id, p.hex)}
410
+ * style={{ background: p.hex }}>
411
+ * {p.name}
412
+ * </button>
413
+ * ))}
414
+ * {activeId && <button onClick={clearPreset}>Reset</button>}
415
+ * </>
416
+ * );
417
+ * }
418
+ *
419
+ * @example Adding custom presets
420
+ * const brandPreset = createColorPreset('brand', 'Company Blue', '#1a6cf0');
421
+ * const { presets } = useColorPreset({ extraPresets: [brandPreset] });
422
+ */
423
+ declare function useColorPreset(options?: UseColorPresetOptions): UseColorPresetReturn;
424
+
425
+ export { type AlertPaletteColor, COLOR_PRESETS, type ColorPreset, type ColorPresetId, type PaletteColor, type StaticPalette, type StructylScale, type Theme, type ThemeConfig, type ThemeMode, ThemeProvider, ThemeScript, type ThemeTokens, type UseColorPresetOptions, type UseColorPresetReturn, applyColorPreset, clearColorPreset, createColorPreset, defaultThemes, generalColors, sharedSemanticDark, sharedSemanticLight, staticPalette, useColorPreset, useTheme };