export async function renderSvg(relativePath) { const svgRes = await fetch(relativePath); const svgText = await svgRes.text(); const parser = new DOMParser(); const svgDoc = parser.parseFromString(svgText, 'image/svg+xml'); const svgElement = svgDoc.documentElement; return svgElement; } export function html(tag, props = {}, children = []) { const element = document.createElement(tag); Object.entries(props).forEach(([key, value]) => { if (key === 'textContent' || key === 'innerHTML') { element[key] = value; } else if (key === 'style' && typeof value === 'object') { Object.assign(element.style, value); } else if (key === 'class') { element.className = value; } else if (key.startsWith('on')) { element.addEventListener(key.slice(2).toLowerCase(), value); } else { element.setAttribute(key, value); } }); children.flat().forEach(child => { if (typeof child === 'string') { element.appendChild(document.createTextNode(child)); } else if (child instanceof Node) { element.appendChild(child); } }); return element; }