Skip to content

VaultCard

  • Layer: Component
  • Base: Custom — composes the Icon primitive

The primary card surface for captured documents. The kind is encoded via the mono uppercase label and the icon — never via card hue. A 2px cyan accent strip sits on the left; a 28px icon tile sits in the top-right of roomy cards. Three density variants share the same anatomy: pick the one that fits the surface.

3-column dashboard layout

vc-compact equivalent — small kind badge, single-line title, mono meta row

4-column dense table — wrap a list of dense cards in a single bordered container

dirty / error / planReady

PropTypeDefaultDescription
typeIdIconKind | stringrequiredDocument type_id. String is allowed for forward-compat; unknown strings fall back to the document Lucide glyph.
titlestringrequiredCard title.
bodystringOptional summary line. Two-line clamp in roomy; ignored in compact and dense.
idstringShort id. Renders in the footer / meta row when present.
timestampstringPre-formatted, e.g. "2 days ago".
saltieNotestringItalic accent line replacing the footer-id slot in roomy.
density"roomy" | "compact" | "dense""roomy"Pick the density that fits the surface.
status"dirty" | "error"Processing-status dot.
errorMessagestringTooltip text for the error dot.
planReadybooleanfalseAmber dot indicating a fresh follow-through plan landed.
onClick() => voidClick handler. Adds role="button" and tabIndex={0} when set.

The previous VaultCard exposed per-type accent colours and required parent --accent / --accent-rgb overrides. Both are removed. Old call sites of the form

<VaultCard typeId="idea" title="…" timestamp="2h" />

continue to work — the new card simply ignores the previous per-type colour inputs because they no longer exist. To get the body line, pass body (use the cardBody(doc) helper from src/lib/format.ts).