caliper uidocs

App template

Pro

The screens wired into one app: routing, counts, G-then-letter jumps and focus that lands on each screen's heading.

Installs components/ui/app-template.tsxDepends on lucide-reactMotion none in component source
pnpm dlx shadcn@latest add @caliper/app-template
Today

Thursday, 9 October

Updated 2 minutes ago

Revenue is up 4.2% on last Thursday. One run waits for your approval.

Revenue
$18,240
up +4.2%
New trials
38
up +6
Churned
2
up +1
Failed payments
2
$1,248 at risk

Revenue by hour

Revenue by hour
TimeThis period
00:00120
01:00180
02:00260
03:00410
04:00520
05:00760
06:00940
07:001,180
08:001,460
09:001,720

Needs you 1

  • WaitingRelease notes runSend to 1,204 subscribers

When to use #

Use it for

  • Starting a new product with a sidebar app.
  • Prototyping flows with real screens before the backend exists.

Skip it when

  • Apps with one or two screens; use the screen directly.

Installation #

terminal
pnpm dlx shadcn@latest add @caliper/app-template

Adds its 4 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.

example.tsx
import { AppTemplate } from "@/components/ui/app-template"

The worked example comes with Pro

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

Checking your licence…

API reference #

AppTemplate

component
PropTypeDefault
workspace *{ name: string; mark?: ReactNode; }—
places *readonly AppPlace[]—
plan{ name: string; used: number; limit: number; note?: string | undefined; }—
userReactNode—
onSearch(() => void)—
initialstring—
classNamestring—

Accessibility #

It is built on native elements and keeps aria-live in step with state. Changes that matter are announced through a live region.

No custom key handling; Tab and the native activation keys do the work.

Motion #

It declares no animation in its component source. Any transition comes from its stylesheet, which uses the duration tokens that collapse to instant under prefers-reduced-motion.