Update exports, add `Renderable` type

`Renderable` type is useful for 3rd-party code which wants to accept
any `swel`-renderable type
main 2023.02.17
idylls 1 year ago
parent 3dfd606aff
commit da16bb1a5d
Signed by: idylls
GPG Key ID: 52D7502B0C319049

@ -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) {

Loading…
Cancel
Save