Author Byline
interlace-ui/author-bylineFreeComponent
The "who wrote this + when + how long it takes to read" adornment that sits directly under an article H1. Pure surface composition over existing primitives — Avatar (large) on the left, a vertical Stack on the right with author name (UI semibold), optional…
Install it
npx shadcn@latest add https://ds.interlace.tools/r/author-byline.jsonSource
1import * as React from 'react';23// @interlace/author-byline v1.2.0 — Interlace design system.4// Docs, props and live preview: https://ds.interlace.tools/c/author-byline5// What changed since: https://ds.interlace.tools/c/author-byline#history6// Generated banner — keep it, the upgrade diff reads this version.78/**9 * @interlace/ui — AuthorByline10 *11 * The "who wrote this + when + how long it takes to read" adornment that sits12 * directly under an article H1. Pure surface composition over existing13 * primitives — Avatar (large) on the left, a vertical Stack on the right14 * with author name (UI semibold), optional one-line bio (UI-sm muted), and a15 * meta row that pairs the publication date with the reading-time chip,16 * separated by a typographic mid-dot.17 *18 * Date is rendered through a native `<time dateTime>` so RSS / Google19 * structured-data parsers + assistive tech read the ISO value, while the20 * visible text uses the short, locale-friendly `Mar 5, 2026` form. Reading21 * time is a span (not a `<time>`) because it isn't a moment in time — it's22 * an estimated duration, and the `<time>` element's `datetime` grammar for23 * durations (`PT5M`) confuses more readers than it helps.24 *25 * ## Anatomy26 *27 * AuthorByline (div — data-min-viewport=320)28 * ├─ Avatar size=lg (left — `h-12 w-12`, AvatarImage src, AvatarFallback initial)29 * └─ Stack vertical gap=xs (right column)30 * ├─ Typography ui semibold (author name)31 * ├─ Typography ui-sm muted (optional bio)32 * └─ <div> meta row (PublishedDate · ReadingTime)33 * ├─ <time dateTime> (published date — short form)34 * ├─ <span aria-hidden>· (dot separator)35 * └─ <span> (reading time — Clock icon + "N min read")36 *37 * ## MIN_VIEWPORT — 32038 *39 * Article bylines are reading-surface furniture; they MUST work on the40 * narrowest phone we support. A 320 CSS-px viewport fits one 48px-square41 * avatar + a single-line name + a two-chip meta row when the bio is omitted;42 * when the bio is present, the right column wraps naturally because every43 * row uses the same `flex-wrap` rhythm.44 *45 * | Rule | Concept | Where in this file |46 * | ---- | -------------------------------- | ----------------------------------------------------------- |47// … truncated
More from interlace-ui
All 140 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| A11y Startera11y-starter | interlace-ui | Components | Free | no deps | |
| Accordionaccordion | interlace-ui | Components | Free | no deps | |
| Alertalert | interlace-ui | Components | Free | no deps | |
| Alert Dialogalert-dialog | interlace-ui | Components | Free | no deps | |
| Animated Gradient Textanimated-gradient-text | interlace-ui | Components | Free | no deps | |
| Animated Grid Patternanimated-grid-pattern | interlace-ui | Components | Free | no deps | |
| Animated Listanimated-list | interlace-ui | Components | Free | no deps | |
| Article Cardarticle-card | interlace-ui | Components | Free | no deps |
