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

Loading…
Cancel
Save