diff --git a/src/element/collapsible.css b/src/element/collapsible.css new file mode 100644 index 0000000..3c8fddc --- /dev/null +++ b/src/element/collapsible.css @@ -0,0 +1,20 @@ +.collapsible-media { + display: flex; + flex-direction: column; + gap: 12px; +} + +.collapsible-media a { + color: var(--text-link); + word-wrap: break-word; +} + +.collapsible-media img, +.collapsible-media video { + width: 100%; +} + +.url-preview { + color: var(--text-link); + cursor: zoom-in; +} diff --git a/src/element/collapsible.tsx b/src/element/collapsible.tsx new file mode 100644 index 0000000..c7b90b1 --- /dev/null +++ b/src/element/collapsible.tsx @@ -0,0 +1,32 @@ +import "./collapsible.css"; +import * as Dialog from "@radix-ui/react-dialog"; +import type { ReactNode } from "react"; +import { ExternalLink } from "element/external-link"; + +interface MediaURLProps { + url: URL; + children: ReactNode; +} + +export function MediaURL({ url, children }: MediaURLProps) { + const preview = {url.toString()}; + return ( + + {preview} + + + +
+ {url.toString()} + {children} +
+ + + +
+
+
+ ); +} diff --git a/src/element/hypertext.tsx b/src/element/hypertext.tsx index 34293eb..d65be95 100644 --- a/src/element/hypertext.tsx +++ b/src/element/hypertext.tsx @@ -1,5 +1,6 @@ import type { ReactNode } from "react"; import { NostrLink } from "element/nostr-link"; +import { MediaURL } from "element/collapsible"; const FileExtensionRegex = /\.([\w]+)$/i; @@ -23,17 +24,23 @@ export function HyperText({ link, children }: HyperTextProps) { case "bmp": case "webp": { return ( - {url.toString()} + + {url.toString()} + ); } case "wav": case "mp3": case "ogg": { - return