/* ============================================================================= * spreadsheet.ts (주인 D) * 산출근거 스프레드시트 진입 — `createSpreadsheet(칸, 통합문서, {readOnly, onChange, onSelect})` → * `{getDoc, setDoc, recalc, destroy}`(표 부품 `createSheet` 와 같은 모양 · M02 는 부르는 줄만 바꿈). * 문맥(`SpreadsheetContext`)을 만들어 C 격자 · E 도구 · 탭 · 메뉴 · 클립보드를 붙이고 D 입력(고름 · 편집기 · * 키 · 마우스)을 잇음. 한글 조합 = 숨은 textarea 에 늘 초점 · compositionstart 로 편집 시작(keydown 글자 방식 금지). * ⚠ M02 만 `import()` 로 불러옴 — 정적 import 금지(다른 페이지 번들에 안 섞이게). * 저장은 부른 쪽 몫(`onChange` 로 문서 · 자동저장 없음 · [저장] 때 서버가 Node 로 다시 풂). * 0 계약 머리 — 몸은 D 가 채움. * ========================================================================== */ import type { CalcValues, Workbook } from "./spreadsheet_types"; export type { Workbook, CalcValues } from "./spreadsheet_types"; export interface SpreadsheetOptions { /** 읽기만 — 도구 모음 · 메뉴 없음 · 편집 · 붙여넣기 · 끌기 막음(고르기 · 복사는 됨) */ readOnly?: boolean; /** 명령마다 문서 사본 — 페이지가 캐시(sessionStorage)에 쌓고 [저장] 단추를 켬 */ onChange?: (book: Workbook) => void; /** 고름이 바뀜 — 시트 id · 활성 칸 A1 · 범위 A1 */ onSelect?: (selection: { 시트: string; 칸: string; 범위: string }) => void; } export interface SpreadsheetHandle { /** 문서 사본 */ getDoc(): Workbook; /** 문서 바꿔 끼움 — 되돌리기 이력 비움 · 고름 A1 */ setDoc(book: Workbook): void; /** 전부 다시 풀고 다시 그림 · 결과(저장 모양) */ recalc(): CalcValues; destroy(): void; } const todo = (): never => { throw new Error("spreadsheet: 아직 없음(D)"); }; export function createSpreadsheet( _host: HTMLElement, _book: Workbook, _opts: SpreadsheetOptions, ): SpreadsheetHandle { return todo(); }