Compare commits

...

2 commits

Author SHA1 Message Date
thislight
8e8554331b
StackedRouter: increase swipe to back area
All checks were successful
/ depoly (push) Successful in 1m22s
2024-11-21 16:22:22 +08:00
thislight
df5a976ec3
UnexpectedError: adjust visual, add selectable 2024-11-21 15:58:27 +08:00
2 changed files with 67 additions and 23 deletions

View file

@ -42,6 +42,29 @@ const UnexpectedError: Component<{ error?: any }> = (props) => {
calc(var(--safe-area-inset-bottom) + 20px) calc(var(--safe-area-inset-bottom) + 20px)
calc(var(--safe-area-inset-left) + 20px); calc(var(--safe-area-inset-left) + 20px);
} }
details {
max-width: 100vw;
max-width: 100dvw;
overflow: auto;
& * {
user-select: all;
}
summary {
position: sticky;
left: 0;
top: 0;
user-select: none;
}
}
.actions {
margin-top: 20px;
margin-bottom: 20px;
}
`; `;
return ( return (
@ -52,8 +75,11 @@ const UnexpectedError: Component<{ error?: any }> = (props) => {
You can restart the app to see if this guy is gone. If you meet this guy You can restart the app to see if this guy is gone. If you meet this guy
repeatly, please report to us. repeatly, please report to us.
</p> </p>
<div> <div class="actions">
<Button onClick={() => (window.location.replace("/"))}> <Button
onClick={() => window.location.replace("/")}
variant="contained"
>
Restart App Restart App
</Button> </Button>
</div> </div>
@ -61,7 +87,10 @@ const UnexpectedError: Component<{ error?: any }> = (props) => {
<summary> <summary>
{errorMsg.loading ? "Generating " : " "}Technical Infomation {errorMsg.loading ? "Generating " : " "}Technical Infomation
</summary> </summary>
<pre>{errorMsg()}</pre> <pre>
On: {window.location.href} <br />
{errorMsg()}
</pre>
</details> </details>
</main> </main>
); );

View file

@ -294,8 +294,9 @@ const StackedRouter: Component<StackedRouterProps> = (oprops) => {
}; };
let reenterableAnimation: Animation | undefined; let reenterableAnimation: Animation | undefined;
let origX = 0, let origWidth = 0,
origWidth = 0; origFigX = 0,
origFigY = 0;
const resetAnimation = () => { const resetAnimation = () => {
reenterableAnimation = undefined; reenterableAnimation = undefined;
@ -307,23 +308,25 @@ const StackedRouter: Component<StackedRouterProps> = (oprops) => {
if (event.touches.length !== 1) { if (event.touches.length !== 1) {
return; return;
} }
const [fig0] = event.touches;
const { x, width } = event.currentTarget.getBoundingClientRect();
if (fig0.clientX < x - 22 || fig0.clientX > x + 22) {
return;
}
origX = x;
origWidth = width;
event.preventDefault();
event.stopPropagation(); event.stopPropagation();
const lastFr = stack[stack.length - 1]; const [fig0] = event.touches;
const createAnimation = lastFr.animateClose ?? animateClose; const { width } = event.currentTarget.getBoundingClientRect();
reenterableAnimation = createAnimation(event.currentTarget); origWidth = width;
reenterableAnimation.pause(); origFigX = fig0.clientX;
reenterableAnimation.addEventListener("finish", resetAnimation); origFigY = fig0.clientY;
reenterableAnimation.addEventListener("cancel", resetAnimation);
if (
fig0.clientX < -22 ||
fig0.clientX > 22 ||
fig0.clientX < window.innerWidth - 22 ||
fig0.clientX > window.innerWidth + 22
) {
return;
}
// Prevent the default swipe to back/forward on iOS
event.preventDefault();
}; };
const onDialogTouchMove = ( const onDialogTouchMove = (
@ -336,13 +339,25 @@ const StackedRouter: Component<StackedRouterProps> = (oprops) => {
} }
} }
if (!reenterableAnimation) return; const [fig0] = event.touches;
const ofsX = fig0.clientX - origFigX;
if (!reenterableAnimation) {
if (!(ofsX > 22) || !(Math.abs(fig0.clientY - origFigY) < 44)) {
return;
}
const lastFr = stack[stack.length - 1];
const createAnimation = lastFr.animateClose ?? animateClose;
reenterableAnimation = createAnimation(event.currentTarget);
reenterableAnimation.pause();
reenterableAnimation.addEventListener("finish", resetAnimation);
reenterableAnimation.addEventListener("cancel", resetAnimation);
}
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
const [fig0] = event.touches;
const ofsX = fig0.clientX - origX;
const pc = ofsX / origWidth / window.devicePixelRatio; const pc = ofsX / origWidth / window.devicePixelRatio;
const { activeDuration, delay } = const { activeDuration, delay } =