Shared author byline card for article-shaped detail pages (blog posts, product releases, onboarding guides, investor updates). Designed for embed-readiness across multiple host apps without requiring Next.js or a `ChatRuntime` provider. ## Key Components ### `ArticleAuthorBylineProps` | Prop | Type | Description | |------|------|-------------| | `author` | `string \| null` | Required display name; returns `null` when empty | | `avatar` | `string \| null` | Avatar URL; falls back to a `User` icon placeholder | | `bio` | `string \| null` | Bio paragraph rendered below the name | | `jobTitle` | `string \| null` | Job title rendered under the author name | | `publishedAt` | `string \| Date \| null` | ISO string or Date; formatted as "Month D, YYYY" (UTC-stable) | | `href` | `string \| null` | Optional link wrapping the author name | | `fallbackBio` | `string \| null` | Italic fallback text when `bio` is absent; hosts inject platform-specific copy | | `size` | `'md' \| 'lg'` | Avatar size — `md` = 56px (default), `lg` = 64px | | `proxyImageUrl` | `(url: string) => string` | Host-injected image URL mapper; takes precedence over ambient runtime proxy | ### `ArticleAuthorByline` Main exported component. Renders an avatar, name, optional date/job title, and bio. Avatar URLs are proxied through the optional ambient `ChatRuntime` (`imageProxyUrlPrefix`) or a host-injected `proxyImageUrl` — falls back to the raw URL when neither is available. ### `formatDate` (internal) Formats a `string | Date` to `"Month D, YYYY"` using `timeZone: 'UTC'` to prevent SSR/client hydration mismatches (React error #418) near midnight boundaries. ## Usage Example ```typescript import { ArticleAuthorByline } from 'openframe-oss-lib/components/article-author-byline' // Basic usage // With host-injected fallback bio (e.g. from hub app-config) `https://img-proxy.example.com/?url=${url}`} /> // Returns null — no card rendered ``` **Source:** [`article-author-byline.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/article-author-byline.tsx)