feat(b06): 노면공 고름 = 범위 카드 전부 테두리 · 카드 하나 안 고름 · 첫 카드로 스크롤만 (177-4)

- applySpan 노면공도 --span · revealStation(리스너 없이 옛 카드 풂 · 폼 유지)
- focusChainage revealOnly · 세션 고름은 패널이 직접
- test_165 · test_106 기대값 고침 · 새 시험 test_177_4_pavement_span_box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015sDZSjFvoiDjdGpgj3muc3
This commit is contained in:
2026-10-10 11:51:15 +09:00
co-authored by Claude Opus 5.5
parent 2d4c65dc78
commit 1a96188ce0
8 changed files with 133 additions and 24 deletions
+5 -4
View File
@@ -115,13 +115,14 @@ export async function mountCrossView(
const crossHalfWidthField = crossView.field;
/** 목록·폼에서 고른 시설의 측점 카드를 선택·스크롤 — 가장 가까운 카드로 간다. */
const focusStationAt = (chainageM: number): void => {
const focusStationAt = (chainageM: number, revealOnly = false): void => {
const sections = sectionDetail?.cross_sections;
if (!sections?.length) return;
const nearest = sections.reduce((best, entry) =>
Math.abs(entry.chainage_m - chainageM) < Math.abs(best.chainage_m - chainageM) ? entry : best,
);
sectionView.focusStation(nearest.station_id);
if (revealOnly) sectionView.revealStation(nearest.station_id);
else sectionView.focusStation(nearest.station_id);
};
/** 그 누가거리를 가진 측점 카드(관 찾는 거리 한 값). */
const ownerAt = (chainageM: number) =>
@@ -186,8 +187,8 @@ export async function mountCrossView(
stationInterval: () => stationInterval ?? 20,
// 벽·구체를 누르는 중이면 그 누름이 카드를 고른다 — 폼이 구조물을 열며 카드를 먼저
// 고르면 뒤이은 카드 선택이 「같은 측점 재클릭 = 해제」로 먹힌다.
focusChainage: (chainageM) => {
if (!isWallSelecting()) focusStationAt(chainageM);
focusChainage: (chainageM, revealOnly) => {
if (!isWallSelecting()) focusStationAt(chainageM, revealOnly);
},
releaseCard: () => releaseCross(),
markStructure: (structureId) => sectionView.selectMark(structureId),