Files
Aislo/B08_Quantity/B08_Quantity_UI_EarthworkGrid_Style.ts
T
eomsangdonandClaude Opus 5 0cc3c1bd5e fix(B08): 잘림 안내를 「주의 + 접히는 목록」으로 — 늘 뜨는 경고라
B06 담당(랩탑) 실측 회신 반영. 미교차는 드문 예외가 아니라 상시임 —
route 169 는 22/105(21 %), 이 노선은 17/65(26 %). 매번 요란하면 곧 무시당함.

고친 것 셋
  · 붉은 오류 → **주의 표시**(테두리를 danger 에서 muted 로). 잘린 줄 표시도 같게.
  · 목록을 `details` 로 **접어 둠**. 필요할 때만 폄.
  · 문구를 **한 덩어리**로 묶음 — 절·성토 면적 · 사면길이 · 사면적이 전부 같은 사유로
    잘리므로 항목마다 따로 띄우지 않음.

안 넓히는 까닭 (주석에 남김)
  미교차 절반 이상이 계곡·절벽처럼 지형이 설계 사면에서 멀어지는 자리라 반폭을 늘려도
  영원히 안 닫힘. 닫히는 쪽도 중앙값 +3m 인데 꼬리가 +292m 이라 전역 확대는 값이 안 남.
  2026-09-03 사용자 확정 「경고로 대체」가 그대로 유효함.

정본 키 대조 — StationSlope.unclosed 가 design.slope_unclosed 에서 나오는 것 확인
  (B06_Section_Engine_Design.py:807 이 내는 그 값).

검증 — 공용 브라우저 실화면. 타입검사 오류 0.
  접힌 상태 `details[open=false]` · 요약 문구 한 줄 · 측점 단추 17개.
  펴면 목록이 보이고, 첫 단추(NO.13)를 누르면 그 줄로 가서 강조됨.
  조작한 화면은 사용자가 보던 주소로 되돌려 놓음.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-07 20:45:20 +09:00

137 lines
4.3 KiB
TypeScript

/* =============================================================================
* B08_Quantity_UI_EarthworkGrid_Style.ts
* 토적표 그리드 스타일. 한 번만 주입한다.
*
* 실무 산출서와 눈으로 대조되는 것이 이 표의 목적이라, 장식보다 **줄·칸이 또렷한 것**을
* 우선한다. 숫자는 등폭으로 두어 자릿수가 세로로 맞는다.
* ========================================================================== */
const STYLE_ID = "b08-earthwork-grid-style";
/* 색은 전부 프로젝트 테마 변수를 쓴다 — 어두운 테마에서 머리글이 묻히지 않아야 한다.
글자색을 배경과 함께 지정하는 까닭이 그것이다(배경만 주면 상속색이 배경에 잠긴다). */
const CSS = `
.b08-grid { display: flex; flex-direction: column; gap: 8px; min-width: 0; height: 100%; }
.b08-grid__caption {
margin: 0;
font-size: 12px;
color: var(--color-text-secondary);
}
/* 열이 많아 화면을 넘친다 — 표만 가로로 구르고 페이지 몸통은 안 구른다. */
.b08-grid__scroll { overflow: auto; flex: 1 1 auto; min-height: 0; }
.b08-grid__table {
border-collapse: collapse;
font-size: 12px;
font-variant-numeric: tabular-nums;
white-space: nowrap;
color: var(--color-text-body);
}
.b08-grid__table th,
.b08-grid__table td {
border: 1px solid var(--color-border);
padding: 2px 8px;
text-align: right;
}
.b08-grid__table thead th {
position: sticky;
top: 0;
background: var(--color-surface-raised);
color: var(--color-text);
font-weight: var(--font-weight-medium, 600);
text-align: center;
z-index: 1;
}
/* 측점 열은 왼쪽에 붙어 있어야 가로로 굴러도 어느 줄인지 보인다. */
.b08-grid__station {
position: sticky;
left: 0;
background: var(--color-surface);
color: var(--color-text);
text-align: left;
font-weight: var(--font-weight-medium, 500);
}
.b08-grid__table tfoot td {
background: var(--color-surface-raised);
color: var(--color-text);
font-weight: var(--font-weight-medium, 600);
}
/* 잘린 측점 안내 — 발생률이 21~26 % 로 늘 뜨는 것이라 붉은 오류가 아니라 **주의**로 둔다.
요란하면 곧 무시당한다. 목록은 접어 두고 필요할 때만 편다. */
.b08-grid__warning {
padding: 6px 10px;
font-size: 12px;
color: var(--color-text-body);
background: var(--color-surface-raised);
border-left: 3px solid var(--color-text-muted);
}
.b08-grid__warning-summary { cursor: pointer; }
.b08-grid__warning-list {
display: flex;
flex-wrap: wrap;
gap: 4px 6px;
padding-top: 6px;
}
.b08-grid__warning-station {
font-size: 11px;
padding: 0 6px;
border: 1px solid var(--color-border);
background: var(--color-surface);
color: var(--color-text);
cursor: pointer;
font-variant-numeric: tabular-nums;
}
/* 잘린 줄은 표에서도 알아보게 왼쪽에 표시를 남긴다 — 눈에 띄되 요란하지 않게. */
.b08-grid__table tbody tr.is-unclosed .b08-grid__station {
border-left: 3px solid var(--color-text-muted);
}
.b08-grid__table tbody tr.is-highlighted td {
background: var(--color-royal-amethyst, #d8ccff);
color: #1b2220;
}
.b08-quantity__tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--color-border); }
.b08-quantity__tab {
padding: 4px 12px;
font-size: 13px;
border: 1px solid var(--color-border);
border-bottom: none;
background: var(--color-surface-raised);
color: var(--color-text-secondary);
cursor: pointer;
}
.b08-quantity__tab.is-active {
background: var(--color-surface);
color: var(--color-text);
font-weight: var(--font-weight-medium, 600);
}
.b08-quantity__body { display: flex; flex-direction: column; gap: 8px; padding: 8px; min-height: 0; flex: 1 1 auto; }
.b08-quantity__message { margin: 0; padding: 16px; font-size: 13px; color: var(--color-text-secondary); }
.b08-quantity__field { display: flex; justify-content: space-between; gap: 8px; font-size: 12px; padding: 2px 0; }
.b08-quantity__field-value { color: var(--color-text-secondary); font-variant-numeric: tabular-nums; }
`;
/** 스타일을 한 번만 넣는다 — 페이지를 다시 그려도 중복되지 않는다. */
export function injectEarthworkGridStyles(): void {
if (document.getElementById(STYLE_ID)) return;
const style = document.createElement("style");
style.id = STYLE_ID;
style.textContent = CSS;
document.head.append(style);
}