feat(spreadsheet): C 격자 — 행·열 묶어 접기(윤곽 +/- 단추, 계약 더함)

RowInfo·ColumnInfo.묶음{층,접힘} · Command「묶음설정」더함(계약 더함) — 접힘 상태 저장 ·
접으면 숨김처럼 그리되 머리 이중선 표시는 숨김·걸러짐과 갈라 안 보임(따로 표시).
commands.ts 는 기존 setAxis 틀에 「묶음」prop·case 만 최소로 얹음(exhaustive switch 깨짐 막음).
ORCA 시험 틀에서 접기·펴기 dispatch·저장·머리 이동·표시 구분 수치로 확인.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VVM3xZ1aUPcUTuW2WZSnwg
This commit is contained in:
2026-09-27 21:31:11 +09:00
co-authored by Claude Sonnet 5
parent 7aa9f2229d
commit ebdee04faa
6 changed files with 195 additions and 10 deletions
+14 -1
View File
@@ -450,7 +450,7 @@ function setAxis<V>(
s: Sheet,
axis: "행" | "열",
idx: number[],
prop: "폭" | "높이" | "숨김",
prop: "폭" | "높이" | "숨김" | "묶음",
value: V | null,
undoOf: (idx: number[], prev: V | null) => Command,
): Command {
@@ -561,6 +561,19 @@ export function applyCommand(book: Workbook, command: Command): CommandEffect {
})),
);
}
case "묶음설정": {
const s = sheetOf(book, command.시트);
const { 축 } = command;
return plain(
setAxis(s, 축, command.번호, "묶음", command.묶음, (번호, prev) => ({
종류: "묶음설정",
시트: s.id,
축,
번호,
묶음: prev,
})),
);
}
case "틀고정": {
const s = sheetOf(book, command.시트);
const prev = { 행: s.틀고정?.행 ?? 0, 열: s.틀고정?.열 ?? 0 };