|
|
|
@ -4,15 +4,15 @@ type BasicProperties<T> = {
|
|
|
|
|
[K in keyof T as T[K] extends string | number | boolean ? K : never]: T[K];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
type Child = Node | string | null;
|
|
|
|
|
type SwelOpts<T extends keyof HTMLElementTagNameMap> = Partial<
|
|
|
|
|
export type Child = Node | string | null;
|
|
|
|
|
export type SwelOpts<T extends keyof HTMLElementTagNameMap> = Partial<
|
|
|
|
|
BasicProperties<HTMLElementTagNameMap[T]>
|
|
|
|
|
> & {
|
|
|
|
|
on: Partial<{
|
|
|
|
|
[Ev in keyof HTMLElementEventMap]: (
|
|
|
|
|
this: HTMLElement,
|
|
|
|
|
ev: HTMLElementEventMap[Ev],
|
|
|
|
|
) => any;
|
|
|
|
|
) => void;
|
|
|
|
|
}>;
|
|
|
|
|
children: (Node | string)[] | null;
|
|
|
|
|
attributes: Record<string, string | boolean | number>;
|
|
|
|
@ -20,6 +20,8 @@ type SwelOpts<T extends keyof HTMLElementTagNameMap> = Partial<
|
|
|
|
|
style: Record<string, string | boolean | number> | null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export type Renderable = Child | Child[];
|
|
|
|
|
|
|
|
|
|
interface Swel {
|
|
|
|
|
<T extends keyof HTMLElementTagNameMap>(
|
|
|
|
|
tag: T,
|
|
|
|
@ -47,12 +49,23 @@ interface Swel {
|
|
|
|
|
opts?: Partial<Omit<SwelOpts<T>, "children">>,
|
|
|
|
|
child?: Child,
|
|
|
|
|
): HTMLElementTagNameMap[T];
|
|
|
|
|
|
|
|
|
|
<T extends keyof HTMLElementTagNameMap>(
|
|
|
|
|
tag: T,
|
|
|
|
|
opts?: Partial<Omit<SwelOpts<T>, "children">>,
|
|
|
|
|
renderable?: Renderable,
|
|
|
|
|
): HTMLElementTagNameMap[T];
|
|
|
|
|
|
|
|
|
|
<T extends keyof HTMLElementTagNameMap>(
|
|
|
|
|
tag: T,
|
|
|
|
|
renderable?: Renderable,
|
|
|
|
|
): HTMLElementTagNameMap[T];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const swel: Swel = <T extends keyof HTMLElementTagNameMap>(
|
|
|
|
|
tag: T,
|
|
|
|
|
opts?: Partial<SwelOpts<T>> | Child | Child[],
|
|
|
|
|
children?: Child | Child[],
|
|
|
|
|
opts?: Partial<SwelOpts<T>> | Renderable,
|
|
|
|
|
children?: Renderable,
|
|
|
|
|
): HTMLElementTagNameMap[T] => {
|
|
|
|
|
let o: Partial<SwelOpts<T>> | null = null;
|
|
|
|
|
if (children) {
|
|
|
|
|