diff --git a/apps/web/src/pages/tool-page.tsx b/apps/web/src/pages/tool-page.tsx index 25d47e99..46658560 100644 --- a/apps/web/src/pages/tool-page.tsx +++ b/apps/web/src/pages/tool-page.tsx @@ -27,8 +27,14 @@ import { useMobile } from "@/hooks/use-mobile"; import { formatFileSize } from "@/lib/download"; import { ICON_MAP } from "@/lib/icon-map"; import { getToolRegistryEntry } from "@/lib/tool-registry"; +import { useBase64Store } from "@/stores/base64-store"; +import { useCollageStore } from "@/stores/collage-store"; +import { useDuplicateStore } from "@/stores/duplicate-store"; import { useFeaturesStore } from "@/stores/features-store"; import { useFileStore } from "@/stores/file-store"; +import { usePdfToImageStore } from "@/stores/pdf-to-image-store"; +import { useQrStore } from "@/stores/qr-store"; +import { useSplitStore } from "@/stores/split-store"; /** Formats that browsers can render in tags. */ const BROWSER_PREVIEWABLE_EXTS = new Set([ @@ -202,11 +208,30 @@ export function ToolPage() { // Center of the painted mask as a 0-100 percentage — used to init the slider at the right spot const [eraserSliderInitPos, setEraserSliderInitPos] = useState(null); - // Reset crop state when the image changes + // biome-ignore lint/correctness/useExhaustiveDependencies: toolId triggers intentional reset on tool navigation useEffect(() => { + useFileStore.getState().undoProcessing(); + + useBase64Store.getState().reset(); + useCollageStore.getState().reset(); + useDuplicateStore.getState().reset(); + usePdfToImageStore.getState().reset(); + useQrStore.getState().reset(); + useSplitStore.getState().reset(); + + setPreviewTransform(null); + setPreviewFilter(""); + setImageWrapperStyle(null); + setBgPreview(null); setCropCrop({ unit: "%", x: 0, y: 0, width: 100, height: 100 }); + setCropAspect(undefined); + setCropShowGrid(true); setCropImgDimensions(null); - }, []); + setEraserHasStrokes(false); + setEraserBrushSize(30); + setEraserSliderInitPos(null); + setMobileSettingsOpen(true); + }, [toolId]); const handleFiles = useCallback( (newFiles: File[]) => {