- When to use
- One clear next step, such as booking a call or jumping to a section.
- On mobile
- Full-width below 640px so the touch target spans the column.
- Accessibility
- Links render as <a>; external links open in a new tab and announce it. Copy buttons announce success through a live region.
Renders shadcn/ui: button
- When to use
- Alternative destinations of equal weight, such as download formats.
- On mobile
- Switches to a vertical stack below 640px.
- Accessibility
- Rendered as role="group" with the required label.
Renders shadcn/ui: button-group, button
- When to use
- Optional detail, such as showing an alternative estimate.
- On mobile
- Revealed text wraps below the toggle.
- Accessibility
- Uses aria-pressed; revealed text is linked with aria-controls.
Renders shadcn/ui: toggle
- When to use
- Comparing options, such as hosting tiers, without leaving the page.
- On mobile
- Options wrap onto multiple rows; the explanation sits below.
- Accessibility
- Single mode is a radio group and multiple mode a set of pressed buttons.
Renders shadcn/ui: toggle-group
- When to use
- Documenting shortcuts in a product walkthrough.
- On mobile
- Keys wrap with the description.
- Accessibility
- Keys use <kbd>; the description is plain text next to them.
Renders shadcn/ui: kbd
- When to use
- Self-contained summaries such as a deliverable or a decision.
- On mobile
- Spans the column; the footer action becomes full-width.
- Accessibility
- The title is a heading at the next level below the page title.
Renders shadcn/ui: card, button
- When to use
- Separating appendices or phases where a heading would be too heavy.
- On mobile
- Unchanged.
- Accessibility
- Unlabelled separators are decorative; labelled ones expose role="separator".
Renders shadcn/ui: separator
- When to use
- Screenshots, mockups and photos.
- On mobile
- Scales to the column width at the same ratio.
- Accessibility
- Alt text is required in the schema; captions use <figcaption>.
Renders shadcn/ui: aspect-ratio
- When to use
- Release notes or long reference lists that would dominate the page.
- On mobile
- Height cap shrinks to 60% of the viewport.
- Accessibility
- The viewport is focusable and labelled so keyboard users can scroll it.
Renders shadcn/ui: scroll-area
Resizable panels
PrimitiveLoads on demandresizableTwo or three side-by-side panels the reader can resize, such as before and after.
- When to use
- Comparisons where readers benefit from widening one side.
- On mobile
- Below 768px the panels stack vertically without handles.
- Accessibility
- Handles are focusable separators adjustable with arrow keys.
Renders shadcn/ui: resizable
- When to use
- A single optional detail, such as methodology.
- On mobile
- Unchanged; the trigger spans the column.
- Accessibility
- The trigger is a button with aria-expanded.
Renders shadcn/ui: collapsible, button
- When to use
- FAQs, assumptions and terms.
- On mobile
- Unchanged; long titles wrap.
- Accessibility
- Each trigger is a heading-wrapped button with aria-expanded.
Renders shadcn/ui: accordion
- When to use
- Parallel views of the same topic, such as per-platform instructions.
- On mobile
- The tab list scrolls horizontally inside itself; the page never overflows.
- Accessibility
- WAI-ARIA tabs with arrow-key navigation.
Renders shadcn/ui: tabs
- When to use
- Deliverables, resources or contacts.
- On mobile
- Descriptions wrap under titles; links stay tappable.
- Accessibility
- Rendered as a list; linked rows are single links with the title as name.
Renders shadcn/ui: item
Right-to-left section
RecipedirectionA text section in a declared language and writing direction, such as Arabic or Hebrew.
- When to use
- Translated copy that must read right-to-left inside a left-to-right document.
- On mobile
- Unchanged.
- Accessibility
- Sets lang and dir so screen readers and layout follow the language.
Renders shadcn/ui: direction
- When to use
- Pricing, schedules and comparisons.
- On mobile
- "cards" turns each row into a labelled card below 640px; "scroll" keeps the grid in a focusable horizontal scroller.
- Accessibility
- Uses <caption>, <th scope="col"> and optional row headers.
Renders shadcn/ui: table
- When to use
- Status, tags or versions next to a heading.
- On mobile
- Wraps onto new lines.
- Accessibility
- Plain text; colour is never the only signal.
Renders shadcn/ui: badge
- When to use
- Team members or stakeholders for a project.
- On mobile
- Names wrap beneath stacked avatars.
- Accessibility
- Each person is listed by name; initials are decorative beside the name.
Renders shadcn/ui: avatar
Chart
PrimitiveLoads on demandchartA bar, line or area chart, or a pie chart (at most 5 slices) of the first series, from labelled numeric rows, with a legend and an accessible data table.
- When to use
- Trends and comparisons that read faster as a picture.
- On mobile
- Shrinks to the column width with fewer axis ticks; the data table stays available.
- Accessibility
- Paired with a "Show data" table containing every value.
Renders shadcn/ui: chart
Calendar
PrimitiveLoads on demandcalendarA read-only month view with highlighted dates and a list of what happens on each.
- When to use
- Milestones, launch dates and availability.
- On mobile
- Shows one month; the event list follows below.
- Accessibility
- Highlighted dates are also listed as text with full dates.
Renders shadcn/ui: calendar
Carousel
PrimitiveLoads on demandcarouselTwo to twelve slides with a title and an optional image and text, moved with previous and next.
- When to use
- Design options or screenshots readers review one at a time.
- On mobile
- Swipe between slides; arrows sit under the slide.
- Accessibility
- A labelled carousel region; slides announce "n of total"; arrow keys move.
Renders shadcn/ui: carousel, card, aspect-ratio
- When to use
- Status of phases or budgets.
- On mobile
- Bars span the column with values above.
- Accessibility
- role="progressbar" with aria-valuenow and a visible percentage.
Renders shadcn/ui: progress
- When to use
- Marking where pending content will go in a draft shared for structure review.
- On mobile
- Unchanged.
- Accessibility
- The label is read aloud; the shimmer is decorative and stops with reduced motion.
Renders shadcn/ui: skeleton
- When to use
- A visible "in progress" marker on a task or deliverable.
- On mobile
- Unchanged.
- Accessibility
- role="status" with the label as its text; the spinner stops with reduced motion.
Renders shadcn/ui: spinner, badge
- When to use
- Explaining a missing section, such as "No open risks".
- On mobile
- Unchanged.
- Accessibility
- The title is a heading; the icon is decorative.
Renders shadcn/ui: empty, button
Code block
PrimitiveLoads on demandcode-blockSyntax-highlighted code with an optional filename and a copy button.
- When to use
- Configuration snippets, API examples and commands.
- On mobile
- Lines scroll horizontally inside the block, never the page.
- Accessibility
- A focusable, labelled scroll region; the copy button announces success.
Renders shadcn/ui: code-block
- When to use
- Marking time or status changes in a running log.
- On mobile
- Unchanged.
- Accessibility
- Plain text with a decorative icon.
Renders shadcn/ui: marker
- When to use
- Project milestones, onboarding steps or incident timelines.
- On mobile
- Titles wrap; details expand inline.
- Accessibility
- An ordered list; status is spoken as text, not only colour.
Renders shadcn/ui: trace, collapsible
- When to use
- Pointing to files in Drive, Figma or a shared folder.
- On mobile
- Cards wrap into a single column.
- Accessibility
- Each card is one link that announces it opens in a new tab.
Renders shadcn/ui: attachment
- When to use
- Decisions needed, risks or important context.
- On mobile
- Unchanged.
- Accessibility
- role="alert" is not used for static content; the title is bold text.
Renders shadcn/ui: alert
Acknowledgement dialog
Primitivealert-dialogA button that opens an interrupting notice the reader must acknowledge. Nothing is recorded.
- When to use
- Content that should be read before continuing, such as a confidentiality note.
- On mobile
- The dialog fills the width with stacked buttons.
- Accessibility
- Focus is trapped; the title and description are announced.
Renders shadcn/ui: alert-dialog, button
- When to use
- Previewing product notification wording with a client.
- On mobile
- Toasts appear at the top centre.
- Accessibility
- Toasts are announced through a polite live region.
Renders shadcn/ui: sonner, button
- When to use
- Explaining jargon without interrupting the reading flow.
- On mobile
- Tooltips do not open on touch, so definitions are also listed beneath the terms.
- Accessibility
- Each term is a focusable button; the definition is its accessible description.
Renders shadcn/ui: tooltip
- When to use
- References whose context helps before leaving the page.
- On mobile
- Touch devices open the preview in a popover with a button to follow the link.
- Accessibility
- Keyboard focus opens the preview; the link itself works without it.
Renders shadcn/ui: hover-card, popover, button
- When to use
- Secondary detail such as assumptions behind a number.
- On mobile
- The panel fits within the viewport width.
- Accessibility
- The trigger has aria-expanded; Escape closes and focus returns.
Renders shadcn/ui: popover, button
- When to use
- Long supporting content that most readers skip.
- On mobile
- Fills the width with internal scrolling.
- Accessibility
- Titled modal with focus trapping and Escape to close.
Renders shadcn/ui: dialog, button
- When to use
- Reference material to read beside the document.
- On mobile
- Left and right sheets open full-width; top and bottom keep their edge.
- Accessibility
- Titled modal with focus trapping and Escape to close.
Renders shadcn/ui: sheet, button
- When to use
- Short supporting detail on mobile-first documents.
- On mobile
- Drag down or press Close to dismiss.
- Accessibility
- Titled modal with focus trapping; a Close button is always present.
Renders shadcn/ui: drawer, button
Searchable directory
RecipeLoads on demandcommandAn inline, filterable list of grouped links.
- When to use
- Large link directories, such as all specification pages.
- On mobile
- The list scrolls within a capped height.
- Accessibility
- Combobox and listbox semantics; arrow keys move and Enter follows.
Renders shadcn/ui: command
- When to use
- Showing where a page sits in a sitemap.
- On mobile
- Middle items collapse to an ellipsis menu when more than three.
- Accessibility
- A labelled <nav>; the last item has aria-current="page".
Renders shadcn/ui: breadcrumb
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: input, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: textarea, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: select, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: native-select, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: checkbox, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: switch, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: radio-group, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: slider, field, label
One-time code input
PrimitiveLoads on demandinput-otpA labelled segmented code input. Values stay in the reader’s browser and are never submitted or saved; the block shows how a form will look.
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: input-otp, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: combobox, field, label
- When to use
- Previewing one proposed form control with its label and help text.
- On mobile
- Controls span the column with 44px touch targets.
- Accessibility
- Each control is labelled through Field and FieldLabel; help text is its description.
Renders shadcn/ui: input-group, field, label
Form preview
RecipeLoads on demandfieldA titled fieldset of up to 20 controls of any form type. Values stay in the reader’s browser and are never submitted or saved; the block shows how a form will look.
- When to use
- Reviewing a proposed signup, intake or settings form with a client.
- On mobile
- One column below 640px; two columns above for short controls.
- Accessibility
- A <fieldset> with legend; every control is labelled with its help text as description.
Renders shadcn/ui: field, label, input, textarea, select, native-select, checkbox, switch, radio-group, slider, input-otp, combobox, input-group, separator
- When to use
- Quoting a conversation, such as user research or support logs.
- On mobile
- Messages span up to 85% of the width.
- Accessibility
- An ordered list; each message announces its author and time.
Renders shadcn/ui: message, avatar
- When to use
- Mocking product chat copy or quoting short exchanges.
- On mobile
- Bubbles span up to 85% of the width.
- Accessibility
- An ordered list; authors are visually hidden labels when not shown.
Renders shadcn/ui: bubble
- When to use
- Long conversations that would dominate the page.
- On mobile
- Height cap shrinks to 70% of the viewport.
- Accessibility
- A focusable, labelled scroll region; the jump button is keyboard reachable.
Renders shadcn/ui: message-scroller, message
- When to use
- Self-assessments or quizzes readers work through locally.
- On mobile
- Choices stack; actions sit at the bottom.
- Accessibility
- Each step is a labelled group; progress is announced as "n of total".
Renders shadcn/ui: questionnaire
- When to use
- Report summaries and KPIs.
- On mobile
- Two columns below 640px, one below 360px.
- Accessibility
- A description list of label and value pairs.
Renders shadcn/ui: card, badge
- When to use
- Who to contact about a document.
- On mobile
- Actions stack under the name.
- Accessibility
- The name is a heading; actions are labelled links.
Renders shadcn/ui: card, avatar, button
- When to use
- Hub pages pointing readers to next documents.
- On mobile
- One column below 640px.
- Accessibility
- A list of links; each card is one link named by its title.
Renders shadcn/ui: item, card