import { useRef } from "react"; import { Rect } from "react-konva"; import Konva from "konva"; import type { ShapeProps } from "./types"; import { getKonvaGradientProps } from "../../utils/gradient"; const RectangleShape = ({ obj, isSelected, onSelect, onUpdate, draggable }: ShapeProps) => { const shapeRef = useRef(null); // Transformer is managed in EditorCanvas for multi-select support const isMask = obj.isMask || false; const showGuide = obj.showMaskGuide !== false; const actualStrokeWidth = obj.strokeWidth ?? 0; const hasStroke = actualStrokeWidth > 0; const cornerRadius = Math.max(0, obj.borderRadius ?? 0); // برای نمایش انتخاب: اگر strokeWidth واقعی > 0 است، از آن استفاده کن، وگرنه stroke را برای انتخاب نمایش بده const displayStroke = isSelected ? (hasStroke ? obj.stroke : "#3b82f6") : (isMask && showGuide) ? "#ff6b6b" : (isMask && !showGuide) ? "transparent" : (hasStroke ? obj.stroke : undefined); const displayStrokeWidth = isSelected ? (hasStroke ? actualStrokeWidth : 3) : (isMask && showGuide ? 2 : actualStrokeWidth); const gradientProps = isMask ? {} : getKonvaGradientProps( obj.fillType, obj.gradient, obj.width || 100, obj.height || 100, "rect", ); return ( { if (shapeRef.current) { onSelect(obj.id, shapeRef.current, e); } }} onDragMove={(e) => { // Snapping is applied at Stage level, avoid store updates per frame. e.target.getLayer()?.batchDraw(); }} onDragEnd={(e) => { const node = e.target; onUpdate(obj.id, { x: node.x(), y: node.y(), }); }} /> ); }; export default RectangleShape;