From 2d6be54c02b5af046eb1e9907ea9a317e189e8f2 Mon Sep 17 00:00:00 2001 From: gm Date: Fri, 5 Jun 2026 18:01:55 +0900 Subject: [PATCH] ui: node drag-to-move, drag-to-child, and copy (v1.0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 드래그 핸들(⠿): 노드 카드 헤더 hover 시 표시, 마우스다운으로 드래그 시작 - 드래그 동작: - 상단 30% 위 → 해당 노드 앞에 삽입 (파란 상단 선) - 하단 30% 아래 → 해당 노드 뒤에 삽입 (파란 하단 선) - 중앙 40% → 해당 노드의 하위 노드로 편입 (초록 테두리) - 복사(⊕): 캔버스 버튼 + detail panel 버튼, 하위 구조 전체 deep clone Co-Authored-By: Claude Sonnet 4.6 --- ui/builder.html | 125 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) diff --git a/ui/builder.html b/ui/builder.html index 6e6835f..64f7c33 100644 --- a/ui/builder.html +++ b/ui/builder.html @@ -245,6 +245,13 @@ input,textarea,button,select{font-family:inherit} .ftpl-role{font-size:9px;border-radius:3px;padding:1px 5px;font-weight:700;margin-left:2px;letter-spacing:.03em} .ftpl-role.collect{background:var(--accent-bg);color:var(--accent)} .ftpl-role.fixed{background:var(--surface-alt);color:var(--muted);border:1px solid var(--border)} +/* 드래그 */ +.cnode-drag{font-size:11px;color:var(--border);cursor:grab;flex-shrink:0;opacity:0;transition:opacity .1s;padding:0 2px;user-select:none;line-height:1} +.cnode:hover .cnode-drag,.cnode.selected .cnode-drag{opacity:1} +.cnode.dragging{opacity:0.3;pointer-events:none} +.cnode.drop-child{border-color:var(--green)!important;box-shadow:0 0 0 3px rgba(22,163,74,.2)!important} +.cnode.drop-before{box-shadow:0 -3px 0 0 var(--accent),var(--sh)!important} +.cnode.drop-after{box-shadow:0 3px 0 0 var(--accent),var(--sh)!important} /* per_line 전용 UI */ .perline-block{display:flex;align-items:center;gap:7px;padding:5px 6px;background:var(--surface-alt);border:1px solid var(--border);border-radius:5px} .perline-lbl{font-size:11px;font-weight:600;color:var(--muted);white-space:nowrap} @@ -286,7 +293,7 @@ input,textarea,button,select{font-family:inherit}
🏗️

CTStruct

- v0.9 + v1.0