Skip to content
Folio

Website

Reading

Article and project layouts, outlines, media and installation instructions.

Usage

When to reach for it

Build long-form reading surfaces with consistent section spacing and accessible navigation.

Ships from@misoto22/folio/website

TSX
import { DetailMasthead } from '@misoto22/folio/website'

Best practices

Do

  • Supply localized labels, descriptive links and meaningful image alternatives.

Don’t

  • Do not put service credentials, routing logic or backend models inside presentation components.

Examples

article and outline

A reading layout combines semantic publication metadata, sections and an outline. Adjacent-record links remain ordinary host links with descriptive titles.

A practice of attention

A few observations from the daily walk.

Published

Notice

A familiar route still changes with the light. Record one detail before naming the whole scene.

Return

Compare what you wrote on the next visit. The difference often matters more than the first impression.

Parts

Composed at the call site rather than configured through props, so a layout this component did not anticipate is still expressible.

ReadingLayout

ReadingLayout props
PropTypeDefaultDescription
outlineReactNode—

Also accepts everything in HTMLAttributes<HTMLDivElement>. Those are forwarded to the underlying element and are not listed row by row.

ReadingSection

seamless lets a structured child continue directly from the section rule without drawing a second seam.

ReadingSection props
PropTypeDefaultDescription
captionReactNode—
compactboolean—
leadReactNode—
seamlessboolean—
titleReactNode—

Also accepts everything in Omit<HTMLAttributes<HTMLElement>, 'title'>. Those are forwarded to the underlying element and are not listed row by row.

ReadingLead

ReadingLead props
PropTypeDefaultDescription
childrenrequiredReactNode—
descriptionReactNode—
mutedReactNode—

RecordPager

RecordPager props
PropTypeDefaultDescription
labelrequiredstring—
nextReadingPagerItem—
previousReadingPagerItem—

isSelfNumbered

Takes no props of its own.

numberToc

Takes no props of its own.

TableOfContents

TableOfContents props
PropTypeDefaultDescription
itemsrequiredOutlineItem[]—
labelrequiredstring—
expandedbooleanfalse—
numbering'auto' | 'none''auto'—
onNavigate(id: string) => void—

MobileOutline

MobileOutline props
PropTypeDefaultDescription
closeLabelrequiredstring—
itemsrequiredOutlineItem[]—
openLabelrequiredstring—
titlerequiredstring—

ReadingProgress

Takes no props of its own.

AuthorPanel

AuthorPanel props
PropTypeDefaultDescription
namerequiredstring—
avatarReactNode—
bioReactNode—
linksReactNode—
roleReactNode—

ReadingFigure

A reading image can preserve its source framing with fit="contain", rather than silently cropping it to a house ratio.

ReadingFigure props
PropTypeDefaultDescription
mediarequiredReactNode—
captionEndReactNode—
captionStartReactNode—
fit'cover' | 'contain''cover'—
ratiostring'16 / 8'—
width'page' | 'fill''page'—

MediaPlayback

MediaPlayback props
PropTypeDefaultDescription
fallbackrequiredReactNode—
labelrequiredstring—
pauseLabelrequiredstring—
playLabelrequiredstring—
srcrequiredstring—
posterstring—

ActionBand

A terminal project invitation with one strong entry action and quieter supporting actions.

ActionBand props
PropTypeDefaultDescription
titlerequiredReactNode—
actionsReactNode—
descriptionReactNode—
eyebrowReactNode—

FeaturePairs

FeaturePairs props
PropTypeDefaultDescription
itemsrequired{ id?: string; label?: ReactNode; title?: ReactNode; description: ReactNode }[]—

DevicePreview

DevicePreview props
PropTypeDefaultDescription
kindrequired'browser' | 'phone'—
mediarequiredReactNode—
captionReactNode—
labelstring—

PreviewPair

PreviewPair props
PropTypeDefaultDescription
desktoprequiredReactNode—
mobileReactNode—

CommandTabs

CommandTabs props
PropTypeDefaultDescription
copiedLabelrequiredstring—
copyLabelrequiredstring—
labelrequiredstring—
tabsrequiredCommandTab[]—
footerReactNode—

ReadingSurface

ReadingSurface props
PropTypeDefaultDescription
numberedboolean—

Also accepts everything in HTMLAttributes<HTMLDivElement>. Those are forwarded to the underlying element and are not listed row by row.

ReadingForm

ReadingForm props
PropTypeDefaultDescription
inlineboolean—

Also accepts everything in React.FormHTMLAttributes<HTMLFormElement>. Those are forwarded to the underlying element and are not listed row by row.

ArchitectureColumns

ArchitectureColumns props
PropTypeDefaultDescription
columnsrequired{ title: string; connected?: boolean; nodes: ArchitectureColumnNode[] }[]—
foundationArchitectureColumnNode[]—

TokenLine

TokenLine props
PropTypeDefaultDescription
itemsrequired{ label: ReactNode; strong?: boolean; icon?: ReactNode }[]—
labelReactNode—
separatorstring'·'—

ContentFigure

ContentFigure props
PropTypeDefaultDescription
childrenrequiredReactNode—
captionReactNode—
wideboolean—

ReadingPage

ReadingPage props
PropTypeDefaultDescription
childrenrequiredReactNode—

Also accepts everything in HTMLAttributes<HTMLElement>. Those are forwarded to the underlying element and are not listed row by row.

CommandSnippet

CommandSnippet props
PropTypeDefaultDescription
coderequiredstring—
copiedLabelrequiredstring—
copyLabelrequiredstring—
classNamestring—
piecesCommandPiece[]—