import { useState, type ReactNode } from "react"; import { Avatar, Badge, Button, Card, IconButton, Input, SegmentedControl, } from "@trails-cool/ui"; import { Topbar } from "~/components/Topbar"; import type { Participant } from "~/lib/use-participants"; const SOLO: Participant[] = [ { clientId: 1, name: "ulle", color: "#4A6B40", isHost: true, isLocal: true }, ]; const PARTY: Participant[] = [ { clientId: 1, name: "ulle", color: "#4A6B40", isHost: true, isLocal: true }, { clientId: 2, name: "Mara", color: "#8B6D3A", isHost: false, isLocal: false }, { clientId: 3, name: "Sam", color: "#C46040", isHost: false, isLocal: false }, ]; const noop = () => {}; const profilePlaceholder = ( ); const actionsPlaceholder = ( ); function TopbarConfig({ caption, children }: { caption: string; children: ReactNode }) { return (

{caption}

{children}
); } const UndoIcon = () => ( ); const RedoIcon = () => ( ); const COLOR_MODES = [ { value: "plain", label: "Plain" }, { value: "elevation", label: "Elevation" }, { value: "surface", label: "Surface" }, ] as const; /** * Dev-only gallery for the shared UI primitives. Renders every primitive in * its variants/states on one page so components can be built and eyeballed in * isolation — the lightweight alternative to Storybook. Registered only in * non-production builds (see routes.ts). */ function Section({ title, children }: { title: string; children: ReactNode }) { return (

{title}

{children}
); } export default function DevUi() { const [colorMode, setColorMode] = useState<(typeof COLOR_MODES)[number]["value"]>("elevation"); return (

UI primitives

Shared @trails-cool/ui components on the design-system tokens.

Neutral Elevation NIGHT 2
selected: {colorMode}
ulle Host

Topbar · configurations

Subtle card

On a subtle surface tone.

Raised card

Elevated with a soft shadow.

); }