diff --git a/apps/matrix/apps/web/src/app.css b/apps/matrix/apps/web/src/app.css index 0d82a0a39..fa4d24d8d 100644 --- a/apps/matrix/apps/web/src/app.css +++ b/apps/matrix/apps/web/src/app.css @@ -5,6 +5,8 @@ @source '../../../packages/shared/src'; @source '../../../../../packages/shared-ui/src'; @source '../../../../../packages/shared-icons/src'; +@source '../../../../../packages/shared-auth-ui/src'; +@source '../../../../../packages/shared-theme-ui/src'; @layer base { :root { @@ -20,6 +22,22 @@ } } +/* Fade-in animation */ +@keyframes fade-in { + from { + opacity: 0; + transform: translateY(8px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-fade-in { + animation: fade-in 0.3s ease-out; +} + /* Custom scrollbar for chat */ .chat-scrollbar::-webkit-scrollbar { width: 6px; @@ -30,10 +48,32 @@ } .chat-scrollbar::-webkit-scrollbar-thumb { - background: oklch(var(--bc) / 0.2); + background: rgba(0, 0, 0, 0.15); border-radius: 3px; } .chat-scrollbar::-webkit-scrollbar-thumb:hover { - background: oklch(var(--bc) / 0.3); + background: rgba(0, 0, 0, 0.25); +} + +.dark .chat-scrollbar::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.15); +} + +.dark .chat-scrollbar::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.25); +} + +/* Glassmorphic utilities */ +.glass { + @apply bg-white/80 dark:bg-white/10 backdrop-blur-xl border border-black/10 dark:border-white/20; +} + +.glass-card { + @apply bg-white/60 dark:bg-white/5 backdrop-blur-sm border border-black/10 dark:border-white/10; +} + +.glass-button { + @apply bg-white/90 dark:bg-white/20 backdrop-blur-sm border border-black/10 dark:border-white/20 + hover:bg-white dark:hover:bg-white/30 hover:shadow-lg transition-all duration-200; } diff --git a/apps/matrix/apps/web/src/lib/components/chat/Message.svelte b/apps/matrix/apps/web/src/lib/components/chat/Message.svelte index 1a1719a5e..aab60ca5a 100644 --- a/apps/matrix/apps/web/src/lib/components/chat/Message.svelte +++ b/apps/matrix/apps/web/src/lib/components/chat/Message.svelte @@ -101,80 +101,75 @@
(showActions = true)} onmouseleave={() => (showActions = false)} > - -
- {#if showAvatar && !message.isOwn} -
- {initials} -
- {/if} -
+ + {#if showAvatar} +
+ {initials} +
+ {:else} +
+ {/if} - -
- {#if showAvatar} -
- - {message.isOwn ? 'Du' : message.senderName} - - {formattedTime} - {#if message.edited} - (bearbeitet) - {/if} - {#if showEncryptionBadge} - - {/if} -
+ +
+ + {#if showAvatar && !message.isOwn} + {message.senderName} {/if} {#if message.replyTo && message.replyToBody}
- {message.replyToBody} + {message.replyToBody}
{/if} - -
+ +
{#if message.redacted} -

Nachricht wurde gelöscht

+

Nachricht wurde gelöscht

{:else if isDecryptionError} -
+
- - Nachricht kann nicht entschlüsselt werden. Möglicherweise fehlen Schlüssel. - + Kann nicht entschlüsselt werden
{:else if message.type === 'm.image' && thumbnailUrl} -
+
{#if imageLoading} -
- +
+
{/if} {#if imageError} -
-

Bild konnte nicht geladen werden

+
+

Bild konnte nicht geladen werden

{:else} {message.body} (imageLoading = false)} onerror={() => { @@ -187,17 +182,19 @@
{:else if message.type === 'm.video' && thumbnailUrl} -
+
- {message.body} + {message.body}
{#if message.media?.duration} - + {Math.floor(message.media.duration / 60)}:{(message.media.duration % 60) .toString() .padStart(2, '0')} @@ -210,59 +207,92 @@ href={mediaUrl} target="_blank" rel="noopener noreferrer" - class="flex items-center gap-3 rounded-lg border border-border bg-muted p-3 transition-colors hover:bg-surface-hover" + class="flex items-center gap-3 rounded-lg {message.isOwn + ? 'bg-white/20 hover:bg-white/30' + : 'bg-black/5 dark:bg-white/5 hover:bg-black/10 dark:hover:bg-white/10'} p-3 transition-colors" > -
- +
+
-

{message.media?.filename || message.body}

-

+

{message.media?.filename || message.body}

+

{formatFileSize(message.media?.size)} {#if message.media?.mimetype} • {message.media.mimetype.split('/')[1]?.toUpperCase()} {/if}

- + {:else if message.type === 'm.emote'} -

* {message.senderName} {message.body}

+

+ * {message.senderName} + {message.body} +

{:else if message.type === 'm.notice'} -

{message.body}

+

+ {message.body} +

{:else} -

{message.body}

+

{message.body}

{/if} - - {#if !showAvatar} - - {formattedTime} - {/if} -
-
- - {#if showActions && !message.redacted} -
- - {#if message.isOwn && message.type === 'm.text'} - - {/if} - {#if message.isOwn} - + {#if showEncryptionBadge} + {/if}
- {/if} + + +
+ {formattedTime} +
+ + + {#if showActions && !message.redacted} +
+ + {#if message.isOwn && message.type === 'm.text'} + + {/if} + {#if message.isOwn} + + {/if} +
+ {/if} +
diff --git a/apps/matrix/apps/web/src/lib/components/chat/MessageInput.svelte b/apps/matrix/apps/web/src/lib/components/chat/MessageInput.svelte index cc3e7ddb9..ace6face0 100644 --- a/apps/matrix/apps/web/src/lib/components/chat/MessageInput.svelte +++ b/apps/matrix/apps/web/src/lib/components/chat/MessageInput.svelte @@ -137,23 +137,23 @@ } -
+
{#if replyTo || editMessage} -
+
{#if editMessage} -

Nachricht bearbeiten

+

Nachricht bearbeiten

{editMessage.body}

{:else if replyTo} -

+

Antwort auf {replyTo.senderName}

{replyTo.body}

{/if}
-
+ + +

+ {#if editMessage} + Enter zum Speichern, Escape zum Abbrechen + {:else} + Enter zum Senden, Shift+Enter für neue Zeile + {/if} +

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 25131e09d..7280baeb2 100644 --- a/apps/matrix/apps/web/src/lib/components/chat/RoomHeader.svelte +++ b/apps/matrix/apps/web/src/lib/components/chat/RoomHeader.svelte @@ -41,38 +41,44 @@ {#if room} -
+
-
{#if room.avatar} {room.name} {:else} - {room.name.charAt(0).toUpperCase()} + {room.name.charAt(0).toUpperCase()} {/if}
-

{room.name}

+

{room.name}

{#if room.isEncrypted} {#if encryptionStatus.allDevicesVerified}
- +
{:else}
- +
{/if} {:else} @@ -95,14 +101,26 @@
- - -
diff --git a/apps/matrix/apps/web/src/lib/components/chat/RoomItem.svelte b/apps/matrix/apps/web/src/lib/components/chat/RoomItem.svelte index 961f869b7..8850bdfc3 100644 --- a/apps/matrix/apps/web/src/lib/components/chat/RoomItem.svelte +++ b/apps/matrix/apps/web/src/lib/components/chat/RoomItem.svelte @@ -29,44 +29,44 @@ -
-
+
{#each filteredRooms as room (room.id)} matrixStore.selectRoom(room.id)} /> {:else} -
+
{#if search} - -

No rooms match "{search}"

+ +

Keine Ergebnisse für "{search}"

{:else} - -

No {showDMs ? 'direct messages' : 'rooms'} yet

+ +

Noch keine {showDMs ? 'Direktnachrichten' : 'Räume'}

{/if}
{/each}
-
- diff --git a/apps/matrix/apps/web/src/routes/(app)/chat/+page.svelte b/apps/matrix/apps/web/src/routes/(app)/chat/+page.svelte index 348d9037d..e31b5ad7d 100644 --- a/apps/matrix/apps/web/src/routes/(app)/chat/+page.svelte +++ b/apps/matrix/apps/web/src/routes/(app)/chat/+page.svelte @@ -38,43 +38,53 @@ } -
+
-
+
{#if matrixStore.currentRoom} (showRoomSettings = true)} /> @@ -120,29 +134,34 @@ /> {:else} -
- +
+
+ +
-

Willkommen bei Mana Matrix

-

+

Willkommen bei Mana Matrix

+

Wähle eine Unterhaltung aus der Seitenleiste oder starte einen neuen Chat

-
-
-

{matrixStore.rooms.length}

-

Räume

+
+

{matrixStore.rooms.length}

+

Räume

-
-

{matrixStore.totalUnreadCount}

-

Ungelesen

+
+

{matrixStore.totalUnreadCount}

+

Ungelesen