diff --git a/src/lib/components/chat/Messages/Message.svelte b/src/lib/components/chat/Messages/Message.svelte
index 9d1bb0672c..97c8cd69a4 100644
--- a/src/lib/components/chat/Messages/Message.svelte
+++ b/src/lib/components/chat/Messages/Message.svelte
@@ -49,16 +49,20 @@
export let topPadding = false;
export let onInsertToNote: ((content: string) => void) | null = null;
- // Safari's content-visibility implementation has paint bugs that leave
+ // WebKit's content-visibility implementation has paint bugs that leave
// on-screen messages blank (#26712), so skip virtualization there
- const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
+ // iOS WebViews and home screen apps carry no Safari token, hence the vendor check
+ const isWebKit =
+ navigator.vendor === 'Apple Computer, Inc.' ||
+ /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
{#if history.messages[messageId]}
{#if history.messages[messageId].role === 'user'}
@@ -154,7 +158,7 @@
/* Browser-native virtualization: skip rendering of off-screen messages
without destroying their component trees. Replaces the JS-based
culling that caused catastrophic mount/destroy thrashing. */
- .message-listitem {
+ .message-virtualized {
content-visibility: auto;
contain-intrinsic-size: auto 150px;
}
diff --git a/src/lib/components/layout/Navbar/Menu.svelte b/src/lib/components/layout/Navbar/Menu.svelte
index f4f03052d2..d862580ab5 100644
--- a/src/lib/components/layout/Navbar/Menu.svelte
+++ b/src/lib/components/layout/Navbar/Menu.svelte
@@ -105,7 +105,7 @@
document.body.appendChild(clonedElement);
// Override content-visibility so html2canvas can capture all messages
- clonedElement.querySelectorAll('.message-listitem').forEach((el) => {
+ clonedElement.querySelectorAll('.message-virtualized').forEach((el) => {
el.style.contentVisibility = 'visible';
});
diff --git a/src/lib/components/layout/Sidebar/ChatMenu.svelte b/src/lib/components/layout/Sidebar/ChatMenu.svelte
index c591f46e07..17e8cc4403 100644
--- a/src/lib/components/layout/Sidebar/ChatMenu.svelte
+++ b/src/lib/components/layout/Sidebar/ChatMenu.svelte
@@ -120,7 +120,7 @@
document.body.appendChild(clonedElement);
// Override content-visibility so html2canvas can capture all messages
- clonedElement.querySelectorAll('.message-listitem').forEach((el) => {
+ clonedElement.querySelectorAll('.message-virtualized').forEach((el) => {
el.style.contentVisibility = 'visible';
});