import { TempstreamJSX } from "tempstream"; import type { ComponentToHTMLArgs, ExtractStructuredComponentArgumentsParsed, JDDContext, } from "@sealcode/jdd"; import { Component, ComponentArguments } from "@sealcode/jdd"; import { button, button_variants } from "src/back/elements/button.js"; const component_arguments = { color: new ComponentArguments.Enum([ "text-fg-on-text-bg", "text-accent-on-text-bg", "text-accent2-on-text-bg", "text-on-accent-on-accent", "text-on-accent2-on-accent2", ]), title: new ComponentArguments.ShortText(), title_color: new ComponentArguments.Enum(["normal", "accent1", "accent2"] as const), subtitle: new ComponentArguments.ShortText(), content: new ComponentArguments.Markdown(), buttons: new ComponentArguments.List( new ComponentArguments.Structured({ text: new ComponentArguments.ShortText(), href: new ComponentArguments.ShortText(), variant: new ComponentArguments.Enum(button_variants), }) ), } as const; export class Hero extends Component { getArguments() { return component_arguments; } getTitle( _: JDDContext, args: ExtractStructuredComponentArgumentsParsed ) { return args.title || null; } async toHTML({ args: { title, title_color, subtitle, content, color, buttons }, classes, jdd_context: { render_markdown, language }, }: ComponentToHTMLArgs): Promise { classes.push(`hero--color-${color}`); return (

{title}

{subtitle}
{render_markdown(language, content)}
{buttons.map((button_data) => button(button_data))}
); } }