Skip to content

Custom Theme

Customize the appearance of your chat UI.

Light Theme

tsx
import { Chat } from "@cognipeer/chat-ui";
import "@cognipeer/chat-ui/styles.css";

export default function LightChat() {
  return (
    <div className="h-screen bg-white">
      <Chat
        baseUrl="/api/agents"
        agentId="assistant"
        theme="light"
      />
    </div>
  );
}

Custom Colors

tsx
import { Chat } from "@cognipeer/chat-ui";
import "@cognipeer/chat-ui/styles.css";

export default function BrandedChat() {
  return (
    <div className="h-screen">
      <Chat
        baseUrl="/api/agents"
        agentId="assistant"
        theme="dark"
        themeColors={{
          bgPrimary: "#1a1a2e",
          bgSecondary: "#16213e",
          bgTertiary: "#0f3460",
          textPrimary: "#eaeaea",
          textSecondary: "#a0a0a0",
          accentPrimary: "#e94560",
          accentSecondary: "#c73e54",
        }}
      />
    </div>
  );
}

Blue Theme

tsx
<Chat
  baseUrl="/api/agents"
  agentId="assistant"
  themeColors={{
    accentPrimary: "#3b82f6",
    accentSecondary: "#2563eb",
  }}
/>

Purple Theme

tsx
<Chat
  baseUrl="/api/agents"
  agentId="assistant"
  themeColors={{
    accentPrimary: "#8b5cf6",
    accentSecondary: "#7c3aed",
  }}
/>

CSS Variables

Override CSS variables for more control:

css
/* styles/chat-theme.css */
:root {
  --chat-bg-primary: #1a1a2e;
  --chat-bg-secondary: #16213e;
  --chat-bg-tertiary: #0f3460;
  --chat-bg-hover: #1f3a5f;
  
  --chat-text-primary: #eaeaea;
  --chat-text-secondary: #a0a0a0;
  --chat-text-tertiary: #707070;
  
  --chat-accent-primary: #e94560;
  --chat-accent-secondary: #c73e54;
  
  --chat-border-primary: #2f2f4f;
  --chat-border-secondary: #1f1f3f;
}
tsx
import "@cognipeer/chat-ui/styles.css";
import "./chat-theme.css";

<Chat
  baseUrl="/api/agents"
  agentId="assistant"
/>

Dynamic Theme Toggle

tsx
import { useState } from "react";
import { Chat } from "@cognipeer/chat-ui";
import "@cognipeer/chat-ui/styles.css";

export default function ThemeToggle() {
  const [theme, setTheme] = useState<"dark" | "light">("dark");

  return (
    <div className={`h-screen ${theme === "dark" ? "bg-gray-900" : "bg-white"}`}>
      <header className="p-4 flex justify-end">
        <button
          onClick={() => setTheme(t => t === "dark" ? "light" : "dark")}
          className={`px-3 py-1 rounded ${
            theme === "dark" 
              ? "bg-white text-black" 
              : "bg-black text-white"
          }`}
        >
          {theme === "dark" ? "Light" : "Dark"}
        </button>
      </header>
      
      <div className="h-[calc(100vh-64px)]">
        <Chat
          baseUrl="/api/agents"
          agentId="assistant"
          theme={theme}
        />
      </div>
    </div>
  );
}

Available Colors

PropertyDescription
bgPrimaryMain background
bgSecondarySecondary/sidebar background
bgTertiaryTertiary elements (inputs)
bgHoverHover state
textPrimaryPrimary text
textSecondarySecondary text
textTertiaryMuted text
textInverseText on accent backgrounds
borderPrimaryPrimary borders
borderSecondarySubtle borders
accentPrimaryButtons, links
accentSecondaryHover state for accent

Studio · Pulse · Console · Agent SDK and more — the Cognipeer documentation hub