caliper uidocs

View composer

Pro

Describe a view and watch it assemble. Reasoning steps appear as they finish, placeholders hold the layout, then each tile fills in. A follow-up reshapes what is there instead of starting over: tiles that stay glide to their new place and their figures run to the new values.

Installs components/ui/view-composer.tsxDepends on lucide-reactMotion honours reduced motion
pnpm dlx shadcn@latest add @caliper/view-composer

Halden analytics

Ask a question and the view builds itself

    Nothing here yet. Ask for a view, or pick a suggestion below.

    When to use #

    Use it for

    • Assistants that answer with a screen rather than a paragraph.
    • Analytics tools where a question should change the view in place.

    Skip it when

    • A fixed dashboard that never changes; use the metrics dashboard.

    Installation #

    terminal
    pnpm dlx shadcn@latest add @caliper/view-composer

    Adds its 13 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 { ViewComposer } from "@/components/ui/view-composer"
    

    The worked example comes with Pro

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

    Checking your licence…

    API reference #

    ViewComposer

    component
    PropTypeDefaultDescription
    titlestring"Compose a view"
    descriptionstring—
    suggestions *readonly string[]—Prompts offered as buttons while nothing is being composed.
    onCompose *(prompt: string, current: ComposeView | null) => Promise<ComposeView | null>—Turns a prompt into a view, given the one currently shown. Return null when there is nothing to show.
    placeholderstring"Describe the view you want"
    classNamestring—

    Accessibility #

    It exposes img and status semantics, with aria-label, aria-hidden, aria-current and aria-busy kept 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 checks prefers-reduced-motion itself and settles immediately instead of travelling. Every state is still reachable.