fix(pdf-server): let zoom-out button go below fit (revert button floor) (#589)

Some hosts overlay UI on the iframe (chat composer, etc.) without
reporting it in safeAreaInsets.bottom, so computeFitScale's 'fit' fills
the iframe but the page bottom sits under the overlay. Flooring the
zoom-out button at fit removed the only escape hatch.

Pinch keeps the fit floor + rubber-band (it needs a defined snap point
for the exit-to-inline gesture). The button now goes to ZOOM_MIN as
before #587.
This commit is contained in:
Olivier Chafik 2026-04-02 08:09:24 +01:00 • committed by GitHub
commit 2e55c842ba
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3340,13 +3340,13 @@ function zoomIn() {
renderPage().then(scrollSelectionIntoView);
}
async function zoomOut() {
function zoomOut() {
userHasZoomed = true;
// Fullscreen floor is fit-to-page (anything smaller is dead margin).
const fit =
currentDisplayMode === "fullscreen" ? await computeFitScale() : null;
const floor = fit !== null ? Math.max(ZOOM_MIN, fit) : ZOOM_MIN;
scale = Math.max(scale - 0.25, floor);
// Intentionally NOT floored at fit-to-page (unlike pinch). Hosts may
// overlay UI on the iframe without reporting it in safeAreaInsets, so
// "fit" can leave the page bottom hidden; the button is the escape hatch
// to shrink past it. Pinch still rubber-bands at fit (see commitPinch).
scale = Math.max(scale - 0.25, ZOOM_MIN);
renderPage().then(scrollSelectionIntoView);
}