feat(B06): 269-2 좌측 컨테이너(횡단 보기 설정 · 표준 횡단면 설정) = 공용 양식

- createSectionFrame 횡단 칸 틀에 .ui-panel-form · 칸 · 라벨 · 단추 = 「구조물 배치」 기준
- B06 덧칠(칸 글자 · 색 · 오류 칸 접기) 걷음 · 줄 배치만 남김
- 시험 test_269_panel_form B06 항목

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QND7Co43B24zK2P937rdxt
This commit is contained in:
2026-10-11 16:45:03 +09:00
co-authored by Claude Opus 5.5
parent 3939cd11f9
commit c3e56f2e68
3 changed files with 31 additions and 8 deletions
+2 -1
View File
@@ -90,7 +90,8 @@ export function createSectionFrame(
root.append(heading, body);
return { root, body };
}
root.className = `b06-profile__group ui-collapsible ui-sidebar-section${collapsed ? " is-collapsed" : ""}`;
// ui-panel-form: 좌측 패널 컨테이너 공용 양식(269 · 「구조물 배치」 기준 칸 · 라벨 · 단추).
root.className = `b06-profile__group ui-collapsible ui-sidebar-section ui-panel-form${collapsed ? " is-collapsed" : ""}`;
heading.className = "b06-profile__group-legend ui-collapsible__title";
root.append(heading);
return { root, body: root };
+1 -7
View File
@@ -51,8 +51,6 @@
문제 제거(2026-08-06 사용자 보고). */
border-radius: var(--radius-cards);
background-color: var(--color-surface-raised);
color: var(--color-text-body);
font-size: var(--text-caption);
}
.b06-profile__group-legend {
@@ -64,7 +62,7 @@
/* 라벨·입력·버튼을 **한 줄**로 세운다(횡단 보기 설정, 2026-08-23 사용자 지시).
ui-field는 기본이 세로(라벨 위·입력 아래·그 아래 오류 슬롯)라 그대로 두면 버튼이
오류 슬롯 높이만큼 밀려 수평이 안 맞는다 — 이 줄에서만 가로로 눕히고 오류 슬롯을 접는다. */
오류 슬롯 높이만큼 밀려 수평이 안 맞는다 — 이 줄에서만 가로로 눕힘(오류 슬롯 접기 = 공용 양식 `.ui-panel-form`). */
.b06-profile__field-row {
display: flex;
align-items: center;
@@ -91,10 +89,6 @@
min-width: 0;
}
.b06-profile__field-row .ui-field__error {
display: none;
}
/* 창이 좁아 좌측 패널이 237px 까지 물러난 자리 — 라벨이 안 줄어 2px 이 새어 나왔다.
그 폭에서만 라벨을 윗줄로 접는다. 넓은 폭 배치는 손대지 않는다(2026-09-08 실측).
⚠ 폭 제한 없이 `flex-wrap` 을 주면 넓은 폭에서도 라벨이 윗줄로 올라간다 — 재 보고 되돌렸다. */
+28
View File
@@ -5,6 +5,8 @@
- 공용 양식 = ui_template 한 곳(`.ui-panel-form` · `.ui-panel-btn` · 카드 `createPanelCard`) ·
칸 높이 · 라벨 틈 토큰 = theme 한 곳 · 「구조물 배치」도 같은 토큰.
- B07 컨테이너 = 공용 카드 · 도면 단추 = `.ui-panel-btn` · 페이지 덧칠(크기 · 글자 · 바탕) 없음.
- B06 컨테이너(횡단 보기 설정 · 표준 횡단면 설정) = 칸 틀 `createSectionFrame` 이 공용 양식을 붙임 ·
단추 · 입력칸 = 공용 함수(createButton · createInputField · createSelectField) · B06 덧칠 없음.
"""
import re
@@ -24,6 +26,10 @@ B05_STRUCT_CSS = _read("B05_Profile/B05_Profile_UI_Style_Structures.css")
B07_CSS = _read("B07_DesignDetail/B07_DesignDetail_UI_Style.css")
B07_PANELS = _read("B07_DesignDetail/B07_DesignDetail_UI_Panels.ts")
B07_PLAN = _read("B07_DesignDetail/B07_DesignDetail_UI_PlanKinds.ts")
DESIGN_PANEL = _read("A00_Common/design/design_panel.ts")
B06_CSS = _read("B06_Section/B06_Section_UI_Style.css")
B06_PANEL = _read("B06_Section/B06_Section_UI_Page_Panel.ts")
B06_STD = _read("B06_Section/B06_Section_UI_Standard_Panel.ts")
def _block(css: str, selector: str) -> str:
@@ -94,3 +100,25 @@ def test_B07_페이지_덧칠_없음():
assert "font-size" not in _block(B07_CSS, ".b07-drawing-button__name")
assert ".b07-cross-layout .ui-btn" not in B07_CSS
assert ".b07-cross-layout .ui-field__error" not in B07_CSS
def test_B06_컨테이너_공용_양식():
frame = DESIGN_PANEL[DESIGN_PANEL.index("export function createSectionFrame(") :]
frame = frame[: frame.index("\n}\n")]
cross = frame[frame.index("b06-profile__group ui-collapsible") :]
assert "ui-panel-form" in cross.splitlines()[0]
for src in (B06_PANEL, B06_STD):
assert "createSectionFrame(" in src or "createButton(" in src
assert "<button" not in src and 'createElement("button")' not in src
assert 'createElement("input")' not in src and 'createElement("select")' not in src
assert "createInputField(" in B06_PANEL and "createButton(" in B06_PANEL
# 덧칠 없음 — 칸 글자 · 오류 칸 접기는 공용 양식 몫
group = _block(B06_CSS, ".b06-profile__group")
assert "font-size" not in group and not re.search(r"(?:^|\s)color\s*:", group)
assert ".b06-profile__field-row .ui-field__error" not in B06_CSS
for sel in (".ui-btn {", ".ui-input {", ".ui-select {"):
for line in B06_CSS.splitlines():
if line.endswith(sel) and line.startswith(".b06-profile"):
rule = _block(B06_CSS, line[:-2])
for prop in ("height", "padding", "font-size"):
assert not re.search(r"(?:^|\s)" + prop + r"\s*:", rule), (line, prop)