diff --git a/src/lib/components/chat/FileNav.svelte b/src/lib/components/chat/FileNav.svelte
index 988c92669c..2a14312d45 100644
--- a/src/lib/components/chat/FileNav.svelte
+++ b/src/lib/components/chat/FileNav.svelte
@@ -293,7 +293,6 @@
// ── File preview management ──────────────────────────────────────────
const clearFilePreview = () => {
fileContent = null;
- filePreviewRef?.disposePanzoom();
if (fileImageUrl) {
URL.revokeObjectURL(fileImageUrl);
fileImageUrl = null;
diff --git a/src/lib/components/chat/FileNav/FilePreview.svelte b/src/lib/components/chat/FileNav/FilePreview.svelte
index 0a7250c3ed..0bfa4fe504 100644
--- a/src/lib/components/chat/FileNav/FilePreview.svelte
+++ b/src/lib/components/chat/FileNav/FilePreview.svelte
@@ -1,6 +1,5 @@
{:else if fileImageUrl !== null}
-
+
-
+
{:else if fileVideoUrl !== null}
@@ -343,9 +323,10 @@
{:else if fileOfficeSlides !== null && fileOfficeSlides.length > 0}
-

-
+
{#if fileOfficeSlides.length > 1}
{
- pzInstance = panzoom(node, {
- bounds: true,
- boundsPadding: 0.1,
- zoomSpeed: 0.065
- });
- };
-
+ let panzoomRef: PanzoomContainer;
const resetImageView = () => {
- if (pzInstance) {
- pzInstance.moveTo(0, 0);
- pzInstance.zoomAbs(0, 0, 1);
- }
+ panzoomRef?.reset();
};
$: isPDF =
@@ -266,10 +254,6 @@
if (item?.context === 'full') {
enableFullContent = true;
}
-
- return () => {
- pzInstance?.dispose();
- };
});
@@ -445,7 +429,7 @@
-
+
-
+
{:else if selectedTab === ''}
{#if item?.file?.data}
diff --git a/src/lib/components/common/ImagePreview.svelte b/src/lib/components/common/ImagePreview.svelte
index 17d9a93a1e..9cb36dc160 100644
--- a/src/lib/components/common/ImagePreview.svelte
+++ b/src/lib/components/common/ImagePreview.svelte
@@ -1,10 +1,10 @@
@@ -181,14 +160,13 @@
-
+
-
+
{/if}
diff --git a/src/lib/components/common/PanzoomContainer.svelte b/src/lib/components/common/PanzoomContainer.svelte
new file mode 100644
index 0000000000..50aec0709d
--- /dev/null
+++ b/src/lib/components/common/PanzoomContainer.svelte
@@ -0,0 +1,33 @@
+
+
+
+
+
diff --git a/src/lib/components/common/SVGPanZoom.svelte b/src/lib/components/common/SVGPanZoom.svelte
index aaeb26dac9..307ddda21e 100644
--- a/src/lib/components/common/SVGPanZoom.svelte
+++ b/src/lib/components/common/SVGPanZoom.svelte
@@ -4,15 +4,14 @@
import { toast } from 'svelte-sonner';
- import panzoom, { type PanZoom } from 'panzoom';
import DOMPurify from 'dompurify';
- import { onMount, getContext } from 'svelte';
+ import { getContext } from 'svelte';
const i18n = getContext('i18n');
import { copyToClipboard } from '$lib/utils';
- import DocumentDuplicate from '../icons/DocumentDuplicate.svelte';
+ import PanzoomContainer from './PanzoomContainer.svelte';
import Tooltip from './Tooltip.svelte';
import Clipboard from '../icons/Clipboard.svelte';
import Reset from '../icons/Reset.svelte';
@@ -22,23 +21,9 @@
export let svg = '';
export let content = '';
- let instance: PanZoom;
-
- let sceneParentElement: HTMLElement;
- let sceneElement: HTMLElement;
-
- $: if (sceneElement) {
- instance = panzoom(sceneElement, {
- bounds: true,
- boundsPadding: 0.1,
-
- zoomSpeed: 0.065
- });
- }
+ let panzoomRef: PanzoomContainer;
const resetPanZoomViewport = () => {
- instance.moveTo(0, 0);
- instance.zoomAbs(0, 0, 1);
- console.log(instance.getTransform());
+ panzoomRef?.reset();
};
const downloadAsSVG = () => {
@@ -47,8 +32,11 @@
};
-
-
+
+
{@html DOMPurify.sanitize(svg, {
USE_PROFILES: { svg: true, svgFilters: true }, // allow
+
{#if content}