All files / packages/ui/src/themes utils.ts

100% Statements 9/9
100% Branches 5/5
100% Functions 2/2
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48          24x 1296x 1248x 1248x 1248x 1248x     24x 48x                                                                  
import { vars } from "nativewind";
 
import { lightColors } from "./colors";
 
// Helper to convert hex to space-separated RGB (for Tailwind opacity support)
export const hexToRgbVars = (hex?: string): string => {
  if (!hex || typeof hex !== "string" || !hex.startsWith("#")) return "0 0 0";
  const r = parseInt(hex.slice(1, 3), 16);
  const g = parseInt(hex.slice(3, 5), 16);
  const b = parseInt(hex.slice(5, 7), 16);
  return `${r} ${g} ${b}`;
};
 
export const createThemeVars = (colorSet: typeof lightColors) => {
  return vars({
    "--color-bg-primary": hexToRgbVars(colorSet.background.primary),
    "--color-bg-page": hexToRgbVars(colorSet.background.page),
    "--color-bg-page-muted": hexToRgbVars(colorSet.background.pageMuted),
    "--color-bg-secondary": hexToRgbVars(colorSet.background.secondary),
    "--color-bg-tertiary": hexToRgbVars(colorSet.background.tertiary),
    "--color-bg-dark": hexToRgbVars(colorSet.background.dark),
    "--color-bg-modal": hexToRgbVars(colorSet.background.modal),
    "--color-bg-overlay": hexToRgbVars(colorSet.background.overlay),
    "--color-bg-disabled": hexToRgbVars(colorSet.background.disabled),
 
    "--color-text-primary": hexToRgbVars(colorSet.text.primary),
    "--color-text-secondary": hexToRgbVars(colorSet.text.secondary),
    "--color-text-tertiary": hexToRgbVars(colorSet.text.tertiary),
    "--color-text-white": hexToRgbVars(colorSet.text.white),
    "--color-text-dark": hexToRgbVars(colorSet.text.dark),
    "--color-text-success": hexToRgbVars(colorSet.text.success),
    "--color-text-error": hexToRgbVars(colorSet.text.error),
    "--color-text-warning": hexToRgbVars(colorSet.text.warning),
 
    "--color-border-default": hexToRgbVars(colorSet.border.default),
    "--color-border-primary": hexToRgbVars(colorSet.border.primary),
    "--color-border-secondary": hexToRgbVars(colorSet.border.secondary),
    "--color-border-tertiary": hexToRgbVars(colorSet.border.tertiary),
    "--color-border-disabled": hexToRgbVars(colorSet.border.disabled),
 
    "--color-icon-primary": hexToRgbVars(colorSet.icon.primary),
    "--color-icon-active": hexToRgbVars(colorSet.icon.active),
    "--color-icon-inactive": hexToRgbVars(colorSet.icon.inactive),
    "--color-icon-success": hexToRgbVars(colorSet.icon.success),
    "--color-icon-error": hexToRgbVars(colorSet.icon.error),
  });
};