caliper uidocs

Block editor

Pro

A document made of blocks: text, headings, lists, to-dos, quotes, code, callouts and dividers, with a / menu, markdown shortcuts, Enter and Backspace that split and join, and blocks you drag or move with Alt+Shift+arrows.

Installs components/ui/block-editor.tsxDepends on @radix-ui/react-dropdown-menu, @radix-ui/react-slot, lucide-reactMotion none in component source
pnpm dlx shadcn@latest add @caliper/block-editor

A GBP payment matched to a EUR invoice, with the difference on its own line

When to use #

Use it for

  • Notes, specs, briefs and knowledge base articles inside a product.
  • Anywhere people write structured text that is stored as data.

Skip it when

  • Rich inline formatting such as links and bold inside a short field; use the rich text editor.

Installation #

terminal
pnpm dlx shadcn@latest add @caliper/block-editor

Adds its 7 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 BlockEditor and newBlock.

example.tsx
import { BlockEditor, newBlock } from "@/components/ui/block-editor"

The worked example comes with Pro

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

Checking your licence…

API reference #

BlockEditor

component
PropTypeDefaultDescription
value *readonly EditorBlock[]—
onChange *(blocks: EditorBlock[]) => void—
peoplereadonly string[][]Names that can be
placeholderstring"Type “/” for blocks"Shown in an empty, focused block.
labelstring"Document"Names the editor for screen readers.
classNamestring—

newBlock

component

No props of its own; it accepts the native props of its root element.

Accessibility #

It exposes group, listbox, option, toolbar, status and textbox semantics, with aria-label, aria-hidden, aria-selected, aria-multiline, aria-controls and aria-activedescendant kept in step with state. Changes that matter are announced through a live region.

KeyBehaviour
↓Moves to the next item or value.
↑Moves to the previous item or value.
EnterActivates the focused control.
TabMoves focus through the part's focusable elements.
EscapeCloses or cancels, then returns focus to where it came from.
BackspaceRemoves the previous character or item.
DeleteRemoves the next character or the selected item.
←Moves to the previous item or value.
→Moves to the next item or value.

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.