- 공용 createPanelCard 곁값 onSettings — 캐럿 왼쪽 ⚙ · 누름이 접힘 안 일으킴(B08 · B09 그대로) - 평면도 ⚙ = 평면도 관리 모달([평면도 관리] 단추 지움) · 횡단도 ⚙ = 배치 칸 · 표 배율 · 안내선(카드 밑 칸 지움) · 구조물 ⚙ = 「M02 그림 — 축척 없음」 · 종단 1장 · 토적 = 단추 안 ⚙ · 표지 없음 - ⚙ 머리 [원본에서 다시 그리기] — 그 묶음 도면을 연 때만 · 저장본이면 invalidate - 잠금 없음(요구 281) — 읽기 전용 안 묶음 · 자동 B08 이동 · 「모든 횡단 확정」 잠금 지움 - onStepClick 한 길 = 고친 탭(●) + 지금 탭 저장 → B08 · B09 면 단계 4 완료(새 POST design-drawings-complete) → 이동 · 실패 = 머묾 - 저장 · 원본 묶음 = 새 B07_DesignDetail_UI_Save.ts · 모달 = 새 B07_DesignDetail_UI_Settings.ts(UI_Page 633 → 543줄) - 탭 줄 = .cad-host 의 --cad-tab-slot-left/right(px · CSS left · right 꼴) 있으면 리본 빈 자리에 겹침 · 없으면 지금 자리 - 시험: 새 test_280_5_b07_settings · 130 · 153-1 · 180-3 · 212-3 · 269 · 311 고쳐 씀 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
52 lines
2.4 KiB
TypeScript
52 lines
2.4 KiB
TypeScript
/* =============================================================================
|
|
* ui_template_collapsible.ts
|
|
* 페이지 공용 "접기 컨테이너" 동작. (B05 컨테이너 템플릿 기준으로 재사용)
|
|
*
|
|
* 규칙:
|
|
* - 컨테이너에 `ui-collapsible`, 그 제목 요소에 `ui-collapsible__title` 클래스를 준다.
|
|
* - 제목 **행 전체**를 클릭하면 컨테이너에 `is-collapsed`가 토글되어, 제목을 뺀 나머지 직속
|
|
* 자식이 숨겨진다(펼침 ▾ / 접힘 ▸ 캐럿은 공용 CSS가 그린다).
|
|
* - 컨테이너 내부의 별도 접힘 항목(`<details>` 등)은 건드리지 않는다.
|
|
*
|
|
* 스타일은 전역 `ui_template_theme.css`에 있어 어떤 페이지에서도 클래스만 붙이면 동작한다.
|
|
* ========================================================================== */
|
|
|
|
/**
|
|
* 좌측 패널 컨테이너 공용 카드(269) — 접는 제목 + 공용 양식(`ui-panel-form`) · 내용은 카드에 바로 붙임 · 기본 닫힘(389-3).
|
|
* `onSettings` 를 넘기면 캐럿 바로 왼쪽 ⚙(280-5) — 누름은 접힘을 안 일으킴.
|
|
*/
|
|
export function createPanelCard(
|
|
title: string,
|
|
collapsed = true,
|
|
onSettings?: () => void,
|
|
): HTMLElement {
|
|
const section = document.createElement("section");
|
|
section.className = `ui-collapsible ui-sidebar-section ui-sidebar-card ui-panel-form${collapsed ? " is-collapsed" : ""}`;
|
|
const heading = document.createElement("h3");
|
|
heading.className = "ui-collapsible__title";
|
|
heading.textContent = title;
|
|
if (onSettings) {
|
|
const gear = document.createElement("button");
|
|
gear.type = "button";
|
|
gear.className = "ui-collapsible__settings";
|
|
gear.textContent = "⚙";
|
|
gear.title = gear.ariaLabel = "설정";
|
|
gear.addEventListener("click", (event) => {
|
|
event.stopPropagation(); // 제목 누름(접기 위임)으로 안 올라감
|
|
onSettings();
|
|
});
|
|
heading.append(gear);
|
|
}
|
|
section.append(heading);
|
|
return section;
|
|
}
|
|
|
|
/** root 아래 `.ui-collapsible__title` 클릭을 위임 처리해 해당 컨테이너를 접거나 편다. */
|
|
export function attachCollapsible(root: HTMLElement): void {
|
|
root.addEventListener("click", (event) => {
|
|
const title = (event.target as HTMLElement).closest<HTMLElement>(".ui-collapsible__title");
|
|
const container = title?.closest<HTMLElement>(".ui-collapsible");
|
|
if (title && container) container.classList.toggle("is-collapsed");
|
|
});
|
|
}
|