/* ============================================================================= * B06_Section_UI_Adjust_Dock.ts * 좌측 [구조물 배치] 섹션 안 **[횡단 조정] 하위 컨테이너**(2026-08-29 사용자: * B05/B06 일원화 — 오버레이 조정창 항목을 좌측에도 보이되, 기존 폼과 구분되게 * 접이식 하위 컨테이너에 담는다. 9키·십자 위치제어는 오버레이 전용). * * 카드가 조정창을 만들 때 같은 deps로 **사본 창**을 하나 더 만들어 이 슬롯에 * 세운다(adopt). 값·동작이 같은 함수라 오버레이·좌측 어느 쪽을 만져도 카드 * 재렌더에서 두 창이 함께 새 값으로 그려진다 — 별도 동기화 코드가 없다. * 카드가 여럿이어도 슬롯은 하나 — 마지막으로 고른 구조물의 사본만 선다. * ========================================================================== */ let dockRoot: HTMLDetailsElement | null = null; let slot: HTMLElement | null = null; let placeholder: HTMLElement | null = null; function ensureDock(): void { if (dockRoot) return; dockRoot = document.createElement("details"); dockRoot.className = "b06-adjust-dock"; dockRoot.open = true; const summary = document.createElement("summary"); summary.textContent = "횡단 조정"; placeholder = document.createElement("p"); placeholder.className = "b06-adjust-dock__empty"; placeholder.textContent = "횡단도에서 구조물(벽·구체)을 고르면 조정 항목이 여기에 뜹니다."; slot = document.createElement("div"); slot.className = "b06-adjust-dock__slot"; dockRoot.append(summary, placeholder, slot); } /** 하위 컨테이너 루트 — 페이지가 [구조물 배치] 섹션 본문에 붙인다. */ export function adjustDockRoot(): HTMLElement { ensureDock(); return dockRoot!; } /** 페이지 진입 시 초기 상태(빈 슬롯 + 안내문)로 되돌린다. */ export function resetAdjustDock(): void { ensureDock(); slot!.replaceChildren(); placeholder!.hidden = false; } /** 조정창 사본을 슬롯에 세운다 — 이미 다른 사본이 있으면 갈아 끼운다. */ export function adoptAdjustPanel(panelRoot: HTMLElement): void { ensureDock(); panelRoot.classList.add("b06-structure-panel--dock"); if (slot!.firstChild !== panelRoot || slot!.childNodes.length !== 1) { slot!.replaceChildren(panelRoot); } placeholder!.hidden = true; } /** 이 사본이 슬롯에 서 있으면 내린다 — 다른 사본이 이미 대신 서 있으면 손대지 않는다. */ export function releaseAdjustPanel(panelRoot: HTMLElement): void { if (!slot || !slot.contains(panelRoot)) return; slot.replaceChildren(); placeholder!.hidden = false; }