@brycks/core-front 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";const D=require("react/jsx-runtime"),n=require("react"),r=require("./colors-Bp6ROxvx.cjs"),H={name:"light",colors:{background:{app:r.neutrals.white,subtle:r.neutrals.gray50,muted:r.neutrals.gray100,elevated:r.neutrals.white,overlay:"rgba(0, 0, 0, 0.4)",inverse:r.neutrals.gray950},foreground:{default:r.neutrals.gray950,muted:r.neutrals.gray600,subtle:r.neutrals.gray500,disabled:r.neutrals.gray400,inverse:r.neutrals.white,link:r.primary[600]},border:{default:r.neutrals.gray200,muted:r.neutrals.gray100,strong:r.neutrals.gray300,focus:r.primary[500]},primary:{default:r.primary[600],hover:r.primary[700],active:r.primary[800],muted:r.primary[50],softHover:r.primary[100],foreground:r.neutrals.white},accent:{default:r.accent[500],hover:r.accent[600],active:r.accent[700],muted:r.accent[50],softHover:r.accent[100],foreground:r.neutrals.white},success:{default:r.success[600],hover:r.success[700],muted:r.success[50],softHover:r.success[100],foreground:r.neutrals.white},warning:{default:r.warning[500],hover:r.warning[600],muted:r.warning[50],softHover:r.warning[100],foreground:r.neutrals.gray950},error:{default:r.error[600],hover:r.error[700],muted:r.error[50],softHover:r.error[100],foreground:r.neutrals.white},info:{default:r.info[600],hover:r.info[700],muted:r.info[50],softHover:r.info[100],foreground:r.neutrals.white}}},T={name:"dark",colors:{background:{app:r.neutrals.black,subtle:r.neutrals.gray950,muted:r.neutrals.gray900,elevated:r.neutrals.gray800,overlay:"rgba(0, 0, 0, 0.7)",inverse:r.neutrals.white},foreground:{default:r.neutrals.gray100,muted:r.neutrals.gray400,subtle:r.neutrals.gray500,disabled:r.neutrals.gray600,inverse:r.neutrals.gray950,link:r.primary[400]},border:{default:r.neutrals.gray800,muted:r.neutrals.gray900,strong:r.neutrals.gray700,focus:r.primary[400]},primary:{default:r.primary[500],hover:r.primary[400],active:r.primary[300],muted:"rgba(85, 120, 244, 0.15)",softHover:"rgba(85, 120, 244, 0.25)",foreground:r.neutrals.white},accent:{default:r.accent[400],hover:r.accent[300],active:r.accent[200],muted:"rgba(248, 101, 69, 0.15)",softHover:"rgba(248, 101, 69, 0.25)",foreground:r.neutrals.white},success:{default:r.success[500],hover:r.success[400],muted:"rgba(16, 185, 129, 0.15)",softHover:"rgba(16, 185, 129, 0.25)",foreground:r.neutrals.white},warning:{default:r.warning[400],hover:r.warning[300],muted:"rgba(245, 158, 11, 0.15)",softHover:"rgba(245, 158, 11, 0.25)",foreground:r.neutrals.gray950},error:{default:r.error[500],hover:r.error[400],muted:"rgba(239, 68, 68, 0.15)",softHover:"rgba(239, 68, 68, 0.25)",foreground:r.neutrals.white},info:{default:r.info[500],hover:r.info[400],muted:"rgba(6, 182, 212, 0.15)",softHover:"rgba(6, 182, 212, 0.25)",foreground:r.neutrals.white}}},h=n.createContext(null),M="brycks-theme-mode";function S(a,e){return e?Object.keys(a).reduce((c,o)=>{const l=a[o],d=e[o];return typeof l=="object"&&typeof d=="object"?c[o]={...l,...d}:d!==void 0?c[o]=d:c[o]=l,c},{}):a}function x({children:a,config:e,skipCSSVariables:c=!1}){const[o,l]=n.useState(()=>typeof window>"u"?(e==null?void 0:e.defaultMode)??"system":localStorage.getItem(M)??(e==null?void 0:e.defaultMode)??"system"),[d,C]=n.useState(()=>typeof window>"u"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light");n.useEffect(()=>{const t=window.matchMedia("(prefers-color-scheme: dark)"),u=y=>{C(y.matches?"dark":"light")};return t.addEventListener("change",u),()=>t.removeEventListener("change",u)},[]);const s=o==="system"?d:o,f=n.useMemo(()=>{const t=s==="dark"?T:H,u=s==="dark"?e==null?void 0:e.dark:e==null?void 0:e.light;return u?{name:t.name,colors:S(t.colors,u)}:t},[s,e]),v=n.useCallback(t=>{l(t),typeof window<"u"&&localStorage.setItem(M,t)},[]),k=n.useCallback(()=>{v(s==="dark"?"light":"dark")},[s,v]);n.useEffect(()=>{if(c||typeof document>"u")return;const t=document.documentElement;t.style.colorScheme=s,t.dataset.theme=s;const u=(b,g="")=>Object.entries(b).reduce((m,[w,i])=>{const p=g?`${g}-${w}`:w;return typeof i=="object"&&i!==null?Object.assign(m,u(i,p)):typeof i=="string"&&(m[`--brycks-${p}`]=i),m},{}),y=u(f.colors);Object.entries(y).forEach(([b,g])=>{t.style.setProperty(b,g)})},[f,s,c]);const j=n.useMemo(()=>({theme:f,mode:o,resolvedMode:s,setMode:v,toggleMode:k}),[f,o,s,v,k]);return D.jsx(h.Provider,{value:j,children:a})}function E(){const a=n.useContext(h);if(!a)throw new Error("useTheme must be used within a ThemeProvider");return a}function F(){const{theme:a}=E();return a.colors}const O={bgApp:"var(--brycks-background-app)",bgSubtle:"var(--brycks-background-subtle)",bgMuted:"var(--brycks-background-muted)",bgElevated:"var(--brycks-background-elevated)",bgOverlay:"var(--brycks-background-overlay)",bgInverse:"var(--brycks-background-inverse)",fgDefault:"var(--brycks-foreground-default)",fgMuted:"var(--brycks-foreground-muted)",fgSubtle:"var(--brycks-foreground-subtle)",fgDisabled:"var(--brycks-foreground-disabled)",fgInverse:"var(--brycks-foreground-inverse)",fgLink:"var(--brycks-foreground-link)",borderDefault:"var(--brycks-border-default)",borderMuted:"var(--brycks-border-muted)",borderStrong:"var(--brycks-border-strong)",borderFocus:"var(--brycks-border-focus)",primaryDefault:"var(--brycks-primary-default)",primaryHover:"var(--brycks-primary-hover)",primaryActive:"var(--brycks-primary-active)",primaryMuted:"var(--brycks-primary-muted)",primaryForeground:"var(--brycks-primary-foreground)",accentDefault:"var(--brycks-accent-default)",accentHover:"var(--brycks-accent-hover)",accentActive:"var(--brycks-accent-active)",accentMuted:"var(--brycks-accent-muted)",accentForeground:"var(--brycks-accent-foreground)",successDefault:"var(--brycks-success-default)",successHover:"var(--brycks-success-hover)",successMuted:"var(--brycks-success-muted)",successForeground:"var(--brycks-success-foreground)",warningDefault:"var(--brycks-warning-default)",warningHover:"var(--brycks-warning-hover)",warningMuted:"var(--brycks-warning-muted)",warningForeground:"var(--brycks-warning-foreground)",errorDefault:"var(--brycks-error-default)",errorHover:"var(--brycks-error-hover)",errorMuted:"var(--brycks-error-muted)",errorForeground:"var(--brycks-error-foreground)",infoDefault:"var(--brycks-info-default)",infoHover:"var(--brycks-info-hover)",infoMuted:"var(--brycks-info-muted)",infoForeground:"var(--brycks-info-foreground)"};exports.ThemeContext=h;exports.ThemeProvider=x;exports.cssVar=O;exports.darkTheme=T;exports.lightTheme=H;exports.useTheme=E;exports.useThemeColors=F;
2
- //# sourceMappingURL=cssVariables-D_naqeoR.cjs.map
1
+ "use strict";const D=require("react/jsx-runtime"),n=require("react"),r=require("./colors-Bp6ROxvx.cjs"),H={name:"light",colors:{background:{app:r.neutrals.white,subtle:r.neutrals.gray50,muted:r.neutrals.gray100,elevated:r.neutrals.white,overlay:"rgba(0, 0, 0, 0.4)",inverse:r.neutrals.gray950},foreground:{default:r.neutrals.gray950,muted:r.neutrals.gray600,subtle:r.neutrals.gray500,disabled:r.neutrals.gray400,inverse:r.neutrals.white,link:r.primary[600]},border:{default:r.neutrals.gray200,muted:r.neutrals.gray100,strong:r.neutrals.gray300,focus:r.primary[500]},primary:{default:r.primary[600],hover:r.primary[700],active:r.primary[800],muted:r.primary[50],softHover:r.primary[100],foreground:r.neutrals.white},accent:{default:r.accent[500],hover:r.accent[600],active:r.accent[700],muted:r.accent[50],softHover:r.accent[100],foreground:r.neutrals.white},success:{default:r.success[600],hover:r.success[700],muted:r.success[50],softHover:r.success[100],foreground:r.neutrals.white},warning:{default:r.warning[500],hover:r.warning[600],muted:r.warning[50],softHover:r.warning[100],foreground:r.neutrals.gray950},error:{default:r.error[600],hover:r.error[700],muted:r.error[50],softHover:r.error[100],foreground:r.neutrals.white},info:{default:r.info[600],hover:r.info[700],muted:r.info[50],softHover:r.info[100],foreground:r.neutrals.white}}},T={name:"dark",colors:{background:{app:r.neutrals.black,subtle:r.neutrals.gray950,muted:r.neutrals.gray900,elevated:r.neutrals.gray800,overlay:"rgba(0, 0, 0, 0.7)",inverse:r.neutrals.white},foreground:{default:r.neutrals.gray100,muted:r.neutrals.gray400,subtle:r.neutrals.gray500,disabled:r.neutrals.gray600,inverse:r.neutrals.gray950,link:r.primary[400]},border:{default:r.neutrals.gray800,muted:r.neutrals.gray900,strong:r.neutrals.gray700,focus:r.primary[400]},primary:{default:r.primary[500],hover:r.primary[400],active:r.primary[300],muted:"rgba(85, 120, 244, 0.15)",softHover:"rgba(85, 120, 244, 0.25)",foreground:r.neutrals.white},accent:{default:r.accent[400],hover:r.accent[300],active:r.accent[200],muted:"rgba(248, 101, 69, 0.15)",softHover:"rgba(248, 101, 69, 0.25)",foreground:r.neutrals.white},success:{default:r.success[500],hover:r.success[400],muted:"rgba(16, 185, 129, 0.15)",softHover:"rgba(16, 185, 129, 0.25)",foreground:r.neutrals.white},warning:{default:r.warning[400],hover:r.warning[300],muted:"rgba(245, 158, 11, 0.15)",softHover:"rgba(245, 158, 11, 0.25)",foreground:r.neutrals.gray950},error:{default:r.error[500],hover:r.error[400],muted:"rgba(239, 68, 68, 0.15)",softHover:"rgba(239, 68, 68, 0.25)",foreground:r.neutrals.white},info:{default:r.info[500],hover:r.info[400],muted:"rgba(6, 182, 212, 0.15)",softHover:"rgba(6, 182, 212, 0.25)",foreground:r.neutrals.white}}},h=n.createContext(null),M="brycks-theme-mode";function S(s,e){return e?Object.keys(s).reduce((c,o)=>{const l=s[o],d=e[o];return typeof l=="object"&&typeof d=="object"?c[o]={...l,...d}:d!==void 0?c[o]=d:c[o]=l,c},{}):s}function x({children:s,config:e,skipCSSVariables:c=!1}){const[o,l]=n.useState(()=>typeof window>"u"?(e==null?void 0:e.defaultMode)??"system":localStorage.getItem(M)??(e==null?void 0:e.defaultMode)??"system"),[d,C]=n.useState(()=>typeof window>"u"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light");n.useEffect(()=>{const t=window.matchMedia("(prefers-color-scheme: dark)"),u=y=>{C(y.matches?"dark":"light")};return t.addEventListener("change",u),()=>t.removeEventListener("change",u)},[]);const a=o==="system"?d:o,f=n.useMemo(()=>{const t=a==="dark"?T:H,u=a==="dark"?e==null?void 0:e.dark:e==null?void 0:e.light;return u?{name:t.name,colors:S(t.colors,u)}:t},[a,e]),v=n.useCallback(t=>{l(t),typeof window<"u"&&localStorage.setItem(M,t)},[]),k=n.useCallback(()=>{v(a==="dark"?"light":"dark")},[a,v]);n.useEffect(()=>{if(c||typeof document>"u")return;const t=document.documentElement;t.style.colorScheme=a,t.dataset.theme=a,a==="dark"?t.classList.add("dark"):t.classList.remove("dark");const u=(b,g="")=>Object.entries(b).reduce((m,[w,i])=>{const p=g?`${g}-${w}`:w;return typeof i=="object"&&i!==null?Object.assign(m,u(i,p)):typeof i=="string"&&(m[`--brycks-${p}`]=i),m},{}),y=u(f.colors);Object.entries(y).forEach(([b,g])=>{t.style.setProperty(b,g)})},[f,a,c]);const j=n.useMemo(()=>({theme:f,mode:o,resolvedMode:a,setMode:v,toggleMode:k}),[f,o,a,v,k]);return D.jsx(h.Provider,{value:j,children:s})}function E(){const s=n.useContext(h);if(!s)throw new Error("useTheme must be used within a ThemeProvider");return s}function F(){const{theme:s}=E();return s.colors}const O={bgApp:"var(--brycks-background-app)",bgSubtle:"var(--brycks-background-subtle)",bgMuted:"var(--brycks-background-muted)",bgElevated:"var(--brycks-background-elevated)",bgOverlay:"var(--brycks-background-overlay)",bgInverse:"var(--brycks-background-inverse)",fgDefault:"var(--brycks-foreground-default)",fgMuted:"var(--brycks-foreground-muted)",fgSubtle:"var(--brycks-foreground-subtle)",fgDisabled:"var(--brycks-foreground-disabled)",fgInverse:"var(--brycks-foreground-inverse)",fgLink:"var(--brycks-foreground-link)",borderDefault:"var(--brycks-border-default)",borderMuted:"var(--brycks-border-muted)",borderStrong:"var(--brycks-border-strong)",borderFocus:"var(--brycks-border-focus)",primaryDefault:"var(--brycks-primary-default)",primaryHover:"var(--brycks-primary-hover)",primaryActive:"var(--brycks-primary-active)",primaryMuted:"var(--brycks-primary-muted)",primaryForeground:"var(--brycks-primary-foreground)",accentDefault:"var(--brycks-accent-default)",accentHover:"var(--brycks-accent-hover)",accentActive:"var(--brycks-accent-active)",accentMuted:"var(--brycks-accent-muted)",accentForeground:"var(--brycks-accent-foreground)",successDefault:"var(--brycks-success-default)",successHover:"var(--brycks-success-hover)",successMuted:"var(--brycks-success-muted)",successForeground:"var(--brycks-success-foreground)",warningDefault:"var(--brycks-warning-default)",warningHover:"var(--brycks-warning-hover)",warningMuted:"var(--brycks-warning-muted)",warningForeground:"var(--brycks-warning-foreground)",errorDefault:"var(--brycks-error-default)",errorHover:"var(--brycks-error-hover)",errorMuted:"var(--brycks-error-muted)",errorForeground:"var(--brycks-error-foreground)",infoDefault:"var(--brycks-info-default)",infoHover:"var(--brycks-info-hover)",infoMuted:"var(--brycks-info-muted)",infoForeground:"var(--brycks-info-foreground)"};exports.ThemeContext=h;exports.ThemeProvider=x;exports.cssVar=O;exports.darkTheme=T;exports.lightTheme=H;exports.useTheme=E;exports.useThemeColors=F;
2
+ //# sourceMappingURL=cssVariables-BguyVeCi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cssVariables-BguyVeCi.cjs","sources":["../src/design-system/themes/lightTheme.ts","../src/design-system/themes/darkTheme.ts","../src/design-system/themes/ThemeProvider.tsx","../src/design-system/themes/cssVariables.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Light Theme\r\n *\r\n * A clean, calm light theme inspired by Apple's design language.\r\n * Subtle contrasts, soft shadows, and refined colors.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const lightTheme: Theme = {\r\n name: 'light',\r\n colors: {\r\n background: {\r\n app: neutrals.white,\r\n subtle: neutrals.gray50,\r\n muted: neutrals.gray100,\r\n elevated: neutrals.white,\r\n overlay: 'rgba(0, 0, 0, 0.4)',\r\n inverse: neutrals.gray950,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray950,\r\n muted: neutrals.gray600,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray400,\r\n inverse: neutrals.white,\r\n link: primary[600],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray200,\r\n muted: neutrals.gray100,\r\n strong: neutrals.gray300,\r\n focus: primary[500],\r\n },\r\n\r\n primary: {\r\n default: primary[600],\r\n hover: primary[700],\r\n active: primary[800],\r\n muted: primary[50],\r\n softHover: primary[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[500],\r\n hover: accent[600],\r\n active: accent[700],\r\n muted: accent[50],\r\n softHover: accent[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[600],\r\n hover: success[700],\r\n muted: success[50],\r\n softHover: success[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[500],\r\n hover: warning[600],\r\n muted: warning[50],\r\n softHover: warning[100],\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[600],\r\n hover: error[700],\r\n muted: error[50],\r\n softHover: error[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[600],\r\n hover: info[700],\r\n muted: info[50],\r\n softHover: info[100],\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Dark Theme\r\n *\r\n * A sophisticated dark theme with deep blacks and vibrant accents.\r\n * Inspired by Apple's dark mode - true black with subtle depth.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const darkTheme: Theme = {\r\n name: 'dark',\r\n colors: {\r\n background: {\r\n app: neutrals.black,\r\n subtle: neutrals.gray950,\r\n muted: neutrals.gray900,\r\n elevated: neutrals.gray800,\r\n overlay: 'rgba(0, 0, 0, 0.7)',\r\n inverse: neutrals.white,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray100,\r\n muted: neutrals.gray400,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray600,\r\n inverse: neutrals.gray950,\r\n link: primary[400],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray800,\r\n muted: neutrals.gray900,\r\n strong: neutrals.gray700,\r\n focus: primary[400],\r\n },\r\n\r\n primary: {\r\n default: primary[500],\r\n hover: primary[400],\r\n active: primary[300],\r\n muted: 'rgba(85, 120, 244, 0.15)',\r\n softHover: 'rgba(85, 120, 244, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[400],\r\n hover: accent[300],\r\n active: accent[200],\r\n muted: 'rgba(248, 101, 69, 0.15)',\r\n softHover: 'rgba(248, 101, 69, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[500],\r\n hover: success[400],\r\n muted: 'rgba(16, 185, 129, 0.15)',\r\n softHover: 'rgba(16, 185, 129, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[400],\r\n hover: warning[300],\r\n muted: 'rgba(245, 158, 11, 0.15)',\r\n softHover: 'rgba(245, 158, 11, 0.25)',\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[500],\r\n hover: error[400],\r\n muted: 'rgba(239, 68, 68, 0.15)',\r\n softHover: 'rgba(239, 68, 68, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[500],\r\n hover: info[400],\r\n muted: 'rgba(6, 182, 212, 0.15)',\r\n softHover: 'rgba(6, 182, 212, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Add/remove dark class for Tailwind CSS dark mode\r\n if (resolvedMode === 'dark') {\r\n root.classList.add('dark')\r\n } else {\r\n root.classList.remove('dark')\r\n }\r\n\r\n // Flatten and inject CSS variables\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const varName = prefix ? `${prefix}-${key}` : key\r\n\r\n if (typeof value === 'object' && value !== null) {\r\n Object.assign(acc, flattenColors(value as Record<string, unknown>, varName))\r\n } else if (typeof value === 'string') {\r\n acc[`--brycks-${varName}`] = value\r\n }\r\n\r\n return acc\r\n },\r\n {} as Record<string, string>\r\n )\r\n }\r\n\r\n const cssVars = flattenColors(theme.colors as unknown as Record<string, unknown>)\r\n Object.entries(cssVars).forEach(([key, value]) => {\r\n root.style.setProperty(key, value)\r\n })\r\n\r\n // Clean up function not needed as we just overwrite values\r\n }, [theme, resolvedMode, skipCSSVariables])\r\n\r\n const contextValue = useMemo<ThemeContextValue>(\r\n () => ({\r\n theme,\r\n mode,\r\n resolvedMode,\r\n setMode,\r\n toggleMode,\r\n }),\r\n [theme, mode, resolvedMode, setMode, toggleMode]\r\n )\r\n\r\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\r\n}\r\n\r\n/** Hook to access theme context */\r\nexport function useTheme(): ThemeContextValue {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider')\r\n }\r\n\r\n return context\r\n}\r\n\r\n/** Hook to get current theme colors */\r\nexport function useThemeColors() {\r\n const { theme } = useTheme()\r\n return theme.colors\r\n}\r\n\r\nexport { ThemeContext }\r\n","/**\r\n * Brycks Design System - CSS Variable Helpers\r\n *\r\n * Utilities for working with CSS variables in components.\r\n */\r\n\r\n/** CSS variable names mapped to theme paths */\r\nexport const cssVar = {\r\n // Background\r\n bgApp: 'var(--brycks-background-app)',\r\n bgSubtle: 'var(--brycks-background-subtle)',\r\n bgMuted: 'var(--brycks-background-muted)',\r\n bgElevated: 'var(--brycks-background-elevated)',\r\n bgOverlay: 'var(--brycks-background-overlay)',\r\n bgInverse: 'var(--brycks-background-inverse)',\r\n\r\n // Foreground\r\n fgDefault: 'var(--brycks-foreground-default)',\r\n fgMuted: 'var(--brycks-foreground-muted)',\r\n fgSubtle: 'var(--brycks-foreground-subtle)',\r\n fgDisabled: 'var(--brycks-foreground-disabled)',\r\n fgInverse: 'var(--brycks-foreground-inverse)',\r\n fgLink: 'var(--brycks-foreground-link)',\r\n\r\n // Border\r\n borderDefault: 'var(--brycks-border-default)',\r\n borderMuted: 'var(--brycks-border-muted)',\r\n borderStrong: 'var(--brycks-border-strong)',\r\n borderFocus: 'var(--brycks-border-focus)',\r\n\r\n // Primary\r\n primaryDefault: 'var(--brycks-primary-default)',\r\n primaryHover: 'var(--brycks-primary-hover)',\r\n primaryActive: 'var(--brycks-primary-active)',\r\n primaryMuted: 'var(--brycks-primary-muted)',\r\n primaryForeground: 'var(--brycks-primary-foreground)',\r\n\r\n // Accent\r\n accentDefault: 'var(--brycks-accent-default)',\r\n accentHover: 'var(--brycks-accent-hover)',\r\n accentActive: 'var(--brycks-accent-active)',\r\n accentMuted: 'var(--brycks-accent-muted)',\r\n accentForeground: 'var(--brycks-accent-foreground)',\r\n\r\n // Success\r\n successDefault: 'var(--brycks-success-default)',\r\n successHover: 'var(--brycks-success-hover)',\r\n successMuted: 'var(--brycks-success-muted)',\r\n successForeground: 'var(--brycks-success-foreground)',\r\n\r\n // Warning\r\n warningDefault: 'var(--brycks-warning-default)',\r\n warningHover: 'var(--brycks-warning-hover)',\r\n warningMuted: 'var(--brycks-warning-muted)',\r\n warningForeground: 'var(--brycks-warning-foreground)',\r\n\r\n // Error\r\n errorDefault: 'var(--brycks-error-default)',\r\n errorHover: 'var(--brycks-error-hover)',\r\n errorMuted: 'var(--brycks-error-muted)',\r\n errorForeground: 'var(--brycks-error-foreground)',\r\n\r\n // Info\r\n infoDefault: 'var(--brycks-info-default)',\r\n infoHover: 'var(--brycks-info-hover)',\r\n infoMuted: 'var(--brycks-info-muted)',\r\n infoForeground: 'var(--brycks-info-foreground)',\r\n} as const\r\n\r\nexport type CSSVar = keyof typeof cssVar\r\n"],"names":["lightTheme","neutrals","primary","accent","success","warning","error","info","darkTheme","ThemeContext","createContext","THEME_STORAGE_KEY","mergeThemeColors","base","overrides","acc","key","baseValue","overrideValue","ThemeProvider","children","config","skipCSSVariables","mode","setModeState","useState","systemMode","setSystemMode","useEffect","mediaQuery","handleChange","e","resolvedMode","theme","useMemo","baseTheme","setMode","useCallback","newMode","toggleMode","root","flattenColors","obj","prefix","value","varName","cssVars","contextValue","useTheme","context","useContext","useThemeColors","cssVar"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { jsx as I } from "react/jsx-runtime";
2
- import { createContext as P, useState as D, useEffect as j, useMemo as S, useCallback as C, useContext as V } from "react";
1
+ import { jsx as A } from "react/jsx-runtime";
2
+ import { createContext as I, useState as D, useEffect as j, useMemo as S, useCallback as C, useContext as P } from "react";
3
3
  import { n as r, i as f, e as b, w as g, s as i, a as n, p as o } from "./colors-B_8a3coi.js";
4
- const L = {
4
+ const V = {
5
5
  name: "light",
6
6
  colors: {
7
7
  background: {
@@ -141,40 +141,40 @@ const L = {
141
141
  foreground: r.white
142
142
  }
143
143
  }
144
- }, x = P(null), F = "brycks-theme-mode";
145
- function _(a, e) {
146
- return e ? Object.keys(a).reduce((c, s) => {
147
- const l = a[s], v = e[s];
148
- return typeof l == "object" && typeof v == "object" ? c[s] = { ...l, ...v } : v !== void 0 ? c[s] = v : c[s] = l, c;
149
- }, {}) : a;
144
+ }, x = I(null), F = "brycks-theme-mode";
145
+ function _(s, e) {
146
+ return e ? Object.keys(s).reduce((c, d) => {
147
+ const l = s[d], v = e[d];
148
+ return typeof l == "object" && typeof v == "object" ? c[d] = { ...l, ...v } : v !== void 0 ? c[d] = v : c[d] = l, c;
149
+ }, {}) : s;
150
150
  }
151
151
  function R({
152
- children: a,
152
+ children: s,
153
153
  config: e,
154
154
  skipCSSVariables: c = !1
155
155
  }) {
156
- const [s, l] = D(() => typeof window > "u" ? (e == null ? void 0 : e.defaultMode) ?? "system" : localStorage.getItem(F) ?? (e == null ? void 0 : e.defaultMode) ?? "system"), [v, O] = D(() => typeof window > "u" ? "light" : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
156
+ const [d, l] = D(() => typeof window > "u" ? (e == null ? void 0 : e.defaultMode) ?? "system" : localStorage.getItem(F) ?? (e == null ? void 0 : e.defaultMode) ?? "system"), [v, O] = D(() => typeof window > "u" ? "light" : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
157
157
  j(() => {
158
158
  const t = window.matchMedia("(prefers-color-scheme: dark)"), u = (w) => {
159
159
  O(w.matches ? "dark" : "light");
160
160
  };
161
161
  return t.addEventListener("change", u), () => t.removeEventListener("change", u);
162
162
  }, []);
163
- const d = s === "system" ? v : s, m = S(() => {
164
- const t = d === "dark" ? $ : L, u = d === "dark" ? e == null ? void 0 : e.dark : e == null ? void 0 : e.light;
163
+ const a = d === "system" ? v : d, m = S(() => {
164
+ const t = a === "dark" ? $ : V, u = a === "dark" ? e == null ? void 0 : e.dark : e == null ? void 0 : e.light;
165
165
  return u ? {
166
166
  name: t.name,
167
167
  colors: _(t.colors, u)
168
168
  } : t;
169
- }, [d, e]), h = C((t) => {
169
+ }, [a, e]), h = C((t) => {
170
170
  l(t), typeof window < "u" && localStorage.setItem(F, t);
171
171
  }, []), H = C(() => {
172
- h(d === "dark" ? "light" : "dark");
173
- }, [d, h]);
172
+ h(a === "dark" ? "light" : "dark");
173
+ }, [a, h]);
174
174
  j(() => {
175
175
  if (c || typeof document > "u") return;
176
176
  const t = document.documentElement;
177
- t.style.colorScheme = d, t.dataset.theme = d;
177
+ t.style.colorScheme = a, t.dataset.theme = a, a === "dark" ? t.classList.add("dark") : t.classList.remove("dark");
178
178
  const u = (p, k = "") => Object.entries(p).reduce(
179
179
  (M, [T, y]) => {
180
180
  const E = k ? `${k}-${T}` : T;
@@ -185,28 +185,28 @@ function R({
185
185
  Object.entries(w).forEach(([p, k]) => {
186
186
  t.style.setProperty(p, k);
187
187
  });
188
- }, [m, d, c]);
189
- const A = S(
188
+ }, [m, a, c]);
189
+ const L = S(
190
190
  () => ({
191
191
  theme: m,
192
- mode: s,
193
- resolvedMode: d,
192
+ mode: d,
193
+ resolvedMode: a,
194
194
  setMode: h,
195
195
  toggleMode: H
196
196
  }),
197
- [m, s, d, h, H]
197
+ [m, d, a, h, H]
198
198
  );
199
- return /* @__PURE__ */ I(x.Provider, { value: A, children: a });
199
+ return /* @__PURE__ */ A(x.Provider, { value: L, children: s });
200
200
  }
201
201
  function G() {
202
- const a = V(x);
203
- if (!a)
202
+ const s = P(x);
203
+ if (!s)
204
204
  throw new Error("useTheme must be used within a ThemeProvider");
205
- return a;
205
+ return s;
206
206
  }
207
207
  function Y() {
208
- const { theme: a } = G();
209
- return a.colors;
208
+ const { theme: s } = G();
209
+ return s.colors;
210
210
  }
211
211
  const q = {
212
212
  // Background
@@ -267,7 +267,7 @@ export {
267
267
  x as b,
268
268
  q as c,
269
269
  $ as d,
270
- L as l,
270
+ V as l,
271
271
  G as u
272
272
  };
273
- //# sourceMappingURL=cssVariables-CU3jCd8f.js.map
273
+ //# sourceMappingURL=cssVariables-D9uw0uKO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cssVariables-D9uw0uKO.js","sources":["../src/design-system/themes/lightTheme.ts","../src/design-system/themes/darkTheme.ts","../src/design-system/themes/ThemeProvider.tsx","../src/design-system/themes/cssVariables.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Light Theme\r\n *\r\n * A clean, calm light theme inspired by Apple's design language.\r\n * Subtle contrasts, soft shadows, and refined colors.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const lightTheme: Theme = {\r\n name: 'light',\r\n colors: {\r\n background: {\r\n app: neutrals.white,\r\n subtle: neutrals.gray50,\r\n muted: neutrals.gray100,\r\n elevated: neutrals.white,\r\n overlay: 'rgba(0, 0, 0, 0.4)',\r\n inverse: neutrals.gray950,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray950,\r\n muted: neutrals.gray600,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray400,\r\n inverse: neutrals.white,\r\n link: primary[600],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray200,\r\n muted: neutrals.gray100,\r\n strong: neutrals.gray300,\r\n focus: primary[500],\r\n },\r\n\r\n primary: {\r\n default: primary[600],\r\n hover: primary[700],\r\n active: primary[800],\r\n muted: primary[50],\r\n softHover: primary[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[500],\r\n hover: accent[600],\r\n active: accent[700],\r\n muted: accent[50],\r\n softHover: accent[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[600],\r\n hover: success[700],\r\n muted: success[50],\r\n softHover: success[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[500],\r\n hover: warning[600],\r\n muted: warning[50],\r\n softHover: warning[100],\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[600],\r\n hover: error[700],\r\n muted: error[50],\r\n softHover: error[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[600],\r\n hover: info[700],\r\n muted: info[50],\r\n softHover: info[100],\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Dark Theme\r\n *\r\n * A sophisticated dark theme with deep blacks and vibrant accents.\r\n * Inspired by Apple's dark mode - true black with subtle depth.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const darkTheme: Theme = {\r\n name: 'dark',\r\n colors: {\r\n background: {\r\n app: neutrals.black,\r\n subtle: neutrals.gray950,\r\n muted: neutrals.gray900,\r\n elevated: neutrals.gray800,\r\n overlay: 'rgba(0, 0, 0, 0.7)',\r\n inverse: neutrals.white,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray100,\r\n muted: neutrals.gray400,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray600,\r\n inverse: neutrals.gray950,\r\n link: primary[400],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray800,\r\n muted: neutrals.gray900,\r\n strong: neutrals.gray700,\r\n focus: primary[400],\r\n },\r\n\r\n primary: {\r\n default: primary[500],\r\n hover: primary[400],\r\n active: primary[300],\r\n muted: 'rgba(85, 120, 244, 0.15)',\r\n softHover: 'rgba(85, 120, 244, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[400],\r\n hover: accent[300],\r\n active: accent[200],\r\n muted: 'rgba(248, 101, 69, 0.15)',\r\n softHover: 'rgba(248, 101, 69, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[500],\r\n hover: success[400],\r\n muted: 'rgba(16, 185, 129, 0.15)',\r\n softHover: 'rgba(16, 185, 129, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[400],\r\n hover: warning[300],\r\n muted: 'rgba(245, 158, 11, 0.15)',\r\n softHover: 'rgba(245, 158, 11, 0.25)',\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[500],\r\n hover: error[400],\r\n muted: 'rgba(239, 68, 68, 0.15)',\r\n softHover: 'rgba(239, 68, 68, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[500],\r\n hover: info[400],\r\n muted: 'rgba(6, 182, 212, 0.15)',\r\n softHover: 'rgba(6, 182, 212, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Add/remove dark class for Tailwind CSS dark mode\r\n if (resolvedMode === 'dark') {\r\n root.classList.add('dark')\r\n } else {\r\n root.classList.remove('dark')\r\n }\r\n\r\n // Flatten and inject CSS variables\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const varName = prefix ? `${prefix}-${key}` : key\r\n\r\n if (typeof value === 'object' && value !== null) {\r\n Object.assign(acc, flattenColors(value as Record<string, unknown>, varName))\r\n } else if (typeof value === 'string') {\r\n acc[`--brycks-${varName}`] = value\r\n }\r\n\r\n return acc\r\n },\r\n {} as Record<string, string>\r\n )\r\n }\r\n\r\n const cssVars = flattenColors(theme.colors as unknown as Record<string, unknown>)\r\n Object.entries(cssVars).forEach(([key, value]) => {\r\n root.style.setProperty(key, value)\r\n })\r\n\r\n // Clean up function not needed as we just overwrite values\r\n }, [theme, resolvedMode, skipCSSVariables])\r\n\r\n const contextValue = useMemo<ThemeContextValue>(\r\n () => ({\r\n theme,\r\n mode,\r\n resolvedMode,\r\n setMode,\r\n toggleMode,\r\n }),\r\n [theme, mode, resolvedMode, setMode, toggleMode]\r\n )\r\n\r\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\r\n}\r\n\r\n/** Hook to access theme context */\r\nexport function useTheme(): ThemeContextValue {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider')\r\n }\r\n\r\n return context\r\n}\r\n\r\n/** Hook to get current theme colors */\r\nexport function useThemeColors() {\r\n const { theme } = useTheme()\r\n return theme.colors\r\n}\r\n\r\nexport { ThemeContext }\r\n","/**\r\n * Brycks Design System - CSS Variable Helpers\r\n *\r\n * Utilities for working with CSS variables in components.\r\n */\r\n\r\n/** CSS variable names mapped to theme paths */\r\nexport const cssVar = {\r\n // Background\r\n bgApp: 'var(--brycks-background-app)',\r\n bgSubtle: 'var(--brycks-background-subtle)',\r\n bgMuted: 'var(--brycks-background-muted)',\r\n bgElevated: 'var(--brycks-background-elevated)',\r\n bgOverlay: 'var(--brycks-background-overlay)',\r\n bgInverse: 'var(--brycks-background-inverse)',\r\n\r\n // Foreground\r\n fgDefault: 'var(--brycks-foreground-default)',\r\n fgMuted: 'var(--brycks-foreground-muted)',\r\n fgSubtle: 'var(--brycks-foreground-subtle)',\r\n fgDisabled: 'var(--brycks-foreground-disabled)',\r\n fgInverse: 'var(--brycks-foreground-inverse)',\r\n fgLink: 'var(--brycks-foreground-link)',\r\n\r\n // Border\r\n borderDefault: 'var(--brycks-border-default)',\r\n borderMuted: 'var(--brycks-border-muted)',\r\n borderStrong: 'var(--brycks-border-strong)',\r\n borderFocus: 'var(--brycks-border-focus)',\r\n\r\n // Primary\r\n primaryDefault: 'var(--brycks-primary-default)',\r\n primaryHover: 'var(--brycks-primary-hover)',\r\n primaryActive: 'var(--brycks-primary-active)',\r\n primaryMuted: 'var(--brycks-primary-muted)',\r\n primaryForeground: 'var(--brycks-primary-foreground)',\r\n\r\n // Accent\r\n accentDefault: 'var(--brycks-accent-default)',\r\n accentHover: 'var(--brycks-accent-hover)',\r\n accentActive: 'var(--brycks-accent-active)',\r\n accentMuted: 'var(--brycks-accent-muted)',\r\n accentForeground: 'var(--brycks-accent-foreground)',\r\n\r\n // Success\r\n successDefault: 'var(--brycks-success-default)',\r\n successHover: 'var(--brycks-success-hover)',\r\n successMuted: 'var(--brycks-success-muted)',\r\n successForeground: 'var(--brycks-success-foreground)',\r\n\r\n // Warning\r\n warningDefault: 'var(--brycks-warning-default)',\r\n warningHover: 'var(--brycks-warning-hover)',\r\n warningMuted: 'var(--brycks-warning-muted)',\r\n warningForeground: 'var(--brycks-warning-foreground)',\r\n\r\n // Error\r\n errorDefault: 'var(--brycks-error-default)',\r\n errorHover: 'var(--brycks-error-hover)',\r\n errorMuted: 'var(--brycks-error-muted)',\r\n errorForeground: 'var(--brycks-error-foreground)',\r\n\r\n // Info\r\n infoDefault: 'var(--brycks-info-default)',\r\n infoHover: 'var(--brycks-info-hover)',\r\n infoMuted: 'var(--brycks-info-muted)',\r\n infoForeground: 'var(--brycks-info-foreground)',\r\n} as const\r\n\r\nexport type CSSVar = keyof typeof cssVar\r\n"],"names":["lightTheme","neutrals","primary","accent","success","warning","error","info","darkTheme","ThemeContext","createContext","THEME_STORAGE_KEY","mergeThemeColors","base","overrides","acc","key","baseValue","overrideValue","ThemeProvider","children","config","skipCSSVariables","mode","setModeState","useState","systemMode","setSystemMode","useEffect","mediaQuery","handleChange","e","resolvedMode","theme","useMemo","baseTheme","setMode","useCallback","newMode","toggleMode","root","flattenColors","obj","prefix","value","varName","cssVars","contextValue","useTheme","context","useContext","useThemeColors","cssVar"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../../src/design-system/themes/ThemeProvider.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAS,iBAAiB,EAAa,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE5F,QAAA,MAAM,YAAY,mDAAgD,CAAA;AAyBlE,UAAU,kBAAkB;IAC1B,uBAAuB;IACvB,QAAQ,EAAE,SAAS,CAAA;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAM,EACN,gBAAwB,GACzB,EAAE,kBAAkB,2CAsGpB;AAED,mCAAmC;AACnC,wBAAgB,QAAQ,IAAI,iBAAiB,CAQ5C;AAED,uCAAuC;AACvC,wBAAgB,cAAc,gBAG7B;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../../src/design-system/themes/ThemeProvider.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAS,iBAAiB,EAAa,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE5F,QAAA,MAAM,YAAY,mDAAgD,CAAA;AAyBlE,UAAU,kBAAkB;IAC1B,uBAAuB;IACvB,QAAQ,EAAE,SAAS,CAAA;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAM,EACN,gBAAwB,GACzB,EAAE,kBAAkB,2CA6GpB;AAED,mCAAmC;AACnC,wBAAgB,QAAQ,IAAI,iBAAiB,CAQ5C;AAED,uCAAuC;AACvC,wBAAgB,cAAc,gBAG7B;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Q=require("./colors-Bp6ROxvx.cjs"),s=require("./tokens.cjs"),Z=require("./cssVariables-D_naqeoR.cjs"),f=require("react"),r=require("react/jsx-runtime"),fe=require("react-dom"),X={xs:s.spacing[6],sm:s.spacing[8],md:s.spacing[10],lg:s.spacing[12],xl:s.spacing[14]},U={xs:s.spacing[3],sm:s.spacing[4],md:s.spacing[5],lg:s.spacing[6],xl:s.spacing[8]},V={xs:s.spacing[2],sm:s.spacing[3],md:s.spacing[4],lg:s.spacing[5],xl:s.spacing[6]},Ee={xs:s.spacing[1],sm:s.spacing[1.5],md:s.spacing[2],lg:s.spacing[2.5],xl:s.spacing[3]},O={xs:s.spacing[1],sm:s.spacing[1.5],md:s.spacing[2],lg:s.spacing[2.5],xl:s.spacing[3]},Xe={sm:400,md:500,lg:640,xl:800,full:"calc(100vw - 48px)"},Ve={tooltipMaxWidth:300,popoverMaxWidth:400,arrowSize:s.spacing[2],offset:s.spacing[2]},ye={sm:{box:16,icon:10},md:{box:18,icon:12},lg:{box:22,icon:14}},ge={sm:{width:36,height:20,thumb:16},md:{width:44,height:24,thumb:20},lg:{width:52,height:28,thumb:24}},G={default:"0 0 0 3px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.35))",error:"0 0 0 3px var(--brycks-focus-ring-error, rgba(239, 68, 68, 0.35))",success:"0 0 0 3px var(--brycks-focus-ring-success, rgba(16, 185, 129, 0.35))",subtle:"0 0 0 2px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.25))",none:"none"},Ge={default:"0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-primary-default)",error:"0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-error-default)"},qe={outline:{outline:"2px solid var(--brycks-border-focus)",outlineOffset:"2px"},ring:{outline:"none",boxShadow:G.default},ringError:{outline:"none",boxShadow:G.error},none:{outline:"none",boxShadow:"none"}},K={none:"none",instant:`all ${s.durations.faster}ms ${s.easings.easeOut}`,fast:`all ${s.durations.fast}ms ${s.easings.easeOut}`,quick:`all ${s.durations.quick}ms ${s.easings.easeOut}`,default:`all ${s.durations.normal}ms ${s.easings.easeOut}`,smooth:`all ${s.durations.relaxed}ms ${s.easings.smooth}`,slow:`all ${s.durations.slow}ms ${s.easings.easeOut}`,spring:`all ${s.durations.relaxed}ms ${s.easings.softSpring}`,colors:`color ${s.durations.fast}ms ${s.easings.easeOut}, background-color ${s.durations.fast}ms ${s.easings.easeOut}, border-color ${s.durations.fast}ms ${s.easings.easeOut}`,transform:`transform ${s.durations.normal}ms ${s.easings.easeOut}`,opacity:`opacity ${s.durations.normal}ms ${s.easings.easeOut}`,shadow:`box-shadow ${s.durations.normal}ms ${s.easings.easeOut}`},Ye={all:"all",colors:"color, background-color, border-color, fill, stroke",opacity:"opacity",shadow:"box-shadow",transform:"transform",dimensions:"width, height, padding, margin"},_e={instant:s.durations.faster,fast:s.durations.fast,quick:s.durations.quick,default:s.durations.normal,smooth:s.durations.relaxed,slow:s.durations.slow,slower:s.durations.slower},Ae={linear:s.easings.linear,ease:s.easings.ease,easeIn:s.easings.easeIn,easeOut:s.easings.easeOut,easeInOut:s.easings.easeInOut,spring:s.easings.spring,softSpring:s.easings.softSpring,smooth:s.easings.smooth,snappy:s.easings.snappy},Ke={fadeIn:`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Q=require("./colors-Bp6ROxvx.cjs"),s=require("./tokens.cjs"),Z=require("./cssVariables-BguyVeCi.cjs"),f=require("react"),r=require("react/jsx-runtime"),fe=require("react-dom"),X={xs:s.spacing[6],sm:s.spacing[8],md:s.spacing[10],lg:s.spacing[12],xl:s.spacing[14]},U={xs:s.spacing[3],sm:s.spacing[4],md:s.spacing[5],lg:s.spacing[6],xl:s.spacing[8]},V={xs:s.spacing[2],sm:s.spacing[3],md:s.spacing[4],lg:s.spacing[5],xl:s.spacing[6]},Ee={xs:s.spacing[1],sm:s.spacing[1.5],md:s.spacing[2],lg:s.spacing[2.5],xl:s.spacing[3]},O={xs:s.spacing[1],sm:s.spacing[1.5],md:s.spacing[2],lg:s.spacing[2.5],xl:s.spacing[3]},Xe={sm:400,md:500,lg:640,xl:800,full:"calc(100vw - 48px)"},Ve={tooltipMaxWidth:300,popoverMaxWidth:400,arrowSize:s.spacing[2],offset:s.spacing[2]},ye={sm:{box:16,icon:10},md:{box:18,icon:12},lg:{box:22,icon:14}},ge={sm:{width:36,height:20,thumb:16},md:{width:44,height:24,thumb:20},lg:{width:52,height:28,thumb:24}},G={default:"0 0 0 3px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.35))",error:"0 0 0 3px var(--brycks-focus-ring-error, rgba(239, 68, 68, 0.35))",success:"0 0 0 3px var(--brycks-focus-ring-success, rgba(16, 185, 129, 0.35))",subtle:"0 0 0 2px var(--brycks-focus-ring-color, rgba(85, 120, 244, 0.25))",none:"none"},Ge={default:"0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-primary-default)",error:"0 0 0 2px var(--brycks-background-app), 0 0 0 4px var(--brycks-error-default)"},qe={outline:{outline:"2px solid var(--brycks-border-focus)",outlineOffset:"2px"},ring:{outline:"none",boxShadow:G.default},ringError:{outline:"none",boxShadow:G.error},none:{outline:"none",boxShadow:"none"}},K={none:"none",instant:`all ${s.durations.faster}ms ${s.easings.easeOut}`,fast:`all ${s.durations.fast}ms ${s.easings.easeOut}`,quick:`all ${s.durations.quick}ms ${s.easings.easeOut}`,default:`all ${s.durations.normal}ms ${s.easings.easeOut}`,smooth:`all ${s.durations.relaxed}ms ${s.easings.smooth}`,slow:`all ${s.durations.slow}ms ${s.easings.easeOut}`,spring:`all ${s.durations.relaxed}ms ${s.easings.softSpring}`,colors:`color ${s.durations.fast}ms ${s.easings.easeOut}, background-color ${s.durations.fast}ms ${s.easings.easeOut}, border-color ${s.durations.fast}ms ${s.easings.easeOut}`,transform:`transform ${s.durations.normal}ms ${s.easings.easeOut}`,opacity:`opacity ${s.durations.normal}ms ${s.easings.easeOut}`,shadow:`box-shadow ${s.durations.normal}ms ${s.easings.easeOut}`},Ye={all:"all",colors:"color, background-color, border-color, fill, stroke",opacity:"opacity",shadow:"box-shadow",transform:"transform",dimensions:"width, height, padding, margin"},_e={instant:s.durations.faster,fast:s.durations.fast,quick:s.durations.quick,default:s.durations.normal,smooth:s.durations.relaxed,slow:s.durations.slow,slower:s.durations.slower},Ae={linear:s.easings.linear,ease:s.easings.ease,easeIn:s.easings.easeIn,easeOut:s.easings.easeOut,easeInOut:s.easings.easeInOut,spring:s.easings.spring,softSpring:s.easings.softSpring,smooth:s.easings.smooth,snappy:s.easings.snappy},Ke={fadeIn:`
2
2
  @keyframes brycks-fade-in {
3
3
  from { opacity: 0; }
4
4
  to { opacity: 1; }
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as xt, c as wt, e as St, i as Ct, n as zt, p as $t, s as Bt, w as Wt } from "./colors-B_8a3coi.js";
2
2
  import { spacing as C, durations as j, easings as R, fontSizes as ee, fontWeights as oe, lineHeights as de, fontFamilies as P, containers as We, textStyles as Q } from "./tokens.js";
3
3
  import { animations as It, borderStyles as Tt, borderWidths as Nt, breakpoints as Lt, focusRings as Rt, glows as Mt, letterSpacings as Ft, mediaQueries as jt, radii as Ot, semanticSpacing as Dt, shadows as Xt, transitions as Et, zIndex as Pt } from "./tokens.js";
4
- import { T as Gt, c as _t, d as Yt, l as At, u as Kt, a as qt } from "./cssVariables-CU3jCd8f.js";
4
+ import { T as Gt, c as _t, d as Yt, l as At, u as Kt, a as qt } from "./cssVariables-D9uw0uKO.js";
5
5
  import { forwardRef as $, useState as V, useId as He, useRef as ne, useCallback as se, useEffect as ae } from "react";
6
6
  import { jsx as n, jsxs as p, Fragment as ce } from "react/jsx-runtime";
7
7
  import { createPortal as he } from "react-dom";
package/dist/themes.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./cssVariables-D_naqeoR.cjs");exports.ThemeContext=e.ThemeContext;exports.ThemeProvider=e.ThemeProvider;exports.cssVar=e.cssVar;exports.darkTheme=e.darkTheme;exports.lightTheme=e.lightTheme;exports.useTheme=e.useTheme;exports.useThemeColors=e.useThemeColors;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./cssVariables-BguyVeCi.cjs");exports.ThemeContext=e.ThemeContext;exports.ThemeProvider=e.ThemeProvider;exports.cssVar=e.cssVar;exports.darkTheme=e.darkTheme;exports.lightTheme=e.lightTheme;exports.useTheme=e.useTheme;exports.useThemeColors=e.useThemeColors;
2
2
  //# sourceMappingURL=themes.cjs.map
package/dist/themes.js CHANGED
@@ -1,4 +1,4 @@
1
- import { b as a, T as h, c as m, d as r, l as T, u as o, a as t } from "./cssVariables-CU3jCd8f.js";
1
+ import { b as a, T as h, c as m, d as r, l as T, u as o, a as t } from "./cssVariables-D9uw0uKO.js";
2
2
  export {
3
3
  a as ThemeContext,
4
4
  h as ThemeProvider,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brycks/core-front",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Brycks Design System - A modern, calm, and tactile UI component library",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"cssVariables-CU3jCd8f.js","sources":["../src/design-system/themes/lightTheme.ts","../src/design-system/themes/darkTheme.ts","../src/design-system/themes/ThemeProvider.tsx","../src/design-system/themes/cssVariables.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Light Theme\r\n *\r\n * A clean, calm light theme inspired by Apple's design language.\r\n * Subtle contrasts, soft shadows, and refined colors.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const lightTheme: Theme = {\r\n name: 'light',\r\n colors: {\r\n background: {\r\n app: neutrals.white,\r\n subtle: neutrals.gray50,\r\n muted: neutrals.gray100,\r\n elevated: neutrals.white,\r\n overlay: 'rgba(0, 0, 0, 0.4)',\r\n inverse: neutrals.gray950,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray950,\r\n muted: neutrals.gray600,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray400,\r\n inverse: neutrals.white,\r\n link: primary[600],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray200,\r\n muted: neutrals.gray100,\r\n strong: neutrals.gray300,\r\n focus: primary[500],\r\n },\r\n\r\n primary: {\r\n default: primary[600],\r\n hover: primary[700],\r\n active: primary[800],\r\n muted: primary[50],\r\n softHover: primary[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[500],\r\n hover: accent[600],\r\n active: accent[700],\r\n muted: accent[50],\r\n softHover: accent[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[600],\r\n hover: success[700],\r\n muted: success[50],\r\n softHover: success[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[500],\r\n hover: warning[600],\r\n muted: warning[50],\r\n softHover: warning[100],\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[600],\r\n hover: error[700],\r\n muted: error[50],\r\n softHover: error[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[600],\r\n hover: info[700],\r\n muted: info[50],\r\n softHover: info[100],\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Dark Theme\r\n *\r\n * A sophisticated dark theme with deep blacks and vibrant accents.\r\n * Inspired by Apple's dark mode - true black with subtle depth.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const darkTheme: Theme = {\r\n name: 'dark',\r\n colors: {\r\n background: {\r\n app: neutrals.black,\r\n subtle: neutrals.gray950,\r\n muted: neutrals.gray900,\r\n elevated: neutrals.gray800,\r\n overlay: 'rgba(0, 0, 0, 0.7)',\r\n inverse: neutrals.white,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray100,\r\n muted: neutrals.gray400,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray600,\r\n inverse: neutrals.gray950,\r\n link: primary[400],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray800,\r\n muted: neutrals.gray900,\r\n strong: neutrals.gray700,\r\n focus: primary[400],\r\n },\r\n\r\n primary: {\r\n default: primary[500],\r\n hover: primary[400],\r\n active: primary[300],\r\n muted: 'rgba(85, 120, 244, 0.15)',\r\n softHover: 'rgba(85, 120, 244, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[400],\r\n hover: accent[300],\r\n active: accent[200],\r\n muted: 'rgba(248, 101, 69, 0.15)',\r\n softHover: 'rgba(248, 101, 69, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[500],\r\n hover: success[400],\r\n muted: 'rgba(16, 185, 129, 0.15)',\r\n softHover: 'rgba(16, 185, 129, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[400],\r\n hover: warning[300],\r\n muted: 'rgba(245, 158, 11, 0.15)',\r\n softHover: 'rgba(245, 158, 11, 0.25)',\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[500],\r\n hover: error[400],\r\n muted: 'rgba(239, 68, 68, 0.15)',\r\n softHover: 'rgba(239, 68, 68, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[500],\r\n hover: info[400],\r\n muted: 'rgba(6, 182, 212, 0.15)',\r\n softHover: 'rgba(6, 182, 212, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Flatten and inject CSS variables\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const varName = prefix ? `${prefix}-${key}` : key\r\n\r\n if (typeof value === 'object' && value !== null) {\r\n Object.assign(acc, flattenColors(value as Record<string, unknown>, varName))\r\n } else if (typeof value === 'string') {\r\n acc[`--brycks-${varName}`] = value\r\n }\r\n\r\n return acc\r\n },\r\n {} as Record<string, string>\r\n )\r\n }\r\n\r\n const cssVars = flattenColors(theme.colors as unknown as Record<string, unknown>)\r\n Object.entries(cssVars).forEach(([key, value]) => {\r\n root.style.setProperty(key, value)\r\n })\r\n\r\n // Clean up function not needed as we just overwrite values\r\n }, [theme, resolvedMode, skipCSSVariables])\r\n\r\n const contextValue = useMemo<ThemeContextValue>(\r\n () => ({\r\n theme,\r\n mode,\r\n resolvedMode,\r\n setMode,\r\n toggleMode,\r\n }),\r\n [theme, mode, resolvedMode, setMode, toggleMode]\r\n )\r\n\r\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\r\n}\r\n\r\n/** Hook to access theme context */\r\nexport function useTheme(): ThemeContextValue {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider')\r\n }\r\n\r\n return context\r\n}\r\n\r\n/** Hook to get current theme colors */\r\nexport function useThemeColors() {\r\n const { theme } = useTheme()\r\n return theme.colors\r\n}\r\n\r\nexport { ThemeContext }\r\n","/**\r\n * Brycks Design System - CSS Variable Helpers\r\n *\r\n * Utilities for working with CSS variables in components.\r\n */\r\n\r\n/** CSS variable names mapped to theme paths */\r\nexport const cssVar = {\r\n // Background\r\n bgApp: 'var(--brycks-background-app)',\r\n bgSubtle: 'var(--brycks-background-subtle)',\r\n bgMuted: 'var(--brycks-background-muted)',\r\n bgElevated: 'var(--brycks-background-elevated)',\r\n bgOverlay: 'var(--brycks-background-overlay)',\r\n bgInverse: 'var(--brycks-background-inverse)',\r\n\r\n // Foreground\r\n fgDefault: 'var(--brycks-foreground-default)',\r\n fgMuted: 'var(--brycks-foreground-muted)',\r\n fgSubtle: 'var(--brycks-foreground-subtle)',\r\n fgDisabled: 'var(--brycks-foreground-disabled)',\r\n fgInverse: 'var(--brycks-foreground-inverse)',\r\n fgLink: 'var(--brycks-foreground-link)',\r\n\r\n // Border\r\n borderDefault: 'var(--brycks-border-default)',\r\n borderMuted: 'var(--brycks-border-muted)',\r\n borderStrong: 'var(--brycks-border-strong)',\r\n borderFocus: 'var(--brycks-border-focus)',\r\n\r\n // Primary\r\n primaryDefault: 'var(--brycks-primary-default)',\r\n primaryHover: 'var(--brycks-primary-hover)',\r\n primaryActive: 'var(--brycks-primary-active)',\r\n primaryMuted: 'var(--brycks-primary-muted)',\r\n primaryForeground: 'var(--brycks-primary-foreground)',\r\n\r\n // Accent\r\n accentDefault: 'var(--brycks-accent-default)',\r\n accentHover: 'var(--brycks-accent-hover)',\r\n accentActive: 'var(--brycks-accent-active)',\r\n accentMuted: 'var(--brycks-accent-muted)',\r\n accentForeground: 'var(--brycks-accent-foreground)',\r\n\r\n // Success\r\n successDefault: 'var(--brycks-success-default)',\r\n successHover: 'var(--brycks-success-hover)',\r\n successMuted: 'var(--brycks-success-muted)',\r\n successForeground: 'var(--brycks-success-foreground)',\r\n\r\n // Warning\r\n warningDefault: 'var(--brycks-warning-default)',\r\n warningHover: 'var(--brycks-warning-hover)',\r\n warningMuted: 'var(--brycks-warning-muted)',\r\n warningForeground: 'var(--brycks-warning-foreground)',\r\n\r\n // Error\r\n errorDefault: 'var(--brycks-error-default)',\r\n errorHover: 'var(--brycks-error-hover)',\r\n errorMuted: 'var(--brycks-error-muted)',\r\n errorForeground: 'var(--brycks-error-foreground)',\r\n\r\n // Info\r\n infoDefault: 'var(--brycks-info-default)',\r\n infoHover: 'var(--brycks-info-hover)',\r\n infoMuted: 'var(--brycks-info-muted)',\r\n infoForeground: 'var(--brycks-info-foreground)',\r\n} as const\r\n\r\nexport type CSSVar = keyof typeof cssVar\r\n"],"names":["lightTheme","neutrals","primary","accent","success","warning","error","info","darkTheme","ThemeContext","createContext","THEME_STORAGE_KEY","mergeThemeColors","base","overrides","acc","key","baseValue","overrideValue","ThemeProvider","children","config","skipCSSVariables","mode","setModeState","useState","systemMode","setSystemMode","useEffect","mediaQuery","handleChange","e","resolvedMode","theme","useMemo","baseTheme","setMode","useCallback","newMode","toggleMode","root","flattenColors","obj","prefix","value","varName","cssVars","contextValue","useTheme","context","useContext","useThemeColors","cssVar"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cssVariables-D_naqeoR.cjs","sources":["../src/design-system/themes/lightTheme.ts","../src/design-system/themes/darkTheme.ts","../src/design-system/themes/ThemeProvider.tsx","../src/design-system/themes/cssVariables.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Light Theme\r\n *\r\n * A clean, calm light theme inspired by Apple's design language.\r\n * Subtle contrasts, soft shadows, and refined colors.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const lightTheme: Theme = {\r\n name: 'light',\r\n colors: {\r\n background: {\r\n app: neutrals.white,\r\n subtle: neutrals.gray50,\r\n muted: neutrals.gray100,\r\n elevated: neutrals.white,\r\n overlay: 'rgba(0, 0, 0, 0.4)',\r\n inverse: neutrals.gray950,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray950,\r\n muted: neutrals.gray600,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray400,\r\n inverse: neutrals.white,\r\n link: primary[600],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray200,\r\n muted: neutrals.gray100,\r\n strong: neutrals.gray300,\r\n focus: primary[500],\r\n },\r\n\r\n primary: {\r\n default: primary[600],\r\n hover: primary[700],\r\n active: primary[800],\r\n muted: primary[50],\r\n softHover: primary[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[500],\r\n hover: accent[600],\r\n active: accent[700],\r\n muted: accent[50],\r\n softHover: accent[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[600],\r\n hover: success[700],\r\n muted: success[50],\r\n softHover: success[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[500],\r\n hover: warning[600],\r\n muted: warning[50],\r\n softHover: warning[100],\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[600],\r\n hover: error[700],\r\n muted: error[50],\r\n softHover: error[100],\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[600],\r\n hover: info[700],\r\n muted: info[50],\r\n softHover: info[100],\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Dark Theme\r\n *\r\n * A sophisticated dark theme with deep blacks and vibrant accents.\r\n * Inspired by Apple's dark mode - true black with subtle depth.\r\n */\r\n\r\nimport { neutrals, primary, accent, success, warning, error, info } from '../tokens/colors'\r\nimport type { Theme } from './types'\r\n\r\nexport const darkTheme: Theme = {\r\n name: 'dark',\r\n colors: {\r\n background: {\r\n app: neutrals.black,\r\n subtle: neutrals.gray950,\r\n muted: neutrals.gray900,\r\n elevated: neutrals.gray800,\r\n overlay: 'rgba(0, 0, 0, 0.7)',\r\n inverse: neutrals.white,\r\n },\r\n\r\n foreground: {\r\n default: neutrals.gray100,\r\n muted: neutrals.gray400,\r\n subtle: neutrals.gray500,\r\n disabled: neutrals.gray600,\r\n inverse: neutrals.gray950,\r\n link: primary[400],\r\n },\r\n\r\n border: {\r\n default: neutrals.gray800,\r\n muted: neutrals.gray900,\r\n strong: neutrals.gray700,\r\n focus: primary[400],\r\n },\r\n\r\n primary: {\r\n default: primary[500],\r\n hover: primary[400],\r\n active: primary[300],\r\n muted: 'rgba(85, 120, 244, 0.15)',\r\n softHover: 'rgba(85, 120, 244, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n accent: {\r\n default: accent[400],\r\n hover: accent[300],\r\n active: accent[200],\r\n muted: 'rgba(248, 101, 69, 0.15)',\r\n softHover: 'rgba(248, 101, 69, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n success: {\r\n default: success[500],\r\n hover: success[400],\r\n muted: 'rgba(16, 185, 129, 0.15)',\r\n softHover: 'rgba(16, 185, 129, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n warning: {\r\n default: warning[400],\r\n hover: warning[300],\r\n muted: 'rgba(245, 158, 11, 0.15)',\r\n softHover: 'rgba(245, 158, 11, 0.25)',\r\n foreground: neutrals.gray950,\r\n },\r\n\r\n error: {\r\n default: error[500],\r\n hover: error[400],\r\n muted: 'rgba(239, 68, 68, 0.15)',\r\n softHover: 'rgba(239, 68, 68, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n\r\n info: {\r\n default: info[500],\r\n hover: info[400],\r\n muted: 'rgba(6, 182, 212, 0.15)',\r\n softHover: 'rgba(6, 182, 212, 0.25)',\r\n foreground: neutrals.white,\r\n },\r\n },\r\n}\r\n","/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Flatten and inject CSS variables\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const varName = prefix ? `${prefix}-${key}` : key\r\n\r\n if (typeof value === 'object' && value !== null) {\r\n Object.assign(acc, flattenColors(value as Record<string, unknown>, varName))\r\n } else if (typeof value === 'string') {\r\n acc[`--brycks-${varName}`] = value\r\n }\r\n\r\n return acc\r\n },\r\n {} as Record<string, string>\r\n )\r\n }\r\n\r\n const cssVars = flattenColors(theme.colors as unknown as Record<string, unknown>)\r\n Object.entries(cssVars).forEach(([key, value]) => {\r\n root.style.setProperty(key, value)\r\n })\r\n\r\n // Clean up function not needed as we just overwrite values\r\n }, [theme, resolvedMode, skipCSSVariables])\r\n\r\n const contextValue = useMemo<ThemeContextValue>(\r\n () => ({\r\n theme,\r\n mode,\r\n resolvedMode,\r\n setMode,\r\n toggleMode,\r\n }),\r\n [theme, mode, resolvedMode, setMode, toggleMode]\r\n )\r\n\r\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\r\n}\r\n\r\n/** Hook to access theme context */\r\nexport function useTheme(): ThemeContextValue {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider')\r\n }\r\n\r\n return context\r\n}\r\n\r\n/** Hook to get current theme colors */\r\nexport function useThemeColors() {\r\n const { theme } = useTheme()\r\n return theme.colors\r\n}\r\n\r\nexport { ThemeContext }\r\n","/**\r\n * Brycks Design System - CSS Variable Helpers\r\n *\r\n * Utilities for working with CSS variables in components.\r\n */\r\n\r\n/** CSS variable names mapped to theme paths */\r\nexport const cssVar = {\r\n // Background\r\n bgApp: 'var(--brycks-background-app)',\r\n bgSubtle: 'var(--brycks-background-subtle)',\r\n bgMuted: 'var(--brycks-background-muted)',\r\n bgElevated: 'var(--brycks-background-elevated)',\r\n bgOverlay: 'var(--brycks-background-overlay)',\r\n bgInverse: 'var(--brycks-background-inverse)',\r\n\r\n // Foreground\r\n fgDefault: 'var(--brycks-foreground-default)',\r\n fgMuted: 'var(--brycks-foreground-muted)',\r\n fgSubtle: 'var(--brycks-foreground-subtle)',\r\n fgDisabled: 'var(--brycks-foreground-disabled)',\r\n fgInverse: 'var(--brycks-foreground-inverse)',\r\n fgLink: 'var(--brycks-foreground-link)',\r\n\r\n // Border\r\n borderDefault: 'var(--brycks-border-default)',\r\n borderMuted: 'var(--brycks-border-muted)',\r\n borderStrong: 'var(--brycks-border-strong)',\r\n borderFocus: 'var(--brycks-border-focus)',\r\n\r\n // Primary\r\n primaryDefault: 'var(--brycks-primary-default)',\r\n primaryHover: 'var(--brycks-primary-hover)',\r\n primaryActive: 'var(--brycks-primary-active)',\r\n primaryMuted: 'var(--brycks-primary-muted)',\r\n primaryForeground: 'var(--brycks-primary-foreground)',\r\n\r\n // Accent\r\n accentDefault: 'var(--brycks-accent-default)',\r\n accentHover: 'var(--brycks-accent-hover)',\r\n accentActive: 'var(--brycks-accent-active)',\r\n accentMuted: 'var(--brycks-accent-muted)',\r\n accentForeground: 'var(--brycks-accent-foreground)',\r\n\r\n // Success\r\n successDefault: 'var(--brycks-success-default)',\r\n successHover: 'var(--brycks-success-hover)',\r\n successMuted: 'var(--brycks-success-muted)',\r\n successForeground: 'var(--brycks-success-foreground)',\r\n\r\n // Warning\r\n warningDefault: 'var(--brycks-warning-default)',\r\n warningHover: 'var(--brycks-warning-hover)',\r\n warningMuted: 'var(--brycks-warning-muted)',\r\n warningForeground: 'var(--brycks-warning-foreground)',\r\n\r\n // Error\r\n errorDefault: 'var(--brycks-error-default)',\r\n errorHover: 'var(--brycks-error-hover)',\r\n errorMuted: 'var(--brycks-error-muted)',\r\n errorForeground: 'var(--brycks-error-foreground)',\r\n\r\n // Info\r\n infoDefault: 'var(--brycks-info-default)',\r\n infoHover: 'var(--brycks-info-hover)',\r\n infoMuted: 'var(--brycks-info-muted)',\r\n infoForeground: 'var(--brycks-info-foreground)',\r\n} as const\r\n\r\nexport type CSSVar = keyof typeof cssVar\r\n"],"names":["lightTheme","neutrals","primary","accent","success","warning","error","info","darkTheme","ThemeContext","createContext","THEME_STORAGE_KEY","mergeThemeColors","base","overrides","acc","key","baseValue","overrideValue","ThemeProvider","children","config","skipCSSVariables","mode","setModeState","useState","systemMode","setSystemMode","useEffect","mediaQuery","handleChange","e","resolvedMode","theme","useMemo","baseTheme","setMode","useCallback","newMode","toggleMode","root","flattenColors","obj","prefix","value","varName","cssVars","contextValue","useTheme","context","useContext","useThemeColors","cssVar"],"mappings":"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"}