diff --git a/packages/frontend/src/views/ToolsScannerView.vue b/packages/frontend/src/views/ToolsScannerView.vue index 0976394..135d02c 100644 --- a/packages/frontend/src/views/ToolsScannerView.vue +++ b/packages/frontend/src/views/ToolsScannerView.vue @@ -60,10 +60,13 @@ const mediaQueryCleanups: Array<() => void> = []; function refreshPointerMode() { if (typeof window === 'undefined') return; + const narrow = window.matchMedia('(max-width: 900px)').matches; coarsePointer.value = - window.matchMedia('(pointer: coarse)').matches || - window.matchMedia('(max-width: 900px)').matches; - if (!coarsePointer.value) queueOpen.value = false; + window.matchMedia('(pointer: coarse)').matches || narrow; + if (!narrow) { + queueOpen.value = false; + settingsOpen.value = false; + } } function syncBodyScrollLock() { @@ -376,14 +379,17 @@ function updateAspect(aspect: PaperAspect) { activePage.value.ocr = null; } -function updateScanIntensity(value: number) { +function setScanIntensity(value: number) { if (!activePage.value) return; - const next = Math.min(100, Math.max(0, Math.round(value))); - if (activePage.value.scanIntensity === next) return; - activePage.value.scanIntensity = next; - revokeUrl(activePage.value.warpedUrl); - activePage.value.warpedUrl = null; - activePage.value.ocr = null; + activePage.value.scanIntensity = Math.min( + 100, + Math.max(0, Math.round(value)), + ); +} + +async function commitScanIntensity() { + if (!activePage.value || busy.value) return; + await warpActive(); } async function redetectActive() { @@ -860,6 +866,46 @@ const progressPercent = computed(() => + + + + + +
+ + + +
+
:value="activePage.scanIntensity" :disabled="busy" @input=" - updateScanIntensity( + setScanIntensity( Number(($event.target as HTMLInputElement).value), ) " + @change="void commitScanIntensity()" /> 0 원본 · 중간 대비 · 100 문서형 @@ -940,7 +1036,7 @@ const progressPercent = computed(() =>