@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 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 details.
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" || !nav) {
162
+ if (mode === "top") {
165
163
  scrollToHashOrTop(route);
166
164
  return;
167
165
  }
168
- if (nav.navigationType === "replace") {
166
+ if (route.transition.replace || nav?.navigationType === "replace") {
169
167
  return;
170
168
  }
171
- if (nav.direction === "back" ||
172
- nav.navigationType === "traverse" ||
173
- nav.navigationType === "reload") {
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.11.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.53.0",
52
+ "@real-router/core": "^0.54.1",
53
53
  "@real-router/route-utils": "^0.2.2",
54
- "@real-router/sources": "^0.8.2"
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.2"
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({}) as Params;
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 => {};