feat: add reusable resizable split panes

This commit is contained in:
2026-08-28 21:21:50 +09:00
parent a48791075e
commit d41d06d04b
4 changed files with 436 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
import {
clampSplitPaneSize,
splitPaneSizeFromPointer,
} from "/packages/ui/split-pane.js";
test("분할 패널 폭이 설정 범위와 작업 영역 최소 폭을 지킨다", () => {
const metrics = {
containerSize: 1400,
separatorSize: 12,
minSize: 360,
maxSize: 720,
minMainSize: 560,
};
assertEqual(clampSplitPaneSize(620, metrics), 620, "requested width");
assertEqual(clampSplitPaneSize(900, metrics), 720, "hard maximum");
assertEqual(clampSplitPaneSize(200, metrics), 360, "configured minimum");
assertEqual(
clampSplitPaneSize(720, { ...metrics, containerSize: 981 }),
409,
"workspace-aware maximum",
);
});
test("분리선 pointer 좌표가 시작·끝 패널 폭으로 변환된다", () => {
const common = {
pointerX: 506,
containerLeft: 100,
containerRight: 1500,
separatorSize: 12,
};
assertEqual(
splitPaneSizeFromPointer({ ...common, panelSide: "start" }),
400,
"start panel width",
);
assertEqual(
splitPaneSizeFromPointer({ ...common, panelSide: "end" }),
988,
"end panel width",
);
});