fix(B06): 횡단 세월교 · BOX 본체 클릭 = 좌측 본체 상자 고름 · 강조(PLAN 66-1)

- 세월교 바닥판 · 관 판정면 추가 → 「세월교」 상자 강조 · 스크롤 · 그림 바닥판 · 관 붉게
- BOX 구체 가운데 1/3 = 본체 · 양쪽 = 그 끝(유입 · 유출 상자 그대로)
- 고름 값에 body 추가(FordPick · BoxPick) · 조정창은 본체에서 안 뜸
- B05 넘김 키 body 도 같은 길

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYJJRCfHfdCGNhmXTjQKV7
This commit is contained in:
2026-10-06 23:36:17 +09:00
co-authored by Claude Opus 5.5
parent d42efb162b
commit 5c0c8fd9c4
9 changed files with 110 additions and 62 deletions
+10 -7
View File
@@ -9,6 +9,7 @@
* ========================================================================== */
import type { BoxSideAdjust, BoxSideRole } from "./B06_Section_UI_Cross_Box_Geom";
import type { BoxPick } from "./B06_Section_UI_Cross_Box";
import {
bindArrowKeys,
bindDragHandle,
@@ -41,7 +42,8 @@ export interface BoxPanelDeps {
export interface BoxPanelHandle {
root: HTMLElement;
/** null이면 숨긴다. 값이 오면 그 측 기준으로 다시 그린다. */
show: (role: BoxSideRole | null) => void;
/** 본체는 창 없이 좌측 「본체」 상자만(66-1). */
show: (role: BoxPick | null) => void;
}
/** 한 걸음(m) — 사용자 지정 0.1m. */
@@ -133,15 +135,16 @@ export function buildBoxPanel(deps: BoxPanelDeps, opts?: { dock?: boolean }): Bo
return {
root,
show(role) {
current = role;
root.classList.toggle("is-hidden", role === null);
current = role === "body" ? null : role;
root.classList.toggle("is-hidden", current === null);
// 좌측 [횡단 조정]에 어느 칸을 세울지 알린다 — 날개벽(유입)/(유출) 칸이다
// (세월교와 같은 규약, 2026-08-30 사용자).
root.dataset.side = role === null ? "" : (deps.wingRoleFor?.(role) ?? "");
root.dataset.side =
role === null || role === "body" ? (role ?? "") : (deps.wingRoleFor?.(role) ?? "");
root.dataset.panelTitle = role === null ? "" : "BOX암거";
arrows.detach();
drag.detach();
if (role !== null) {
if (current !== null) {
arrows.attach();
drag.attach();
}
@@ -163,6 +166,6 @@ export interface BoxControl {
role: "inlet" | "outlet",
patch: Partial<{ installed: boolean; height_m: number; length_m: number; angle_deg: number }>,
) => void;
selectedFor: (chainageM: number) => BoxSideRole | null;
select: (chainageM: number, role: BoxSideRole | null) => void;
selectedFor: (chainageM: number) => BoxPick | null;
select: (chainageM: number, role: BoxPick | null) => void;
}