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[]