diff --git a/apps/readest-app/src/app/reader/components/BooksGrid.tsx b/apps/readest-app/src/app/reader/components/BooksGrid.tsx index 0dfb6359..50ee0d1e 100644 --- a/apps/readest-app/src/app/reader/components/BooksGrid.tsx +++ b/apps/readest-app/src/app/reader/components/BooksGrid.tsx @@ -121,12 +121,13 @@ const BooksGrid: React.FC = ({ bookKeys, onCloseBook, onGoToLibr {isBookmarked && !hoveredBookKey && } 2} onCloseBook={onCloseBook} onGoToLibrary={onGoToLibrary} - gridInsets={gridInsets} onDropdownOpenChange={(isOpen) => setDropdownOpenBook(isOpen ? bookKey : '')} /> void; onGoToLibrary: () => void; onDropdownOpenChange?: (isOpen: boolean) => void; @@ -45,6 +46,7 @@ const HeaderBar: React.FC = ({ isTopLeft, isHoveredAnim, gridInsets, + screenInsets, onCloseBook, onGoToLibrary, onDropdownOpenChange, @@ -61,6 +63,7 @@ const HeaderBar: React.FC = ({ const viewSettings = getViewSettings(bookKey); const [isDropdownOpen, setIsDropdownOpen] = useState(false); + const [headerWidth, setHeaderWidth] = useState(0); const view = getView(bookKey); const iconSize16 = useResponsiveSize(16); const iconSize18 = useResponsiveSize(18); @@ -107,6 +110,16 @@ const HeaderBar: React.FC = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [appService, hoveredBookKey]); + useEffect(() => { + const header = headerRef.current; + if (!header) return; + const observer = new ResizeObserver(([entry]) => { + if (entry) setHeaderWidth(entry.contentRect.width); + }); + observer.observe(header); + return () => observer.disconnect(); + }, []); + // Check if mouse is outside header area to avoid false positive event of MouseLeave when clicking inside header on Windows const isMouseOutsideHeader = useCallback((clientX: number, clientY: number) => { if (!headerRef.current) return true; @@ -117,15 +130,20 @@ const HeaderBar: React.FC = ({ ); }, []); + const isHeaderCompact = headerWidth > 0 && headerWidth < 350; + const insets = window.innerWidth < 640 ? screenInsets : gridInsets; const isHeaderVisible = hoveredBookKey === bookKey || isDropdownOpen; const trafficLightInHeader = appService?.hasTrafficLight && !trafficLightInFullscreen && !isSideBarVisible && isTopLeft; return (
= ({ isHeaderVisible ? 'visible' : 'hidden', )} style={{ - height: systemUIVisible ? `${Math.max(gridInsets.top, statusBarHeight)}px` : '0px', + height: systemUIVisible ? `${Math.max(insets.top, statusBarHeight)}px` : '0px', }} />
= ({ )} style={{ marginTop: systemUIVisible - ? `${Math.max(gridInsets.top, statusBarHeight)}px` - : `${gridInsets.top}px`, + ? `${Math.max(insets.top, statusBarHeight)}px` + : `${insets.top}px`, }} onFocus={() => !appService?.isMobile && setHoveredBookKey(bookKey)} onMouseLeave={(e) => { @@ -171,21 +189,26 @@ const HeaderBar: React.FC = ({ } }} > -
- {!isSideBarVisible && ( -
- -
- )} - - - + {!isSideBarVisible && ( +
+ +
+ )} + + + +
{enableAnnotationQuickActions && ( = ({ className={clsx( 'header-title z-15 bg-base-100 pointer-events-none hidden flex-1 items-center justify-center sm:flex', !windowButtonVisible && 'absolute inset-0', + isHeaderCompact && '!hidden', )} >
= ({
-
- +
+ {!isHeaderCompact && } = ({ > - = ({ className={clsx( 'text-center', isVertical ? '' : 'line-clamp-1', - !isVertical && hoveredBookKey == bookKey && 'hidden', + !isVertical && + (hoveredBookKey == bookKey || (hoveredBookKey && appService?.isMobile)) && + 'hidden', )} > {section || ''} diff --git a/apps/readest-app/src/app/reader/components/StatusInfo.tsx b/apps/readest-app/src/app/reader/components/StatusInfo.tsx index c35329aa..3c3d749f 100644 --- a/apps/readest-app/src/app/reader/components/StatusInfo.tsx +++ b/apps/readest-app/src/app/reader/components/StatusInfo.tsx @@ -47,10 +47,10 @@ const StatusInfo: React.FC = ({ opacity={isEink ? 1.0 : 0.75} /> = ({ return (
{!viewSettings?.showPaginationButtons && (