fix(M02): 좌측 패널 공용 틀 M01 과 맞춤
- ui_template_overlay.css 에 ui-sidebar-panel · ui-sidebar-card · ui-sidebar-list · ui-sidebar-row 공용 클래스 추가 - M01·M02 좌측 코드가 공용 클래스를 씀 — 카드 여백·둥글기·바탕 · 목록 간격 · 줄 선택 표시 한 벌 - M02 좌측 전용 CSS 중복 규칙 제거(없는 토큰 --radius-md 로 둥글기 안 먹던 것도 해소) - M02 표/도면/구조물 카드 처음 접힘으로 M01 과 맞춤 · 새로·본떠·지우기 단추 줄 카드 안으로 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K7JS47SacjPxZ718QsZKyr
This commit is contained in:
@@ -79,17 +79,17 @@ export function buildSide(opt: SideOptions): SideHandle {
|
||||
|
||||
const section = (title: string, body: HTMLElement, ...more: HTMLElement[]): HTMLElement =>
|
||||
el("section", {
|
||||
className: "m02-side__group ui-collapsible ui-sidebar-section",
|
||||
className: "m02-side__group ui-collapsible ui-sidebar-section ui-sidebar-card is-collapsed",
|
||||
children: [el("h3", { className: "ui-collapsible__title", text: title }), body, ...more],
|
||||
});
|
||||
const bodies = new Map<Kind, HTMLElement>(
|
||||
[...KINDS.map((k) => k.kind), STRUCTURE].map((k) => [
|
||||
k,
|
||||
el("div", { className: "m02-side__items" }),
|
||||
el("div", { className: "m02-side__items ui-sidebar-list" }),
|
||||
]),
|
||||
);
|
||||
const listHost = el("div", {
|
||||
className: "m02-side__lists",
|
||||
className: "m02-side__lists ui-sidebar-panel",
|
||||
children: [
|
||||
section(L("M02_KindTable"), bodies.get("table")!),
|
||||
section(
|
||||
@@ -104,9 +104,12 @@ export function buildSide(opt: SideOptions): SideHandle {
|
||||
const btnNew = createButton({ label: L("M02_New"), variant: "filled" });
|
||||
const btnCopy = createButton({ label: L("M02_Copy"), variant: "ghost" });
|
||||
const btnDel = createButton({ label: L("M02_Delete"), variant: "danger" });
|
||||
const editRow = el("div", { className: "m02-side__row", children: [btnNew, btnCopy, btnDel] });
|
||||
const editRow = el("div", {
|
||||
className: "m02-side__row ui-sidebar-card",
|
||||
children: [btnNew, btnCopy, btnDel],
|
||||
});
|
||||
|
||||
const root = el("div", { className: "m02-side", children: [listHost, editRow] });
|
||||
const root = el("div", { className: "m02-side ui-sidebar-panel", children: [listHost, editRow] });
|
||||
|
||||
const isOpen = (info: TemplateInfo): boolean => {
|
||||
if (picked) return picked.kind === info.종류 && picked.name === info.이름;
|
||||
@@ -126,7 +129,7 @@ export function buildSide(opt: SideOptions): SideHandle {
|
||||
...(mine.length
|
||||
? mine.map((info) => {
|
||||
const b = el("button", {
|
||||
className: `m02-side__item${isOpen(info) ? " is-active" : ""}`,
|
||||
className: `m02-side__item ui-sidebar-row${isOpen(info) ? " is-active" : ""}`,
|
||||
text: info.이름,
|
||||
attrs: { type: "button", title: info.수정일 },
|
||||
});
|
||||
|
||||
@@ -1,44 +1,9 @@
|
||||
/* M02 마스터 템플릿 — 좌측 패널 + 메인. 색·간격은 공용 토큰. */
|
||||
/* M02 마스터 템플릿 — 좌측 패널 + 메인. 카드·목록·줄 모양은 공용 ui-sidebar-*
|
||||
(ui_template_overlay.css, M01 과 한 벌) — 여기는 패널 위 여백만. */
|
||||
.m02-side {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--spacing-12);
|
||||
padding-top: var(--spacing-8);
|
||||
}
|
||||
|
||||
.m02-side__group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--spacing-4);
|
||||
}
|
||||
|
||||
.m02-side__items {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--spacing-4);
|
||||
}
|
||||
|
||||
.m02-side__item {
|
||||
width: 100%;
|
||||
padding: var(--spacing-4) var(--spacing-8);
|
||||
border: 0;
|
||||
border-radius: var(--radius-md);
|
||||
background: none;
|
||||
color: inherit;
|
||||
font: inherit;
|
||||
text-align: left;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.m02-side__item:hover {
|
||||
background: var(--color-paper);
|
||||
}
|
||||
|
||||
.m02-side__item.is-active {
|
||||
background: color-mix(in srgb, var(--color-accent) 14%, transparent);
|
||||
font-weight: var(--font-weight-bold);
|
||||
}
|
||||
|
||||
.m02-side__empty {
|
||||
margin: 0;
|
||||
color: var(--color-text-muted);
|
||||
|
||||
Reference in New Issue
Block a user