Shell

The dossier

A document instrument in the explorer's panel language. Panels open from the rail into a drawer beside the pages, never over them; new data lights an LED on the rail word instead of popping a panel open.

header lineLamp, name, readout and the window verbs MIN, FULL, EJECT, CLOSE (each only when given).
status tapeDrops in when something needs attention, with recovery words such as RETRY.
rail + drawerPAGES (thumbnails) plus any panels you pass: notes, findings, …
pagesWindowed: only pages near the view render. Fit-to-width follows the space.
spineA document map with marks at positions within pages.
deckTools, indicators, commands with progress, and zoom.
dockingThe panel tabs, tools, commands and zoom move to the start, center or end of the header, the deck or a side bar, to the rail, or float; drawers change sides, float and resize. Remembered per viewer.
The dossier · 2

Driven by props

The shell owns only layout state: the open panel, the current page and fit-to-width. You bring the rest.

<KavunDossier
  title="Agreement.pdf"
  defaultTheme="surface"
  pageCount={pages}
  pageSizes={sizes}
  renderWidth={612 * (zoom / 100)}
  renderPage={(page) => <Page n={page} />}
  renderThumbnail={(page, width) => <Thumb n={page} />}
  zoom={zoom}
  onZoomChange={setZoom}
  panels={[{ id: "notes", label: "Notes", content: <NotesPanel … /> }]}
  actions={[{ id: "analyze", label: "Analyze", progress: 64 }]}
  verbs={{ fullscreen, close }}
/>

Domain-free: map your document, findings and actions into kavun's shapes (KavunPanel, KavunAction, KavunFindingGroup); the kit only draws and reports. Open the sample agreement in the explorer for a full example.