@real-router/svelte 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/dom-utils/scroll-restore.js +14 -7
- package/package.json +4 -4
- package/src/constants.ts +2 -4
package/README.md
CHANGED
|
@@ -473,7 +473,7 @@ Opt-in preservation of scroll position across navigations:
|
|
|
473
473
|
</RouterProvider>
|
|
474
474
|
```
|
|
475
475
|
|
|
476
|
-
Restores scroll on back/forward, scrolls to top (or `#hash`) on push. Three modes: `"restore"` (default), `"top"`, `"native"`. Custom containers via `scrollContainer: () => HTMLElement | null`. Lifecycle tied to the provider — created on mount, destroyed on unmount. See [Scroll Restoration guide](https://github.com/greydragon888/real-router/wiki/Scroll-Restoration) for
|
|
476
|
+
Restores scroll on back/forward, scrolls to top (or `#hash`) on push. Three modes: `"restore"` (default), `"top"`, `"native"`. Custom containers via `scrollContainer: () => HTMLElement | null`. Lifecycle tied to the provider — created on mount, destroyed on unmount. Under `@real-router/browser-plugin`, replace transitions now preserve scroll position and programmatic reloads restore from `sessionStorage` (portable via `state.transition.replace` / `state.transition.reload`). See [Scroll Restoration guide](https://github.com/greydragon888/real-router/wiki/Scroll-Restoration) for the full behaviour matrix.
|
|
477
477
|
|
|
478
478
|
## View Transitions
|
|
479
479
|
|
|
@@ -155,22 +155,29 @@ export function createScrollRestoration(router, options) {
|
|
|
155
155
|
putPos(prevKey, readPos());
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
-
// Single rAF so DOM is committed before we read anchors / write scroll.
|
|
159
|
-
// Guard against destroy() racing with the callback.
|
|
160
158
|
requestAnimationFrame(() => {
|
|
161
159
|
if (destroyed) {
|
|
162
160
|
return;
|
|
163
161
|
}
|
|
164
|
-
if (mode === "top"
|
|
162
|
+
if (mode === "top") {
|
|
165
163
|
scrollToHashOrTop(route);
|
|
166
164
|
return;
|
|
167
165
|
}
|
|
168
|
-
if (nav
|
|
166
|
+
if (route.transition.replace || nav?.navigationType === "replace") {
|
|
169
167
|
return;
|
|
170
168
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
169
|
+
// Both arms are required: `transition.reload` only fires for programmatic
|
|
170
|
+
// `router.navigate({reload:true})`. F5 under navigation-plugin primes
|
|
171
|
+
// `nav.navigationType === "reload"` via #531 getActivationType but leaves
|
|
172
|
+
// opts.reload undefined, so dropping the plugin arm would regress F5
|
|
173
|
+
// scroll-restore. Same belt-and-suspenders pattern is used for replace
|
|
174
|
+
// above. Browser-plugin's F5 is not covered (no priming, out of scope).
|
|
175
|
+
if (route.transition.reload || nav?.navigationType === "reload") {
|
|
176
|
+
const key = safeKeyOf(route);
|
|
177
|
+
writePos(key === null ? 0 : (loadStore()[key] ?? 0));
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (nav?.direction === "back" || nav?.navigationType === "traverse") {
|
|
174
181
|
const key = safeKeyOf(route);
|
|
175
182
|
writePos(key === null ? 0 : (loadStore()[key] ?? 0));
|
|
176
183
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@real-router/svelte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Svelte 5 integration for Real-Router",
|
|
6
6
|
"svelte": "./dist/index.js",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"license": "MIT",
|
|
50
50
|
"sideEffects": false,
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@real-router/core": "^0.
|
|
52
|
+
"@real-router/core": "^0.54.1",
|
|
53
53
|
"@real-router/route-utils": "^0.2.2",
|
|
54
|
-
"@real-router/sources": "^0.8.
|
|
54
|
+
"@real-router/sources": "^0.8.3"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@sveltejs/package": "2.5.7",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"svelte": "5.55.7",
|
|
64
64
|
"svelte-check": "4.4.5",
|
|
65
65
|
"svelte-eslint-parser": "1.6.0",
|
|
66
|
-
"@real-router/browser-plugin": "^0.17.
|
|
66
|
+
"@real-router/browser-plugin": "^0.17.4"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"svelte": ">=5.7.0"
|
package/src/constants.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { NavigationOptions, Params } from "@real-router/core";
|
|
2
2
|
|
|
3
|
-
export const EMPTY_PARAMS: Params = Object.freeze({})
|
|
3
|
+
export const EMPTY_PARAMS: Params = Object.freeze({});
|
|
4
4
|
|
|
5
|
-
export const EMPTY_OPTIONS: NavigationOptions = Object.freeze(
|
|
6
|
-
{},
|
|
7
|
-
) as NavigationOptions;
|
|
5
|
+
export const EMPTY_OPTIONS: NavigationOptions = Object.freeze({});
|
|
8
6
|
|
|
9
7
|
export const NOOP = (): void => {};
|