import { useState } from "react"; import { ChevronLeft, ChevronRight } from "lucide-react"; const ARMS = [ { id: "labs", name: "Labs", color: "#FBBF24", bgColor: "bg-yellow-500/20", textColor: "text-yellow-400", }, { id: "gameforge", name: "GameForge", color: "#22C55E", bgColor: "bg-green-500/20", textColor: "text-green-400", }, { id: "corp", name: "Corp", color: "#3B82F6", bgColor: "bg-blue-500/20", textColor: "text-blue-400", }, { id: "foundation", name: "Foundation", color: "#EF4444", bgColor: "bg-red-500/20", textColor: "text-red-400", }, { id: "devlink", name: "Dev-Link", color: "#06B6D4", bgColor: "bg-cyan-500/20", textColor: "text-cyan-400", }, ]; const LOGO_URLS: Record = { labs: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F85fe7910cff6483db1ea99c154684844?format=webp&width=800", gameforge: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fcd3534c1caa0497abfd44224040c6059?format=webp&width=800", corp: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fae654ecc18b241bdab273893e8231970?format=webp&width=800", foundation: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2Fc02cb1bf5056479bbb3ea4bd91f0d472?format=webp&width=800", devlink: "https://cdn.builder.io/api/v1/image/assets%2Ffc53d607e21d497595ac97e0637001a1%2F9a96b43cbd7b49bb9d5434580319c793?format=webp&width=800", }; // Mockup 1: Vertical Sidebar function VerticalSidebarMockup() { return (
{/* Sidebar */}
{ARMS.map((arm) => ( ))}
{/* Content Area */}

Vertical Sidebar

Fixed sidebar with arm icons on the left. Tooltips appear on hover. Good for consistent access but takes up screen width.

); } // Mockup 2: Horizontal Scrollable Carousel function HorizontalCarouselMockup() { const [scrollPosition, setScrollPosition] = useState(0); return (
{/* Header with carousel */}
{ARMS.map((arm) => ( ))}
{/* Content Area */}

Horizontal Scrollable Carousel

Carousel with scroll arrows. Good use of horizontal space. Can show all arms at once on wider tablets.

); } // Mockup 3: Compact Horizontal Bar function CompactHorizontalMockup() { return (
{/* Header with compact bar */}
{ARMS.map((arm) => ( ))}
{/* Content Area */}

Compact Horizontal Bar

Minimalist horizontal bar in header. All arms visible at once. Takes minimal vertical space. Best for standard tablet widths.

); } // Mockup 4: Grid Layout function GridLayoutMockup() { return (
{/* Header with grid toggle */}
{ARMS.map((arm) => ( ))}
{/* Content Area */}

Grid Layout

Grid display for arm selection. Shows labels below each icon. Works well for modal or expandable menu.

); } // Mockup 5: Segmented Control function SegmentedControlMockup() { const [active, setActive] = useState("labs"); return (
{/* Header with segmented control */}
{ARMS.map((arm) => ( ))}
{/* Content Area */}

Segmented Control

Mobile-style segmented picker. Clearly shows active arm. Clean and familiar pattern. May overflow on smaller tablets.

); } // Mockup 6: Floating Pill Button function FloatingPillMockup() { const [isOpen, setIsOpen] = useState(false); return (
{/* Content Area */}

Floating Pill Button

FAB-style floating button. Minimalist. Expands when clicked to show options. Doesn't take up header space.

{/* Floating Pill */}
{isOpen && ( <> {/* Backdrop */}
setIsOpen(false)} /> {/* Pill Menu */}
{ARMS.map((arm) => ( ))}
)}
); } export default function TabletArmMockups() { const mockups = [ { id: 1, title: "Vertical Sidebar", component: VerticalSidebarMockup, pros: [ "Always visible", "Takes minimal horizontal space", "Tooltips for labels", ], cons: ["Uses vertical header space", "Reduced content area"], }, { id: 2, title: "Horizontal Scrollable Carousel", component: HorizontalCarouselMockup, pros: ["Scrollable", "All arms accessible", "Clean header"], cons: ["Needs scroll controls", "Not all visible at once"], }, { id: 3, title: "Compact Horizontal Bar", component: CompactHorizontalMockup, pros: [ "All arms visible", "Minimal space", "Clean aesthetic", "Works like desktop", ], cons: ["May crowd on very narrow tablets"], }, { id: 4, title: "Grid Layout", component: GridLayoutMockup, pros: ["Shows labels", "Visual clarity", "Expandable"], cons: ["Takes more space", "Requires menu or modal"], }, { id: 5, title: "Segmented Control", component: SegmentedControlMockup, pros: ["Familiar pattern", "Clear active state", "Mobile-friendly"], cons: ["May overflow on small tablets", "Less visual variety"], }, { id: 6, title: "Floating Pill Button", component: FloatingPillMockup, pros: [ "Doesn't take header space", "Minimalist", "Always accessible", ], cons: ["Hidden by default", "Overlaps content when open"], }, ]; return (

Tablet Arm Switcher Mockups

Six different navigation patterns for the arm switcher on tablet screens. Click through each mockup to see how they interact.

{mockups.map((mockup) => { const Component = mockup.component; return (
{/* Mockup Title */}

{mockup.id}. {mockup.title}

{/* Mockup Display */}
{/* Pros & Cons */}

Pros

    {mockup.pros.map((pro, idx) => (
  • {pro}
  • ))}

Cons

    {mockup.cons.map((con, idx) => (
  • {con}
  • ))}
{/* Divider */}
); })}
{/* Summary */}

Recommendation

Mockup #3: Compact Horizontal Bar is recommended for tablet sizes. It provides:

  • All arm logos visible at once without scrolling
  • Minimal header height (perfect for tablets in landscape)
  • Consistent experience with desktop version
  • Smooth transition between breakpoints
  • Touch-friendly spacing and interactions

This creates a natural progression: Mobile expandable logo → Tablet compact bar → Desktop full horizontal spacing.

); }