Theming

Sona UI components use semantic CSS variables and Tailwind utility classes. They are designed to inherit your project's visual language, including its light and dark themes.

Use semantic tokens

Most components rely on the standard shadcn semantic tokens for surfaces, text, controls, borders, and focus states. Keep those names stable, then adjust their values to match your product.

Components that need Sona-specific values declare the small sona-theme foundation. The CLI installs it only when a component needs it. It adds the Sona radius and danger-state tokens without copying this documentation site's stylesheet into your project.

Set up dark mode

For a Next.js project, install next-themes and provide it at the root of the application. Other frameworks can use the same semantic tokens with their preferred theme strategy.

TypeScript
src/app/providers.tsx
TypeScript
src/app/layout.tsx

Customize the palette

Define semantic values in the Tailwind CSS entry file. The example below is a compact foundation that Sona UI components can inherit.

css
src/app/globals.css

When the provider uses the class attribute, define both root and dark values explicitly. This keeps theme changes controlled by the class rather than the browser color-scheme setting.

Style the installed source

Sona UI gives you local source files, so you can change classes and structure where the component is used. Prefer semantic utilities from your theme so the component continues to work in every color mode.

TypeScript

Contact

Found a bug or need help theming a component? Open an issue on GitHub.

License & Usage

Sona UI is available under the MIT license. You may use, modify, and distribute components in personal and commercial projects.