Skip to content
Folio

Website

Media

Photograph collections, lightboxes, image details and map controls.

Usage

When to reach for it

Compose image browsing and map presentation while the host owns images and map lifecycles.

Ships from@misoto22/folio/website

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

Notes

The quiet opening to an image collection, before its controls and prints.

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

photograph collection

A gallery receives link and image slots while preserving each print's orientation. The illustrations stand in for host-owned photographs and retain descriptive alternatives.

photograph detail

A media detail preserves the host's return destination as a real link, while the layout holds it at a measured touch target across browser rounding.

Parts

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

PhotographFeature

A photograph and an editorial introduction, with the original image ratio.

PhotographFeature props
PropTypeDefaultDescription
imagerequiredReactNode—
titlerequiredReactNode—
actionReactNode—
captionReactNode—
descriptionReactNode—
eyebrowReactNode—

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

MediaCollection

Page-level gallery composition; the host owns its filters and collection.

MediaCollection props
PropTypeDefaultDescription
mastheadrequiredReactNode—
collectionIdstring—
controlsReactNode—
footerReactNode—

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

MediaGallery

Level mounts keep unlike aspect ratios aligned without cropping the prints.

MediaGallery props
PropTypeDefaultDescription
childrenReactNode—
emptyActionReactNode—
emptyTitleReactNodeSupply localized empty copy when the collection may have no children.

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

MediaGalleryItem

MediaGalleryItem props
PropTypeDefaultDescription
childrenrequiredReactElementA host link containing its image. The package supplies the print layout.
titlerequiredReactNode—
indexReactNode—
locationReactNode—
orientation'portrait' | 'landscape' | 'square'—

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

MediaGallerySkeleton

MediaGallerySkeleton props
PropTypeDefaultDescription
labelrequiredstring—
countnumber6—

MediaDetailLayout

Portraits share a spread with their notes; landscapes lead a full-width spread.

MediaDetailLayout props
PropTypeDefaultDescription
backLinkrequiredReactElement—
mediarequiredReactNode—
notesLabelrequiredstring—
orientationrequired'portrait' | 'landscape' | 'square'—
titlerequiredReactNode—
titleIdrequiredstring—
actionsReactNode—
categoryReactNode—
headingLevel1 | 2 | 3 | 4 | 5 | 61The title level when this page composition sits inside another document.
indexReactNode—
lightReactNode—
locationReactNode—
metadataReactNode—
pagerReactNode—
relatedReactNode—

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

MediaMetadata

MediaMetadata props
PropTypeDefaultDescription
itemsrequiredDescriptionListItem[]—

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

MediaPager

MediaPager props
PropTypeDefaultDescription
labelrequiredstring—
nextReactNode—
previousReactNode—

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

MediaPagerItem

MediaPagerItem props
PropTypeDefaultDescription
directionrequired'previous' | 'next'—
labelrequiredReactNode—
linkrequiredReactElement—
titlerequiredReactNode—
imageReactNode—

MediaThumbnailStrip

MediaThumbnailStrip props
PropTypeDefaultDescription
headingrequiredReactNode—

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

MediaThumbnail

MediaThumbnail props
PropTypeDefaultDescription
childrenrequiredReactElement—

MediaLightNote

The host supplies observations and formatted labels; this is presentation only.

MediaLightNote props
PropTypeDefaultDescription
labelrequiredReactNode—
linesrequiredMediaLightNoteLine[]—

MediaMapSection

MediaMapSection props
PropTypeDefaultDescription
maprequiredReactNode—
previewrequiredReactNode—
titlerequiredReactNode—
aliasIdstringAn optional legacy anchor, owned and named by the host.
hintReactNode—

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

MediaMapFrame

MediaMapFrame props
PropTypeDefaultDescription
compactbooleanfalse—
hintReactNode—
labelReactNode—
navigationReactNode—

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

MediaMapNavigation

MediaMapNavigation props
PropTypeDefaultDescription
onZoomInrequired() => void—
onZoomOutrequired() => void—
zoomInLabelrequiredstring—
zoomOutLabelrequiredstring—

MediaMapCanvas

A sized provider container. Map creation, themes and geographic math stay in the host.

Also accepts everything in ComponentPropsWithRef<'div'>. Those are forwarded to the underlying element and are not listed row by row.

MediaMapPreview

MediaMapPreview props
PropTypeDefaultDescription
titlerequiredReactNode—
actionReactNode—
childrenReactNode—
coordinatesReactNode—
imageReactNode—
placeReactNode—

MediaMapAreaList

MediaMapAreaList props
PropTypeDefaultDescription
itemsrequiredMediaMapArea[]—
onValueChangerequired(value: string) => void—
valuestring—

MediaMapMarker

A keyboard-operable 44px marker for a host's map-provider portal.

MediaMapMarker props
PropTypeDefaultDescription
labelrequiredstring—
activebooleanfalse—

Also accepts everything in Omit<Extract<ButtonProps, { href?: undefined }>, 'children' | 'iconOnly'>. Those are forwarded to the underlying element and are not listed row by row.

MediaMapPin

MediaMapPin props
PropTypeDefaultDescription
activebooleanfalse—

MediaMapSkeleton

Takes no props of its own.

MediaLightbox

A print and its controlled, focus-trapped full-screen dialog.

MediaLightbox props
PropTypeDefaultDescription
aspectRatiorequirednumberIntrinsic width divided by height; invalid dimensions use a safe fallback.
closeLabelrequiredstring—
mediarequiredReactNode—
onOpenChangerequired(open: boolean) => void—
openrequiredboolean—
titlerequiredstring—
triggerLabelrequiredstring—
expandedMediaReactNodemedia—