import type { Asset } from './shared'; import { Link } from 'react-router'; import { Camera, Image as ImageIcon, MapPin } from 'lucide-react'; import { PERSON_PARAM, formatBytes, formatLongDate, formatTime, personThumbUrl, photosSectionPath } from './shared'; // The lightbox's info drawer, in the order Immich's own panel uses: description, date, file, camera, location, // people. Sections with nothing in them are omitted rather than shown empty — a library full of screenshots // has no camera data and shouldn't render a row of dashes for every one. type AssetInfoPanelProps = { asset: Asset | undefined; token: string | null }; export const AssetInfoPanel = ({ asset, token }: AssetInfoPanelProps) => { if (!asset) return
{exif.description}
}{formatLongDate(asset.localDateTime)}
{formatTime(asset.localDateTime)}
{asset.originalPath}
{(exif?.make || exif?.model || shot.length > 0) && ( } title={[exif?.make, exif?.model].filter(Boolean).join(' ')}> {exif?.lensModel &&{exif.lensModel}
} {shot.length > 0 &&{shot.join(' · ')}
} )} {(place || (exif?.latitude != null && exif?.longitude != null)) && ( } title={place || 'Location'}> {exif?.latitude != null && exif?.longitude != null && ({exif.latitude.toFixed(5)}, {exif.longitude.toFixed(5)}
)} )} {asset.people && asset.people.length > 0 && ({title}
{children}{value ? `${label} · ${value}` : label}
);