## API Report File for "@element-hq/element-web-module-api"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts

import { ComponentType } from 'react';
import { IWidget } from 'matrix-widget-api';
import { JSX } from 'react';
import { ModuleApi } from '@matrix-org/react-sdk-module-api';
import { ReactNode } from 'react';
import { Root } from 'react-dom/client';
import { RuntimeModule } from '@matrix-org/react-sdk-module-api';

// @public
export interface AccountAuthApiExtension {
    overwriteAccountAuth(accountInfo: AccountAuthInfo): Promise<void>;
}

// @public
export interface AccountAuthInfo {
    accessToken: string;
    deviceId: string;
    homeserverUrl: string;
    refreshToken?: string;
    userId: string;
}

// @public
export interface AccountDataApi {
    delete(eventType: string): Promise<void>;
    get(eventType: string): Watchable<unknown>;
    set(eventType: string, content: unknown): Promise<void>;
}

// @alpha @deprecated (undocumented)
export interface AliasCustomisations {
    // (undocumented)
    getDisplayAliasForAliasSet?(canonicalAlias: string | null, altAliases: string[]): string | null;
}

// Warning: (ae-incompatible-release-tags) The symbol "Api" is marked as @public, but its signature references "LegacyModuleApiExtension" which is marked as @alpha
// Warning: (ae-incompatible-release-tags) The symbol "Api" is marked as @public, but its signature references "LegacyCustomisationsApiExtension" which is marked as @alpha
//
// @public
export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiExtension, DialogApiExtension, AccountAuthApiExtension, ProfileApiExtension {
    // @alpha
    readonly builtins: BuiltinsApi;
    readonly client: ClientApi;
    // @alpha
    readonly composer: ComposerApi;
    readonly config: ConfigApi;
    createRoot(element: Element): Root;
    // @alpha
    readonly customComponents: CustomComponentsApi;
    // @alpha
    readonly customisations: CustomisationsApi;
    // @alpha
    readonly extras: ExtrasApi;
    readonly i18n: I18nApi;
    readonly navigation: NavigationApi;
    readonly rootNode: HTMLElement;
    readonly stores: StoresApi;
    // @alpha
    readonly widget: WidgetApi;
    // @alpha
    readonly widgetLifecycle: WidgetLifecycleApi;
}

// @alpha
export interface BuiltinsApi {
    renderNotificationDecoration(roomId: string): React.ReactNode;
    renderRoomAvatar(roomId: string, size?: string): React.ReactNode;
    renderRoomView(roomId: string, props?: RoomViewProps): React.ReactNode;
}

// @alpha
export type CapabilitiesApprover = (widget: WidgetDescriptor, requestedCapabilities: Set<string>) => MaybePromise<Set<string> | undefined>;

// @alpha @deprecated (undocumented)
export interface ChatExportCustomisations<ExportFormat, ExportType> {
    getForceChatExportParameters(): {
        format?: ExportFormat;
        range?: ExportType;
        numberOfMessages?: number;
        includeAttachments?: boolean;
        sizeMb?: number;
    };
}

// @public
export interface ClientApi {
    accountData: AccountDataApi;
    getRoom: (id: string) => Room | null;
}

// @alpha @deprecated (undocumented)
export interface ComponentVisibilityCustomisations {
    shouldShowComponent?(component: "UIComponent.sendInvites" | "UIComponent.roomCreation" | "UIComponent.spaceCreation" | "UIComponent.exploreRooms" | "UIComponent.addIntegrations" | "UIComponent.filterContainer" | "UIComponent.roomOptionsMenu"): boolean;
}

// @alpha
export interface ComposerApi {
    insertPlaintextIntoComposer(plaintext: string): void;
}

// @public
export interface Config {
    // (undocumented)
    brand: string;
}

// @public
export interface ConfigApi {
    // (undocumented)
    get(): Config;
    // (undocumented)
    get<K extends keyof Config>(key: K): Config[K];
    // (undocumented)
    get<K extends keyof Config = never>(key?: K): Config | Config[K];
}

// @alpha
export type Container = "top" | "right" | "center";

// @alpha
export interface CustomComponentsApi {
    registerLoginComponent(renderer: CustomLoginRenderFunction): void;
    registerMessageRenderer(eventTypeOrFilter: string | ((mxEvent: MatrixEvent) => boolean), renderer: CustomMessageRenderFunction, hints?: CustomMessageRenderHints): void;
    registerRoomPreviewBar(renderer: CustomRoomPreviewBarRenderFunction): void;
}

// @alpha
export interface CustomisationsApi {
    registerShouldShowComponent(fn: (this: void, component: UIComponent) => boolean | void): void;
}

// @alpha
export type CustomLoginComponentProps = {
    serverConfig: CustomLoginComponentPropsServerConfig;
    fragmentAfterLogin?: string;
    children?: ReactNode;
    onLoggedIn(data: AccountAuthInfo): void;
    onServerConfigChange(config: CustomLoginComponentPropsServerConfig): void;
};

// @alpha
export interface CustomLoginComponentPropsServerConfig {
    hsName: string;
    hsUrl: string;
}

// @alpha
export type CustomLoginRenderFunction = ExtendablePropsRenderFunction<CustomLoginComponentProps>;

// @alpha
export type CustomMessageComponentProps = {
    mxEvent: MatrixEvent;
};

// @alpha
export type CustomMessageRenderFunction = (
props: CustomMessageComponentProps,
originalComponent?: (props?: OriginalMessageComponentProps) => React.JSX.Element) => JSX.Element;

// @alpha
export type CustomMessageRenderHints = {
    allowEditingEvent?: boolean;
    allowDownloadingMedia?: (mxEvent: MatrixEvent) => Promise<boolean>;
};

// @alpha
export type CustomRoomPreviewBarComponentProps = {
    roomId?: string;
    roomAlias?: string;
};

// @alpha
export type CustomRoomPreviewBarRenderFunction = (
props: CustomRoomPreviewBarComponentProps,
originalComponent: (props: CustomRoomPreviewBarComponentProps) => JSX.Element) => JSX.Element;

// @public
export interface DialogApiExtension {
    openDialog<M, P extends object>(initialOptions: DialogOptions, dialog: ComponentType<P & DialogProps<M>>, props: P): DialogHandle<M>;
}

// @public
export type DialogHandle<M> = {
    finished: Promise<{
        ok: boolean;
        model: M | null;
    }>;
    close(): void;
};

// @public
export interface DialogOptions {
    title: string;
}

// @public
export type DialogProps<M> = {
    onSubmit(model: M): void;
    onCancel(): void;
};

// @alpha @deprecated (undocumented)
export interface DirectoryCustomisations {
    // (undocumented)
    requireCanonicalAliasAccessToPublish?(): boolean;
}

// @alpha
export type ExtendablePropsRenderFunction<BaseProps> = <P extends BaseProps>(
props: P,
originalComponent: (props: P) => JSX.Element) => JSX.Element;

// @alpha
export interface ExtrasApi {
    addRoomHeaderButtonCallback(cb: RoomHeaderButtonsCallback): void;
    getVisibleRoomBySpaceKey(spaceKey: string, cb: () => string[]): void;
    setSpacePanelItem(spaceKey: string, props: SpacePanelItemProps): void;
}

// @public
export interface I18nApi {
    humanizeTime(this: void, timeMillis: number): string;
    get language(): string;
    register(this: void, translations: Partial<Translations>): void;
    translate(this: void, key: keyof Translations, variables?: StringVariables): string;
    translate(this: void, key: keyof Translations, variables: Variables | undefined, tags: Tags): ReactNode;
}

// @alpha
export type IdentityApprover = (widget: WidgetDescriptor) => MaybePromise<boolean | undefined>;

// @alpha @deprecated (undocumented)
export type LegacyCustomisations<T extends object> = (customisations: T) => void;

// @alpha @deprecated (undocumented)
export interface LegacyCustomisationsApiExtension {
    // @deprecated (undocumented)
    readonly _registerLegacyAliasCustomisations: LegacyCustomisations<AliasCustomisations>;
    // @deprecated (undocumented)
    readonly _registerLegacyChatExportCustomisations: LegacyCustomisations<ChatExportCustomisations<never, never>>;
    // @deprecated (undocumented)
    readonly _registerLegacyComponentVisibilityCustomisations: LegacyCustomisations<ComponentVisibilityCustomisations>;
    // @deprecated (undocumented)
    readonly _registerLegacyDirectoryCustomisations: LegacyCustomisations<DirectoryCustomisations>;
    // @deprecated (undocumented)
    readonly _registerLegacyLifecycleCustomisations: LegacyCustomisations<LifecycleCustomisations>;
    // @deprecated (undocumented)
    readonly _registerLegacyMediaCustomisations: LegacyCustomisations<MediaCustomisations<never, never, never>>;
    // @deprecated (undocumented)
    readonly _registerLegacyRoomListCustomisations: LegacyCustomisations<RoomListCustomisations<never>>;
    // @deprecated (undocumented)
    readonly _registerLegacyUserIdentifierCustomisations: LegacyCustomisations<UserIdentifierCustomisations>;
    // @deprecated (undocumented)
    readonly _registerLegacyWidgetPermissionsCustomisations: LegacyCustomisations<WidgetPermissionsCustomisations<never, never>>;
    // @deprecated (undocumented)
    readonly _registerLegacyWidgetVariablesCustomisations: LegacyCustomisations<WidgetVariablesCustomisations>;
}

// @alpha @deprecated (undocumented)
export interface LegacyModuleApiExtension {
    // @deprecated
    _registerLegacyModule(LegacyModule: RuntimeModuleConstructor): Promise<void>;
}

// @alpha @deprecated (undocumented)
export interface LifecycleCustomisations {
    // (undocumented)
    onLoggedOutAndStorageCleared?(): void;
}

// @alpha
export type LocationRenderFunction = () => JSX.Element;

// @alpha
export interface MatrixEvent {
    content: Record<string, unknown>;
    eventId: string;
    originServerTs: number;
    roomId: string;
    sender: string;
    stateKey?: string;
    type: string;
    unsigned: Record<string, unknown>;
}

// @public
export type MaybePromise<T> = T | PromiseLike<T>;

// @alpha @deprecated (undocumented)
export interface Media {
    // (undocumented)
    downloadSource(): Promise<Response>;
    // (undocumented)
    getSquareThumbnailHttp(dim: number): string | null;
    // (undocumented)
    getThumbnailHttp(width: number, height: number, mode?: "scale" | "crop"): string | null;
    // (undocumented)
    getThumbnailOfSourceHttp(width: number, height: number, mode?: "scale" | "crop"): string | null;
    // (undocumented)
    readonly hasThumbnail: boolean;
    // (undocumented)
    readonly isEncrypted: boolean;
    // (undocumented)
    readonly srcHttp: string | null;
    // (undocumented)
    readonly srcMxc: string;
    // (undocumented)
    readonly thumbnailHttp: string | null;
    // (undocumented)
    readonly thumbnailMxc: string | null | undefined;
}

// @alpha @deprecated (undocumented)
export interface MediaContructable<PreparedMedia> {
    // (undocumented)
    new (prepared: PreparedMedia): Media;
}

// @alpha @deprecated (undocumented)
export interface MediaCustomisations<Content, Client, PreparedMedia> {
    // (undocumented)
    readonly Media: MediaContructable<PreparedMedia>;
    // (undocumented)
    mediaFromContent(content: Content, client?: Client): Media;
    // (undocumented)
    mediaFromMxc(mxc?: string, client?: Client): Media;
}

// @public
export interface Module {
    // (undocumented)
    load(): Promise<void>;
}

// @public
export interface ModuleFactory {
    // (undocumented)
    new (api: Api): Module;
    // (undocumented)
    readonly moduleApiVersion: string;
    // (undocumented)
    readonly prototype: Module;
}

// @public
export class ModuleIncompatibleError extends Error {
    constructor(pluginVersion: string);
}

// @public
export class ModuleLoader {
    constructor(api: Api);
    // Warning: (ae-forgotten-export) The symbol "ModuleExport" needs to be exported by the entry point index.d.ts
    //
    // (undocumented)
    load(moduleExport: ModuleExport): Promise<void>;
    // (undocumented)
    start(): Promise<void>;
}

// @public
export interface NavigationApi {
    openRoom(roomIdOrAlias: string, opts?: OpenRoomOptions): void;
    // @alpha
    registerLocationRenderer(path: string, renderer: LocationRenderFunction): void;
    toMatrixToLink(link: string, join?: boolean): Promise<void>;
}

// @public
export interface OpenRoomOptions {
    autoJoin?: boolean;
    viaServers?: string[];
}

// @alpha
export type OriginalMessageComponentProps = {
    showUrlPreview?: boolean;
};

// @alpha
export type PreloadApprover = (widget: WidgetDescriptor) => MaybePromise<boolean | undefined>;

// @public
export interface Profile {
    displayName?: string;
    isGuest?: boolean;
    userId?: string;
}

// @public
export interface ProfileApiExtension {
    readonly profile: Watchable<Profile>;
}

// @public
export interface RichVariables {
    // (undocumented)
    [key: string]: SubstitutionValue;
    // (undocumented)
    count?: number;
}

// @public
export interface Room {
    getLastActiveTimestamp: () => number;
    id: string;
    name: Watchable<string>;
}

// @alpha
export type RoomHeaderButtonsCallback = (roomId: string) => JSX.Element | undefined;

// @alpha @deprecated (undocumented)
export interface RoomListCustomisations<Room> {
    isRoomVisible?(room: Room): boolean;
}

// @public
export interface RoomListStoreApi {
    getRooms(): Watchable<Room[]>;
    waitForReady(): Promise<void>;
}

// @alpha
export interface RoomViewProps {
    enableReadReceiptsAndMarkersOnActivity?: boolean;
    hideComposer?: boolean;
    hideHeader?: boolean;
    hidePinnedMessageBanner?: boolean;
    hideRightPanel?: boolean;
    hideWidgets?: boolean;
}

// @alpha @deprecated (undocumented)
export type RuntimeModuleConstructor = new (api: ModuleApi) => RuntimeModule;

// @alpha
export interface SpacePanelItemProps {
    className?: string;
    icon?: JSX.Element;
    label: string;
    onSelected: () => void;
    style?: React.CSSProperties;
    tooltip?: string;
}

// @public
export interface StoresApi {
    roomListStore: RoomListStoreApi;
}

// @public
export interface StringVariables {
    // (undocumented)
    [key: string]: number | string | null | undefined;
    // (undocumented)
    count?: number;
}

// @public
export type SubstitutionValue = number | string | ReactNode | ((sub: string) => ReactNode);

// @public
export type Tags = Record<string, SubstitutionValue>;

// @public
export type Translations = Record<string, {
    [ietfLanguageTag: string]: string;
}>;

// @alpha
export const enum UIComponent {
    AddIntegrations = "UIComponent.addIntegrations",
    CreateRooms = "UIComponent.roomCreation",
    CreateSpaces = "UIComponent.spaceCreation",
    ExploreRooms = "UIComponent.exploreRooms",
    FilterContainer = "UIComponent.filterContainer",
    InviteUsers = "UIComponent.sendInvites",
    RoomOptionsMenu = "UIComponent.roomOptionsMenu"
}

// @alpha @deprecated (undocumented)
export interface UserIdentifierCustomisations {
    getDisplayUserIdentifier(userId: string, opts: {
        roomId?: string;
        withDisplayName?: boolean;
    }): string | null;
}

// @public
export function useWatchable<T>(watchable: Watchable<T>): T;

// @public
export type Variables = StringVariables | RichVariables;

// @public
export class Watchable<T> {
    constructor(currentValue: T);
    // Warning: (ae-forgotten-export) The symbol "WatchFn" needs to be exported by the entry point index.d.ts
    //
    // (undocumented)
    protected readonly listeners: Set<WatchFn<T>>;
    protected onFirstWatch(): void;
    protected onLastWatch(): void;
    // (undocumented)
    unwatch(listener: (value: T) => void): void;
    get value(): T;
    set value(value: T);
    // (undocumented)
    watch(listener: (value: T) => void): void;
}

// @alpha
export interface WidgetApi {
    getAppAvatarUrl(app: IWidget, width?: number, height?: number, resizeMethod?: string): string | null;
    getWidgetsInRoom(roomId: string): IWidget[];
    isAppInContainer(app: IWidget, container: Container, roomId: string): boolean;
    moveAppToContainer(app: IWidget, container: Container, roomId: string): void;
}

// @alpha
export type WidgetDescriptor = {
    id: string;
    templateUrl: string;
    creatorUserId: string;
    type: string;
    origin: string;
    roomId?: string;
};

// @alpha
export interface WidgetLifecycleApi {
    registerCapabilitiesApprover(approver: CapabilitiesApprover): void;
    registerIdentityApprover(approver: IdentityApprover): void;
    registerPreloadApprover(approver: PreloadApprover): void;
}

// @alpha @deprecated (undocumented)
export interface WidgetPermissionsCustomisations<Widget, Capability> {
    preapproveCapabilities?(widget: Widget, requestedCapabilities: Set<Capability>): Promise<Set<Capability>>;
}

// @alpha @deprecated (undocumented)
export interface WidgetVariablesCustomisations {
    isReady?(): Promise<void>;
    provideVariables?(): {
        currentUserId: string;
        userDisplayName?: string;
        userHttpAvatarUrl?: string;
        clientId?: string;
        clientTheme?: string;
        clientLanguage?: string;
        deviceId?: string;
        baseUrl?: string;
    };
}

// (No @packageDocumentation comment for this package)

```
