type Empty = null | undefined;
type RefOrRefFn = Element | (() => HTMLElement | Empty) | Empty;

type Logger = {
    error(...data: any[]): void;
    warn(...data: any[]): void;
    info(...data: any[]): void;
    debug(...data: any[]): void;
};
declare class BaseDriver {
    #private;
    logger: Logger | undefined;
    nodeName: string;
    constructor(refOrRefFn: RefOrRefFn, config: {
        logger: Logger;
    });
    get asyncEle(): Promise<Element>;
    get ele(): Element;
    get isExists(): boolean;
}

type Data$4 = {
    name: string;
    icon: string;
    url: string;
}[];
declare class AppsListDriver extends BaseDriver {
    nodeName: string;
    set data(data: Data$4);
    get data(): Data$4;
    get ele(): Element & {
        data: Data$4;
    };
}

declare class AvatarDriver extends BaseDriver {
    nodeName: string;
    set displayName(name: string);
    set image(imgUrl: string);
    get flowId(): string;
    onClick(cb: (e: Event) => void): () => void;
}

declare class ButtonDriver extends BaseDriver {
    nodeName: string;
    onClick(cb: (e: Event) => void): () => void;
    disable(): void;
    enable(): void;
}

declare class FlowDriver extends BaseDriver {
    nodeName: string;
    set projectId(projectId: string);
    set baseUrl(baseUrl: string);
    set flowId(flowId: string);
    set theme(theme: string | null | undefined);
    onSuccess(cb: () => void): () => void;
    onPageUpdated(cb: () => void): () => void;
}

declare class GenericFlowButtonDriver extends ButtonDriver {
    get flowId(): string;
    get enableMode(): 'onlyOne' | 'oneOrMore' | 'always';
}

type Column = {
    path: string;
    header: string;
    type: string;
    attrs: Record<string, string>;
};
declare class GridDriver<T extends any> extends BaseDriver {
    #private;
    nodeName: string;
    onSelectedItemsChange(cb: (e: CustomEvent<{
        value: T[];
    }>) => void): () => void;
    get ele(): Element & {
        data: T[];
        columns: Column[];
        renderColumn: ({ path, header, type, attrs }: Column) => string;
    };
    get data(): T[];
    set data(data: T[]);
    get columns(): any[];
    filterColumns(filterFn: (col: Column) => boolean): void;
    onColumnsChange(cb: (columns: Column[]) => void): void;
    set renderColumn(renderFn: ({ path, header, type, attrs }: Column) => string);
}

declare class LinkDriver extends BaseDriver {
    nodeName: string;
    get ele(): Element & {
        innerText: string;
        getAttribute: (name: string) => string | null;
    };
    get href(): string;
    set href(href: string);
}

declare class ModalDriver extends BaseDriver {
    #private;
    beforeOpen: undefined | (() => void | Promise<void>);
    afterClose: undefined | (() => void);
    nodeName: string;
    constructor(...args: ConstructorParameters<typeof BaseDriver>);
    get isOpen(): boolean;
    get isClosed(): boolean;
    close(): void;
    open(): Promise<void>;
    reset(): void;
    setContent(template: HTMLTemplateElement): void;
    remove(): void;
}

type Mapping = {
    tenantId: string;
    roleNames: string[];
};
declare class MultiLineMappingsDriver extends BaseDriver {
    nodeName: string;
    setData(data: Record<string, string[] | {
        label?: string;
        options: string[];
    }>): void;
    get value(): Mapping[];
    set value(mappings: Mapping[]);
    get mergedValue(): Mapping[];
}

declare class MultiSelectDriver extends BaseDriver {
    nodeName: string;
    setData(data: {
        label: string;
        value: string;
    }[]): Promise<void>;
}

declare class NotificationDriver extends BaseDriver {
    nodeName: string;
    close(): void;
    show(): void;
    setContent(template: HTMLTemplateElement): void;
    remove(): void;
}

type Data$3 = {
    id: string;
    name: string;
    description?: string;
    logo?: string;
    isConnected?: boolean;
}[];
type Detail$2 = {
    id: string;
    action: string;
};
declare class OutboundAppsListDriver extends BaseDriver {
    nodeName: string;
    set data(data: Data$3);
    get data(): Data$3;
    get ele(): Element & {
        data: Data$3;
    };
    get connectFlowId(): string;
    get disconnectFlowId(): string;
    onConnectClick(cb: (detail: Detail$2) => void): () => void;
    onDisconnectClick(cb: (detail: Detail$2) => void): () => void;
}

declare class SingleSelectDriver extends BaseDriver {
    nodeName: string;
    onInput(cb: (e: InputEvent) => void): () => void;
    get value(): string;
    set value(value: string);
    setData(data: {
        label: string;
        value: string;
    }[]): Promise<void>;
    setAllowCustomValue(allow: boolean): void;
}

declare class TextDriver extends BaseDriver {
    nodeName: string;
    get ele(): Element & {
        innerText: string;
    };
    get text(): string;
    set text(content: string);
}

declare class TextFieldDriver extends BaseDriver {
    nodeName: string;
    onInput(cb: (e: InputEvent) => void): () => void;
    get value(): string;
    set value(value: string);
    disable(): void;
    enable(): void;
}

declare class UserAttributeDriver extends BaseDriver {
    nodeName: string;
    set value(value: string);
    set badgeLabel(label: string);
    get label(): string;
    get editFlowId(): string;
    get deleteFlowId(): string;
    onEditClick(cb: (e: Event) => void): () => void;
    onDeleteClick(cb: (e: Event) => void): () => void;
}

declare class UserAuthMethodDriver extends BaseDriver {
    nodeName: string;
    set fulfilled(isFulfilled: boolean);
    onUnfulfilledButtonClick(cb: (e: Event) => void): () => void;
    onFulfilledButtonClick(cb: (e: Event) => void): () => void;
    get flowId(): string;
    get fulfilledFlowId(): string;
}

type Data$2 = {
    id: string;
    name: string;
    lastLoginDate: number;
    isCurrent: boolean;
}[];
type Detail$1 = {
    id: string;
    action: string;
};
declare class DeviceListDriver extends BaseDriver {
    nodeName: string;
    set displayName(name: string);
    get ele(): Element & {
        data: Data$2;
    };
    get data(): Data$2;
    set data(data: Data$2);
    get flowId(): string;
    onRemoveDeviceClick(cb: (detail: Detail$1) => void): () => void;
}

declare class FlowButtonDriver extends ButtonDriver {
    get flowId(): string;
}

declare class LastAuthBadgeDriver extends BaseDriver {
    nodeName: string;
    set position(value: string);
    get position(): string;
}

declare class TenantSelectorDriver extends SingleSelectDriver {
    get action(): 'reload' | 'none' | '';
    get refreshTimeout(): number;
    get shouldReload(): boolean;
}

type PasskeyType = 'apple' | 'google' | 'windows' | 'chrome' | 'edge' | 'samsung' | '1password' | 'bitwarden' | 'lastpass' | 'dashlane' | 'keeper' | 'keepassxc' | 'proton' | 'nordpass' | 'enpass' | 'key' | 'phone' | 'other';
type Data$1 = {
    id: string;
    name: string;
    passkeyType: PasskeyType;
    createdAt: number;
}[];
type Detail = {
    id: string;
    action: string;
};
declare class UserPasskeysDriver extends BaseDriver {
    nodeName: string;
    get ele(): Element & {
        data: Data$1;
    };
    get data(): Data$1;
    set data(data: Data$1);
    get addPasskeyFlowId(): string;
    get removePasskeyFlowId(): string;
    onAddPasskeyClick(cb: (e: Event) => void): () => void;
    onRemovePasskeyClick(cb: (detail: Detail) => void): () => void;
}

type Data = {
    id: string;
    name: string;
    authType?: string;
    isDefault?: boolean;
    link?: string;
}[];
type DeleteDetail = {
    id: string;
    name: string;
};
declare class MultiSsoConfigurationsDriver extends BaseDriver {
    nodeName: string;
    set data(data: Data);
    get data(): Data;
    get ele(): Element & {
        data: Data;
    };
    get createFlowId(): string;
    get deleteFlowId(): string;
    onCreateClicked(cb: () => void): () => void;
    onDeleteClicked(cb: (detail: DeleteDetail) => void): () => void;
}

export { AppsListDriver, AvatarDriver, ButtonDriver, DeviceListDriver, FlowButtonDriver, FlowDriver, GenericFlowButtonDriver, GridDriver, LastAuthBadgeDriver, LinkDriver, ModalDriver, MultiLineMappingsDriver, MultiSelectDriver, MultiSsoConfigurationsDriver, NotificationDriver, OutboundAppsListDriver, SingleSelectDriver, TenantSelectorDriver, TextDriver, TextFieldDriver, UserAttributeDriver, UserAuthMethodDriver, UserPasskeysDriver };
