WebberUI

Expose Overview

One click shrinks every section of the page into a thumbnail overview with FLIP; click a thumbnail to zoom back in, giving the page a spatial navigation map.

This is a WebberUI Pro component

Free during the launch campaign: sign up or sign in, then hit “Copy install command” in the preview above and it installs straight away — no payment, no credit card. The command below returns 401 while you are signed out.

How to install Pro components →See the plans →

Loading preview…
npx shadcn@latest add "https://webberui.com/r/expose-overview.json?t=<install token>"

Playground

Tune the props live — the code snippet updates as you go, so you can dial in the look you want before copying it.

3
12
240
<ExposeOverview />

Installation

npx shadcn@latest add "https://webberui.com/r/expose-overview.json?t=<install token>"

Or, once registries are configured in components.json, install it as @webberui/expose-overview.

Usage

Wrap several ExposeSections in an ExposeOverview, where each section is one full-screen block. The "Overview" button in the toolbar shrinks every section into a thumbnail grid, and clicking any thumbnail zooms back into that section.

import { ExposeOverview, ExposeSection } from "@/components/ui/expose-overview";

<ExposeOverview height={320} columns={3} defaultActiveId="cover">
  <ExposeSection id="cover" label="Cover">
    <div className="flex h-full w-full items-center justify-center bg-violet-500 text-white">
      Cover
    </div>
  </ExposeSection>
  <ExposeSection id="features" label="Features">
    <div className="flex h-full w-full items-center justify-center bg-sky-500 text-white">
      Features
    </div>
  </ExposeSection>
  <ExposeSection id="pricing" label="Pricing">
    <div className="flex h-full w-full items-center justify-center bg-emerald-500 text-white">
      Pricing
    </div>
  </ExposeSection>
</ExposeOverview>

Controlled overview

Both open / onOpenChange and activeId / onActiveChange can be controlled, making it easy to sync with an external button or router state.

const [open, setOpen] = React.useState(false);
const [active, setActive] = React.useState("cover");

<ExposeOverview
  open={open}
  onOpenChange={setOpen}
  activeId={active}
  onActiveChange={setActive}
>
  {/* ExposeSection ... */}
</ExposeOverview>

Props

ExposeOverview

PropTypeDefaultDescription
openbooleanControlled: whether the thumbnail overview is open
defaultOpenbooleanfalseInitial open state in uncontrolled mode
onOpenChange(open: boolean) => voidFires when the open state changes
activeIdstringControlled: the id of the currently focused section
defaultActiveIdstringfirst sectionInitial focused section id in uncontrolled mode
onActiveChange(id: string) => voidFires when the focused section changes
columnsnumber3Number of columns in the overview grid (2–6), which also sets the thumbnail scale
gapnumber12Gap between overview thumbnails (px)
heightnumber420Height of each section (one screenful) in px
toolbarbooleantrueWhether to show the built-in toolbar (section name plus overview toggle)

ExposeSection

PropTypeDefaultDescription
idstringUnique key, used for focus, thumbnail pairing, and navigation
labelstringidDisplay name, used in the toolbar, the thumbnail label, and the aria-label
childrenReact.ReactNodeSection content, scaled proportionally between the full and thumbnail sizes

How it works

  • Proportional thumbnails: content is always rendered at "screen width × screen height", and in overview mode the whole block gets transform: scale(1 / columns) — so a thumbnail is a true proportional reduction of the real content, never distorted or reflowed.
  • Synchronized FLIP: in reading mode all the sections are absolutely stacked at the same screen position, and opening the overview flies each one to its own thumbnail slot with a layout animation; selecting a thumbnail zooms it back to fill the screen in reverse.
  • Navigation dots: with two or more sections, navigation dots appear below the toolbar so you can switch the focused section directly in reading mode; they fade out automatically when the overview opens.

Accessibility

  • The toolbar toggle carries aria-pressed; thumbnails have native button semantics, focusable with Tab and selected with Enter / Space to zoom in.
  • In reading mode the arrow keys (← → ↑ ↓) switch the focused section, and Esc closes the overview.
  • Sections that are neither focused nor expanded are marked aria-hidden with pointer events disabled, so only the current screen is read out.
  • When the user has "reduce motion" enabled at the system level, the scaling and movement switch instantly and the FLIP animation is not played.

On this page