Compare commits

...

2 Commits

Author SHA1 Message Date
BOHA
27b734f6d0 chore(release): v2.4.21 - kill PTR on immersive Odin
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 09:37:55 +02:00
BOHA
91072548d4 fix(odin): disable pull-to-refresh on the immersive mobile page
A PTR reload lands while the standalone-PWA viewport is still settling and
re-races the --app-height measurement (Chromium settles without firing
resize), bringing the scroll room back ~50% of the time. The immersive page
is fixed-viewport, so overscroll-behavior-y: none on html+body removes the
gesture (and the race trigger) entirely; restored on route leave.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 09:37:55 +02:00
3 changed files with 12 additions and 3 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "app-ts",
"version": "2.4.20",
"version": "2.4.21",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "app-ts",
"version": "2.4.20",
"version": "2.4.21",
"license": "ISC",
"dependencies": {
"@anthropic-ai/sdk": "^0.102.0",

View File

@@ -1,6 +1,6 @@
{
"name": "app-ts",
"version": "2.4.20",
"version": "2.4.21",
"description": "",
"main": "dist/server.js",
"scripts": {

View File

@@ -42,10 +42,19 @@ export default function AppShell() {
set();
window.addEventListener("resize", set);
window.visualViewport?.addEventListener("resize", set);
// Kill pull-to-refresh: a PTR reload lands mid-viewport-settle and
// re-races the measurement (Chromium settles without a resize event).
// The immersive page is fixed-viewport — the gesture has no use here.
const prevRootOverscroll = root.style.overscrollBehaviorY;
const prevBodyOverscroll = document.body.style.overscrollBehaviorY;
root.style.overscrollBehaviorY = "none";
document.body.style.overscrollBehaviorY = "none";
return () => {
window.removeEventListener("resize", set);
window.visualViewport?.removeEventListener("resize", set);
root.style.removeProperty("--app-height");
root.style.overscrollBehaviorY = prevRootOverscroll;
document.body.style.overscrollBehaviorY = prevBodyOverscroll;
};
}, [immersiveOnMobile]);