From a0f39302919fbacf7a0d407f01b1a50413ea6f70 Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Mon, 02 Mar 2026 23:15:13 +0100
Subject: [PATCH] feat: on-device speech recognition, navigation screen, session picker
---
components/chat/MessageBubble.tsx | 29 +++++++++++++++++++++++++++--
1 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/components/chat/MessageBubble.tsx b/components/chat/MessageBubble.tsx
index e7fbbd8..fd8c0b6 100644
--- a/components/chat/MessageBubble.tsx
+++ b/components/chat/MessageBubble.tsx
@@ -1,5 +1,5 @@
import React, { useCallback, useState } from "react";
-import { Pressable, Text, View } from "react-native";
+import { Image, Pressable, Text, View } from "react-native";
import { Message } from "../../types";
import { playAudio, stopPlayback } from "../../services/audio";
@@ -57,7 +57,32 @@
: "bg-pai-surface rounded-tl-sm"
}`}
>
- {message.type === "voice" ? (
+ {message.type === "image" && message.imageBase64 ? (
+ /* Image message */
+ <View>
+ <Image
+ source={{ uri: `data:image/png;base64,${message.imageBase64}` }}
+ style={{
+ width: 260,
+ height: 180,
+ borderRadius: 10,
+ backgroundColor: "#14141F",
+ }}
+ resizeMode="contain"
+ />
+ {message.content ? (
+ <Text
+ style={{
+ color: isUser ? "#FFF" : "#9898B0",
+ fontSize: 12,
+ marginTop: 4,
+ }}
+ >
+ {message.content}
+ </Text>
+ ) : null}
+ </View>
+ ) : message.type === "voice" ? (
<Pressable
onPress={handleVoicePress}
className="flex-row items-center gap-3"
--
Gitblit v1.3.1