diff --git a/B06_Section/B06_Section_UI_Adjust_Dock.ts b/B06_Section/B06_Section_UI_Adjust_Dock.ts index dd3a9c1a..52ddbb81 100644 --- a/B06_Section/B06_Section_UI_Adjust_Dock.ts +++ b/B06_Section/B06_Section_UI_Adjust_Dock.ts @@ -52,6 +52,14 @@ function slotUsable(target: HTMLElement | undefined): target is HTMLElement { return !!group && !group.hidden; } +/** 배관이면 유입구·유출구 칸, 독립 기슭막이면 좌·우 칸 — 지금 서 있는 쪽을 준다. */ +function slotOf(side: "inlet" | "outlet"): HTMLElement { + const slots = sideSlots!; + return slotUsable(slots[side]) + ? slots[side] + : slots[side === "inlet" ? "revetInlet" : "revetOutlet"]; +} + /** 옮겨 온 행과 그 **제자리 표식** — 되돌릴 때 원래 순서로 꽂기 위해 짝으로 둔다. * 표식 없이 지우면 행 DOM이 사라져, 같은 창에서 다른 벽을 고를 때 그 행이 다시는 * 나오지 않는다(2026-08-29 사용자 보고: 단 수·옵션이 사라짐). */ @@ -97,17 +105,16 @@ function relocateSideRows(panelRoot: HTMLElement): void { clearSideSlots(); const side = panelRoot.dataset.side; if (!sideSlots || (side !== "inlet" && side !== "outlet" && side !== "extra")) return; - // 배관이면 유입구·유출구 칸, 독립 기슭막이면 좌·우 칸 — 지금 서 있는 쪽으로 간다. - const target = - side === "extra" - ? sideSlots.extra - : slotUsable(sideSlots[side]) - ? sideSlots[side] - : sideSlots[side === "inlet" ? "revetInlet" : "revetOutlet"]; - // 추가 기슭막이 칸은 평소 숨어 있다 — 고른 벽이 다단이면 여기서 세운다. + const target = side === "extra" ? sideSlots.extra : slotOf(side); + // 추가 기슭막이 칸은 평소 숨어 있다 — 고른 벽이 다단이면 **그 단이 딸린 칸 바로 + // 아래**로 옮겨 세운다(2026-08-30 사용자: 좌/우 각각의 하단으로). if (side === "extra") { const group = target.closest("fieldset"); if (!group) return; + const owner = slotOf(panelRoot.dataset.extraSide === "inlet" ? "inlet" : "outlet").closest( + "fieldset", + ); + if (owner && owner !== group) owner.after(group); group.hidden = false; } else if (!slotUsable(target)) return; const rows = panelRoot.querySelectorAll(side === "extra" ? EXTRA_ROWS : SIDE_ROWS); diff --git a/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts b/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts index 51a13fdb..dd2c5a01 100644 --- a/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts +++ b/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts @@ -575,6 +575,8 @@ export function buildStructurePanel( // 붙을지 알린다(2026-08-29 지시 4). 다단 벽은 자기 채널 쪽으로 간다. // 다단(추가) 벽은 유입·유출 어느 칸에도 자기 자리가 없다 — 유입구·유출구 아래 // **전용 칸**으로 보낸다(2026-08-30 사용자 지시 4). + // 다단 벽이 어느 쪽 채널의 단인지 — 그 쪽 칸 **바로 아래**에 붙인다(2026-08-30). + root.dataset.extraSide = isExtra ? (key.startsWith("bextra") ? "inlet" : "outlet") : ""; root.dataset.side = isExtra ? "extra" : tierChannel === "outlet"