feat(B09): 설계내역서 글 왼쪽 맞춤 · 레벨 = 왼쪽 들여쓰기 · 레벨 도구 줄(단추 넷 · Tab · Shift+Tab · Alt+↑↓ · 안내) (200-2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SE9MxeXTu2uaDZ55BJowAY
This commit is contained in:
2026-10-10 14:17:50 +09:00
co-authored by Claude Opus 5.5
parent 58db0dab7f
commit c9cd2812dc
4 changed files with 405 additions and 2 deletions
+6 -2
View File
@@ -52,6 +52,7 @@ import {
} from "./B09_Estimation_UI_Tabs_Base";
import { buildBill } from "./B09_Estimation_UI_Tabs_Bill";
import { attachRowMenu, openMenuAt, type BillTable } from "./B09_Estimation_UI_Tabs_Bill_Edit";
import { levelBar, pickedClass } from "./B09_Estimation_UI_Tabs_Bill_Level";
import {
buildSumExpense,
buildSumLabor,
@@ -249,8 +250,11 @@ export function renderB09Estimation(root: HTMLElement): void {
...renderGroupPanel({ tab, spec, hint, focus, goto, makeTable, redraw }),
);
}
const table = makeTable();
panel.replaceChildren(...(hint ? [hint] : []), table.root);
// 200-2 설계내역서 = 표 위 레벨 도구 줄 · 고른 줄 강조
const bill = (spec as BillTable).menu ? (spec as BillTable) : null;
const table = makeTable(bill ? (i) => pickedClass(bill.rows[i]) : undefined);
const level = bill ? levelBar(table.root, bill) : null;
panel.replaceChildren(...(hint ? [hint] : []), ...(level ? [level] : []), table.root);
if (focus !== undefined) {
const index = rowIndex(spec.rows, focus);
if (index >= 0) requestAnimationFrame(() => table.focusRow(index));