import { createEffect, createSignal, Show } from "solid-js" import { renderMarkdown } from "../lib/markdown" interface MarkdownProps { content: string isDark?: boolean } export function Markdown(props: MarkdownProps) { const [html, setHtml] = createSignal("") let containerRef: HTMLDivElement | undefined createEffect(async () => { const rendered = await renderMarkdown(props.content) setHtml(rendered) }) createEffect(() => { const currentHtml = html() if (containerRef && currentHtml) { setTimeout(() => { const codeBlocks = containerRef?.querySelectorAll(".markdown-code-block") codeBlocks?.forEach((block) => { const existing = block.querySelector(".code-block-header") if (existing) return const lang = block.getAttribute("data-language") const encodedCode = block.getAttribute("data-code") const header = document.createElement("div") header.className = "code-block-header" const languageSpan = lang ? `${lang}` : '' header.innerHTML = ` ${languageSpan} ` block.insertBefore(header, block.firstChild) const button = header.querySelector(".code-block-copy") if (button) { button.addEventListener("click", async () => { const code = button.getAttribute("data-code") if (code) { const decodedCode = decodeURIComponent(code) await navigator.clipboard.writeText(decodedCode) const copyText = button.querySelector(".copy-text") if (copyText) { copyText.textContent = "Copied!" setTimeout(() => { copyText.textContent = "Copy" }, 2000) } } }) } }) }, 0) } }) return
}