import { marked } from 'marked'
import hljs from 'highlight.js'
// Configure marked once
marked.setOptions({ breaks: true, gfm: true })
// Custom renderer to add code block header + copy button
const renderer = new marked.Renderer()
renderer.code = function({ text, lang }) {
const language = lang && hljs.getLanguage(lang) ? lang : 'plaintext'
const highlighted = hljs.highlight(text, { language }).value
return `<div class="code-block"><div class="code-header"><span>${language}</span><button class="btn-icon copy-btn" data-code="${encodeURIComponent(text)}" title="Copy"><i class="ph ph-copy"></i></button></div><pre><code class="hljs language-${language}">${highlighted}</code></pre></div>`
}
marked.use({ renderer })
export function renderMarkdown(text) {
const html = marked.parse(text ?? '')
// Inject UI kit table class
return html.replace(/<table>/g, '<table class="table">')
}
// Attach copy button listeners after v-html renders
export function attachCopyButtons(el) {
el?.querySelectorAll('.copy-btn').forEach(btn => {
btn.onclick = () => {
const code = decodeURIComponent(btn.dataset.code ?? '')
navigator.clipboard.writeText(code).then(() => {
btn.innerHTML = '<i class="ph ph-check"></i>'
setTimeout(() => { btn.innerHTML = '<i class="ph ph-copy"></i>' }, 1500)
})
}
})
}