UNPKG

@pionjs/pion

Version:

Hooks for web components

25 lines (24 loc) 1.35 kB
import { GenericRenderer, RenderFunction } from "./core"; type KebabCase<S> = S extends `${infer C}${infer T}` ? KebabCase<T> extends infer U ? U extends string ? T extends Uncapitalize<T> ? `${Uncapitalize<C>}${U}` : `${Uncapitalize<C>}-${U}` : never : never : S; type Atts<P> = readonly KebabCase<keyof P>[]; interface Renderer<P extends object> extends GenericRenderer<HTMLElement, P> { (this: Component<P>, host: Component<P>): unknown | void; observedAttributes?: Atts<P>; styleSheets?: (CSSStyleSheet | string)[]; } type Component<P extends object> = HTMLElement & P; type Constructor<P extends object> = new (...args: unknown[]) => Component<P>; interface Creator { <P extends object>(renderer: Renderer<P>): Constructor<P>; <P extends object>(renderer: Renderer<P>, options: Options<P>): Constructor<P>; <P extends object>(renderer: Renderer<P>, baseElement: Constructor<{}>, options: Omit<Options<P>, "baseElement">): Constructor<P>; } export interface Options<P> { baseElement?: Constructor<{}>; observedAttributes?: Atts<P>; useShadowDOM?: boolean; shadowRootInit?: ShadowRootInit; styleSheets?: (CSSStyleSheet | string)[]; } declare function makeComponent(render: RenderFunction): Creator; export { makeComponent, Component, Constructor as ComponentConstructor, Creator as ComponentCreator, };