← All @molecule/* packages · App templates
@molecule/app-log-viewer-reactFeature · log-viewer · App (browser) · v1.0.1 · Apache-2.0
Expandable log rows with timestamp, severity, service label, and JSON structured-data panel
npm install @molecule/app-log-viewer-react@molecule/app-log-viewer-react is a ready-made log-viewer feature for the app (browser) side. It composes the core interfaces it needs, so it works with whichever providers your app has bonded.
import { LogViewer } from '@molecule/app-log-viewer-react'
import type { LogEntry } from '@molecule/app-log-viewer-react'
const entries: LogEntry[] = [
{ id: '1', timestamp: '12:00:01', level: 'info', message: 'Server started', service: 'api' },
{ id: '2', timestamp: '12:00:05', level: 'error', message: 'DB connect failed', service: 'db', data: { code: 'ECONNREFUSED' } },
]
<LogViewer entries={entries} onToggle={(id, open) => console.log(id, open)} />Works with: @molecule/app-react, @molecule/app-ui, @molecule/app-ui-react
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
Structured log-row viewer.
Exports <LogViewer> plus the LogEntry / LogLevel types. Renders one
expandable <details> row per entry: timestamp + colored severity badge +
service label + single-line message, expanding to a JSON-formatted
structured-data panel. Props: entries, onToggle?(id, expanded),
emptyState?, className?.
Use for operational tooling, admin dashboards, debug views.
import { LogViewer } from '@molecule/app-log-viewer-react'
import type { LogEntry } from '@molecule/app-log-viewer-react'
const entries: LogEntry[] = [
{ id: '1', timestamp: '12:00:01', level: 'info', message: 'Server started', service: 'api' },
{ id: '2', timestamp: '12:00:05', level: 'error', message: 'DB connect failed', service: 'db', data: { code: 'ECONNREFUSED' } },
]
<LogViewer entries={entries} onToggle={(id, open) => console.log(id, open)} />
feature
npm install @molecule/app-log-viewer-react @molecule/app-react @molecule/app-ui @molecule/app-ui-react react
npm install -D @types/react
LogEntryShape of a single structured log entry rendered by LogViewer.
interface LogEntry {
id: string
/** ISO timestamp or formatted string. */
timestamp: ReactNode
/** Severity level. */
level: LogLevel
/** Single-line message. */
message: ReactNode
/** Optional service / component label (e.g. "auth-api"). */
service?: ReactNode
/** Optional trace id / request id. */
traceId?: ReactNode
/** Optional structured data shown in the expandable panel. */
data?: unknown
}
LogViewerPropsProps for {@link LogViewer}.
interface LogViewerProps {
entries: LogEntry[]
/** Called when an entry expands/collapses. */
onToggle?: (id: string, expanded: boolean) => void
/** Extra classes on the list wrapper. */
className?: string
/** Empty-state content. */
emptyState?: ReactNode
}
LogLevelSeverity level of a log entry, ordered from lowest to highest.
type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'
LogViewer(props)Structured log list — one <details> per entry with timestamp +
level badge + service label + single-line message, expanding to
show trace id + JSON-formatted structured data.
Use for operational tooling, admin dashboards, debug views.
function LogViewer({ entries, onToggle, className, emptyState }: LogViewerProps): JSX.Element
props — Component props (see {@link LogViewerProps}).Peer dependencies:
@molecule/app-react ^1.0.1@molecule/app-ui ^1.0.1@molecule/app-ui-react ^1.0.1react ^18.0.0 || ^19.0.0@molecule/app-react
@molecule/app-ui
@molecule/app-ui-react
react
Expansion state is internal; onToggle is notification-only — there is no
controlled expanded-ids prop.
The timestamp column is a fixed 48px box: pass short pre-formatted times
(e.g. HH:mm:ss), not full ISO strings, or they overflow.
Severity badges use a fixed hex palette with white text (trace grey → fatal dark red) that does not follow the app theme; the level name renders raw and uppercased (not localized).
data is pretty-printed with JSON.stringify(…, null, 2); strings render
verbatim. Large payloads scroll horizontally inside the panel.