Board UI stories for real control-plane states
This Storybook is organized as a review workspace for Paperclip's operator UI: primitives first, product surfaces second, and the former UX test routes as isolated fixture-backed stories.
import type { Meta, StoryObj } from "@storybook/react-vite"; import { BookOpen, Bot, CheckCircle2, FlaskConical, FolderKanban, FormInput, Layers3, LayoutDashboard, ListTodo, MessageSquare, PanelLeft, Route, ShieldCheck, Wallet, } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; const storyGroups = [ { title: "Foundations", icon: Layers3, stories: "Buttons, badges, form controls, tabs, cards, dialogs, overlays", why: "Baseline tokens and primitives before product components add state.", }, { title: "Control Plane Surfaces", icon: ShieldCheck, stories: "Issue rows, approvals, budget cards, activity rows, metrics", why: "The V1 board UI depends on these dense operational patterns staying legible.", }, { title: "UX Labs", icon: FlaskConical, stories: "Issue chat, run transcripts, invite/access flows", why: "The old `/tests/ux/*` pages are fixture-backed Storybook stories now.", }, { title: "Navigation & Layout", icon: PanelLeft, stories: "Sidebar, breadcrumbs, command palette, company rail, mobile nav", why: "Navigation chrome frames every board interaction and needs mobile parity.", }, { title: "Agent Management", icon: Bot, stories: "Agent properties, config forms, icon picker, action buttons", why: "Agent lifecycle is the primary governance surface for operators.", }, { title: "Issue Management", icon: ListTodo, stories: "Issue lists, filters, properties, documents, run ledger, workspace cards", why: "Issues are the core work unit — every view state matters for scan speed.", }, { title: "Forms & Editors", icon: FormInput, stories: "Markdown editor, JSON schema forms, env vars, schedule editor, pickers", why: "Rich editors need isolated review for empty, filled, and validation states.", }, { title: "Budget & Finance", icon: Wallet, stories: "Incident cards, provider quotas, biller spend, subscription panels", why: "Financial controls are safety-critical and need threshold state coverage.", }, { title: "Dialogs & Modals", icon: LayoutDashboard, stories: "New issue/agent/goal/project dialogs, diff modal, image gallery", why: "Dialogs interrupt flow — they must be scannable and self-explanatory.", }, { title: "Projects & Goals", icon: FolderKanban, stories: "Project properties, workspace cards, goal trees, runtime controls", why: "Hierarchical views (goals, projects, workspaces) need expand/collapse coverage.", }, { title: "Chat & Comments", icon: MessageSquare, stories: "Comment threads, run chat, issue chat with timeline events", why: "Threaded conversations mix agent/user/system authors and need density review.", }, ]; const coverageRows = [ ["System primitives", "Covered", "State matrix across size, variant, disabled, icon, and overlay behavior"], ["Status language", "Covered", "Issue/agent lifecycle badges, priorities, quota thresholds, and empty states"], ["Task surfaces", "Covered", "Inbox-style rows with unread, selected, archive, and trailing metadata states"], ["Governance", "Covered", "Pending, revision-requested, approved, and budget-specific approval payloads"], ["Budget controls", "Covered", "Healthy, warning, hard-stop, compact, plain, and editable card variants"], ["Execution UX", "Covered", "Run transcript detail, live widget, dashboard card, streaming and settled views"], ["Invite UX", "Covered", "Fixture-backed access roles, invite landing, pending, accepted, expired, and error states"], ["Navigation & layout", "Planned", "Sidebar, breadcrumbs, command palette, company rail, mobile nav"], ["Agent management", "Planned", "Agent properties, config forms, icon picker, action buttons, active panel"], ["Issue management", "Planned", "Issue lists, filters, properties, documents, run ledger, workspace cards"], ["Forms & editors", "Planned", "Markdown editor, JSON schema, env vars, schedule editor, pickers"], ["Budget & finance", "Planned", "Incident cards, provider quotas, biller spend, subscription panels"], ["Dialogs & modals", "Planned", "New issue/agent/goal/project dialogs, diff modal, image gallery"], ["Projects & goals", "Planned", "Project properties, workspace cards, goal trees, runtime controls"], ["Chat & comments", "Covered", "Comment threads, run chat, issue chat with timeline events"], ["Data viz & misc", "Planned", "Activity charts, kanban, filter bar, live widget, onboarding, skeletons"], ["Full app pages", "Deferred", "API-driven route stories after page data loaders can be fixture-injected"], ]; function StorybookGuide() { return (
This Storybook is organized as a review workspace for Paperclip's operator UI: primitives first, product surfaces second, and the former UX test routes as isolated fixture-backed stories.