MobileTabBar

A bottom tab bar for mobile layouts with an animated sliding indicator. Pairs well with useMediaQuery to swap between desktop panels and mobile tabs.

Import

import { MobileTabBar, ChatIcon, PreviewIcon, CodeIcon, TerminalIcon, FilesIcon } from "@run0/jiki-ui";
import type { TabItem } from "@run0/jiki-ui";

Props

PropTypeDefaultDescription
tabsTabItem[]—Tab items to display
activeTabstring—ID of the currently active tab
onTabChange(id: string) => void—Called when a tab is tapped
accentColorAccentColor"emerald"Theme color for active state

TabItem

interface TabItem {
  id: string;              // Unique tab identifier
  label: string;           // Display label
  icon?: React.ReactNode;  // Optional icon element
}

Icon Components

The package exports five icon components for common tab types. Each accepts an optional className prop.

IconDescription
ChatIconChat bubble
PreviewIconEye / preview
CodeIconCode brackets
TerminalIconTerminal prompt
FilesIconFolder

Usage

import { useMediaQuery } from "@run0/jiki-ui";

const isMobile = useMediaQuery("(max-width: 768px)");

const tabs: TabItem[] = [
  { id: "chat", label: "Chat", icon: <ChatIcon /> },
  { id: "code", label: "Code", icon: <CodeIcon /> },
  { id: "preview", label: "Preview", icon: <PreviewIcon /> },
  { id: "terminal", label: "Terminal", icon: <TerminalIcon /> },
  { id: "files", label: "Files", icon: <FilesIcon /> },
];

{isMobile && (
  <MobileTabBar
    tabs={tabs}
    activeTab={activeTab}
    onTabChange={setActiveTab}
    accentColor="violet"
  />
)}

Demo

Active tab: code