handleMouseDown(e, h)}
+ onMouseUp={(e) => handleMouseUp(e, h)}
+ onMouseMove={(e) => handleMouseMove(e, h)}
+ onMouseEnter={() => setHoveredHandle(handles.indexOf(h))}
+ onMouseLeave={() => setHoveredHandle(null)}
+ >
+
{
+ if (e.pointerType === 'touch') {
+ e.preventDefault();
+ setMenu({
+ type: 'row',
+ index: h.index,
+ x: h.rect.right + 4,
+ y: h.rect.top,
+ });
+ }
+ }
+ : undefined
+ }
+ >
+
+
+
+ );
+ })}
+
+ {/* 열 핸들 */}
+ {colHandles.map((h) => {
+ const isDragTarget =
+ drag?.type === 'col' && drag.toIndex === h.index && drag.fromIndex !== h.index;
+ const isDragSource = drag?.type === 'col' && drag.fromIndex === h.index;
+ return (
+ handleMouseDown(e, h)}
+ onMouseUp={(e) => handleMouseUp(e, h)}
+ onMouseMove={(e) => handleMouseMove(e, h)}
+ onMouseEnter={() => setHoveredHandle(handles.indexOf(h))}
+ onMouseLeave={() => setHoveredHandle(null)}
+ >
+
{
+ if (e.pointerType === 'touch') {
+ e.preventDefault();
+ setMenu({
+ type: 'col',
+ index: h.index,
+ x: h.rect.left,
+ y: h.rect.bottom + 4,
+ });
+ }
+ }
+ : undefined
+ }
+ >
+
+
+
+ );
+ })}
+
+ {/* 드래그 시 행/열 하이라이트 오버레이 */}
+ {drag &&