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/design/website

TSX
import { MediaMasthead } from '@misoto22/design/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