import { GenericRenderer, RenderFunction } from "./core"; type KebabCase = S extends `${infer C}${infer T}` ? KebabCase extends infer U ? U extends string ? T extends Uncapitalize ? `${Uncapitalize}${U}` : `${Uncapitalize}-${U}` : never : never : S; type Atts

= readonly KebabCase[]; interface Renderer

extends GenericRenderer { (this: Component

, host: Component

): unknown | void; observedAttributes?: Atts

; styleSheets?: (CSSStyleSheet | string)[]; } type Component

= HTMLElement & P; type Constructor

= new (...args: unknown[]) => Component

; interface Creator {

(renderer: Renderer

): Constructor

;

(renderer: Renderer

, options: Options

): Constructor

;

(renderer: Renderer

, baseElement: Constructor<{}>, options: Omit, "baseElement">): Constructor

; } export interface Options

{ baseElement?: Constructor<{}>; observedAttributes?: Atts

; useShadowDOM?: boolean; shadowRootInit?: ShadowRootInit; styleSheets?: (CSSStyleSheet | string)[]; } declare function makeComponent(render: RenderFunction): Creator; export { makeComponent, Component, Constructor as ComponentConstructor, Creator as ComponentCreator, };