import { ShadowlessElement } from '@blockeditor/lit';
import type { LitElement, PropertyValues, TemplateResult } from 'lit';
import type { Ref } from 'lit/directives/ref.js';
import { type StyleInfo } from 'lit/directives/style-map.js';
export type UniComponentReturn<Props = NonNullable<unknown>, Expose extends NonNullable<unknown> = NonNullable<unknown>> = {
    update: (props: Props) => void;
    unmount: () => void;
    expose: Expose;
};
export type UniComponent<Props = NonNullable<unknown>, Expose extends NonNullable<unknown> = NonNullable<unknown>> = (ele: HTMLElement, props: Props) => UniComponentReturn<Props, Expose>;
export declare const renderUniLit: <Props, Expose extends {}>(uni: UniComponent<Props, Expose> | undefined, props: Props, options?: {
    ref?: Ref<Expose> | undefined;
    style?: Readonly<StyleInfo> | undefined;
    class?: string | undefined;
} | undefined) => TemplateResult;
export declare class UniLit<Props, Expose extends NonNullable<unknown> = NonNullable<unknown>> extends ShadowlessElement {
    static styles: import("lit").CSSResult;
    uni?: UniComponent<Props, Expose>;
    props: Props;
    ref?: Ref<Expose>;
    uniReturn?: UniComponentReturn<Props, Expose>;
    get expose(): Expose | undefined;
    private mount;
    private unmount;
    connectedCallback(): void;
    disconnectedCallback(): void;
    protected updated(_changedProperties: PropertyValues): void;
    protected render(): unknown;
}
export declare const createUniComponentFromWebComponent: <T, Expose extends {} = {}>(component: typeof LitElement) => UniComponent<T, Expose>;
export declare const defineUniComponent: <T, Expose extends {}>(renderTemplate: (props: T, expose: Expose) => TemplateResult) => UniComponent<T, Expose>;
//# sourceMappingURL=uni-component.d.ts.map