fix(B05): 확폭 구간 단추 켬 표식 · [추가] 단추와 겹치지 않게 · 화면 시험 맞춤(87-3 · 87-4)

- 켬 단추 class is-primary 대신 is-on(시험 · [추가] 찾기와 겹침) · 켬 표식 ✓ · 단추 높이 자동
- ui_checks 52-10 · 53-1 노면공 = 시작 · 종료만 · 길이 출력 · 카드 23+0 기준으로 맞춤

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ
This commit is contained in:
2026-10-08 13:04:31 +09:00
co-authored by Claude Sonnet 5.5
parent 33119bcc67
commit cfe4d8b26d
4 changed files with 26 additions and 8 deletions
@@ -62,10 +62,12 @@ export function createWideningBox(hooks: {
const on = !isRunOff(run, off);
const button = document.createElement("button");
button.type = "button";
button.className = `b05-route__irregular-btn${on ? " is-primary" : ""}`;
button.className = `b05-route__irregular-btn${on ? " is-on" : ""}`;
button.setAttribute("aria-pressed", String(on));
button.dataset.wideningRun = `${run.start_m}-${run.end_m}`;
button.textContent = `${stationLabel(run.start_m, step)} ~ ${stationLabel(run.end_m, step)} · 확폭 ${Number(run.widening_m.toFixed(2))} m`;
const from = stationLabel(run.start_m, step);
const to = stationLabel(run.end_m, step);
button.textContent = `${from === to ? from : `${from} ~ ${to}`} · 확폭 ${Number(run.widening_m.toFixed(2))} m`;
button.title = on ? "확폭 포함 — 누르면 규격 폭만" : "규격 폭만 — 누르면 확폭 포함";
button.addEventListener("click", () => {
off = toggleRun(list, off, run);
@@ -582,8 +582,12 @@
gap: 4px;
}
.b05-structure__widening .b05-structure__group-body button {
.b05-structure__widening .b05-structure__group-body button:not(.b05-structure__step) {
align-self: stretch;
height: auto;
min-height: var(--b05-control-h);
padding-block: 3px;
line-height: 1.3;
text-align: left;
white-space: normal;
}
@@ -592,3 +596,13 @@
color: var(--text-muted, inherit);
font-size: var(--text-caption);
}
/* 켬 = 확폭 포함 — 테두리색 + 표식(`.is-primary` 는 [추가] 단추 몫이라 안 씀) */
.b05-structure__widening .b05-route__irregular-btn.is-on {
border-color: color-mix(in srgb, var(--color-royal-amethyst, rgb(109 40 217)) 55%, transparent);
color: var(--color-text);
}
.b05-structure__widening [data-widening-run][aria-pressed="true"]::before {
content: "✓ ";
}
@@ -262,7 +262,7 @@
!etc.missing &&
etc.name === NAME &&
JSON.stringify(etc.containers) === '["detail"]' &&
JSON.stringify(etc.legend) === '["상세 내용 1"]' &&
JSON.stringify(etc.legend) === '["상세 내용"]' &&
JSON.stringify(etc.notes) === '["52-14 비고"]' &&
JSON.stringify(etc.containerLinks) === "[true]" &&
(etc.phase !== "edit" ||
@@ -132,7 +132,7 @@
};
/** 세션에만 넣는 종류(표 01~08) — 이미 있으면 건너뜀. [군, 종류, 측점, +m, 길이(구간형)] */
const ADD = [
["G", "pavement_concrete", 22, 0, 10],
["G", "pavement_concrete", 23, 0, 10], // 노면공 = 시작 · 종료만(87-1) — 23+0 ~ 23+10 · 카드 23+0 에 다른 구조물 없음
["A", "cross_underdrain", 22, 0],
["E", "mirror", 22, 0],
["A", "ford_pavement", 3, 0],
@@ -181,10 +181,12 @@
if (!labels[1].hidden) {
const [s0, s1] = labels[1].querySelectorAll("input");
const [e0, e1] = labels[3].querySelectorAll("input");
fire(s0, String(no - 1));
fire(s1, "10");
// 기준 칸 없는 종류(노면공 87-1)는 시작 = 누른 측점 · 종료 = +10 m(알약 = 시점)
const rangeOnly = labels[2].hidden;
fire(s0, String(rangeOnly ? no : no - 1));
fire(s1, rangeOnly ? String(plus) : "10");
fire(e0, String(no));
fire(e1, "10");
fire(e1, rangeOnly ? String(plus + 10) : "10");
}
await w(300);
} else if (!labels[1].hidden) {