Xzero UI
Pro library

Control centerPro

Workspace quick settings: tiles that morph into detail, a duration dial, and rubber-banded meters.

$ pnpm dlx shadcn@4.23.0 add @xzero-ui-pro/control-center
Live · keyboard ready

When to use

When not to use

Installation

Register both Xzero UI namespaces in your project's components.json:

{
  "registries": {
    "@xzero-ui": "https://mcp.xzero.co.uk/r/{name}.json",
    "@xzero-ui-pro": "https://mcp.xzero.co.uk/r/pro/{name}.json"
  }
}
npx shadcn@4.23.0 add @xzero-ui-pro/control-center

Install xzero-foundation once, and import @/components/xzero/foundation.css in your app root. No Xzero token is used by this snapshot. For sample portraits, photos, fonts, or logos, download https://mcp.xzero.co.uk/install-assets.mjs and run node xzero-install-assets.mjs <receiving-project>.

Usage

import { ControlCenter } from "@/components/xzero/control-center/control-center";
import { Moon, Briefcase } from "lucide-react";

export function QuickSettings() {
  return (
    <ControlCenter
      focusModes={[
        { id: "deep", label: "Deep work", icon: Briefcase, description: "Silences everything but mentions", defaultMinutes: 50 },
        { id: "rest", label: "Rest", icon: Moon, description: "Silences all alerts", defaultMinutes: 30 },
      ]}
      channels={[{ id: "mentions", label: "Mentions", defaultOn: true }, { id: "deploys", label: "Deploys" }]}
      onStateChange={state => saveSettings(state)}
    />
  );
}

API reference

ControlCenter

Quick settings for a web workspace: focus sessions, notification channels, presenting mode, alert volume, and text size.

PropTypeDefaultDescription
focusModes (required){ id: string; label: string; icon: LucideIcon; description: string; defaultMinutes: number }[]–Focus modes offered in the focus detail. defaultMinutes seeds the session dial.
channels (required){ id: string; label: string; description?: string; defaultOn?: boolean }[]–Notification channels toggled in the notifications detail.
people{ id: string; name: string; avatar: string }[][]People who can still reach you during a focus session.
defaultVolumenumber60Initial alert volume, 0 to 100.
defaultTextSizenumber100Initial text size as a percent of the base, 85 to 130.
formatTime(date: Date) => string–Formats the end of a session. Defaults to a short en-US clock time.
onStateChange(state: { focus: { mode: string; minutes: number; until: string } | null; notifications: boolean; channels: Record<string, boolean>; presenting: boolean; volume: number; textSize: number }) => void–Called with the full settings state after any change, including each step while a meter is dragged. Focus detail edits apply only on Start or Update session.
labelstring"Quick settings"Accessible name of the panel.
classNamestring–Extra class on the panel.

Keyboard interactions

KeysAction
Enter / SpaceToggles a tile or opens its detail from the chevron. On the Focus tile with no session, starts the first mode at its default length.
Arrow keysAdjust the meters by one step (1% volume, 5% text size) and the session dial by 5 minutes.
PageUp / PageDownAdjust meters by four steps and the dial by 15 minutes.
Home / EndSet a meter to its limit, or the dial to 5 or 120 minutes.
EscapeCloses the open detail and returns focus to its chevron.
TabCycles focus inside the open detail.

Accessibility

Motion

Responsive behavior

Performance

Notes for AI

Also in surfaces

Guidance for AI tools

Control center: Workspace quick settings: tiles that morph into detail, a duration dial, and rubber-banded meters. Follow the declared prop types and do not invent props. Keep keyboard access, reduced motion support, and both light and dark themes intact when adapting it.

Full library index: https://ui.xzero.co.uk/llms.txt

Browse all components