import { TempstreamJSX } from "tempstream"; import type { ComponentToHTMLArgs } from "@sealcode/jdd"; import { Component, ComponentArguments } from "@sealcode/jdd"; import TelegramIcon from "./icons/telegram.svg"; import EmailIcon from "./icons/email.svg"; import ForumIcon from "./icons/forum.svg"; import IRCIcon from "./icons/irc.svg"; const component_arguments = { title: new ComponentArguments.ShortText(), image: new ComponentArguments.Image(), leftheader: new ComponentArguments.ShortText(), rightheader: new ComponentArguments.ShortText(), links: new ComponentArguments.List( new ComponentArguments.Structured({ href: new ComponentArguments.ShortText(), name: new ComponentArguments.ShortText(), icon: new ComponentArguments.Enum(["Telegram", "Forum", "Email", "IRC"]), title: new ComponentArguments.ShortText(), }) ), } as const; const iconNameToIcon: Record = { Telegram: TelegramIcon.url, Email: EmailIcon.url, Forum: ForumIcon.url, IRC: IRCIcon.url, }; const renderContact = ({ href, name, icon, title, }: { href: string; name: string; icon: string; title: string; }) => { const icon_url = iconNameToIcon[icon]; if (!icon_url) { return " "; } return (
{name} {name}
); }; export class NoticeBoard extends Component { getArguments() { return component_arguments; } async toHTML({ args: { title, image, links, rightheader, leftheader }, classes, jdd_context: { render_markdown, render_image, language }, }: ComponentToHTMLArgs): Promise { return (
{title && (
)}
{render_image(image, { resolutions: [800, 1000, 1200, 1500, 2000], sizesAttr: "100vw", alt: "", })}

{render_markdown(language, leftheader)}

{render_markdown(language, rightheader)}

{links.map(renderContact)}
); } }