+`;
diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx
index 89212b0071..e3bed927c6 100644
--- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx
+++ b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.stories.tsx
@@ -8,11 +8,12 @@
import React from "react";
import type { Meta, StoryObj } from "@storybook/react-vite";
-import { CallStartedTileView, type CallStartedTileViewSnapshot, CallType } from "./CallStartedTileView";
+import { CallStartedTileView } from "./CallStartedTileView";
import { useMockedViewModel } from "../../../../../core/viewmodel";
import { withViewDocs } from "../../../../../../.storybook/withViewDocs";
+import { CallType, type CallTileViewSnapshot } from "../common/types";
-const CallStartedTileViewWrapperImpl = ({ ...rest }: CallStartedTileViewSnapshot): React.ReactNode => {
+const CallStartedTileViewWrapperImpl = ({ ...rest }: CallTileViewSnapshot): React.ReactNode => {
const vm = useMockedViewModel(rest, {});
return ;
};
diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx
index 53e4619aee..a6c2a5fdae 100644
--- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx
+++ b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.tsx
@@ -11,35 +11,11 @@ import classnames from "classnames";
import { useViewModel, type ViewModel } from "../../../../../core/viewmodel";
import { Flex } from "../../../../../core/utils/Flex";
-import styles from "./CallStartedTileView.module.css";
+import styles from "../common/CallTileView.module.css";
import { useI18n } from "../../../../../core/i18n/i18nContext";
+import { type CallTileViewSnapshot, CallType } from "../common/types";
-/**
- * Represents whether a call is a voice call or video call.
- */
-export const enum CallType {
- /**
- * This is a voice call.
- */
- Voice = "voice",
- /**
- * This is a video call.
- */
- Video = "video",
-}
-
-export type CallStartedTileViewSnapshot = {
- /**
- * What type of call this tile needs to render for.
- */
- type: CallType;
- /**
- * Time when this call was started.
- */
- timestamp: string;
-};
-
-export type CallStartedTileViewModel = ViewModel;
+export type CallStartedTileViewModel = ViewModel;
export interface CallStartedTileViewProps {
vm: CallStartedTileViewModel;
diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap
index eb67bd154a..83ed1ca614 100644
--- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap
+++ b/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/__snapshots__/CallStartedTileView.test.tsx.snap
@@ -3,11 +3,11 @@
exports[`CallStartedTileView > renders the tile > video call 1`] = `
Video call
12:36
@@ -35,11 +35,11 @@ exports[`CallStartedTileView > renders the tile > video call 1`] = `
exports[`CallStartedTileView > renders the tile > voice call 1`] = `
Voice call
12:36
diff --git a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.module.css b/packages/shared-components/src/room/timeline/event-tile/call/common/CallTileView.module.css
similarity index 97%
rename from packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.module.css
rename to packages/shared-components/src/room/timeline/event-tile/call/common/CallTileView.module.css
index c7b03256f1..94a1287e80 100644
--- a/packages/shared-components/src/room/timeline/event-tile/call/CallStartedTile/CallStartedTileView.module.css
+++ b/packages/shared-components/src/room/timeline/event-tile/call/common/CallTileView.module.css
@@ -13,6 +13,7 @@
border-radius: var(--cpd-space-2x);
padding: var(--cpd-space-2x) var(--cpd-space-3x);
box-sizing: border-box;
+ margin: 10px 0;
}
.title {
diff --git a/packages/shared-components/src/room/timeline/event-tile/call/common/types.ts b/packages/shared-components/src/room/timeline/event-tile/call/common/types.ts
new file mode 100644
index 0000000000..087c3b45bf
--- /dev/null
+++ b/packages/shared-components/src/room/timeline/event-tile/call/common/types.ts
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2026 Element Creations Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
+ */
+
+/**
+ * Represents whether a call is a voice call or video call.
+ */
+export const enum CallType {
+ /**
+ * This is a voice call.
+ */
+ Voice = "voice",
+ /**
+ * This is a video call.
+ */
+ Video = "video",
+}
+
+/**
+ * The snapshot that both the call started and call declined tiles expect.
+ */
+export type CallTileViewSnapshot = {
+ /**
+ * What type of call this tile needs to render for.
+ */
+ type: CallType;
+ /**
+ * Time when this call was started.
+ */
+ timestamp: string;
+ /**
+ * Whether this call was declined by our user.
+ * Undefined if not rendering a declined call tile.
+ */
+ isCallDeclinedByUs?: boolean;
+};
diff --git a/packages/shared-components/src/room/timeline/event-tile/call/index.ts b/packages/shared-components/src/room/timeline/event-tile/call/index.ts
index fc4fb78c6f..0cca79e866 100644
--- a/packages/shared-components/src/room/timeline/event-tile/call/index.ts
+++ b/packages/shared-components/src/room/timeline/event-tile/call/index.ts
@@ -6,3 +6,5 @@
*/
export * from "./CallStartedTile/CallStartedTileView";
+export * from "./CallDeclinedTile/CallDeclinedTileView";
+export * from "./common/types";