export type CreateElement = {
(...children: (Node | string)[]): T;
(attrs: Partial, ...children: (Node | string)[]): T;
};
type ElementCreator = {
[K in keyof HTMLElementTagNameMap]: CreateElement;
};
const h = new Proxy({} as ElementCreator, {
get:
(_, tag: string) =>
(...args: any[]) => {
const el = document.createElement(tag);
if (typeof args[0] === "object") {
Object.assign(el, args.shift());
}
el.append(...args.flat());
return el;
},
});
export default h;