type Child = Element | Text | string | number export default function h( tagName: string, attrs: object, ...children: Child[] ): Element { const isSvg = tagName === 'svg' || tagName === 'path' let elem = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName) if (isSvg) { Object.entries(attrs).forEach(([key, value]) => { elem.setAttribute(key, value) }) } else { elem = Object.assign(elem, attrs) } for (const child of children) { if (typeof child === 'number') elem.append(child.toString()) else elem.append(child) } return elem } export function classNames(obj: {[key: string]: boolean }): string { return Object.keys(obj).filter(k => obj[k]).join(' ') }