diff --git a/components/pdf/PDFViewer.tsx b/components/pdf/PDFViewer.tsx index 51b019d..9ac4d47 100644 --- a/components/pdf/PDFViewer.tsx +++ b/components/pdf/PDFViewer.tsx @@ -1234,11 +1234,6 @@ export default function PDFViewer({ setUser(getLocalUser()); }, []); - // UX review 2026-09-09: จอแคบกว่า xl (< 1280px) sidebar เป็น overlay — ปิดอัตโนมัติตอน mount - useEffect(() => { - if (!window.matchMedia("(min-width: 1280px)").matches) setSidebarOpen(false); - }, []); - // โหลดเอกสาร: dynamic import ภายใน useEffect เท่านั้น (invariant #6) useEffect(() => { let cancelled = false; @@ -1374,6 +1369,21 @@ export default function PDFViewer({ } }, [pageSizes, annotations]); + // จอเล็ก: หน้ากระดาษ (scale 1) กว้างกว่าพื้นที่แสดงผล → ย่อให้พอดีความกว้าง + // ครั้งเดียวตอนโหลดเท่านั้น (ผู้ใช้ซูมเองหลังจากนี้แล้วไม่ถูกแทนที่) — + // อิงความกว้างหน้าแรกเหมือน basePageWidth และตัด padding px-4 ซ้าย-ขวาของ main ออก + const mainRef = useRef(null); + const fitWidthDoneRef = useRef(false); + useEffect(() => { + if (pageSizes.length === 0 || fitWidthDoneRef.current) return; + fitWidthDoneRef.current = true; + const avail = (mainRef.current?.clientWidth ?? 0) - 32; + const pageW = pageSizes[0].width; + if (avail > 0 && pageW > avail) { + setScale(clamp(Math.floor((avail / pageW) * 100) / 100, 0.5, 1)); + } + }, [pageSizes]); + useEffect(() => { setDraft(""); }, [composer]); @@ -2352,22 +2362,23 @@ export default function PDFViewer({ {TEXT_SELECTION_TOOLS.has(tool) && ( )} - {/* UX review 2026-09-09: backdrop กันคลิกทะลุใต้ sidebar overlay (เฉพาะ < xl) + {/* UX review 2026-09-09: backdrop กันคลิกทะลุใต้ sidebar overlay (เฉพาะ < lg) z-[45] อยู่เหนือ header sticky z-40 แต่ใต้ aside z-50 / composer z-50 */} {sidebarOpen && (
setSidebarOpen(false)} /> )} - {/* xl+ = sticky แยกคอลัมน์เหมือนเดิม / < xl = overlay เลื่อนเข้า-ออก - (ปิดบน desktop ใช้ xl:hidden ออกจาก flow → main เต็มจอ) */} + {/* lg+ = sticky แยกคอลัมน์ (เปิดแล้ว content ขยับไปข้าง ๆ ไม่บังกัน) + / < lg = overlay เลื่อนเข้า-ออก กว้างเป็นสัดส่วนของจอกว้างกว่า 288px + (ปิดบน desktop ใช้ lg:hidden ออกจาก flow → main เต็มจอ) */}