그리드 줌 · 사진 줌/팬 · 영상 재생목록 추가
- 그리드 썸네일 줌: Ctrl+휠 + 툴바 슬라이더(110~420px), localStorage 유지 - 라이트박스 사진 줌/팬: 휠(커서 기준)·드래그·더블클릭·+/-/0 키, 파일 이동 시 리셋, 확대율 배지 - 영상 재생목록: 종료 시 다음 항목 자동재생, 🔁 반복 토글 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -139,6 +139,32 @@ const [sidebarVersion, setSidebarVersion] = createSignal(0);
|
||||
export { sidebarVersion };
|
||||
export const refreshSidebar = () => setSidebarVersion((v) => v + 1);
|
||||
|
||||
// ── 그리드 썸네일 크기(줌) ───────────────────────────────
|
||||
export const GRID_ROW_MIN = 110;
|
||||
export const GRID_ROW_MAX = 420;
|
||||
const GRID_ROW_KEY = "archive.grid.rowHeight";
|
||||
const initialRow = Number(localStorage.getItem(GRID_ROW_KEY) ?? "200");
|
||||
const [gridRowHeight, setGridRowHeightRaw] = createSignal(
|
||||
Number.isFinite(initialRow) ? Math.min(GRID_ROW_MAX, Math.max(GRID_ROW_MIN, initialRow)) : 200,
|
||||
);
|
||||
export { gridRowHeight };
|
||||
|
||||
export function setGridRowHeight(px: number): void {
|
||||
const clamped = Math.min(GRID_ROW_MAX, Math.max(GRID_ROW_MIN, Math.round(px)));
|
||||
setGridRowHeightRaw(clamped);
|
||||
localStorage.setItem(GRID_ROW_KEY, String(clamped));
|
||||
}
|
||||
|
||||
/** 상대 배율로 줌 (Ctrl+휠) */
|
||||
export function zoomGrid(factor: number): void {
|
||||
setGridRowHeight(gridRowHeight() * factor);
|
||||
}
|
||||
|
||||
// ── 영상 재생목록 옵션 ───────────────────────────────────
|
||||
const [repeatMode, setRepeatMode] = createSignal(false);
|
||||
export { repeatMode };
|
||||
export const toggleRepeat = () => setRepeatMode((r) => !r);
|
||||
|
||||
// ── 중복 검토 패널 ───────────────────────────────────────
|
||||
const [dedupeOpen, setDedupeOpen] = createSignal(false);
|
||||
export { dedupeOpen };
|
||||
|
||||
Reference in New Issue
Block a user