/* eslint-disable @typescript-eslint/no-explicit-any */ export type Template = { toString: () => string; }; interface Displayable { displayName?: string; } export type Component = Displayable & ((props: any) => Template); export interface RenderProps { render: Component | (() => Template); } export type Reference = { current: T; }; export function render(component: Component, element: HTMLElement | null): void; export function html(strings: TemplateStringsArray, ...args: any[]): Template; export function bind(component: Component): (attrs: T) => Component; export function useState(state: T): [state: T, setter: (newState: T | ((prev: T) => T)) => void]; export function useEffect(effect: () => void, deps?: any[]): void; export function useLayoutEffect(effect: () => void, deps?: any[]): void; export function useRef(): Reference; export function useEventListener(ref: Reference, eventName: string, handler: EventListener): void; export function useDelegation(eventName: string, handler: (target: HTMLElement, event: Event) => void): Reference; export function useMemo(toEvaluate: () => T, deps?: any[]): T; export function useCallback(callback: T, deps?: any[]): T; export function useReducer( reducer: (state: State, action: Action) => State, initialArg: any ): [State, (action: Action) => State]; export function useReducer( reducer: (state: State, action: Action) => State, initialArg: any, init?: (value: any) => State ): [State, (action: Action) => State]; export function useImperativeHandle(ref: Reference, createHandle: () => T, deps?: any[]): void;