@timber-js/app 0.2.0-alpha.67 → 0.2.0-alpha.69

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.
Files changed (51) hide show
  1. package/LICENSE +8 -0
  2. package/dist/client/history.d.ts +19 -4
  3. package/dist/client/history.d.ts.map +1 -1
  4. package/dist/client/index.js +321 -167
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/client/link-pending-store.d.ts +3 -3
  7. package/dist/client/link.d.ts.map +1 -1
  8. package/dist/client/nav-link-store.d.ts +36 -0
  9. package/dist/client/nav-link-store.d.ts.map +1 -0
  10. package/dist/client/navigation-api-types.d.ts +90 -0
  11. package/dist/client/navigation-api-types.d.ts.map +1 -0
  12. package/dist/client/navigation-api.d.ts +115 -0
  13. package/dist/client/navigation-api.d.ts.map +1 -0
  14. package/dist/client/navigation-context.d.ts +11 -0
  15. package/dist/client/navigation-context.d.ts.map +1 -1
  16. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +31 -9
  17. package/dist/client/navigation-root.d.ts.map +1 -0
  18. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  19. package/dist/client/router.d.ts +46 -2
  20. package/dist/client/router.d.ts.map +1 -1
  21. package/dist/client/rsc-fetch.d.ts +1 -1
  22. package/dist/client/rsc-fetch.d.ts.map +1 -1
  23. package/dist/client/top-loader.d.ts +2 -2
  24. package/dist/client/top-loader.d.ts.map +1 -1
  25. package/dist/server/index.js.map +1 -1
  26. package/dist/server/route-element-builder.d.ts +10 -0
  27. package/dist/server/route-element-builder.d.ts.map +1 -1
  28. package/dist/server/slot-resolver.d.ts.map +1 -1
  29. package/dist/server/ssr-wrappers.d.ts +3 -3
  30. package/package.json +6 -7
  31. package/src/cli.ts +0 -0
  32. package/src/client/browser-entry.ts +92 -19
  33. package/src/client/history.ts +26 -4
  34. package/src/client/link-pending-store.ts +3 -3
  35. package/src/client/link.tsx +31 -9
  36. package/src/client/nav-link-store.ts +47 -0
  37. package/src/client/navigation-api-types.ts +112 -0
  38. package/src/client/navigation-api.ts +315 -0
  39. package/src/client/navigation-context.ts +22 -2
  40. package/src/client/navigation-root.tsx +346 -0
  41. package/src/client/nuqs-adapter.tsx +16 -3
  42. package/src/client/router.ts +186 -18
  43. package/src/client/rsc-fetch.ts +4 -3
  44. package/src/client/top-loader.tsx +12 -4
  45. package/src/client/use-navigation-pending.ts +1 -1
  46. package/src/server/route-element-builder.ts +69 -21
  47. package/src/server/slot-resolver.ts +37 -35
  48. package/src/server/ssr-entry.ts +1 -1
  49. package/src/server/ssr-wrappers.tsx +10 -10
  50. package/dist/client/transition-root.d.ts.map +0 -1
  51. package/src/client/transition-root.tsx +0 -205
@@ -14,8 +14,8 @@
14
14
  * 1. Link click handler: setLinkForCurrentNavigation(instance) →
15
15
  * resets previous link (urgent), sets new link pending (urgent),
16
16
  * stores setter + increments navId
17
- * 2. TransitionRoot startTransition: captures navId, does async work
18
- * 3. TransitionRoot commit: resetLinkPending(capturedNavId) →
17
+ * 2. NavigationRoot startTransition: captures navId, does async work
18
+ * 3. NavigationRoot commit: resetLinkPending(capturedNavId) →
19
19
  * calls setter(IDLE) inside the transition (batched, atomic with tree)
20
20
  * Only clears if navId matches (prevents stale T1 from clearing T2's link)
21
21
  *
@@ -53,7 +53,7 @@ export declare function setLinkForCurrentNavigation(link: LinkPendingInstance |
53
53
  export declare function getCurrentNavId(): number;
54
54
  /**
55
55
  * Reset the current link's pending state to IDLE, but only if the navId
56
- * matches. Called inside TransitionRoot's startTransition after the async
56
+ * matches. Called inside NavigationRoot's startTransition after the async
57
57
  * work completes — the setter call is a transition update, so it commits
58
58
  * atomically with the new tree.
59
59
  *
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/client/link.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/client/link.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Navigation Link Store — passes per-link metadata from Link's onClick
3
+ * to the Navigation API's navigate event handler.
4
+ *
5
+ * When the Navigation API is active, Link does NOT call event.preventDefault()
6
+ * or router.navigate(). Instead it stores metadata (scroll option, link
7
+ * pending instance) here, and lets the <a> click propagate naturally.
8
+ * The navigate event handler reads this metadata to configure the RSC
9
+ * navigation with the correct options.
10
+ *
11
+ * This store is consumed once per navigation — after reading, the metadata
12
+ * is cleared. If no metadata is present (e.g., a plain <a> tag without
13
+ * our Link component), the navigate handler uses default options.
14
+ *
15
+ * See design/19-client-navigation.md §"Navigation API Integration"
16
+ */
17
+ import type { LinkPendingInstance } from './link-pending-store.js';
18
+ export interface NavLinkMetadata {
19
+ /** Whether to scroll to top after navigation. Default: true. */
20
+ scroll: boolean;
21
+ /** The Link's pending state instance for per-link status tracking. */
22
+ linkInstance: LinkPendingInstance | null;
23
+ }
24
+ /**
25
+ * Store metadata from Link's onClick for the next navigate event.
26
+ * Called synchronously in the click handler — the navigate event
27
+ * fires synchronously after onClick returns.
28
+ */
29
+ export declare function setNavLinkMetadata(metadata: NavLinkMetadata): void;
30
+ /**
31
+ * Consume the stored metadata. Returns null if no Link onClick
32
+ * preceded this navigation (e.g., plain <a> tag, programmatic nav).
33
+ * Clears the store after reading.
34
+ */
35
+ export declare function consumeNavLinkMetadata(): NavLinkMetadata | null;
36
+ //# sourceMappingURL=nav-link-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-link-store.d.ts","sourceRoot":"","sources":["../../src/client/nav-link-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,MAAM,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC1C;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAElE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,GAAG,IAAI,CAI/D"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Ambient type declarations for the Navigation API.
3
+ *
4
+ * The Navigation API is not yet in TypeScript's standard lib. These types
5
+ * are used internally via type assertions — we never import Navigation API
6
+ * types unconditionally. Progressive enhancement only: the API is feature-
7
+ * detected at runtime.
8
+ *
9
+ * See https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API
10
+ */
11
+ export interface NavigationHistoryEntry {
12
+ readonly key: string;
13
+ readonly id: string;
14
+ readonly url: string | null;
15
+ readonly index: number;
16
+ readonly sameDocument: boolean;
17
+ getState(): unknown;
18
+ addEventListener(type: string, listener: EventListener): void;
19
+ removeEventListener(type: string, listener: EventListener): void;
20
+ }
21
+ export interface NavigationDestination {
22
+ readonly url: string;
23
+ readonly key: string | null;
24
+ readonly id: string | null;
25
+ readonly index: number;
26
+ readonly sameDocument: boolean;
27
+ getState(): unknown;
28
+ }
29
+ export interface NavigateEvent extends Event {
30
+ readonly navigationType: 'push' | 'replace' | 'reload' | 'traverse';
31
+ readonly destination: NavigationDestination;
32
+ readonly canIntercept: boolean;
33
+ readonly userInitiated: boolean;
34
+ readonly hashChange: boolean;
35
+ readonly signal: AbortSignal;
36
+ readonly formData: FormData | null;
37
+ readonly downloadRequest: string | null;
38
+ readonly info: unknown;
39
+ intercept(options?: NavigateInterceptOptions): void;
40
+ scroll(): void;
41
+ }
42
+ export interface NavigateInterceptOptions {
43
+ handler?: () => Promise<void>;
44
+ focusReset?: 'after-transition' | 'manual';
45
+ scroll?: 'after-transition' | 'manual';
46
+ }
47
+ export interface NavigationTransition {
48
+ readonly navigationType: 'push' | 'replace' | 'reload' | 'traverse';
49
+ readonly from: NavigationHistoryEntry;
50
+ readonly finished: Promise<void>;
51
+ }
52
+ export interface NavigationResult {
53
+ committed: Promise<NavigationHistoryEntry>;
54
+ finished: Promise<NavigationHistoryEntry>;
55
+ }
56
+ export interface NavigationApi {
57
+ readonly currentEntry: NavigationHistoryEntry | null;
58
+ readonly transition: NavigationTransition | null;
59
+ readonly canGoBack: boolean;
60
+ readonly canGoForward: boolean;
61
+ entries(): NavigationHistoryEntry[];
62
+ navigate(url: string, options?: NavigationNavigateOptions): NavigationResult;
63
+ reload(options?: NavigationReloadOptions): NavigationResult;
64
+ traverseTo(key: string, options?: NavigationOptions): NavigationResult;
65
+ back(options?: NavigationOptions): NavigationResult;
66
+ forward(options?: NavigationOptions): NavigationResult;
67
+ updateCurrentEntry(options: NavigationUpdateCurrentEntryOptions): void;
68
+ addEventListener(type: 'navigate', listener: (event: NavigateEvent) => void): void;
69
+ addEventListener(type: 'navigatesuccess', listener: (event: Event) => void): void;
70
+ addEventListener(type: 'navigateerror', listener: (event: Event) => void): void;
71
+ addEventListener(type: 'currententrychange', listener: (event: Event) => void): void;
72
+ addEventListener(type: string, listener: EventListener): void;
73
+ removeEventListener(type: string, listener: EventListener): void;
74
+ }
75
+ export interface NavigationNavigateOptions {
76
+ state?: unknown;
77
+ history?: 'auto' | 'push' | 'replace';
78
+ info?: unknown;
79
+ }
80
+ export interface NavigationReloadOptions {
81
+ state?: unknown;
82
+ info?: unknown;
83
+ }
84
+ export interface NavigationOptions {
85
+ info?: unknown;
86
+ }
87
+ export interface NavigationUpdateCurrentEntryOptions {
88
+ state: unknown;
89
+ }
90
+ //# sourceMappingURL=navigation-api-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-api-types.d.ts","sourceRoot":"","sources":["../../src/client/navigation-api-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Navigation API integration — progressive enhancement for client navigation.
3
+ *
4
+ * When the Navigation API (`window.navigation`) is available, this module
5
+ * provides an intercept-based navigation model that replaces the separate
6
+ * popstate + click handler approach with a single navigate event listener.
7
+ *
8
+ * Key benefits:
9
+ * - Intercepts ALL navigations (link clicks, form submissions, back/forward)
10
+ * - Built-in AbortSignal per navigation (auto-aborts in-flight fetches)
11
+ * - Per-entry state via NavigationHistoryEntry.getState()
12
+ * - navigation.transition for progress tracking
13
+ *
14
+ * When unavailable, all functions are no-ops and the History API fallback
15
+ * in browser-entry.ts handles navigation.
16
+ *
17
+ * See design/19-client-navigation.md
18
+ */
19
+ import type { NavigationApi } from './navigation-api-types.js';
20
+ /**
21
+ * Returns true if the Navigation API is available in the current environment.
22
+ * Feature-detected at runtime — no polyfill.
23
+ */
24
+ export declare function hasNavigationApi(): boolean;
25
+ /**
26
+ * Get the Navigation API instance. Returns null if unavailable.
27
+ * Uses type assertion — we never import Navigation API types unconditionally.
28
+ */
29
+ export declare function getNavigationApi(): NavigationApi | null;
30
+ /**
31
+ * Callbacks for the Navigation API event handler.
32
+ *
33
+ * When the Navigation API intercepts a navigation, it delegates to these
34
+ * callbacks which run the RSC fetch + render pipeline.
35
+ */
36
+ export interface NavigationApiCallbacks {
37
+ /**
38
+ * Handle a push/replace navigation intercepted by the Navigation API.
39
+ * This covers both Link <a> clicks (user-initiated, with metadata from
40
+ * nav-link-store) and external navigations (plain <a> tags, programmatic).
41
+ * The Navigation API handles the URL update via event.intercept().
42
+ */
43
+ onExternalNavigate: (url: string, options: {
44
+ replace: boolean;
45
+ signal: AbortSignal;
46
+ scroll?: boolean;
47
+ }) => Promise<void>;
48
+ /**
49
+ * Handle a traversal (back/forward button). The Navigation API intercepts
50
+ * the traversal and delegates to us for RSC replay/fetch.
51
+ */
52
+ onTraverse: (url: string, scrollY: number, signal: AbortSignal) => Promise<void>;
53
+ }
54
+ /**
55
+ * Controller returned by setupNavigationApi. Provides methods to
56
+ * coordinate between the router and the navigate event listener.
57
+ */
58
+ export interface NavigationApiController {
59
+ /**
60
+ * Set the router-navigating flag. When `true`, the next navigate event
61
+ * (from pushState/replaceState) is recognized as router-initiated. The
62
+ * handler still intercepts it — but ties the browser's native loading
63
+ * state to a deferred promise instead of running the RSC pipeline again.
64
+ *
65
+ * This means `navigation.transition` is active for the full duration of
66
+ * every router-initiated navigation, giving the browser a native loading
67
+ * indicator (tab spinner, address bar) aligned with the TopLoader.
68
+ *
69
+ * Must be called synchronously around pushState/replaceState:
70
+ * controller.setRouterNavigating(true);
71
+ * history.pushState(...); // navigate event fires, intercepted
72
+ * controller.setRouterNavigating(false); // flag off, deferred stays open
73
+ */
74
+ setRouterNavigating: (value: boolean) => void;
75
+ /**
76
+ * Resolve the deferred promise created by setRouterNavigating(true),
77
+ * clearing the browser's native loading state. Call this when the
78
+ * navigation fully completes — aligned with when the TopLoader's
79
+ * pendingUrl clears (same finally block in router.navigate).
80
+ */
81
+ completeRouterNavigation: () => void;
82
+ /**
83
+ * Initiate a navigation via the Navigation API (`navigation.navigate()`).
84
+ * Unlike `history.pushState()`, this fires the navigate event BEFORE
85
+ * committing the URL — allowing Chrome to show its native loading
86
+ * indicator while the intercept handler runs.
87
+ *
88
+ * Must be called with setRouterNavigating(true) active so the handler
89
+ * recognizes it as router-initiated and uses the deferred promise.
90
+ */
91
+ navigate: (url: string, replace: boolean) => void;
92
+ /**
93
+ * Save scroll position into the current navigation entry's state.
94
+ * Uses navigation.updateCurrentEntry() for per-entry scroll storage.
95
+ */
96
+ saveScrollPosition: (scrollY: number) => void;
97
+ /**
98
+ * Check if the Navigation API has an active transition.
99
+ * Returns the transition object if available, null otherwise.
100
+ */
101
+ hasActiveTransition: () => boolean;
102
+ /** Remove the navigate event listener. */
103
+ cleanup: () => void;
104
+ }
105
+ /**
106
+ * Set up the Navigation API navigate event listener.
107
+ *
108
+ * Intercepts same-origin navigations and delegates to the provided callbacks.
109
+ * Router-initiated navigations (pushState from router.navigate) are detected
110
+ * via a synchronous flag and NOT intercepted — the router already handles them.
111
+ *
112
+ * Returns a controller for coordinating with the router.
113
+ */
114
+ export declare function setupNavigationApi(callbacks: NavigationApiCallbacks): NavigationApiController;
115
+ //# sourceMappingURL=navigation-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-api.d.ts","sourceRoot":"","sources":["../../src/client/navigation-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AAM9E;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAGvD;AAID;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,kBAAkB,EAAE,CAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KACjE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;;OAGG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClF;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAE9C;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,IAAI,CAAC;IAErC;;;;;;;;OAQG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAElD;;;OAGG;IACH,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9C;;;OAGG;IACH,mBAAmB,EAAE,MAAM,OAAO,CAAC;IAEnC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,sBAAsB,GAAG,uBAAuB,CA+K7F"}
@@ -73,4 +73,15 @@ export declare function PendingNavigationProvider({ value, children, }: {
73
73
  value: string | null;
74
74
  children?: ReactNode;
75
75
  }): React.ReactElement;
76
+ /**
77
+ * Check if the browser's Navigation API has an active transition.
78
+ *
79
+ * When the Navigation API is available and a navigation has been intercepted
80
+ * via event.intercept(), `navigation.transition` is non-null until the
81
+ * handler resolves. This provides browser-native progress tracking that
82
+ * can be used alongside the existing pendingUrl mechanism.
83
+ *
84
+ * Returns false when Navigation API is unavailable or no transition is active.
85
+ */
86
+ export declare function hasNativeNavigationTransition(): boolean;
76
87
  //# sourceMappingURL=navigation-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-context.d.ts","sourceRoot":"","sources":["../../src/client/navigation-context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuCD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,IAAI,CAM7D;AAMD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GACT,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAO9C;AA6BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE/D;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AA8BD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAKvD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,GAAG,KAAK,CAAC,YAAY,CAMrB"}
1
+ {"version":3,"file":"navigation-context.d.ts","sourceRoot":"","sources":["../../src/client/navigation-context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuCD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,IAAI,CAM7D;AAMD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GACT,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAO9C;AA6BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE/D;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AA8BD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAKvD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,GAAG,KAAK,CAAC,YAAY,CAMrB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAIvD"}
@@ -1,12 +1,12 @@
1
1
  /**
2
- * TransitionRoot — Wrapper component for transition-based rendering.
2
+ * NavigationRoot — Wrapper component for transition-based rendering.
3
3
  *
4
4
  * Solves the "new boundary has no old content" problem for client-side
5
5
  * navigation. When React renders a completely new Suspense boundary via
6
6
  * root.render(), it shows the fallback immediately — root.render() is
7
7
  * always an urgent update regardless of startTransition.
8
8
  *
9
- * TransitionRoot holds the current element in React state. Navigation
9
+ * NavigationRoot holds the current element in React state. Navigation
10
10
  * updates call startTransition(() => setState(newElement)), which IS
11
11
  * a transition update. React keeps the old committed tree visible while
12
12
  * any new Suspense boundaries in the transition resolve.
@@ -18,11 +18,33 @@
18
18
  * alongside `setElement(newTree)` — both commit atomically, so the
19
19
  * spinner disappears in the same frame as the new content appears.
20
20
  *
21
+ * Hard navigation guard: When a hard navigation is triggered (500 error,
22
+ * version skew), the component throws an unresolved thenable AFTER all
23
+ * hooks to suspend forever — preventing React from rendering children
24
+ * during page teardown. The throw must come after hooks to satisfy
25
+ * React's rules (same hook count every render) while still preventing
26
+ * child renders that could hit hook count mismatches in components
27
+ * whose positions shift during teardown. This pattern is borrowed from
28
+ * Next.js (app-router.tsx pushRef.mpaNavigation — also after hooks).
29
+ *
21
30
  * See design/05-streaming.md §"deferSuspenseFor"
22
31
  * See design/19-client-navigation.md §"NavigationContext"
23
32
  */
24
33
  import { type ReactNode } from 'react';
25
34
  import { type TopLoaderConfig } from './top-loader.js';
35
+ /**
36
+ * Set the hard-navigating flag. Call this BEFORE setting
37
+ * window.location.href or window.location.reload() to prevent:
38
+ * 1. React from rendering children during page teardown
39
+ * 2. Navigation API from intercepting the hard navigation
40
+ */
41
+ export declare function setHardNavigating(value: boolean): void;
42
+ /**
43
+ * Check if a hard navigation is in progress.
44
+ * Used by NavigationRoot (throw unresolvedThenable) and by the
45
+ * Navigation API handler (skip interception).
46
+ */
47
+ export declare function isHardNavigating(): boolean;
26
48
  /**
27
49
  * Root wrapper component that enables transition-based rendering.
28
50
  *
@@ -31,7 +53,7 @@ import { type TopLoaderConfig } from './top-loader.js';
31
53
  * (the provider renders no extra DOM elements).
32
54
  *
33
55
  * Usage in browser-entry.ts:
34
- * const rootEl = createElement(TransitionRoot, { initial: wrapped });
56
+ * const rootEl = createElement(NavigationRoot, { initial: wrapped });
35
57
  * reactRoot = hydrateRoot(document, rootEl);
36
58
  *
37
59
  * Subsequent navigations:
@@ -40,7 +62,7 @@ import { type TopLoaderConfig } from './top-loader.js';
40
62
  * Non-navigation renders:
41
63
  * transitionRender(newWrappedElement);
42
64
  */
43
- export declare function TransitionRoot({ initial, topLoaderConfig, }: {
65
+ export declare function NavigationRoot({ initial, topLoaderConfig, }: {
44
66
  initial: ReactNode;
45
67
  topLoaderConfig?: TopLoaderConfig;
46
68
  }): ReactNode;
@@ -57,7 +79,7 @@ export declare function transitionRender(element: ReactNode): void;
57
79
  *
58
80
  * The `perform` callback runs inside `startTransition` — it should fetch the
59
81
  * RSC payload, update router state, and return the wrapped React element.
60
- * The pending URL shows immediately (useOptimistic urgent update) and reverts
82
+ * The pending URL shows immediately (urgent update) and reverts
61
83
  * to null when the transition commits (atomic with the new tree).
62
84
  *
63
85
  * Returns a Promise that resolves when the async work completes (note: the
@@ -67,10 +89,10 @@ export declare function transitionRender(element: ReactNode): void;
67
89
  */
68
90
  export declare function navigateTransition(pendingUrl: string, perform: () => Promise<ReactNode>): Promise<void>;
69
91
  /**
70
- * Check if the TransitionRoot is mounted and ready for renders.
92
+ * Check if the NavigationRoot is mounted and ready for renders.
71
93
  * Used by browser-entry.ts to guard against renders before hydration.
72
94
  */
73
- export declare function isTransitionRootReady(): boolean;
95
+ export declare function isNavigationRootReady(): boolean;
74
96
  /**
75
97
  * Install one-shot deferred callbacks for the no-RSC bootstrap path (TIM-600).
76
98
  *
@@ -79,8 +101,8 @@ export declare function isTransitionRootReady(): boolean;
79
101
  * this sets up `_transitionRender` and `_navigateTransition` so that the
80
102
  * first client navigation triggers root creation via `createAndMount`.
81
103
  *
82
- * After `createAndMount` runs, TransitionRoot renders and overwrites these
104
+ * After `createAndMount` runs, NavigationRoot renders and overwrites these
83
105
  * callbacks with its real `startTransition`-based implementations.
84
106
  */
85
107
  export declare function installDeferredNavigation(createAndMount: (initial: ReactNode) => void): void;
86
- //# sourceMappingURL=transition-root.d.ts.map
108
+ //# sourceMappingURL=navigation-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-root.d.ts","sourceRoot":"","sources":["../../src/client/navigation-root.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAsD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3F,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAsDlE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,eAAe,GAChB,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,SAAS,CA6GZ;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAIzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,CAc5F"}
@@ -1 +1 @@
1
- {"version":3,"file":"nuqs-adapter.d.ts","sourceRoot":"","sources":["../../src/client/nuqs-adapter.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmFrE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAatE"}
1
+ {"version":3,"file":"nuqs-adapter.d.ts","sourceRoot":"","sources":["../../src/client/nuqs-adapter.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgGrE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAatE"}
@@ -8,6 +8,19 @@ export interface NavigationOptions {
8
8
  scroll?: boolean;
9
9
  /** Use replaceState instead of pushState (replaces current history entry) */
10
10
  replace?: boolean;
11
+ /**
12
+ * @internal AbortSignal from the Navigation API's NavigateEvent.
13
+ * When provided, the signal is linked to the router's per-navigation
14
+ * AbortController so in-flight RSC fetches are cancelled when a new
15
+ * navigation starts.
16
+ */
17
+ _signal?: AbortSignal;
18
+ /**
19
+ * @internal Skip pushState/replaceState — the Navigation API has already
20
+ * updated the URL via event.intercept(). Used for external navigations
21
+ * intercepted by the navigate event handler.
22
+ */
23
+ _skipHistory?: boolean;
11
24
  }
12
25
  /**
13
26
  * Function that decodes an RSC Flight stream into a React element tree.
@@ -55,13 +68,44 @@ export interface RouterDeps {
55
68
  *
56
69
  * The `perform` callback receives a `wrapPayload` function to wrap the
57
70
  * decoded RSC payload with NavigationProvider + NuqsAdapter before
58
- * TransitionRoot sets it as the new element. The `wrapPayload` function
71
+ * NavigationRoot sets it as the new element. The `wrapPayload` function
59
72
  * receives the NavigationState explicitly — no temporal coupling with
60
73
  * getNavigationState().
61
74
  *
62
75
  * If not provided (tests), the router falls back to renderRoot.
63
76
  */
64
77
  navigateTransition?: (pendingUrl: string, perform: (wrapPayload: (payload: unknown, navState: NavigationState) => unknown) => Promise<unknown>) => Promise<void>;
78
+ /**
79
+ * Whether the Navigation API is active and handling traversals.
80
+ * When true, the popstate handler is a no-op — the Navigation API's
81
+ * navigate event covers back/forward button presses.
82
+ */
83
+ navigationApiActive?: boolean;
84
+ /**
85
+ * Called around pushState/replaceState to set a flag that prevents
86
+ * the Navigation API's navigate listener from double-handling
87
+ * router-initiated navigations.
88
+ */
89
+ setRouterNavigating?: (value: boolean) => void;
90
+ /**
91
+ * Save scroll position via the Navigation API's per-entry state.
92
+ * When provided, used instead of history.replaceState for scroll storage.
93
+ */
94
+ saveNavigationEntryScroll?: (scrollY: number) => void;
95
+ /**
96
+ * Signal that a router-initiated navigation has completed. Resolves the
97
+ * deferred promise that ties the browser's native loading state to the
98
+ * navigation lifecycle. Called in the finally block of navigate/refresh,
99
+ * aligned with when the TopLoader's pendingUrl clears.
100
+ */
101
+ completeRouterNavigation?: () => void;
102
+ /**
103
+ * Initiate a navigation via the Navigation API (`navigation.navigate()`).
104
+ * Fires the navigate event BEFORE committing the URL, allowing Chrome
105
+ * to show its native loading indicator. Falls back to pushState when
106
+ * unavailable.
107
+ */
108
+ navigationNavigate?: (url: string, replace: boolean) => void;
65
109
  }
66
110
  export interface RouterInstance {
67
111
  /** Navigate to a new URL (forward navigation) */
@@ -69,7 +113,7 @@ export interface RouterInstance {
69
113
  /** Full re-render of the current URL — no state tree sent */
70
114
  refresh(): Promise<void>;
71
115
  /** Handle a popstate event (back/forward button). scrollY is read from history.state. */
72
- handlePopState(url: string, scrollY?: number): Promise<void>;
116
+ handlePopState(url: string, scrollY?: number, externalSignal?: AbortSignal): Promise<void>;
73
117
  /** Whether a navigation is currently in flight */
74
118
  isPending(): boolean;
75
119
  /** The URL currently being navigated to, or null if idle */
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/client/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/client/router.ts"],"names":[],"mappings":"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"}
@@ -111,5 +111,5 @@ export declare class ServerErrorResponse extends Error {
111
111
  */
112
112
  export declare function fetchRscPayload(url: string, deps: RouterDeps, stateTree?: {
113
113
  segments: string[];
114
- }, currentUrl?: string): Promise<FetchResult>;
114
+ }, currentUrl?: string, signal?: AbortSignal): Promise<FetchResult>;
115
115
  //# sourceMappingURL=rsc-fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsc-fetch.d.ts","sourceRoot":"","sources":["../../src/client/rsc-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,uFAAuF;AACvF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,uFAAuF;IACvF,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAClC,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACjD,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAoCnD,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE7D;AAED,oCAAoC;AACpC,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAID,sEAAsE;AACtE,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE7D;AAID,wBAAgB,eAAe,CAC7B,SAAS,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,EAC7C,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,IAAI,CAQ5E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,IAAI,CAQ3E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,IAAI,CAS1E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAQ1F;AAID;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,GAAG,EAAE,MAAM;CAIxB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;;CAI1C;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACT,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAKxC;AAID;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EAClC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAoEtB"}
1
+ {"version":3,"file":"rsc-fetch.d.ts","sourceRoot":"","sources":["../../src/client/rsc-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,uFAAuF;AACvF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC,uFAAuF;IACvF,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAClC,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACjD,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAoCnD,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE7D;AAED,oCAAoC;AACpC,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAID,sEAAsE;AACtE,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE7D;AAID,wBAAgB,eAAe,CAC7B,SAAS,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,EAC7C,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,IAAI,CAQ5E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,IAAI,CAQ3E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,IAAI,CAS1E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAQ1F;AAID;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,GAAG,EAAE,MAAM;CAIxB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;;CAI1C;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACT,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAKxC;AAID;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EAClC,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CAoEtB"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Shows an animated progress bar at the top of the viewport while an RSC
5
5
  * navigation is in flight. Injected automatically by the framework into
6
- * TransitionRoot — users never render this component directly.
6
+ * NavigationRoot — users never render this component directly.
7
7
  *
8
8
  * Configuration is via timber.config.ts `topLoader` key. Enabled by default.
9
9
  * Users who want a fully custom progress indicator disable the built-in one
@@ -39,7 +39,7 @@ export interface TopLoaderConfig {
39
39
  zIndex?: number;
40
40
  }
41
41
  /**
42
- * Internal top-loader component. Injected by TransitionRoot.
42
+ * Internal top-loader component. Injected by NavigationRoot.
43
43
  *
44
44
  * Reads pending navigation state from PendingNavigationContext.
45
45
  * Phase transitions are derived synchronously during render:
@@ -1 +1 @@
1
- {"version":3,"file":"top-loader.d.ts","sourceRoot":"","sources":["../../src/client/top-loader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA2F7F"}
1
+ {"version":3,"file":"top-loader.d.ts","sourceRoot":"","sources":["../../src/client/top-loader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAmG7F"}