From 6f5f1e1182725ba9ba477cd60a0d7bd6c28124de Mon Sep 17 00:00:00 2001 From: Werner Bihl Date: Sun, 19 Apr 2026 23:41:07 +0200 Subject: [PATCH 01/12] feat: implement map resizing functionality with new hooks and controls Co-authored-by: Copilot --- .../editor/MapCanvas/MapResizeControls.tsx | 183 ++++++++++ src/components/editor/MapCanvas/index.tsx | 323 ++---------------- .../editor/MapCanvas/use-map-resize.ts | 146 ++++++++ src/types/map-canvas.ts | 43 ++- 4 files changed, 401 insertions(+), 294 deletions(-) create mode 100644 src/components/editor/MapCanvas/MapResizeControls.tsx create mode 100644 src/components/editor/MapCanvas/use-map-resize.ts diff --git a/src/components/editor/MapCanvas/MapResizeControls.tsx b/src/components/editor/MapCanvas/MapResizeControls.tsx new file mode 100644 index 0000000..c6e598a --- /dev/null +++ b/src/components/editor/MapCanvas/MapResizeControls.tsx @@ -0,0 +1,183 @@ +import type { MapResizeControlsProps } from "@/types/map-canvas"; +import { RESIZE_CURSORS } from "./resize-utils"; + +const MAP_RESIZE_GUTTER = 14; +const MAP_RESIZE_RAIL_SIZE = 10; +const MAP_RESIZE_BADGE_OFFSET = 6; + +export function MapResizeControls({ + canvasW, + canvasH, + previewWidth, + previewHeight, + activeHandle, + hoveredHandle, + mapResizePreview, + isResizing, + onHoverHandleChange, + onBeginMapResize, +}: MapResizeControlsProps) { + const sizeLabel = `${previewWidth} × ${previewHeight}`; + const rightGripActive = activeHandle === "e" || activeHandle === "se"; + const bottomGripActive = activeHandle === "s" || activeHandle === "se"; + const rightGripHovered = hoveredHandle === "e" || hoveredHandle === "se"; + const bottomGripHovered = hoveredHandle === "s" || hoveredHandle === "se"; + const cornerGripActive = activeHandle === "se"; + const cornerGripHovered = hoveredHandle === "se"; + + return ( + <> +