diff --git a/apps/matrix/apps/web/src/lib/components/call/CallView.svelte b/apps/matrix/apps/web/src/lib/components/call/CallView.svelte new file mode 100644 index 000000000..c23e14ab9 --- /dev/null +++ b/apps/matrix/apps/web/src/lib/components/call/CallView.svelte @@ -0,0 +1,203 @@ + + +
+ +
+
+ {#if call.opponentAvatar} + {call.opponentName} + {:else} +
+ +
+ {/if} +
+

{call.opponentName || 'Unbekannt'}

+

+ {call.type === 'video' ? 'Videoanruf' : 'Sprachanruf'} · {getStateText(call.state)} +

+
+
+
+ + +
+ {#if call.type === 'video'} + + + + + +
+ +
+ {:else} + +
+ {#if call.opponentAvatar} + {call.opponentName} + {:else} +
+ +
+ {/if} +

{call.opponentName || 'Unbekannt'}

+

{getStateText(call.state)}

+
+ {/if} +
+ + +
+ + + + + {#if call.type === 'video'} + + {/if} + + + +
+
diff --git a/apps/matrix/apps/web/src/lib/components/call/IncomingCallDialog.svelte b/apps/matrix/apps/web/src/lib/components/call/IncomingCallDialog.svelte new file mode 100644 index 000000000..ac21425c4 --- /dev/null +++ b/apps/matrix/apps/web/src/lib/components/call/IncomingCallDialog.svelte @@ -0,0 +1,123 @@ + + +
+
+ +
+ {#if call.opponentAvatar} + {call.opponentName} + {:else} +
+ +
+ {/if} +

{call.opponentName || 'Unbekannt'}

+

+ {call.type === 'video' ? 'Eingehender Videoanruf' : 'Eingehender Sprachanruf'} +

+
+ + +
+ {#if call.type === 'video'} + + Video + {:else} + + Audio + {/if} +
+ + +
+ + + + + +
+
+
+ + diff --git a/apps/matrix/apps/web/src/lib/components/call/index.ts b/apps/matrix/apps/web/src/lib/components/call/index.ts new file mode 100644 index 000000000..2245f06a3 --- /dev/null +++ b/apps/matrix/apps/web/src/lib/components/call/index.ts @@ -0,0 +1,2 @@ +export { default as CallView } from './CallView.svelte'; +export { default as IncomingCallDialog } from './IncomingCallDialog.svelte'; diff --git a/apps/matrix/apps/web/src/lib/components/chat/RoomHeader.svelte b/apps/matrix/apps/web/src/lib/components/chat/RoomHeader.svelte index 0176cb838..d97ff5e83 100644 --- a/apps/matrix/apps/web/src/lib/components/chat/RoomHeader.svelte +++ b/apps/matrix/apps/web/src/lib/components/chat/RoomHeader.svelte @@ -16,9 +16,14 @@ onMenuClick?: () => void; onInfoClick?: () => void; onSearchClick?: () => void; + onVoiceCall?: () => void; + onVideoCall?: () => void; } - let { onMenuClick, onInfoClick, onSearchClick }: Props = $props(); + let { onMenuClick, onInfoClick, onSearchClick, onVoiceCall, onVideoCall }: Props = $props(); + + // Check if calls are possible (DMs only for now) + let canCall = $derived(matrixStore.currentSimpleRoom?.isDirect ?? false); let room = $derived(matrixStore.currentSimpleRoom); let cryptoReady = $derived(matrixStore.cryptoReady); @@ -111,18 +116,22 @@