전략편집기 전략컨트롤 드래그

This commit is contained in:
Macbook
2026-06-15 01:28:56 +09:00
parent b0e2efd7cb
commit 3150dc8af6
7 changed files with 35 additions and 22 deletions
@@ -51,6 +51,10 @@ export default function PaletteChip({
});
const onDragStart = (e: React.DragEvent) => {
if (needsPointerPaletteDrag()) {
e.preventDefault();
return;
}
writePaletteHtmlDragData(e, buildPayload());
};
@@ -95,7 +99,7 @@ export default function PaletteChip({
return (
<div
draggable={!needsPointerPaletteDrag()}
className={`se-palette-card ${color ? `se-palette-card--${color}` : 'se-palette-card--ind'}${composite ? ' se-palette-card--composite' : ''}${selected ? ' se-palette-card--selected' : ''}`}
className={`se-palette-card ${color ? `se-palette-card--${color}` : 'se-palette-card--ind'}${composite ? ' se-palette-card--composite' : ''}${selected ? ' se-palette-card--selected' : ''}${needsPointerPaletteDrag() ? ' se-palette-card--pointer' : ''}`}
onDragStart={onDragStart}
onDragEnd={onDragEnd}
onPointerDown={onPointerDown}
@@ -78,6 +78,10 @@ function SidewaysFilterChip({
const onDragStart = (e: React.DragEvent) => {
hideHint();
if (needsPointerPaletteDrag()) {
e.preventDefault();
return;
}
const payload: SidewaysFilterDragPayload = {
type: 'sidewaysFilter',
value: item.id,
@@ -127,7 +131,7 @@ function SidewaysFilterChip({
return (
<div
draggable={!needsPointerPaletteDrag()}
className={`se-palette-card se-palette-card--range se-palette-card--range-${item.mode}${selected ? ' se-palette-card--selected' : ''}`}
className={`se-palette-card se-palette-card--range se-palette-card--range-${item.mode}${selected ? ' se-palette-card--selected' : ''}${needsPointerPaletteDrag() ? ' se-palette-card--pointer' : ''}`}
onDragStart={onDragStart}
onDragEnd={onDragEnd}
onPointerDown={onPointerDown}
@@ -1336,20 +1336,10 @@ function StrategyEditorCanvasInner({
if (!needsPointerPaletteDrag()) return;
return subscribePaletteDrag((ev: PaletteDragEvent) => {
if (ev.phase === 'move') {
if (!isOverStrategyBuilder(ev.x, ev.y)) {
if (lastPreviewAnchorRef.current != null) {
lastPreviewAnchorRef.current = null;
lastPreviewKeyRef.current = null;
clearPreviewRef.current();
}
return;
}
const { flowPos, anchorId } = resolveDropFromClientRef.current(ev.x, ev.y);
if (anchorId) {
const sideKey = `${anchorId}:${Math.round(flowPos.x / 8)}:${Math.round(flowPos.y / 8)}`;
if (sideKey === lastPreviewKeyRef.current) return;
lastPreviewKeyRef.current = sideKey;
lastPreviewAnchorRef.current = anchorId;
lastPreviewKeyRef.current = `${anchorId}:${Math.round(flowPos.x / 8)}:${Math.round(flowPos.y / 8)}`;
updatePreviewRef.current(anchorId, flowPos);
return;
}