type Child = Element | Text | string | number export type Children = Child[] export function h( tagName: string, attrs: object, ...children: Children ): 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) // if (Array.isArray(child)) // elem.append(...child) // else // elem.append(child) } return elem } export function concatClassName(attrs: any, className: string): object { const existingClassName = 'className' in attrs ? attrs['className'] : undefined return { ...attrs, className: `${className} ${existingClassName}` } }