import { SerializableValue, ServerWidgetModule, ClientWidgetModule, Meta } from '@web-widget/helpers';

interface SerializableObject {
    [key: string]: SerializableValue;
}
type Loader = () => Promise<ServerWidgetModule | ClientWidgetModule>;
interface WebWidgetElementProps {
    base?: string;
    data?: SerializableObject;
    import?: string;
    inactive?: boolean;
    loading?: 'lazy' | 'eager' | 'idle';
    meta?: Meta;
    name?: string;
    renderTarget?: 'light' | 'shadow';
}
interface WebWidgetRendererOptions extends WebWidgetElementProps {
    children?: string;
    renderStage?: 'server' | 'client';
}
interface WebWidgetRendererInterface {
    localName: string;
    attributes: Record<string, string>;
    renderInnerHTMLToString(): Promise<string>;
    renderOuterHTMLToString(): Promise<string>;
}
interface WebWidgetRendererConstructor {
    new (loader: Loader, options: WebWidgetRendererOptions): WebWidgetRendererInterface;
}

export type { Loader as L, SerializableObject as S, WebWidgetRendererConstructor as W, WebWidgetElementProps as a, WebWidgetRendererOptions as b, WebWidgetRendererInterface as c };
