/* 수식 분석 화면 시험 틀 — 진짜 부품(createSpreadsheet)에 추적 화살 · 수식 계산 창 · 오류 ⚠ 를 붙임. * sub7 잇기 전이라 `inspect` 로 문맥(ctx)을 꺼내고, grid.render 뒤 refresh 를 부름. * 번들: node harness_analysis_bundle.cjs → tmp/spreadsheet_analysis/harness.js (git 밖) */ import { createSpreadsheet } from "../../../A00_Common/spreadsheet/spreadsheet"; import { attachTrace } from "../../../A00_Common/spreadsheet/spreadsheet_trace"; import { openEvalSteps } from "../../../A00_Common/spreadsheet/spreadsheet_eval_steps"; import { attachErrorTip } from "../../../A00_Common/spreadsheet/spreadsheet_errcheck"; import type { SpreadsheetContext } from "../../../A00_Common/spreadsheet/spreadsheet_view_types"; import type { Workbook } from "../../../A00_Common/spreadsheet/spreadsheet_types"; const w = window as unknown as Record; const book: Workbook = { 종류: "통합문서", 판: 1, 이름: "harness", 서식: [{}], 시트: [ { id: "s1", 이름: "분석", 칸: { A1: { 값: "단가" }, B1: { 값: "수량" }, C1: { 값: "금액" }, A2: { 값: 1200 }, B2: { 값: 3 }, C2: { 식: "A2*B2" }, A3: { 값: 800 }, B3: { 값: "5" }, C3: { 식: "A3*B3" }, A4: { 값: 50 }, B4: { 값: 0 }, C4: { 식: "A4/B4" }, C6: { 식: "SUM(C2:C3)+IF(B2>2,C2*10%,0)" }, D6: { 식: "C6*2" }, E2: { 식: "E3+1" }, E3: { 식: "E2+1" }, }, }, { id: "s2", 이름: "요약", 칸: { A1: { 식: "분석!D6" } } }, ], 활성: "s1", }; const host = document.getElementById("host")!; w.ss = createSpreadsheet(host, book, { inspect: true }); const c = w.__aisloSheet as SpreadsheetContext; const trace = attachTrace(c); const tip = attachErrorTip(c, trace); const render = c.grid.render.bind(c.grid); c.grid.render = () => { render(); trace.refresh(); tip.refresh(); }; const renderSel = c.grid.renderSelection.bind(c.grid); c.grid.renderSelection = () => { renderSel(); tip.refresh(); }; w.ssCtx = c; w.ssTrace = trace; w.ssTip = tip; w.ssSteps = () => openEvalSteps(c); for (const [id, run] of [ ["btn-prec", () => trace.precedents()], ["btn-dep", () => trace.dependents()], ["btn-clear", () => trace.clear()], ["btn-steps", () => openEvalSteps(c)], ] as const) document.getElementById(id)!.addEventListener("click", run);