diff --git a/src/components/nostr/kinds/Kind39701Renderer.tsx b/src/components/nostr/kinds/Kind39701Renderer.tsx new file mode 100644 index 0000000..ffa4163 --- /dev/null +++ b/src/components/nostr/kinds/Kind39701Renderer.tsx @@ -0,0 +1,50 @@ +import { BaseEventContainer, BaseEventProps } from "./BaseEventRenderer"; +import { RichText } from "../RichText"; +import { ExternalLink } from "lucide-react"; + +/** + * Renderer for Kind 39701 - Web Bookmarks (NIP-B0) + * Displays bookmark title, URL, and description + */ +export function Kind39701Renderer({ event }: BaseEventProps) { + // Extract bookmark data from tags + const title = event.tags.find((t) => t[0] === "title")?.[1]; + // URL comes from d tag (identifier) or optional u tag + const dTag = event.tags.find((t) => t[0] === "d")?.[1]; + const uTag = event.tags.find((t) => t[0] === "u")?.[1]; + const url = uTag || dTag; + + return ( + +
+ {/* Title */} + {title &&

{title}

} + + {/* URL with external link icon */} + {url && ( + + + {url} + + )} + + {/* Description/Content as RichText */} + {event.content && ( + + )} + + {/* Fallback if no data */} + {!title && !url && ( +

+ (Empty bookmark) +

+ )} +
+
+ ); +} diff --git a/src/components/nostr/kinds/index.tsx b/src/components/nostr/kinds/index.tsx index e1b2b04..2cddbc3 100644 --- a/src/components/nostr/kinds/index.tsx +++ b/src/components/nostr/kinds/index.tsx @@ -11,6 +11,7 @@ import { Kind9735Renderer } from "./Kind9735Renderer"; import { Kind9802Renderer } from "./Kind9802Renderer"; import { Kind10002Renderer } from "./Kind10002Renderer"; import { Kind30023Renderer } from "./Kind30023Renderer"; +import { Kind39701Renderer } from "./Kind39701Renderer"; import { NostrEvent } from "@/types/nostr"; import { BaseEventContainer, type BaseEventProps } from "./BaseEventRenderer"; @@ -33,6 +34,7 @@ const kindRenderers: Record> = { 9802: Kind9802Renderer, // Highlight 10002: Kind10002Renderer, // Relay List Metadata (NIP-65) 30023: Kind30023Renderer, // Long-form Article + 39701: Kind39701Renderer, // Web Bookmarks (NIP-B0) }; /** diff --git a/src/constants/kinds.ts b/src/constants/kinds.ts index c513ffb..f47b333 100644 --- a/src/constants/kinds.ts +++ b/src/constants/kinds.ts @@ -31,7 +31,6 @@ import { Wallet, Package, Map, - Globe, Highlighter, BarChart3, Timer, @@ -902,7 +901,7 @@ export const EVENT_KINDS: Record = { name: "Web Bookmarks", description: "Web bookmarks", nip: "B0", - icon: Globe, + icon: Bookmark, }, };