feat(b08): 구조물도 모달 공용 큰 창 · 카드 셋 한 줄 세 칸(156-4)

- 모달 = 공용 wide(96vw × 94vh) · 자기 폭 규칙 지움
- 도면 · 일위대가 · 면적산출 카드 = 한 줄 세 칸(3:2:2) · 카드 높이 큰 창에 맞춤 · 칸 사이 넓힘
- 조합끼리 가름줄
- 시험 test_156_1 덧붙임 · test_61_2 옛 폭 판정을 wide 로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01STqEqztUthVFBmEP18wBSz
This commit is contained in:
2026-10-09 20:40:17 +09:00
co-authored by Claude Opus 5.5
parent ca98d9799e
commit 9e53b866e2
4 changed files with 24 additions and 11 deletions
+12 -9
View File
@@ -1,10 +1,5 @@
/* B08 구조물도 모달(PLAN 95-3) — 조합마다 카드 둘(도면 · 면적산출). 색은 테마 변수만. */
/* 큰 창 — 공용 모달 css 는 그대로 두고 자기 class 로 */
.ui-modal.b08-sheets {
width: min(1320px, 96vw);
--modal-max: 94vh;
}
/* B08 구조물도 모달(PLAN 95-3) — 조합마다 카드 셋(도면 · 일위대가 · 면적산출). 색은 테마 변수만.
창 크기 = 공용 wide(96vw × 94vh · 156-4). */
.b08-sheets .ui-modal__body {
gap: var(--spacing-24);
@@ -16,6 +11,12 @@
gap: var(--spacing-8);
}
/* 조합끼리 가름줄(156-4) */
.b08-sheets__combo + .b08-sheets__combo {
padding-top: var(--spacing-24);
border-top: 1px solid var(--color-border);
}
.b08-sheets__title {
display: flex;
align-items: baseline;
@@ -36,9 +37,11 @@
color: var(--color-danger);
}
/* M02 카드 칸은 셋(도면 · 일위대가 · 면적산출) — 여기는 둘 · 도면을 넓게 */
/* 카드 셋(도면 · 일위대가 · 면적산출) = 한 줄 세 칸 · 도면을 조금 넓게 · 높이 = 큰 창에 맞춤(156-4) */
.b08-sheets .m02-struct {
grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
--m02-struct-card-h: max(480px, calc(94vh - 14rem));
grid-template-columns: minmax(0, 3fr) minmax(0, 2fr) minmax(0, 2fr);
gap: var(--spacing-16);
}
@media (max-width: 960px) {
+2 -1
View File
@@ -2,7 +2,7 @@
* B08_Quantity_UI_Drawing.ts
* 구조물 집계표 행 → 구조물도 모달(PLAN 95-3) — 그 측점에 놓인 조합 전부를 세로로 쌓음.
* 조합 한 개 = M02 항목 카드(`M02_MasterTemplete_ItemCards`) 그대로 — 도면(도각 포함 · 보기 전용 CAD ·
* 여러 장이면 장 탭) + 면적산출.
* 여러 장이면 장 탭) · 일위대가 · 면적산출 = 공용 카드 셋을 한 줄 세 칸(156-4 · 창 = 공용 wide).
*
* 원천 = 그 구조물의 프로젝트 사본만(연결된 사본 · PLAN 143-1) — 없으면 「사본 없음」 · 읽기만
* 조합 목록 = 집계표와 같음(`B08_Quantity_Summary_Data` `combosAt`)
@@ -113,6 +113,7 @@ export function openStructureSheets(request: SheetsRequest): void {
openModal({
title: `${request.station} ${L("B08_Quantity_Sheets_Title")}`,
closeLabel: L("Common_Btn_Close"),
wide: true, // 공용 큰 창(96vw × 94vh · 156-4)
dialogClass: "b08-sheets",
beforeClose: () => {
closed = true; // 아직 불러오는 중이면 뒤늦게 카드를 만들지 않음
@@ -101,3 +101,12 @@ def test_화면_연결된_칸만_끊기_닫기_양식():
assert "facilities: unlinkedAt(saved?.facilities ?? [], station)" in page
sheets = (ROOT / "B08_Quantity/B08_Quantity_UI_Drawing.ts").read_text(encoding="utf-8")
assert "linkSection(request.projectId, request.facilities" in sheets
def test_156_4_구조물도_모달_큰_창_세_칸():
sheets = (ROOT / "B08_Quantity/B08_Quantity_UI_Drawing.ts").read_text(encoding="utf-8")
assert "wide: true" in sheets
css = (ROOT / "B08_Quantity/B08_Quantity_UI_Drawing.css").read_text(encoding="utf-8")
assert "min(1320px" not in css # 자기 폭 없음 — 공용 wide 그대로
assert "minmax(0, 3fr) minmax(0, 2fr) minmax(0, 2fr)" in css # 도면 · 일위대가 · 면적산출
assert ".b08-sheets__combo + .b08-sheets__combo" in css
@@ -20,7 +20,7 @@ def test_sheet_tab_gone_modal_wired():
def test_modal_own_class_and_cleanup():
css = Path("B08_Quantity/B08_Quantity_UI_Drawing.css").read_text(encoding="utf-8")
assert "min(1320px, 96vw)" in css and "--modal-max: 94vh" in css
assert "wide: true" in DRAWING and "min(1320px" not in css # 공용 큰 창(156-4)
assert "beforeClose" in DRAWING and "cards.destroy()" in DRAWING
assert 'dialogClass: "b08-sheets"' in DRAWING