components
components.
copy-paste, dark-only, no abstractions you don't own. install via the cli — the component lives in your codebase, not behind a package boundary.
all components
accordion
collapsible rows on native <details>/<summary> with a rotating chevron. share a name across items for one-open-at-a-time behavior. zero javascript state.
view →
article
article reading layout — back link, banner, title, date + tags, then a body slot with staggered fade-ins. pair with prose for the markdown body.
view →
badge
small chip. static label by default; pass onClick to make it a toggle/filter chip, with active swapping to the solid look.
view →
button
polymorphic button with five variants. supports icon-only / text-only / icon+text, an optional hover tooltip, and click-to-clipboard. renders as an anchor when given href, a button otherwise.
view →
calendar
month date grid — selectable days, today ring, prev/next header, Sunday-aligned. pass renderDay to layer dots or counts onto cells. generalized from the justin06lee.dev calendar.
view →
card
compositional bordered card: Card shell plus CardHeader / CardTitle / CardMeta / CardBody / CardActions slots.
view →
category-picker
a searchable dropdown of color-coded items with click-outside + escape close and an optional inline create row. controlled and domain-agnostic.
view →
chrome
wrapper that renders every text glyph inside it as shimmering chrome foil.
view →
code-block
syntax-highlighted code box with a built-in copy button. monochrome prism theme tuned for a black background; common languages bundled (tsx, ts, jsx, js, bash, json, css, markup).
view →
collapsible-prose
long-form reading layout that splits markdown into collapsible <details> sections on each ## heading, each with a rotating chevron. content before the first ## renders as a plain intro. bring your own renderer via renderMarkdown — typically the prose component. dark-only.
view →
color-swatch
a fixed-palette color chip plus a controlled palette picker, with a muted default palette and a next-unused-color helper.
view →
combobox
searchable select with optional color swatches, inline create, and clear. behavior split into a headless useCombobox hook. generalized from the calendar category picker.
view →
copy-button
copy-to-clipboard button with copied/error feedback states.
view →
dialog
promise-based confirm and alert dialogs.
view →
donut
spinning ascii torus baked off-thread in a shared web worker and replayed as a seamless loop. multiple donuts share one bake.
view →
editor
split-pane markdown editor with a live preview that scrolls and highlights in sync, both ways: select text and a button pushes it to the preview; click a block in the preview and the editor scrolls to it and lays a gray streak over the matching lines. bring your own markdown renderer (e.g. prose). dark-only.
view →
heatmap
year activity grid — 12 mini month grids of day cells tinted by value (contribution-graph style), with a less→more legend. generalized from the justin06lee.dev year view.
view →
inline-edit
blur-to-save editable field. holds a local draft, commits onblur and enter, shows a pending state, rolls back on error, escape cancels. behavior split into a headless useInlineEdit hook.
view →
input
minimal text input. thin border, no corners.
view →
login-form
styled credential form with loading / error / rate-limited states and enter-to-submit. transport-agnostic via an injected onSubmit; behavior split into a headless useLoginForm hook.
view →
menu
action dropdown: a trigger opening a list of items, each running its onSelect. optional selected markers (e.g. a sort menu). behavior split into a headless useMenu hook.
view →
navbar
fixed top nav with inline desktop links and a hamburger-driven slide-in panel below md. routes are caller-supplied; behavior split into a headless useNavbar hook.
view →
prose
markdown renderer with the justin06lee.dev prose styling — GFM, KaTeX math, heading slugs, and copy-on-hover code blocks. dark-only. pass markdown as the string child.
view →
rainbow
wrapper that cycles every text character inside it through a staggered rainbow.
view →
range
thin minimal slider. native input with a custom 12px thumb on a 2px track; thumb scales on hover.
view →
scramble
wrapper that scrambles every word inside it on hover.
view →
segmented
controlled segmented control — a row of mutually exclusive options, active one bordered. compact uppercase variant for mode toggles.
view →
select
headless dropdown with palette swatch support.
view →
sheet
animated slide-in panel from a screen edge with a dimmed backdrop. closes on backdrop click, escape, or close button, and locks body scroll while open.
view →
showcase
framed preview container with a dotted background. holds component demos with optional label, source caption, and note. exports a Row helper for explicit row breaks; bare children get auto-wrapped into one centered row.
view →
stack
stacked paper card with hovered fan-out spring animation.
view →
tabs
bordered pill tab-strip. controlled selection with roving-tabindex arrow-key nav and ARIA, split into a headless useTabs hook.
view →
textarea
minimal multiline input. matches input — thin border, square corners, vertical resize.
view →
tilt
3d perspective tilt card with sweeping shine on hover.
view →
timeline
day schedule — a 24h vertical axis with positioned event blocks and an optional live now-line. blocks placed by minutes-of-day. generalized from the justin06lee.dev day view.
view →
toc
sticky table-of-contents with scroll-spy highlighting via IntersectionObserver. give it the page headings; the active row tracks scroll. behavior split into a headless useToc hook.
view →
tooltip
white slide-up pill shown on hover or keyboard focus. pure CSS, wraps any trigger. aria-hidden — label the trigger itself.
view →