# Media Photograph collections, lightboxes, image details and map controls. - Group: Website - Import: `import { MediaMasthead } from '@misoto22/folio/website'` - Page: https://ui.misoto22.com/components/media/ ## When to reach for it Compose image browsing and map presentation while the host owns images and map lifecycles. ## 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. ## MediaMasthead The quiet opening to an image collection, before its controls and prints. ### Props - `eyebrow` — `ReactNode`. - `title` (required) — `ReactNode`. - `description` — `ReactNode`. - `headingLevel` — `1 | 2 | 3 | 4 | 5 | 6` default `1`. The title level when this page composition sits inside another document. Also accepts: `Omit, 'title'>`. ## PhotographFeature A photograph and an editorial introduction, with the original image ratio. ### Props - `image` (required) — `ReactNode`. - `title` (required) — `ReactNode`. - `eyebrow` — `ReactNode`. - `description` — `ReactNode`. - `caption` — `ReactNode`. - `action` — `ReactNode`. Also accepts: `Omit, 'title'>`. ## MediaCollection Page-level gallery composition; the host owns its filters and collection. ### Props - `masthead` (required) — `ReactNode`. - `controls` — `ReactNode`. - `collectionId` — `string`. - `footer` — `ReactNode`. Also accepts: `HTMLAttributes`. ## MediaGallery Level mounts keep unlike aspect ratios aligned without cropping the prints. ### Props - `children` — `ReactNode`. - `emptyTitle` — `ReactNode`. Supply localized empty copy when the collection may have no children. - `emptyAction` — `ReactNode`. Also accepts: `HTMLAttributes`. ## MediaGalleryItem ### Props - `children` (required) — `ReactElement`. A host link containing its image. The package supplies the print layout. - `title` (required) — `ReactNode`. - `index` — `ReactNode`. - `location` — `ReactNode`. - `orientation` — `'portrait' | 'landscape' | 'square'`. Also accepts: `Omit, 'title'>`. ## MediaGallerySkeleton ### Props - `label` (required) — `string`. - `count` — `number` default `6`. ## MediaDetailLayout Portraits share a spread with their notes; landscapes lead a full-width spread. ### Props - `title` (required) — `ReactNode`. - `titleId` (required) — `string`. - `headingLevel` — `1 | 2 | 3 | 4 | 5 | 6` default `1`. The title level when this page composition sits inside another document. - `category` — `ReactNode`. - `notesLabel` (required) — `string`. - `orientation` (required) — `'portrait' | 'landscape' | 'square'`. - `backLink` (required) — `ReactElement`. - `index` — `ReactNode`. - `media` (required) — `ReactNode`. - `light` — `ReactNode`. - `actions` — `ReactNode`. - `metadata` — `ReactNode`. - `location` — `ReactNode`. - `pager` — `ReactNode`. - `related` — `ReactNode`. Also accepts: `Omit, 'title'>`. ## MediaMetadata ### Props - `items` (required) — `DescriptionListItem[]`. Also accepts: `HTMLAttributes`. ## MediaPager ### Props - `label` (required) — `string`. - `previous` — `ReactNode`. - `next` — `ReactNode`. Also accepts: `HTMLAttributes`. ## MediaPagerItem ### Props - `link` (required) — `ReactElement`. - `direction` (required) — `'previous' | 'next'`. - `label` (required) — `ReactNode`. - `title` (required) — `ReactNode`. - `image` — `ReactNode`. ## MediaThumbnailStrip ### Props - `heading` (required) — `ReactNode`. Also accepts: `HTMLAttributes`. ## MediaThumbnail ### Props - `children` (required) — `ReactElement`. ## MediaLightNote The host supplies observations and formatted labels; this is presentation only. ### Props - `label` (required) — `ReactNode`. - `lines` (required) — `MediaLightNoteLine[]`. ## MediaMapSection ### Props - `title` (required) — `ReactNode`. - `hint` — `ReactNode`. - `aliasId` — `string`. An optional legacy anchor, owned and named by the host. - `map` (required) — `ReactNode`. - `preview` (required) — `ReactNode`. Also accepts: `Omit, 'title'>`. ## MediaMapFrame ### Props - `label` — `ReactNode`. - `hint` — `ReactNode`. - `navigation` — `ReactNode`. - `compact` — `boolean` default `false`. Also accepts: `HTMLAttributes`. ## MediaMapNavigation ### Props - `zoomInLabel` (required) — `string`. - `zoomOutLabel` (required) — `string`. - `onZoomIn` (required) — `() => void`. - `onZoomOut` (required) — `() => void`. ## MediaMapCanvas A sized provider container. Map creation, themes and geographic math stay in the host. Also accepts: `ComponentPropsWithRef<'div'>`. ## MediaMapPreview ### Props - `title` (required) — `ReactNode`. - `image` — `ReactNode`. - `action` — `ReactNode`. - `place` — `ReactNode`. - `coordinates` — `ReactNode`. - `children` — `ReactNode`. ## MediaMapAreaList ### Props - `items` (required) — `MediaMapArea[]`. - `value` — `string`. - `onValueChange` (required) — `(value: string) => void`. ## MediaMapMarker A keyboard-operable 44px marker for a host's map-provider portal. ### Props - `label` (required) — `string`. - `active` — `boolean` default `false`. Also accepts: `Omit, 'children' | 'iconOnly'>`. ## MediaMapPin ### Props - `active` — `boolean` default `false`. ## MediaMapSkeleton ## MediaLightbox A print and its controlled, focus-trapped full-screen dialog. ### Props - `open` (required) — `boolean`. - `onOpenChange` (required) — `(open: boolean) => void`. - `title` (required) — `string`. - `triggerLabel` (required) — `string`. - `closeLabel` (required) — `string`. - `aspectRatio` (required) — `number`. Intrinsic width divided by height; invalid dimensions use a safe fallback. - `media` (required) — `ReactNode`. - `expandedMedia` — `ReactNode` default `media`. ## Example — photograph collection ```tsx import { MediaCollection, MediaGallery, MediaGalleryItem, MediaMasthead } from '@misoto22/folio/website' }> ``` ## Example — photograph detail ```tsx import { MediaDetailLayout } from '@misoto22/folio/website' Back to field observations} media={
} /> ```