From 860e251425b55875dc3193b160cc2b53a2a215aa Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 28 Sep 2026 00:13:06 +0900 Subject: [PATCH] =?UTF-8?q?chore(M02):=20=EC=9E=84=EC=8B=9C=20=EC=8A=A4?= =?UTF-8?q?=ED=94=84=EB=A0=88=EB=93=9C=EC=8B=9C=ED=8A=B8=20=EC=8B=9C?= =?UTF-8?q?=ED=97=98=20=EB=8B=A8=EC=B6=94=20=C2=B7=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?tmp=20=EA=B2=AC=EB=B3=B8=20=EA=B8=B8=20=C2=B7=20inspect=20?= =?UTF-8?q?=ED=86=B5=EB=A1=9C=20=EC=A7=80=EC=9B=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_0168FQuoV7vDh5nhnSowW5cp --- .../M02_MasterTemplete_Spreadsheet_Trial.css | 25 ----- .../M02_MasterTemplete_Spreadsheet_Trial.ts | 92 ------------------- 2 files changed, 117 deletions(-) delete mode 100644 M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.css delete mode 100644 M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.ts diff --git a/M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.css b/M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.css deleted file mode 100644 index aca49b93..00000000 --- a/M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.css +++ /dev/null @@ -1,25 +0,0 @@ -/* ⚠ 임시 — [스프레드시트 시험] 화면(1단계 검증 뒤 지움) */ -.m02-trial { - display: flex; - flex-direction: column; - gap: 8px; - width: 100%; -} - -.m02-trial__bar { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; -} - -.m02-trial__note { - color: var(--color-text-muted); - font-size: 0.85rem; -} - -.m02-trial__sheet { - width: 100%; - height: 75vh; - min-height: 420px; -} diff --git a/M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.ts b/M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.ts deleted file mode 100644 index bbe3ffc2..00000000 --- a/M02_MasterTemplete/M02_MasterTemplete_Spreadsheet_Trial.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* ============================================================================= - * M02_MasterTemplete_Spreadsheet_Trial.ts - * ⚠ 임시 — [스프레드시트 시험] 단추(사용자 지시 · 스프레드시트 1단계 검증 뒤 지움: - * 이 파일 · `M02_MasterTemplete_UI_Main.ts` 의 시험 단추 · Api_Fetch `*SpreadsheetTrial` · - * Router `/spreadsheet-trial` · 저장 자리 `tmp/spreadsheet_trial.json`). - * 빈 통합문서(시트 셋)를 메인 칸에 넓게 엶 · [시험 저장] = 서버가 같은 엔진으로 다시 풀어 tmp 에 적음. - * 글자는 이 파일에 둠. - * ========================================================================== */ - -import { createButton, el, showToast } from "@ui/ui_template_elements"; -import type { SpreadsheetHandle, Workbook } from "../A00_Common/spreadsheet/spreadsheet"; -import { readSpreadsheetTrial, saveSpreadsheetTrial } from "./M02_MasterTemplete_Api_Fetch"; -import "./M02_MasterTemplete_Spreadsheet_Trial.css"; - -const TEXT = { - save: "시험 저장", - note: "임시 시험 화면 — 저장은 서버 tmp 견본 자리(작업 양식과 무관)", - saved: "시험 통합문서를 저장했음(서버 재계산)", - failed: "스프레드시트 시험 실패 — {value}", -}; - -const why = (error: unknown): string => (error instanceof Error ? error.message : String(error)); - -export interface TrialHandle { - getDoc: () => unknown; - destroy: () => void; -} - -/** `onDirty` = 고침 있음 · 저장 뒤 없음(페이지의 떠날 때 물음과 이음) */ -export function mountSpreadsheetTrial( - host: HTMLElement, - onDirty: (dirty: boolean) => void, -): TrialHandle { - let sheet: SpreadsheetHandle | null = null; - let alive = true; - const save = createButton({ label: TEXT.save, variant: "filled" }); - const area = el("div", { className: "m02-trial__sheet" }); - const root = el("div", { - className: "m02-trial", - children: [ - el("div", { - className: "m02-trial__bar", - children: [el("span", { className: "m02-trial__note", text: TEXT.note }), save], - }), - area, - ], - }); - host.replaceChildren(root); - const fail = (error: unknown): void => - showToast(TEXT.failed.replace("{value}", why(error)), "error"); - - void (async () => { - try { - const [{ createSpreadsheet }, got] = await Promise.all([ - import("../A00_Common/spreadsheet/spreadsheet"), - readSpreadsheetTrial(), - ]); - if (!alive) return; - sheet = createSpreadsheet(area, got.문서 as Workbook, { - onChange: () => onDirty(true), - inspect: true, // ⚠ 임시 — 브레인 검증용 문맥(window.__aisloSheet) · 산출근거 카드는 안 넘김 - }); - } catch (error) { - if (!alive) return; - area.replaceChildren(el("p", { className: "m02-trial__empty", text: why(error) })); - fail(error); - } - })(); - - save.addEventListener("click", async () => { - if (!sheet) return; - save.disabled = true; - try { - await saveSpreadsheetTrial(sheet.getDoc()); - onDirty(false); - showToast(TEXT.saved, "success"); - } catch (error) { - fail(error); - } finally { - save.disabled = false; - } - }); - - return { - getDoc: () => sheet?.getDoc() ?? null, - destroy: () => { - alive = false; - sheet?.destroy(); - root.remove(); - }, - }; -}