caliper uidocs

Incident room

Pro

The room an incident is run in: severity, status and the clock in view, responders paged from a roster, one timeline for notes and public updates, and a postmortem written from it.

Installs components/ui/incident-room.tsxDepends on @radix-ui/react-dialog, @radix-ui/react-popover, @radix-ui/react-slot, @radix-ui/react-tabs, lucide-reactMotion shared motion tokens
pnpm dlx shadcn@latest add @caliper/incident-room

When to use #

Use it for

  • On-call and SRE tools.
  • Any product with a public status page to keep honest.

Skip it when

  • Showing customers an outage; use the status page.

Installation #

terminal
pnpm dlx shadcn@latest add @caliper/incident-room

Adds its 17 files to components/ui/, each with its own stylesheet, and installs their packages. Pro installs with your access token, set up once per project. See Pro access. The first part also adds Caliper UI’s tokens; import them once as in Installation.

Usage #

Import it from your copy of the source. The example behind the preview comes with the source. It is built from IncidentRoom and postmortemDraft.

example.tsx
import { IncidentRoom, postmortemDraft } from "@/components/ui/incident-room"

The worked example comes with Pro

The 82-line example behind the preview opens here with a Pro or Team licence.

Checking your licence…

API reference #

IncidentRoom

component
PropTypeDefaultDescription
incident *IncidentRecord—
rosterreadonly IncidentResponder[][]People who can be paged, with what they cover.
you *string—Your name, for notes you add.
onChange((incident: IncidentRecord) => void)—Every change, with the whole incident. Persist it however you like.
nownumber—Fix the clock, e.g. in tests.
classNamestring—

postmortemDraft

component
PropTypeDefault
id *string—
title *string—
severity *IncidentSeverity—
status *IncidentStatus—
startedAt *string—
resolvedAtstring—
services *readonly string[]—
responders *readonly IncidentResponder[]—
events *readonly IncidentEvent[]—
actions *readonly IncidentAction[]—
summary *string—
resolutionstring—
linksreadonly { label: string; href: string; }[]—

Accessibility #

It exposes group and status semantics, with aria-hidden, aria-label, aria-labelledby and aria-pressed kept in step with state. Changes that matter are announced through a live region.

KeyBehaviour
EscapeCloses or cancels, then returns focus to where it came from.
EnterActivates the focused control.

Motion #

Transitions use the shared duration and easing tokens. Under prefers-reduced-motion those tokens collapse to instant and travel distances go to zero, so state changes still happen without movement.