/* ============================================================================= * M01_MasterData_UI_LogicLab_Side.ts * 로직 상세 — 왼쪽 지금 내용 · 오른쪽 접는 패널 「원문」(품셈 본문 절) * 공용 오른쪽 접는 패널(ui_template_side_panels) — 접힘 됨 · 접힌 패널 = 세로 글 띠 * 열림 · 폭은 취향 키(`m01-logic-side`) · 원문 = 공용 원문 보기(`LogicLab_Source`) * ========================================================================== */ import { currentLanguageIndex } from "@ui/ui_template_locale"; import { createSidePanels } from "@ui/ui_template_side_panels"; import { el } from "@ui/ui_template_elements"; import { createSourceView } from "./M01_MasterData_UI_LogicLab_Source"; import "./M01_MasterData_UI_LogicLab_Side.css"; const TEXT = { Source: ["원문", "Source"], } as const; const ts = (key: keyof typeof TEXT): string => TEXT[key][currentLanguageIndex === 1 ? 1 : 0]; export interface LogicSide { /** [왼쪽 지금 내용, 오른쪽 패널] 칸 */ root: HTMLElement; /** 연 로직의 출처 글 — 원문 패널이 열려 있으면 찾음 */ showSource(src: string): void; } export function buildLogicSide(left: HTMLElement): LogicSide { const source = createSourceView(); let want = ""; /** 원문 패널이 열려 있을 때만 찾음 */ const load = (): void => { if (sp.current() === "source") source.show(want); }; const sp = createSidePanels({ prefKey: "m01-logic-side", defaultWidth: 520, minWidth: 320, panels: [{ id: "source", title: ts("Source"), body: source.root }], onChange: load, }); return { root: el("div", { className: "m01lab-side ui-side-panels-row", children: [left, sp.root] }), showSource: (src) => { want = src; load(); }, }; }