Theming#theming
Recommended Approach: Stylex Contract Theme#recommended-approach-stylex-contract-theme
Create a typed theme using stylex.createTheme from the exported theme contract. This gives you full type safety and integrates directly with Stylex's theming system.
The generated theme is applied via a className on the root element. All child components using the contract tokens will automatically pick up your custom values.
1. Create a theme file#1-create-a-theme-file
// styles/my-theme.stylex.ts import * as stylex from "@stylexjs/stylex"; import { theme } from "@blenx-dev/theme/contract.stylex"; export const myTheme = stylex.createTheme(theme, { primary: "#6C63FF", primarySubtle: "#8B83FF", secondary: "#FF6584", background: "#FAFAFA", backgroundSubtle: "#F0F0F5", surface: "#FFFFFF", surfaceSubtle: "#F0F0F5", surfaceHover: "#E8E8EE", border: "#D1D1E0", borderSubtle: "#E5E5F0", contentPrimary: "#2D2D44", contentSecondary: "#6B6B80", focusRing: "#6C63FF", });
2. Apply to root element#2-apply-to-root-element
// React — wrap your app root import * as stylex from "@stylexjs/stylex"; import { myTheme } from "./styles/my-tokens.stylex"; function App() { return ( <div {...stylex.props(myTheme)}> <YourApp /> </div> ); }
// Next.js — apply to the body or a layout wrapper // app/layout.tsx import { myTheme } from "@/styles/my-tokens.stylex"; export default function RootLayout({ children }) { return ( <html lang="en"> <body className={myTheme}> {children} </body> </html> ); }
Available Imports#available-imports
// Import the contract for createTheme import { theme } from "@blenx-dev/theme/contract.stylex"; // Or use the convenience re-exports import { theme, borderRadius, spacing, fontSize } from "@/lib/theme/tokens.stylex";