sober
Version:
Sober is a library of UI components designed with reference to Material You.
58 lines (57 loc) • 2.5 kB
TypeScript
type Prop = string | number | boolean;
export declare const supports: {
CSSStyleSheet: boolean;
CSSContainer: boolean;
};
export declare const useProps: <const T extends {
[]: Prop | string[];
} = {}>(options: T) => { -readonly [K in keyof T as K extends `$${infer NK}` ? NK : K]: T[K] extends string[] ? T[K][number] : T[K] extends string ? string : T[K] extends number ? number : T[K] extends boolean ? boolean : never; };
export declare const useEvents: <T extends {
[]: typeof Event | typeof CustomEvent<any>;
}>(options: T) => { [K in keyof T]: InstanceType<T[K]>; };
type ComponentOptions<Props extends {
[]: Prop;
} = {}, Expose extends {
[]: any;
} = {}, Events extends {
[]: Event | CustomEvent;
} = {}, Methods extends {
[]: any;
} = {}> = {
style?: string | string[];
props?: Props;
events?: Events;
methods?: Methods;
template?: string;
setup?: (this: Props & Methods & HTMLElement, shadowRoot: ShadowRoot) => ({
onMounted?: () => void;
onUnmounted?: () => void;
onAdopted?: () => void;
expose?: Expose & {
[]?: never;
};
} & {
[]?: ((v: Props[K], old: Props[K]) => void) | {
get?: (old: Props[K]) => Props[K];
set?: (v: Props[K], old: Props[K]) => void;
};
}) | void;
};
type ComponentReturn<Props, Expose, Events, OnEvents> = Props & Expose & OnEvents & {
addEventListener<K extends keyof Events>(type: K, listener: (this: ComponentReturn<Props, Expose, Events, OnEvents>, ev: Events[K]) => any, options?: boolean | AddEventListenerOptions): void;
removeEventListener<K extends keyof Events>(type: K, listener: (this: ComponentReturn<Props, Expose, Events, OnEvents>, ev: Events[K]) => any, options?: boolean | EventListenerOptions): void;
} & HTMLElement;
export declare const useElement: <Props extends {
[]: Prop;
} = {}, Expose extends {
[]: any;
} = {}, Events extends {
[]: Event | CustomEvent;
} = {}, Methods extends {
[]: any;
} = {}>(options: ComponentOptions<Props, Expose, Events, Methods>) => {
new (): ComponentReturn<Props, Expose, Events, { [K in keyof Events as K extends string ? `on${K}` : never]: ((event: Events[K]) => void) | null; }>;
readonly define: (name: string) => void;
prototype: HTMLElement;
} & Methods;
export {};