@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.
- package/dist/{cssVariables-D_naqeoR.cjs → cssVariables-BguyVeCi.cjs} +2 -2
- package/dist/cssVariables-BguyVeCi.cjs.map +1 -0
- package/dist/{cssVariables-CU3jCd8f.js → cssVariables-D9uw0uKO.js} +30 -30
- package/dist/cssVariables-D9uw0uKO.js.map +1 -0
- package/dist/design-system/themes/ThemeProvider.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/themes.cjs +1 -1
- package/dist/themes.js +1 -1
- package/package.json +1 -1
- package/dist/cssVariables-CU3jCd8f.js.map +0 -1
- package/dist/cssVariables-D_naqeoR.cjs.map +0 -1
|
@@ -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(
|
|
2
|
-
//# sourceMappingURL=cssVariables-
|
|
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
|
|
2
|
-
import { createContext as
|
|
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
|
|
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 =
|
|
145
|
-
function _(
|
|
146
|
-
return e ? Object.keys(
|
|
147
|
-
const l =
|
|
148
|
-
return typeof l == "object" && typeof v == "object" ? c[
|
|
149
|
-
}, {}) :
|
|
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:
|
|
152
|
+
children: s,
|
|
153
153
|
config: e,
|
|
154
154
|
skipCSSVariables: c = !1
|
|
155
155
|
}) {
|
|
156
|
-
const [
|
|
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
|
|
164
|
-
const t =
|
|
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
|
-
}, [
|
|
169
|
+
}, [a, e]), h = C((t) => {
|
|
170
170
|
l(t), typeof window < "u" && localStorage.setItem(F, t);
|
|
171
171
|
}, []), H = C(() => {
|
|
172
|
-
h(
|
|
173
|
-
}, [
|
|
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 =
|
|
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,
|
|
189
|
-
const
|
|
188
|
+
}, [m, a, c]);
|
|
189
|
+
const L = S(
|
|
190
190
|
() => ({
|
|
191
191
|
theme: m,
|
|
192
|
-
mode:
|
|
193
|
-
resolvedMode:
|
|
192
|
+
mode: d,
|
|
193
|
+
resolvedMode: a,
|
|
194
194
|
setMode: h,
|
|
195
195
|
toggleMode: H
|
|
196
196
|
}),
|
|
197
|
-
[m,
|
|
197
|
+
[m, d, a, h, H]
|
|
198
198
|
);
|
|
199
|
-
return /* @__PURE__ */
|
|
199
|
+
return /* @__PURE__ */ A(x.Provider, { value: L, children: s });
|
|
200
200
|
}
|
|
201
201
|
function G() {
|
|
202
|
-
const
|
|
203
|
-
if (!
|
|
202
|
+
const s = P(x);
|
|
203
|
+
if (!s)
|
|
204
204
|
throw new Error("useTheme must be used within a ThemeProvider");
|
|
205
|
-
return
|
|
205
|
+
return s;
|
|
206
206
|
}
|
|
207
207
|
function Y() {
|
|
208
|
-
const { theme:
|
|
209
|
-
return
|
|
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
|
-
|
|
270
|
+
V as l,
|
|
271
271
|
G as u
|
|
272
272
|
};
|
|
273
|
-
//# sourceMappingURL=cssVariables-
|
|
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,
|
|
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-
|
|
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-
|
|
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-
|
|
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
package/package.json
CHANGED
|
@@ -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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"}
|