diff --git a/apps/web/src/components/Cover.tsx b/apps/web/src/components/Cover.tsx new file mode 100644 index 0000000..f477423 --- /dev/null +++ b/apps/web/src/components/Cover.tsx @@ -0,0 +1,18 @@ +import { useState } from "react"; +import { mediaColour } from "../format.ts"; + +/** A cover image, the media-type gradient when there is none, or the striped draft placeholder. */ +export function Cover({ url, mediaType, draft, size }: { url: string; mediaType: string; draft: boolean; size?: "large" | "small" }) { + const [failed, setFailed] = useState(false); + const cls = `cover${size ? ` ${size}` : ""}`; + if (url && !failed) { + return ( +
+ setFailed(true)} /> +
+ ); + } + if (draft) return