Skip to main content
Version: 0.3.0

Theme Management

The library provides comprehensive theme management using Zustand and MMKV.

There are two supported ways to configure theme colors:

  • setTcbsColor(...): manually set individual theme tokens
  • setMazicColor(baseColor): generate the full light and dark theme palettes from one base color

You can also configure centralized scale tokens for spacing, padding, margin, radius, and type sizing:

  • setTcbsScale(...): override the shared xs through xxl design scale used by the components

Setting Up Themes

Basic Theme Setup

import { useTcbsColorStore } from '@tcbs/react-native-mazic-ui';

const { setTcbsColor } = useTcbsColorStore();

React.useEffect(() => {
setTcbsColor({
light: {
btnColor: '#007AFF',
btnBorderColor: '#007AFF',
btnIconColor: '#16a62bff',
themeColor: '#007AFF',
btnTextColor: '#FFFFFF',
},
dark: {
btnColor: '#222222',
btnBorderColor: '#222222',
btnIconColor: '#FFFFFF',
themeColor: '#222222',
btnTextColor: '#FFFFFF',
},
});
}, []);

Single Color Theme Setup

Use setMazicColor when you want the package to derive the full theme from one brand or accent color.

import { useTcbsColorStore } from '@tcbs/react-native-mazic-ui';

const { setMazicColor } = useTcbsColorStore();

React.useEffect(() => {
setMazicColor('#007AFF');
}, []);

This generates both the light and dark theme palettes automatically and updates the current active theme in the store.

Centralized Scale Setup

Use setTcbsScale to define one shared sizing system for spacing, padding, margin, border radius, and font size.

import { useTcbsColorStore } from '@tcbs/react-native-mazic-ui';

const { setMazicColor, setTcbsScale } = useTcbsColorStore();

React.useEffect(() => {
setMazicColor('#007AFF');
setTcbsScale({
spacing: {
xs: 2,
s: 4,
m: 8,
l: 12,
xl: 16,
xxl: 24,
},
radius: {
xs: 4,
s: 8,
m: 12,
l: 16,
xl: 20,
xxl: 24,
},
fontSize: {
xs: 4,
s: 8,
m: 12,
l: 16,
xl: 20,
xxl: 24,
},
});
}, []);

Components can then consume the shared scale from useTcbsColorStore().scaleTokens.

Default Scale Tokens

The package ships with universal default scale values, so consumers can use the token system even if they never override it.

Tokenxssmlxlxxl
spacing248121624
radius4812162024
fontSize4812162024

How to Use Scale Tokens

  • Use spacing for both margin and padding so spacing stays consistent across the app
  • Use radius for rounded corners instead of raw borderRadius values
  • Use fontSize for text sizing across buttons, text, cards, and custom components
  • Override only the values you need; setTcbsScale merges partial updates into the defaults

Example partial override:

setTcbsScale({
spacing: {
m: 10,
l: 14,
},
fontSize: {
xl: 22,
},
});

What setMazicColor Updates

setMazicColor(baseColor) replaces the generated light and dark palettes and updates these theme keys:

  • btnColor
  • btnBorderColor
  • btnIconColor
  • themeColor
  • btnTextColor
  • tabBarIconActiveColor
  • tabBarIconInactiveColor
  • primaryColor
  • secondaryColor
  • tertiaryColor
  • screenBgColor
  • modalBgColor
  • modalTitleColor
  • modalHeaderBgColor
  • modalCardBgColor
  • textPrimary
  • textSecondary
  • borderColor
  • dividerColor
  • inputBgColor
  • inputBorderColor
  • cardBgColor
  • cardBorderColor
  • accentColor
  • errorColor
  • successColor
  • warningColor

How setMazicColor Derives the Palette

The generated palette uses the supplied base color as the main accent and button color, then derives supporting tokens around it:

  • Button and primary accent colors are based directly on the provided baseColor
  • secondaryColor and accentColor use a darker derived tone
  • tertiaryColor uses a lower-opacity accent tint
  • Light theme backgrounds, cards, borders, and inputs use neutral light surfaces
  • Dark theme backgrounds, cards, borders, and inputs use neutral dark surfaces
  • Semantic colors such as errorColor, successColor, and warningColor use fixed accessible defaults
  • Text colors are generated for contrast rather than copied from the base color

setMazicColor is the best option when you want a coherent package-wide theme from one color. Use setTcbsColor when you need full token-level control.

Theme Modes

The library supports three theme modes:

  • light: Always use light theme colors
  • dark: Always use dark theme colors
  • system: Use system color scheme (respects user's OS preference)

Theme Persistence

Themes are automatically persisted using MMKV storage, so users' preferences are maintained between app sessions.

Available Colors

The theme system supports extensive color customization through the ThemeColor interface:

  • btnColor: Main button background color
  • btnBorderColor: Button border color
  • btnIconColor: Icon color
  • themeColor: Overall theme color
  • btnTextColor: Button text color
  • tabBarIconActiveColor: Active tab icon color
  • tabBarIconInactiveColor: Inactive tab icon color
  • primaryColor: Primary brand/accent color
  • secondaryColor: Secondary accent color
  • tertiaryColor: Low-emphasis accent tint
  • screenBgColor: Screen background color
  • modalBgColor: Modal overlay or panel background
  • modalTitleColor: Modal title text color
  • modalHeaderBgColor: Modal header background color
  • modalCardBgColor: Modal card or content surface color
  • textPrimary: Primary text color
  • textSecondary: Secondary text color
  • borderColor: Default border color
  • dividerColor: Divider and separator color
  • inputBgColor: Input background color
  • inputBorderColor: Input border color
  • cardBgColor: Card background color
  • cardBorderColor: Card border color
  • accentColor: Accent color for supporting UI highlights
  • errorColor: Error state color
  • successColor: Success state color
  • warningColor: Warning state color