From d6724e2552d14140017b194e7020252bda73751a Mon Sep 17 00:00:00 2001 From: leimingsheng Date: Mon, 21 Jul 2025 19:15:52 +0800 Subject: feat: init timeline zoom --- apps/web/src/hooks/use-timeline-zoom-actions.ts | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 apps/web/src/hooks/use-timeline-zoom-actions.ts (limited to 'apps/web/src/hooks/use-timeline-zoom-actions.ts') diff --git a/apps/web/src/hooks/use-timeline-zoom-actions.ts b/apps/web/src/hooks/use-timeline-zoom-actions.ts new file mode 100644 index 00000000..85003684 --- /dev/null +++ b/apps/web/src/hooks/use-timeline-zoom-actions.ts @@ -0,0 +1,37 @@ +"use client"; + +import { useActionHandler } from "@/constants/actions"; + +interface UseTimelineZoomActionsProps { + zoomLevel: number; + setZoomLevel: (zoomLevel: number | ((prev: number) => number)) => void; + onFitToWindow?: () => void; +} + +export function useTimelineZoomActions({ + zoomLevel, + setZoomLevel, + onFitToWindow, +}: UseTimelineZoomActionsProps) { + // Zoom in action + useActionHandler("zoom-in", () => { + setZoomLevel((prev) => Math.min(5, prev + 0.2)); + }); + + // Zoom out action + useActionHandler("zoom-out", () => { + setZoomLevel((prev) => Math.max(0.1, prev - 0.2)); + }); + + // Reset zoom action + useActionHandler("zoom-reset", () => { + setZoomLevel(1); + }); + + // Fit to window action + useActionHandler("zoom-fit", () => { + if (onFitToWindow) { + onFitToWindow(); + } + }); +} -- cgit v1.3.1