import { CSSProperties, ReactNode, useMemo } from "react"; import clsx from "clsx"; import { isMediaImage } from "./util"; import { FileIcon } from "./FileIcon"; import { Media } from "../fields/file"; interface Props { media: Media | null; src?: string; width?: number; height?: number; fit?: "contain" | "cover" | "original"; className?: string; imageClassName?: string; children?: ReactNode; /* for non image Media */ mediaRatio?: number; } export function MediaPreview({ children, media, fit = "original", className, imageClassName, mediaRatio, ...rest }: Props) { const isImage = isMediaImage(media); const cssProperties = useMemo(() => { if (media?.width && media?.height) { return { "--media-ratio": media.width / media.height } as CSSProperties; } else if (mediaRatio) { return { "--media-ratio": mediaRatio } as CSSProperties; } else { return {}; } }, [media, mediaRatio]); return (