From 9f6dcccaa8be42d9b394392563b2eef3f903014e Mon Sep 17 00:00:00 2001 From: Andymick Date: Sat, 18 Jul 2026 15:20:36 +0100 Subject: [PATCH] Re-add dragging support for curved text via Group wrapper - Wrap TextPath in Group to enable dragging while preserving text on toggle - Group handles x/y positioning and drag events - TextPath is non-listening so Group events take priority - Curved text can now be selected, dragged, and unchecked without losing content Co-Authored-By: Claude Haiku 4.5 --- src/components/DesignCanvas.tsx | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/components/DesignCanvas.tsx b/src/components/DesignCanvas.tsx index dbd5ab9..048e457 100644 --- a/src/components/DesignCanvas.tsx +++ b/src/components/DesignCanvas.tsx @@ -1,7 +1,7 @@ 'use client'; import { useRef, useState, useEffect, useLayoutEffect, useCallback } from 'react'; -import { Stage, Layer, Text, TextPath, Image as KonvaImage, Transformer, Rect } from 'react-konva'; +import { Stage, Layer, Text, TextPath, Image as KonvaImage, Transformer, Rect, Group } from 'react-konva'; import type Konva from 'konva'; import { v4 as uuid } from 'uuid'; import ProductMockup from './ProductMockup'; @@ -325,21 +325,29 @@ function PrintSurface({ {elements.map((el) => el.type === 'text' ? ( el.curvedPath ? ( - // Curved text path - centered on canvas - { if (node) nodeRefs.current.set(el.id, node); }} - data={generateCurvePath(el.curvedPath.type, el.curvedPath.radius, el.curvedPath.reverse)} - text={el.text} - fontFamily={el.fontFamily} - fontSize={el.fontSize} - fill={el.fill} + x={el.x} + y={el.y} + draggable listening={true} onClick={() => setSelectedId(el.id)} onTap={() => setSelectedId(el.id)} - /> + onDragEnd={(e) => updateElement(el.id, { x: e.target.x(), y: e.target.y() })} + > + + ) : ( // Regular straight text