- spreadsheet_types.ts · spreadsheet_view_types.ts — 문서 · 칸 · 서식 · 수식 나무 · 값 · 명령 · 계산 엔진 · 화면 문맥 계약 - 머리 주석에 파일 · 주인(A~F) · 예산 줄 수 · 크기 예산(gzip 54 KB) · 규칙(외부 라이브러리 0 · M02 만 늦게 불러옴) - A · B 엔진 · C 격자 · D 진입 · E 도구 공개 함수 머리(빈 몸) - spreadsheet_sample.json — basis/<열 id>.json 한 벌 견본(병합 · 서식 · 다른 시트 참조 · 숨김 · 계산값) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168FQuoV7vDh5nhnSowW5cp
46 lines
2.1 KiB
TypeScript
46 lines
2.1 KiB
TypeScript
/* =============================================================================
|
|
* 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();
|
|
}
|