-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>
// SPDX-License-Identifier: AGPL-3.0-only
import { flushSync } from "react-dom";
type ViewTransitionCallback = () => Promise<void> | void;
function runTransition(callback: ViewTransitionCallback) {
if (!document.startViewTransition) {
callback();
return;
}
document.startViewTransition(() => {
flushSync(() => {
callback();
});
});
}
export function useViewTransition(): (callback: ViewTransitionCallback) => void {
return runTransition;
}