diff --git a/B05_Profile/B05_Profile_UI_Panel.ts b/B05_Profile/B05_Profile_UI_Panel.ts index decab2cc..e0c9b812 100644 --- a/B05_Profile/B05_Profile_UI_Panel.ts +++ b/B05_Profile/B05_Profile_UI_Panel.ts @@ -387,10 +387,18 @@ export function createRoutePanel(callbacks: PanelCallbacks) { const tempSaveButton = button(L("B05_Route_Btn_TempSave"), callbacks.onTempSave); const goCrossButton = button(L("B05_Route_Btn_GoCross"), callbacks.onGoCross, "filled"); const actionRow = document.createElement("div"); - // 사이드 최하단 고정(공용 ui-sidebar-actions) — 스크롤에서 제외(2026-08-05 사용자 지시). - actionRow.className = "b05-route__actions ui-sidebar-actions"; + actionRow.className = "b05-route__actions"; actionRow.append(resetButton, tempSaveButton, goCrossButton); + // 사이드 최하단 고정 영역(2026-08-05 사용자 지시) — 위 구분선(dock 상단 테두리) → + // 구조물 목록 → 중간 구분선 → 액션 버튼 순. 목록을 「구조물 배치」 본문에 두면 + // 고른 구조물의 폼 길이에 밀려 화면 밖으로 나갔다(2026-08-18 사용자 지시). + const dockDivider = document.createElement("hr"); + dockDivider.className = "b05-structure__divider"; + const actionDock = document.createElement("div"); + actionDock.className = "b05-route__dock ui-sidebar-actions"; + actionDock.append(structures.listRoot, dockDivider, actionRow); + const inputElements = [ algorithm, gradeClass, @@ -419,7 +427,7 @@ export function createRoutePanel(callbacks: PanelCallbacks) { structures.root, routeCalc.root, selected.root, - actionRow, + actionDock, ); // 컨테이너 제목 행 전체 클릭 시 본문을 접거나 편다(공용 collapsible). 내부 details 등 별도 diff --git a/B05_Profile/B05_Profile_UI_Structures_Panel.ts b/B05_Profile/B05_Profile_UI_Structures_Panel.ts index 34bb76ee..2eba70cf 100644 --- a/B05_Profile/B05_Profile_UI_Structures_Panel.ts +++ b/B05_Profile/B05_Profile_UI_Structures_Panel.ts @@ -60,6 +60,9 @@ export interface PipeFacilityItem { export interface StructuresSection { root: HTMLElement; + /** 배치된 구조물 목록(