From 38e10822adffd9bbe240ae525d2d5085745b8331 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 24 Sep 2025 10:58:41 +0100 Subject: [PATCH 01/12] Add some experimental module interfaces ...with somewhat placeholder names as they're the best I can think of right now: * 'Extras': To add new bits of UI to places (specifically the space panel) * 'Builtins': For modules to render components that are part of Element Web * 'Navigation': For modules to add paths to the URL router --- .../src/api/builtins.ts | 19 +++++++++++++++++++ .../element-web-module-api/src/api/extras.ts | 18 ++++++++++++++++++ .../element-web-module-api/src/api/index.ts | 6 ++++++ .../src/api/navigation.ts | 6 ++++++ packages/element-web-module-api/src/index.ts | 2 ++ 5 files changed, 51 insertions(+) create mode 100644 packages/element-web-module-api/src/api/builtins.ts create mode 100644 packages/element-web-module-api/src/api/extras.ts diff --git a/packages/element-web-module-api/src/api/builtins.ts b/packages/element-web-module-api/src/api/builtins.ts new file mode 100644 index 00000000..31280366 --- /dev/null +++ b/packages/element-web-module-api/src/api/builtins.ts @@ -0,0 +1,19 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +export interface RoomViewProps { + roomId?: string; +} + +/** + * Exposes components that are part of Element Web to allow modules to render them + * as part of their custom components (because they can't import the components from + * Element Web since it would cause a dependency cycle) + */ +export interface BuiltinsApi { + getRoomViewComponent(): React.ComponentType; +} diff --git a/packages/element-web-module-api/src/api/extras.ts b/packages/element-web-module-api/src/api/extras.ts new file mode 100644 index 00000000..c4ad313b --- /dev/null +++ b/packages/element-web-module-api/src/api/extras.ts @@ -0,0 +1,18 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import { JSX } from "react"; + +interface SpacePanelItemProps { + isPanelCollapsed: boolean; +} + +export type SpacePanelItemRenderFunction = (props: SpacePanelItemProps) => JSX.Element; + +export interface ExtrasApi { + addSpacePanelItem(renderer: SpacePanelItemRenderFunction): void; +} diff --git a/packages/element-web-module-api/src/api/index.ts b/packages/element-web-module-api/src/api/index.ts index 8a592607..9ad4fc61 100644 --- a/packages/element-web-module-api/src/api/index.ts +++ b/packages/element-web-module-api/src/api/index.ts @@ -15,6 +15,8 @@ import { NavigationApi } from "./navigation.ts"; import { DialogApiExtension } from "./dialog.ts"; import { AccountAuthApiExtension } from "./auth.ts"; import { ProfileApiExtension } from "./profile.ts"; +import { ExtrasApi } from "./extras.ts"; +import { BuiltinsApi } from "./builtins.ts"; /** * Module interface for modules to implement. @@ -103,12 +105,16 @@ export interface Api */ readonly customComponents: CustomComponentsApi; + readonly builtins: BuiltinsApi; + /** * API to navigate the application. * @public */ readonly navigation: NavigationApi; + readonly extras: ExtrasApi; + /** * Create a ReactDOM root for rendering React components. * Exposed to allow modules to avoid needing to bundle their own ReactDOM. diff --git a/packages/element-web-module-api/src/api/navigation.ts b/packages/element-web-module-api/src/api/navigation.ts index a3b07327..063b6834 100644 --- a/packages/element-web-module-api/src/api/navigation.ts +++ b/packages/element-web-module-api/src/api/navigation.ts @@ -5,6 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE files in the repository root for full details. */ +import { JSX } from "react"; + +export type LocationRenderFunction = () => JSX.Element; + /** * API methods to navigate the application. * @public @@ -16,4 +20,6 @@ export interface NavigationApi { * @param join - If true, the user will be made to attempt to join the room/space if they are not already a member. */ toMatrixToLink(link: string, join?: boolean): Promise; + + registerLocationRenderer(path: string, renderer: LocationRenderFunction): void; } diff --git a/packages/element-web-module-api/src/index.ts b/packages/element-web-module-api/src/index.ts index 196db8d9..e89adc48 100644 --- a/packages/element-web-module-api/src/index.ts +++ b/packages/element-web-module-api/src/index.ts @@ -11,10 +11,12 @@ export type { Config, ConfigApi } from "./api/config"; export type { I18nApi, Variables, Translations } from "./api/i18n"; export type * from "./models/event"; export type * from "./api/custom-components"; +export type * from "./api/extras"; export type * from "./api/legacy-modules"; export type * from "./api/legacy-customisations"; export type * from "./api/auth"; export type * from "./api/dialog"; export type * from "./api/profile"; export type * from "./api/navigation"; +export type * from "./api/builtins"; export * from "./api/watchable"; From 864a2dd9fd0b06fda6763021bdcc0263db852b86 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 24 Sep 2025 16:07:31 +0100 Subject: [PATCH 02/12] Maybe make api-extractor happy --- .../element-web-module-api.api.md | 35 ++++++++++++++++++- .../src/api/builtins.ts | 5 +++ .../element-web-module-api/src/api/extras.ts | 8 +++++ .../element-web-module-api/src/api/index.ts | 8 +++++ .../src/api/navigation.ts | 7 +++- 5 files changed, 61 insertions(+), 2 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 56fa2bb0..9b2234e3 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -35,15 +35,26 @@ export interface AliasCustomisations { // // @public export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiExtension, DialogApiExtension, AccountAuthApiExtension, ProfileApiExtension { + // @alpha + readonly builtins: BuiltinsApi; readonly config: ConfigApi; createRoot(element: Element): Root; // @alpha readonly customComponents: CustomComponentsApi; + // @alpha + readonly extras: ExtrasApi; readonly i18n: I18nApi; + // Warning: (ae-incompatible-release-tags) The symbol "navigation" is marked as @public, but its signature references "NavigationApi" which is marked as @alpha readonly navigation: NavigationApi; readonly rootNode: HTMLElement; } +// @alpha +export interface BuiltinsApi { + // (undocumented) + getRoomViewComponent(): React.ComponentType; +} + // @alpha @deprecated (undocumented) export interface ChatExportCustomisations { getForceChatExportParameters(): { @@ -140,6 +151,12 @@ export interface DirectoryCustomisations { requireCanonicalAliasAccessToPublish?(): boolean; } +// @alpha +export interface ExtrasApi { + // (undocumented) + addSpacePanelItem(renderer: SpacePanelItemRenderFunction): void; +} + // @public export interface I18nApi { get language(): string; @@ -186,6 +203,9 @@ export interface LifecycleCustomisations { onLoggedOutAndStorageCleared?(): void; } +// @alpha +export type LocationRenderFunction = () => JSX.Element; + // @alpha export interface MatrixEvent { content: Record; @@ -270,8 +290,10 @@ export class ModuleLoader { start(): Promise; } -// @public +// @alpha export interface NavigationApi { + // (undocumented) + registerLocationRenderer(path: string, renderer: LocationRenderFunction): void; toMatrixToLink(link: string, join?: boolean): Promise; } @@ -297,9 +319,20 @@ export interface RoomListCustomisations { isRoomVisible?(room: Room): boolean; } +// @alpha +export interface RoomViewProps { + // (undocumented) + roomId?: string; +} + // @alpha @deprecated (undocumented) export type RuntimeModuleConstructor = new (api: ModuleApi) => RuntimeModule; +// Warning: (ae-forgotten-export) The symbol "SpacePanelItemProps" needs to be exported by the entry point index.d.ts +// +// @alpha +export type SpacePanelItemRenderFunction = (props: SpacePanelItemProps) => JSX.Element; + // @public export type Translations = Record; diff --git a/packages/element-web-module-api/src/api/extras.ts b/packages/element-web-module-api/src/api/extras.ts index c4ad313b..da29a61a 100644 --- a/packages/element-web-module-api/src/api/extras.ts +++ b/packages/element-web-module-api/src/api/extras.ts @@ -11,8 +11,16 @@ interface SpacePanelItemProps { isPanelCollapsed: boolean; } +/** + * The type of the function used to render a space panel item. + * @alpha + */ export type SpacePanelItemRenderFunction = (props: SpacePanelItemProps) => JSX.Element; +/** + * API for inserting extra UI into Element Web. + * @alpha Subject to change. + */ export interface ExtrasApi { addSpacePanelItem(renderer: SpacePanelItemRenderFunction): void; } diff --git a/packages/element-web-module-api/src/api/index.ts b/packages/element-web-module-api/src/api/index.ts index 9ad4fc61..dacc7501 100644 --- a/packages/element-web-module-api/src/api/index.ts +++ b/packages/element-web-module-api/src/api/index.ts @@ -105,6 +105,10 @@ export interface Api */ readonly customComponents: CustomComponentsApi; + /** + * Allows modules to render components that are part of Element Web. + * @alpha + */ readonly builtins: BuiltinsApi; /** @@ -113,6 +117,10 @@ export interface Api */ readonly navigation: NavigationApi; + /** + * Allows modules to insert extra UI into Element Web. + * @alpha + */ readonly extras: ExtrasApi; /** diff --git a/packages/element-web-module-api/src/api/navigation.ts b/packages/element-web-module-api/src/api/navigation.ts index 063b6834..e5bef012 100644 --- a/packages/element-web-module-api/src/api/navigation.ts +++ b/packages/element-web-module-api/src/api/navigation.ts @@ -7,11 +7,16 @@ Please see LICENSE files in the repository root for full details. import { JSX } from "react"; +/** + * A function called to render a component when a user navigates to the corresponding + * location. Currently renders alongside just the SpacePanel. + * @alpha + */ export type LocationRenderFunction = () => JSX.Element; /** * API methods to navigate the application. - * @public + * @alpha */ export interface NavigationApi { /** From 8633ba0c4259929c482fb36befa4066d38a5a177 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 25 Sep 2025 11:57:13 +0100 Subject: [PATCH 03/12] New interface for adding space panel items --- .../element-web-module-api/src/api/extras.ts | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/element-web-module-api/src/api/extras.ts b/packages/element-web-module-api/src/api/extras.ts index da29a61a..b2d3155d 100644 --- a/packages/element-web-module-api/src/api/extras.ts +++ b/packages/element-web-module-api/src/api/extras.ts @@ -7,20 +7,31 @@ Please see LICENSE files in the repository root for full details. import { JSX } from "react"; -interface SpacePanelItemProps { - isPanelCollapsed: boolean; -} +/** + * Any kind of event that can trigger a button + * @alpha + */ +export type ButtonEvent = React.MouseEvent | React.KeyboardEvent | React.FormEvent; /** * The type of the function used to render a space panel item. * @alpha */ -export type SpacePanelItemRenderFunction = (props: SpacePanelItemProps) => JSX.Element; +export interface SpacePanelItemProps { + spaceKey?: string; + className?: string; + icon?: JSX.Element; + label: string; + contextMenuTooltip?: string; + style?: React.CSSProperties; + //notificationState?: NotificationState; + onClick?(ev?: ButtonEvent): void; +} /** * API for inserting extra UI into Element Web. * @alpha Subject to change. */ export interface ExtrasApi { - addSpacePanelItem(renderer: SpacePanelItemRenderFunction): void; + addSpacePanelItem(props: SpacePanelItemProps): void; } From 6732407e54a492b1c837f109effc598cf020ce29 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 25 Sep 2025 17:33:53 +0100 Subject: [PATCH 04/12] Tweak api so it can be called multiple times to update the space item's properties. --- .../element-web-module-api.api.md | 20 ++++++++++++++----- .../element-web-module-api/src/api/extras.ts | 20 +++++++++---------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 9b2234e3..cbe082c7 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -153,8 +153,7 @@ export interface DirectoryCustomisations { // @alpha export interface ExtrasApi { - // (undocumented) - addSpacePanelItem(renderer: SpacePanelItemRenderFunction): void; + setSpacePanelItem(spaceKey: string, props: SpacePanelItemProps): void; } // @public @@ -328,10 +327,21 @@ export interface RoomViewProps { // @alpha @deprecated (undocumented) export type RuntimeModuleConstructor = new (api: ModuleApi) => RuntimeModule; -// Warning: (ae-forgotten-export) The symbol "SpacePanelItemProps" needs to be exported by the entry point index.d.ts -// // @alpha -export type SpacePanelItemRenderFunction = (props: SpacePanelItemProps) => JSX.Element; +export interface SpacePanelItemProps { + // (undocumented) + className?: string; + // (undocumented) + contextMenuTooltip?: string; + // (undocumented) + icon?: JSX.Element; + // (undocumented) + label: string; + // (undocumented) + onSelected?(): void; + // (undocumented) + style?: React.CSSProperties; +} // @public export type Translations = Record | React.KeyboardEvent | React.FormEvent; - -/** - * The type of the function used to render a space panel item. + * Properties of an item added to the Space panel * @alpha */ export interface SpacePanelItemProps { - spaceKey?: string; className?: string; icon?: JSX.Element; label: string; contextMenuTooltip?: string; style?: React.CSSProperties; //notificationState?: NotificationState; - onClick?(ev?: ButtonEvent): void; + onSelected?(): void; } /** @@ -33,5 +26,12 @@ export interface SpacePanelItemProps { * @alpha Subject to change. */ export interface ExtrasApi { - addSpacePanelItem(props: SpacePanelItemProps): void; + /** + * Inserts an item into the space panel as if it were a space button, below + * buttons for other spaces. + * If called again with the same spaceKey, will update the existing item. + * @param spaceKey - A key to identify this space-like item. + * @param props - Properties of the item to add. + */ + setSpacePanelItem(spaceKey: string, props: SpacePanelItemProps): void; } From 79d1cfae2979fc654701e27fed799eb6abe60f80 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 17 Oct 2025 11:56:48 +0100 Subject: [PATCH 05/12] Tweak doc --- packages/element-web-module-api/src/api/builtins.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/element-web-module-api/src/api/builtins.ts b/packages/element-web-module-api/src/api/builtins.ts index 701ed1f6..ee75fad5 100644 --- a/packages/element-web-module-api/src/api/builtins.ts +++ b/packages/element-web-module-api/src/api/builtins.ts @@ -14,9 +14,10 @@ export interface RoomViewProps { } /** - * Exposes components that are part of Element Web to allow modules to render them - * as part of their custom components (because they can't import the components from - * Element Web since it would cause a dependency cycle) + * Exposes components and classes that are part of Element Web to allow modules to + * render the components as part of their custom components or use the classes + * (because they can't import the components from Element Web since it would cause + * a dependency cycle) * @alpha */ export interface BuiltinsApi { From 081c33bd7f48948cdfa0fa11a4960311786a4b28 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 17 Oct 2025 12:10:07 +0100 Subject: [PATCH 06/12] Add more docs --- .../element-web-module-api.api.md | 7 ------ .../src/api/builtins.ts | 7 ++++++ .../element-web-module-api/src/api/extras.ts | 24 ++++++++++++++++++- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index cbe082c7..c01f2e90 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -51,7 +51,6 @@ export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiEx // @alpha export interface BuiltinsApi { - // (undocumented) getRoomViewComponent(): React.ComponentType; } @@ -329,17 +328,11 @@ export type RuntimeModuleConstructor = new (api: ModuleApi) => RuntimeModule; // @alpha export interface SpacePanelItemProps { - // (undocumented) className?: string; - // (undocumented) contextMenuTooltip?: string; - // (undocumented) icon?: JSX.Element; - // (undocumented) label: string; - // (undocumented) onSelected?(): void; - // (undocumented) style?: React.CSSProperties; } diff --git a/packages/element-web-module-api/src/api/builtins.ts b/packages/element-web-module-api/src/api/builtins.ts index ee75fad5..68ab7a39 100644 --- a/packages/element-web-module-api/src/api/builtins.ts +++ b/packages/element-web-module-api/src/api/builtins.ts @@ -21,5 +21,12 @@ export interface RoomViewProps { * @alpha */ export interface BuiltinsApi { + /** + * Returns the RoomView component used by Element Web to render a room such that + * modules can render it as part of their own custom room views. + * + * @alpha + * @returns The RoomView component. + */ getRoomViewComponent(): React.ComponentType; } diff --git a/packages/element-web-module-api/src/api/extras.ts b/packages/element-web-module-api/src/api/extras.ts index 6da5aa78..ddef7b7c 100644 --- a/packages/element-web-module-api/src/api/extras.ts +++ b/packages/element-web-module-api/src/api/extras.ts @@ -12,12 +12,34 @@ import { JSX } from "react"; * @alpha */ export interface SpacePanelItemProps { + /** + * A CSS class name for the item + */ className?: string; + + /** + * An icon to show in the item + */ icon?: JSX.Element; + + /** + * The label to show in the item + */ label: string; + + /** + * A tooltip to show when hovering over the item + */ contextMenuTooltip?: string; + + /** + * Styles to apply to the item + */ style?: React.CSSProperties; - //notificationState?: NotificationState; + + /** + * Callback when the item is selected + */ onSelected?(): void; } From 91efe7ea7109da68722b2f8f79b1d074d22fd59a Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 17 Oct 2025 12:11:39 +0100 Subject: [PATCH 07/12] More doc --- packages/element-web-module-api/element-web-module-api.api.md | 1 - packages/element-web-module-api/src/api/builtins.ts | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index c01f2e90..38e1e073 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -319,7 +319,6 @@ export interface RoomListCustomisations { // @alpha export interface RoomViewProps { - // (undocumented) roomId?: string; } diff --git a/packages/element-web-module-api/src/api/builtins.ts b/packages/element-web-module-api/src/api/builtins.ts index 68ab7a39..99d60e03 100644 --- a/packages/element-web-module-api/src/api/builtins.ts +++ b/packages/element-web-module-api/src/api/builtins.ts @@ -10,6 +10,9 @@ Please see LICENSE files in the repository root for full details. * @alpha Subject to change. */ export interface RoomViewProps { + /** + * The ID of the room to render. + */ roomId?: string; } From d8df08959e75e8aa8717be25430f228fe27d8e89 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 17 Oct 2025 12:14:20 +0100 Subject: [PATCH 08/12] Fix public/alpha statuses --- .../element-web-module-api/element-web-module-api.api.md | 5 ++--- packages/element-web-module-api/src/api/navigation.ts | 8 +++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 38e1e073..d617845b 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -44,7 +44,6 @@ export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiEx // @alpha readonly extras: ExtrasApi; readonly i18n: I18nApi; - // Warning: (ae-incompatible-release-tags) The symbol "navigation" is marked as @public, but its signature references "NavigationApi" which is marked as @alpha readonly navigation: NavigationApi; readonly rootNode: HTMLElement; } @@ -288,9 +287,9 @@ export class ModuleLoader { start(): Promise; } -// @alpha +// @public export interface NavigationApi { - // (undocumented) + // @alpha registerLocationRenderer(path: string, renderer: LocationRenderFunction): void; toMatrixToLink(link: string, join?: boolean): Promise; } diff --git a/packages/element-web-module-api/src/api/navigation.ts b/packages/element-web-module-api/src/api/navigation.ts index e5bef012..f7d60b42 100644 --- a/packages/element-web-module-api/src/api/navigation.ts +++ b/packages/element-web-module-api/src/api/navigation.ts @@ -16,7 +16,7 @@ export type LocationRenderFunction = () => JSX.Element; /** * API methods to navigate the application. - * @alpha + * @public */ export interface NavigationApi { /** @@ -26,5 +26,11 @@ export interface NavigationApi { */ toMatrixToLink(link: string, join?: boolean): Promise; + /** + * Register a renderer for a given location path. + * @param path - The location path to register the renderer for. + * @param renderer - The function that will render the component for the location. + * @alpha + */ registerLocationRenderer(path: string, renderer: LocationRenderFunction): void; } From 55329508ac4a7330610732f78a11417699aa3716 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 20 Oct 2025 16:34:58 +0100 Subject: [PATCH 09/12] Rename contextMenuTooltip to just tooltip because it has nothing to do with context menus afaics --- packages/element-web-module-api/src/api/extras.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/element-web-module-api/src/api/extras.ts b/packages/element-web-module-api/src/api/extras.ts index ddef7b7c..a626f674 100644 --- a/packages/element-web-module-api/src/api/extras.ts +++ b/packages/element-web-module-api/src/api/extras.ts @@ -30,7 +30,7 @@ export interface SpacePanelItemProps { /** * A tooltip to show when hovering over the item */ - contextMenuTooltip?: string; + tooltip?: string; /** * Styles to apply to the item From a733ea58b40885790224cee1dda038a7fd4a4396 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 20 Oct 2025 16:36:48 +0100 Subject: [PATCH 10/12] Update docs --- packages/element-web-module-api/element-web-module-api.api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index d617845b..54ae469c 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -327,11 +327,11 @@ export type RuntimeModuleConstructor = new (api: ModuleApi) => RuntimeModule; // @alpha export interface SpacePanelItemProps { className?: string; - contextMenuTooltip?: string; icon?: JSX.Element; label: string; onSelected?(): void; style?: React.CSSProperties; + tooltip?: string; } // @public From d46ca1e066a4c3b37aca6edb35ec1ea54fcf92bc Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 20 Oct 2025 17:33:09 +0100 Subject: [PATCH 11/12] docs --- packages/element-web-module-api/src/api/extras.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/element-web-module-api/src/api/extras.ts b/packages/element-web-module-api/src/api/extras.ts index a626f674..e1004ccc 100644 --- a/packages/element-web-module-api/src/api/extras.ts +++ b/packages/element-web-module-api/src/api/extras.ts @@ -18,7 +18,7 @@ export interface SpacePanelItemProps { className?: string; /** - * An icon to show in the item + * An icon to show in the item. If not provided, no icon will be shown. */ icon?: JSX.Element; From 1d5a6db5d90c885deb1b11992179df6581427bf0 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 20 Oct 2025 17:44:15 +0100 Subject: [PATCH 12/12] Make onSelected non-optional --- packages/element-web-module-api/element-web-module-api.api.md | 2 +- packages/element-web-module-api/src/api/extras.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 54ae469c..2d341fde 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -329,7 +329,7 @@ export interface SpacePanelItemProps { className?: string; icon?: JSX.Element; label: string; - onSelected?(): void; + onSelected: () => void; style?: React.CSSProperties; tooltip?: string; } diff --git a/packages/element-web-module-api/src/api/extras.ts b/packages/element-web-module-api/src/api/extras.ts index e1004ccc..1c8d355b 100644 --- a/packages/element-web-module-api/src/api/extras.ts +++ b/packages/element-web-module-api/src/api/extras.ts @@ -40,7 +40,7 @@ export interface SpacePanelItemProps { /** * Callback when the item is selected */ - onSelected?(): void; + onSelected: () => void; } /**