diff --git a/src/pages/editor/components/EditorCanvas.tsx b/src/pages/editor/components/EditorCanvas.tsx
index e1db2d8..02d11bc 100644
--- a/src/pages/editor/components/EditorCanvas.tsx
+++ b/src/pages/editor/components/EditorCanvas.tsx
@@ -1,8 +1,7 @@
import { useEffect, useRef } from "react";
-import { Stage, Layer, Transformer } from "react-konva";
+import { Stage, Layer, Transformer, Rect } from "react-konva";
import Konva from "konva";
import { useEditorStore } from "../store/editorStore";
-import { clx } from "@/helpers/utils";
import { useDrawingHandlers } from "./canvas/useDrawingHandlers";
import { useStageSize } from "./canvas/useStageSize";
import ObjectRenderer from "./canvas/ObjectRenderer";
@@ -106,7 +105,7 @@ const EditorCanvas = () => {
// Use a small delay to ensure the node is mounted (especially for images that need to load)
const timeoutId = setTimeout(() => {
if (!layerRef.current || !transformerRef.current) return;
-
+
const node = layerRef.current.findOne(`#${selectedObjectId}`);
if (node && transformerRef.current) {
transformerRef.current.nodes([node]);
@@ -153,67 +152,76 @@ const EditorCanvas = () => {
return (
-
-
- {objects.map((obj) => (
-
+
+
+
- ))}
- {selectedObjectId && (() => {
- const selectedObject = objects.find(obj => obj.id === selectedObjectId);
- const isText = selectedObject?.type === "text";
-
- return (
- {
- if (Math.abs(newBox.width) < 5 || Math.abs(newBox.height) < 5) {
- return oldBox;
- }
- return newBox;
- }}
- ignoreStroke={isText}
- perfectDrawEnabled={false}
- anchorFill="#3b82f6"
- anchorStroke="#ffffff"
- borderStroke="#3b82f6"
- borderStrokeWidth={2}
- anchorSize={8}
- rotateEnabled={true}
- enabledAnchors={[
- "top-left",
- "top-right",
- "bottom-left",
- "bottom-right",
- "top-center",
- "bottom-center",
- "middle-left",
- "middle-right",
- ]}
+ {objects.map((obj) => (
+
- );
- })()}
-
-
+ ))}
+ {selectedObjectId && (() => {
+ const selectedObject = objects.find(obj => obj.id === selectedObjectId);
+ const isText = selectedObject?.type === "text";
+
+ return (
+ {
+ if (Math.abs(newBox.width) < 5 || Math.abs(newBox.height) < 5) {
+ return oldBox;
+ }
+ return newBox;
+ }}
+ ignoreStroke={isText}
+ perfectDrawEnabled={false}
+ anchorFill="#3b82f6"
+ anchorStroke="#ffffff"
+ borderStroke="#3b82f6"
+ borderStrokeWidth={2}
+ anchorSize={8}
+ rotateEnabled={true}
+ enabledAnchors={[
+ "top-left",
+ "top-right",
+ "bottom-left",
+ "bottom-right",
+ "top-center",
+ "bottom-center",
+ "middle-left",
+ "middle-right",
+ ]}
+ />
+ );
+ })()}
+
+
+
{editingCell && (() => {
const obj = objects.find((o) => o.id === editingCell.tableId);
if (!obj || !obj.tableData) return null;
diff --git a/src/pages/editor/components/canvas/useStageSize.ts b/src/pages/editor/components/canvas/useStageSize.ts
index 8403c2c..d5357d3 100644
--- a/src/pages/editor/components/canvas/useStageSize.ts
+++ b/src/pages/editor/components/canvas/useStageSize.ts
@@ -1,13 +1,14 @@
import { useState, useEffect } from "react";
-const A4_WIDTH = 794;
-const A4_HEIGHT = 1123;
+export const A4_WIDTH = 794;
+export const A4_HEIGHT = 1123;
const SCALE = 0.8;
export const useStageSize = () => {
const [stageSize, setStageSize] = useState({
- width: A4_WIDTH * SCALE,
- height: A4_HEIGHT * SCALE,
+ width: A4_WIDTH,
+ height: A4_HEIGHT,
+ scale: SCALE,
});
useEffect(() => {
@@ -19,8 +20,9 @@ export const useStageSize = () => {
const newScale = Math.min(scaleX, scaleY, SCALE);
setStageSize({
- width: A4_WIDTH * newScale,
- height: A4_HEIGHT * newScale,
+ width: A4_WIDTH,
+ height: A4_HEIGHT,
+ scale: newScale,
});
};