// ========================================== // ChatPane Kit — Markdown Renderer // ========================================== // Wraps window.marked + window.DOMPurify with fallback. // Independently importable utility. // // v0.37.10: Task list rendering, code block language extraction. // // Usage: // import { renderMarkdown } from './markdown.js'; // const html = renderMarkdown('**bold** text'); let _lastInput = ''; let _lastOutput = ''; const _escMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; function _escapeHtml(text) { return text.replace(/[&<>"']/g, c => _escMap[c]); } /** * Configure marked with task list support if available. */ let _configured = false; function _ensureConfigured() { if (_configured) return; _configured = true; if (typeof marked === 'undefined') return; marked.setOptions({ breaks: true, gfm: true, }); // Custom renderer for task list items const renderer = new marked.Renderer(); const origListItem = renderer.listitem?.bind(renderer); renderer.listitem = function(text, task, checked) { if (task) { const checkbox = checked ? '' : ''; return '