fibrae 0.1.3 → 0.2.1

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 (47) hide show
  1. package/dist/core.d.ts +7 -5
  2. package/dist/core.js +9 -8
  3. package/dist/core.js.map +1 -1
  4. package/dist/dom.js +42 -3
  5. package/dist/dom.js.map +1 -1
  6. package/dist/fiber-render.js +53 -15
  7. package/dist/fiber-render.js.map +1 -1
  8. package/dist/hydration-state.d.ts +28 -0
  9. package/dist/hydration-state.js +56 -0
  10. package/dist/hydration-state.js.map +1 -0
  11. package/dist/hydration.js +3 -9
  12. package/dist/hydration.js.map +1 -1
  13. package/dist/index.d.ts +3 -1
  14. package/dist/index.js +5 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/render.js +3 -3
  17. package/dist/render.js.map +1 -1
  18. package/dist/router/Navigator.d.ts +3 -1
  19. package/dist/router/Navigator.js +33 -40
  20. package/dist/router/Navigator.js.map +1 -1
  21. package/dist/router/Route.d.ts +1 -1
  22. package/dist/router/Route.js +1 -1
  23. package/dist/router/Route.js.map +1 -1
  24. package/dist/router/Router.d.ts +72 -15
  25. package/dist/router/Router.js +99 -21
  26. package/dist/router/Router.js.map +1 -1
  27. package/dist/router/RouterBuilder.d.ts +56 -2
  28. package/dist/router/RouterBuilder.js +86 -7
  29. package/dist/router/RouterBuilder.js.map +1 -1
  30. package/dist/router/RouterOutlet.d.ts +29 -5
  31. package/dist/router/RouterOutlet.js +58 -7
  32. package/dist/router/RouterOutlet.js.map +1 -1
  33. package/dist/router/RouterState.d.ts +2 -2
  34. package/dist/router/RouterState.js +2 -2
  35. package/dist/router/index.d.ts +3 -3
  36. package/dist/router/index.js +1 -1
  37. package/dist/router/index.js.map +1 -1
  38. package/dist/runtime.d.ts +12 -5
  39. package/dist/runtime.js +6 -2
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/server.d.ts +11 -13
  42. package/dist/server.js +25 -27
  43. package/dist/server.js.map +1 -1
  44. package/dist/shared.d.ts +61 -5
  45. package/dist/shared.js +51 -0
  46. package/dist/shared.js.map +1 -1
  47. package/package.json +1 -1
@@ -15,18 +15,66 @@ import * as Option from "effect/Option";
15
15
  import * as Effect from "effect/Effect";
16
16
  import * as Layer from "effect/Layer";
17
17
  import * as Context from "effect/Context";
18
+ import * as Data from "effect/Data";
18
19
  import { Registry as AtomRegistry } from "@effect-atom/atom";
19
20
  import { History, MemoryHistoryLive } from "./History.js";
20
21
  import { Navigator, NavigatorLive } from "./Navigator.js";
21
22
  import { RouterHandlers } from "./RouterBuilder.js";
22
23
  import { RouterStateAtom } from "./RouterState.js";
24
+ /**
25
+ * Router error for route matching and navigation failures.
26
+ */
27
+ export class RouterError extends Data.TaggedError("RouterError") {
28
+ }
23
29
  /**
24
30
  * Create a route group with the given name.
25
31
  * Routes are added via group.add(route).
26
32
  */
27
33
  export function group(name) {
28
34
  return {
35
+ _tag: "RouteGroup",
36
+ name,
37
+ routes: [],
38
+ add(route) {
39
+ return {
40
+ ...this,
41
+ routes: [...this.routes, route],
42
+ };
43
+ },
44
+ };
45
+ }
46
+ /**
47
+ * Create a layout group with the given name, base path, and layout component.
48
+ *
49
+ * Layout groups wrap their child routes with a layout component that should
50
+ * render <RouterOutlet /> to display the matched child route.
51
+ *
52
+ * Child routes are matched relative to the basePath.
53
+ *
54
+ * Usage:
55
+ * ```typescript
56
+ * const DashboardLayout = () => (
57
+ * <div class="dashboard">
58
+ * <Sidebar />
59
+ * <RouterOutlet />
60
+ * </div>
61
+ * );
62
+ *
63
+ * const DashboardRoutes = Router.layout("dashboard", "/dashboard")
64
+ * .add(Route.get("overview", "/overview")) // matches /dashboard/overview
65
+ * .add(Route.get("settings", "/settings")); // matches /dashboard/settings
66
+ * ```
67
+ */
68
+ export function layout(name, basePath) {
69
+ // Normalize basePath - ensure it starts with / and doesn't end with /
70
+ const normalizedBase = basePath.startsWith("/") ? basePath : `/${basePath}`;
71
+ const cleanBase = normalizedBase.endsWith("/")
72
+ ? normalizedBase.slice(0, -1)
73
+ : normalizedBase;
74
+ return {
75
+ _tag: "LayoutGroup",
29
76
  name,
77
+ basePath: cleanBase,
30
78
  routes: [],
31
79
  add(route) {
32
80
  return {
@@ -53,14 +101,38 @@ export function make(name) {
53
101
  matchRoute(pathname) {
54
102
  // Try to match against each route in each group
55
103
  for (const g of this.groups) {
56
- for (const route of g.routes) {
57
- const match = route.match(pathname);
58
- if (Option.isSome(match)) {
59
- return Option.some({
60
- groupName: g.name,
61
- route,
62
- params: match.value,
63
- });
104
+ if (g._tag === "LayoutGroup") {
105
+ // For layout groups, check if pathname starts with basePath
106
+ const layoutGroup = g;
107
+ if (pathname.startsWith(layoutGroup.basePath)) {
108
+ // Get the remaining path after the base
109
+ const remainingPath = pathname.slice(layoutGroup.basePath.length) || "/";
110
+ // Try to match child routes against remaining path
111
+ for (const route of layoutGroup.routes) {
112
+ const match = route.match(remainingPath);
113
+ if (Option.isSome(match)) {
114
+ return Option.some({
115
+ groupName: layoutGroup.name,
116
+ route,
117
+ params: match.value,
118
+ layouts: [layoutGroup],
119
+ });
120
+ }
121
+ }
122
+ }
123
+ }
124
+ else {
125
+ // Regular route group - match directly
126
+ for (const route of g.routes) {
127
+ const match = route.match(pathname);
128
+ if (Option.isSome(match)) {
129
+ return Option.some({
130
+ groupName: g.name,
131
+ route,
132
+ params: match.value,
133
+ layouts: [],
134
+ });
135
+ }
64
136
  }
65
137
  }
66
138
  }
@@ -145,13 +217,13 @@ export function serverLayer(options) {
145
217
  // Match route using stripped pathname
146
218
  const match = router.matchRoute(matchPathname);
147
219
  if (Option.isNone(match)) {
148
- return yield* Effect.fail(new Error(`No route matched pathname: ${matchPathname}`));
220
+ return yield* Effect.fail(new RouterError({ message: `No route matched pathname: ${matchPathname}` }));
149
221
  }
150
222
  const { route, params } = match.value;
151
223
  // Get handler for this route
152
224
  const handler = routerHandlers.getHandler(route.name);
153
225
  if (Option.isNone(handler)) {
154
- return yield* Effect.fail(new Error(`No handler found for route: ${route.name}`));
226
+ return yield* Effect.fail(new RouterError({ message: `No handler found for route: ${route.name}` }));
155
227
  }
156
228
  // Execute loader and render component
157
229
  const loaderCtx = { path: params, searchParams };
@@ -182,20 +254,20 @@ export function serverLayer(options) {
182
254
  * 3. If hydrated, uses that for initial render (skips loader)
183
255
  * 4. Provides Navigator for subsequent navigation
184
256
  *
185
- * SSR hydration works automatically via atom hydration - no need to
186
- * pass initialState manually. The RouterStateAtom is hydrated from
187
- * __FIBRAE_STATE__ before this layer is created.
257
+ * SSR hydration works automatically via the HydrationState service - no need to
258
+ * pass initialState manually. The RouterStateAtom is hydrated from the
259
+ * <script type="application/json" id="__fibrae-state__"> tag before this layer is created.
188
260
  *
189
261
  * Usage in client:
190
262
  * ```typescript
191
- * // Hydrate atoms first (includes RouterStateAtom)
192
- * hydrate(container, app, window.__FIBRAE_STATE__);
193
- *
194
263
  * // Browser layer reads from hydrated RouterStateAtom
195
264
  * const browserLayer = Router.browserLayer({
196
265
  * router: AppRouter,
197
266
  * basePath: "/ssr/router"
198
267
  * });
268
+ *
269
+ * // render() auto-discovers hydration state from the DOM
270
+ * render(app, container, { layer: browserLayer });
199
271
  * ```
200
272
  */
201
273
  export function browserLayer(options) {
@@ -215,7 +287,8 @@ export function browserLayer(options) {
215
287
  const locationAtom = Atom.make(getBrowserLocation());
216
288
  // Subscribe to popstate for browser back/forward
217
289
  const handlePopState = () => {
218
- registry.set(locationAtom, getBrowserLocation());
290
+ const newLocation = getBrowserLocation();
291
+ registry.set(locationAtom, newLocation);
219
292
  };
220
293
  window.addEventListener("popstate", handlePopState);
221
294
  // Cleanup on scope close
@@ -273,7 +346,7 @@ export function browserLayer(options) {
273
346
  const state = hydratedState.value;
274
347
  const handler = routerHandlers.getHandler(state.routeName);
275
348
  if (Option.isNone(handler)) {
276
- return yield* Effect.fail(new Error(`No handler found for route: ${state.routeName}`));
349
+ return yield* Effect.fail(new RouterError({ message: `No handler found for route: ${state.routeName}` }));
277
350
  }
278
351
  // Render component with SSR loader data (skip loader)
279
352
  const element = handler.value.component({
@@ -297,12 +370,12 @@ export function browserLayer(options) {
297
370
  const searchParams = parseSearchParams(search);
298
371
  const match = router.matchRoute(matchPathname);
299
372
  if (Option.isNone(match)) {
300
- return yield* Effect.fail(new Error(`No route matched pathname: ${matchPathname}`));
373
+ return yield* Effect.fail(new RouterError({ message: `No route matched pathname: ${matchPathname}` }));
301
374
  }
302
375
  const { route, params } = match.value;
303
376
  const handler = routerHandlers.getHandler(route.name);
304
377
  if (Option.isNone(handler)) {
305
- return yield* Effect.fail(new Error(`No handler found for route: ${route.name}`));
378
+ return yield* Effect.fail(new RouterError({ message: `No handler found for route: ${route.name}` }));
306
379
  }
307
380
  const loaderCtx = { path: params, searchParams };
308
381
  const loaderData = yield* handler.value.loader(loaderCtx);
@@ -321,6 +394,11 @@ export function browserLayer(options) {
321
394
  registry.set(RouterStateAtom, Option.some(state));
322
395
  return { element, state };
323
396
  }));
324
- return Layer.mergeAll(historyLayer, Layer.provideMerge(navigatorLayer, historyLayer), routeElementLayer);
397
+ // Layer composition: historyLayer provides History, which navigatorLayer needs.
398
+ // We use provideMerge to give Navigator the History it needs, then merge with routeElementLayer.
399
+ // Important: historyLayer should only be instantiated once - putting it in mergeAll separately
400
+ // would create a second instance with a different locationAtom.
401
+ const historyAndNavigator = Layer.provideMerge(navigatorLayer, historyLayer);
402
+ return Layer.mergeAll(historyAndNavigator, routeElementLayer);
325
403
  }
326
404
  //# sourceMappingURL=Router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Router.js","sourceRoot":"","sources":["../../src/router/Router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Router.js","sourceRoot":"","sources":["../../src/router/Router.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,14 @@ export interface RouteHandler {
55
55
  readonly loader: (ctx: LoaderContext) => Effect.Effect<unknown>;
56
56
  readonly component: (props: ComponentProps) => VElement;
57
57
  }
58
+ /**
59
+ * A registered layout handler.
60
+ * The layout component should render <RouterOutlet /> for children.
61
+ */
62
+ export interface LayoutHandler {
63
+ readonly layoutName: string;
64
+ readonly component: () => VElement;
65
+ }
58
66
  /**
59
67
  * Handlers builder for a route group.
60
68
  * Accumulates handler registrations for routes in the group.
@@ -67,9 +75,29 @@ export interface GroupHandlers<GroupName extends string = string> {
67
75
  */
68
76
  readonly handle: <RouteName extends string, LoaderData, PathParams extends Record<string, unknown>, SearchParams extends Record<string, unknown>, R, E>(routeName: RouteName, config: HandlerConfig<LoaderData, PathParams, SearchParams, R, E>) => GroupHandlers<GroupName>;
69
77
  }
78
+ /**
79
+ * Handlers builder for a layout group.
80
+ * Includes layout component registration plus child route handlers.
81
+ */
82
+ export interface LayoutGroupHandlers<GroupName extends string = string> {
83
+ readonly groupName: GroupName;
84
+ readonly handlers: readonly RouteHandler[];
85
+ readonly layoutHandler: LayoutHandler | null;
86
+ /**
87
+ * Register the layout component for this layout group.
88
+ * The layout component should render <RouterOutlet /> for children.
89
+ */
90
+ readonly layout: (component: () => VElement) => LayoutGroupHandlers<GroupName>;
91
+ /**
92
+ * Register a handler for a route in this layout group.
93
+ */
94
+ readonly handle: <RouteName extends string, LoaderData, PathParams extends Record<string, unknown>, SearchParams extends Record<string, unknown>, R, E>(routeName: RouteName, config: HandlerConfig<LoaderData, PathParams, SearchParams, R, E>) => LayoutGroupHandlers<GroupName>;
95
+ }
70
96
  declare const RouterHandlers_base: Context.TagClass<RouterHandlers, "fibrae/RouterHandlers", {
71
97
  readonly handlers: ReadonlyMap<string, RouteHandler>;
98
+ readonly layoutHandlers: ReadonlyMap<string, LayoutHandler>;
72
99
  readonly getHandler: (routeName: string) => Option.Option<RouteHandler>;
100
+ readonly getLayoutHandler: (layoutName: string) => Option.Option<LayoutHandler>;
73
101
  }>;
74
102
  /**
75
103
  * Tag for the RouterHandlers service.
@@ -106,8 +134,34 @@ export declare class RouterHandlers extends RouterHandlers_base {
106
134
  * )
107
135
  * ```
108
136
  */
109
- export declare function group<GroupName extends string>(router: Router, groupName: GroupName, build: (handlers: GroupHandlers<GroupName>) => GroupHandlers<GroupName>): Layer.Layer<RouterHandlers, never, never>;
110
- export declare function group<GroupName extends string, R>(router: Router, groupName: GroupName, build: (handlers: GroupHandlers<GroupName>) => Effect.Effect<GroupHandlers<GroupName>, never, R>): Layer.Layer<RouterHandlers, never, R>;
137
+ export declare function group<GroupName extends string>(appRouter: Router, groupName: GroupName, build: (handlers: GroupHandlers<GroupName>) => GroupHandlers<GroupName>): Layer.Layer<RouterHandlers, never, never>;
138
+ export declare function group<GroupName extends string, R>(appRouter: Router, groupName: GroupName, build: (handlers: GroupHandlers<GroupName>) => Effect.Effect<GroupHandlers<GroupName>, never, R>): Layer.Layer<RouterHandlers, never, R>;
139
+ /**
140
+ * Create a Layer that provides handlers for a layout group.
141
+ *
142
+ * Layout groups require a layout component that renders <RouterOutlet /> for children.
143
+ *
144
+ * Usage:
145
+ * ```typescript
146
+ * const DashboardLayout = () => (
147
+ * <div class="dashboard">
148
+ * <Sidebar />
149
+ * <RouterOutlet />
150
+ * </div>
151
+ * );
152
+ *
153
+ * const DashboardRoutesLive = RouterBuilder.layoutGroup(
154
+ * AppRouter,
155
+ * "dashboard",
156
+ * (handlers) => handlers
157
+ * .layout(DashboardLayout)
158
+ * .handle("overview", { component: () => <Overview /> })
159
+ * .handle("settings", { component: () => <Settings /> })
160
+ * )
161
+ * ```
162
+ */
163
+ export declare function layoutGroup<GroupName extends string>(appRouter: Router, groupName: GroupName, build: (handlers: LayoutGroupHandlers<GroupName>) => LayoutGroupHandlers<GroupName>): Layer.Layer<RouterHandlers, never, never>;
164
+ export declare function layoutGroup<GroupName extends string, R>(appRouter: Router, groupName: GroupName, build: (handlers: LayoutGroupHandlers<GroupName>) => Effect.Effect<LayoutGroupHandlers<GroupName>, never, R>): Layer.Layer<RouterHandlers, never, R>;
111
165
  /**
112
166
  * Merge multiple group handler layers into a single RouterHandlers layer.
113
167
  *
@@ -19,8 +19,8 @@ export class RouterHandlers extends Context.Tag("fibrae/RouterHandlers")() {
19
19
  /**
20
20
  * Create handlers builder for a route group.
21
21
  */
22
- function makeGroupHandlers(groupName, group) {
23
- const routesByName = new Map(group.routes.map((r) => [r.name, r]));
22
+ function makeGroupHandlers(groupName, grp) {
23
+ const routesByName = new Map(grp.routes.map((r) => [r.name, r]));
24
24
  const buildHandlers = (handlers) => ({
25
25
  groupName,
26
26
  handlers,
@@ -49,18 +49,61 @@ function makeGroupHandlers(groupName, group) {
49
49
  });
50
50
  return buildHandlers([]);
51
51
  }
52
+ /**
53
+ * Create handlers builder for a layout group.
54
+ */
55
+ function makeLayoutGroupHandlers(groupName, layoutGroup) {
56
+ const routesByName = new Map(layoutGroup.routes.map((r) => [r.name, r]));
57
+ const buildHandlers = (handlers, layoutHandler) => ({
58
+ groupName,
59
+ handlers,
60
+ layoutHandler,
61
+ layout(component) {
62
+ return buildHandlers(handlers, {
63
+ layoutName: groupName,
64
+ component,
65
+ });
66
+ },
67
+ handle(routeName, config) {
68
+ const maybeRoute = Option.fromNullable(routesByName.get(routeName));
69
+ if (Option.isNone(maybeRoute)) {
70
+ throw new Error(`Route "${routeName}" not found in layout group "${groupName}"`);
71
+ }
72
+ const route = maybeRoute.value;
73
+ const normalizedLoader = (ctx) => {
74
+ if (!config.loader) {
75
+ return Effect.succeed(null);
76
+ }
77
+ const result = config.loader(ctx);
78
+ return (Effect.isEffect(result) ? result : Effect.succeed(result));
79
+ };
80
+ const handler = {
81
+ routeName,
82
+ route,
83
+ loader: normalizedLoader,
84
+ component: config.component,
85
+ };
86
+ return buildHandlers([...handlers, handler], layoutHandler);
87
+ },
88
+ });
89
+ return buildHandlers([], null);
90
+ }
52
91
  /**
53
92
  * Find a route group by name in a router.
54
93
  */
55
- function findGroup(router, groupName) {
56
- const maybeGroup = Option.fromNullable(router.groups.find((g) => g.name === groupName));
94
+ function findGroup(appRouter, groupName) {
95
+ const maybeGroup = Option.fromNullable(appRouter.groups.find((g) => g.name === groupName));
57
96
  if (Option.isNone(maybeGroup)) {
58
- throw new Error(`Group "${groupName}" not found in router "${router.name}"`);
97
+ throw new Error(`Group "${groupName}" not found in router "${appRouter.name}"`);
59
98
  }
60
99
  return maybeGroup.value;
61
100
  }
62
- export function group(router, groupName, build) {
63
- const routeGroup = findGroup(router, groupName);
101
+ export function group(appRouter, groupName, build) {
102
+ const routeGroup = findGroup(appRouter, groupName);
103
+ // Check if it's a layout group - if so, throw helpful error
104
+ if (routeGroup._tag === "LayoutGroup") {
105
+ throw new Error(`Group "${groupName}" is a LayoutGroup. Use RouterBuilder.layoutGroup() instead of RouterBuilder.group().`);
106
+ }
64
107
  const initialHandlers = makeGroupHandlers(groupName, routeGroup);
65
108
  return Layer.effect(RouterHandlers, Effect.gen(function* () {
66
109
  const result = build(initialHandlers);
@@ -68,10 +111,42 @@ export function group(router, groupName, build) {
68
111
  const handlersMap = new Map(builtHandlers.handlers.map((h) => [h.routeName, h]));
69
112
  return {
70
113
  handlers: handlersMap,
114
+ layoutHandlers: new Map(),
71
115
  getHandler(routeName) {
72
116
  const handler = handlersMap.get(routeName);
73
117
  return handler ? Option.some(handler) : Option.none();
74
118
  },
119
+ getLayoutHandler(_layoutName) {
120
+ return Option.none();
121
+ },
122
+ };
123
+ }));
124
+ }
125
+ export function layoutGroup(appRouter, groupName, build) {
126
+ const routeGroup = findGroup(appRouter, groupName);
127
+ if (routeGroup._tag !== "LayoutGroup") {
128
+ throw new Error(`Group "${groupName}" is not a LayoutGroup. Use RouterBuilder.group() instead.`);
129
+ }
130
+ const initialHandlers = makeLayoutGroupHandlers(groupName, routeGroup);
131
+ return Layer.effect(RouterHandlers, Effect.gen(function* () {
132
+ const result = build(initialHandlers);
133
+ const builtHandlers = Effect.isEffect(result) ? yield* result : result;
134
+ const handlersMap = new Map(builtHandlers.handlers.map((h) => [h.routeName, h]));
135
+ const layoutHandlersMap = new Map();
136
+ if (builtHandlers.layoutHandler) {
137
+ layoutHandlersMap.set(builtHandlers.layoutHandler.layoutName, builtHandlers.layoutHandler);
138
+ }
139
+ return {
140
+ handlers: handlersMap,
141
+ layoutHandlers: layoutHandlersMap,
142
+ getHandler(routeName) {
143
+ const handler = handlersMap.get(routeName);
144
+ return handler ? Option.some(handler) : Option.none();
145
+ },
146
+ getLayoutHandler(layoutName) {
147
+ const handler = layoutHandlersMap.get(layoutName);
148
+ return handler ? Option.some(handler) : Option.none();
149
+ },
75
150
  };
76
151
  }));
77
152
  }
@@ -90,9 +165,13 @@ export function router(_router) {
90
165
  // Start with an empty handlers layer
91
166
  return Layer.succeed(RouterHandlers, {
92
167
  handlers: new Map(),
168
+ layoutHandlers: new Map(),
93
169
  getHandler(_routeName) {
94
170
  return Option.none();
95
171
  },
172
+ getLayoutHandler(_layoutName) {
173
+ return Option.none();
174
+ },
96
175
  });
97
176
  }
98
177
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"RouterBuilder.js","sourceRoot":"","sources":["../../src/router/RouterBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouterBuilder.js","sourceRoot":"","sources":["../../src/router/RouterBuilder.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@
7
7
  * For SSR hydration, the RouterStateAtom is pre-populated and the loader is skipped
8
8
  * on first render.
9
9
  *
10
+ * Supports nested layouts - when a route is matched inside a layout group,
11
+ * the outlet renders the layout component first. The layout component should
12
+ * render its own <RouterOutlet /> which will then render the child route.
13
+ *
10
14
  * Usage:
11
15
  * ```typescript
12
16
  * function App() {
@@ -17,13 +21,31 @@
17
21
  * </div>
18
22
  * );
19
23
  * }
24
+ *
25
+ * // Layout component
26
+ * function DashboardLayout() {
27
+ * return (
28
+ * <div class="dashboard">
29
+ * <Sidebar />
30
+ * <RouterOutlet /> // Renders child route
31
+ * </div>
32
+ * );
33
+ * }
20
34
  * ```
21
35
  */
22
36
  import * as Stream from "effect/Stream";
37
+ import * as Context from "effect/Context";
23
38
  import { Registry as AtomRegistry } from "@effect-atom/atom";
24
39
  import { Navigator } from "./Navigator.js";
25
40
  import { RouterHandlers } from "./RouterBuilder.js";
26
41
  import type { VElement } from "../shared.js";
42
+ declare const OutletDepth_base: Context.TagClass<OutletDepth, "fibrae/OutletDepth", number>;
43
+ /**
44
+ * Context for tracking outlet depth in nested layouts.
45
+ * Each nested RouterOutlet increments the depth.
46
+ */
47
+ export declare class OutletDepth extends OutletDepth_base {
48
+ }
27
49
  /**
28
50
  * Props for RouterOutlet component.
29
51
  *
@@ -45,13 +67,15 @@ export interface RouterOutletProps {
45
67
  * RouterOutlet component for reactive route rendering.
46
68
  *
47
69
  * The RouterOutlet:
48
- * 1. Checks if RouterStateAtom has data (SSR hydration case)
49
- * 2. Subscribes to Navigator.currentRoute for navigation changes
50
- * 3. When route changes, runs the matched route's loader
51
- * 4. Updates RouterStateAtom with the full state (for DI access)
52
- * 5. Renders the route's component with loader data
70
+ * 1. Gets current outlet depth from context (default 0)
71
+ * 2. If at depth < layouts.length, renders the layout at that depth
72
+ * 3. If at depth === layouts.length, renders the actual route component
73
+ * 4. Subscribes to Navigator.currentRoute for navigation changes
74
+ * 5. When route changes, runs the matched route's loader
75
+ * 6. Updates RouterStateAtom with the full state (for DI access)
53
76
  *
54
77
  * For SSR hydration, the RouterStateAtom is pre-populated by the server,
55
78
  * so the first render uses that data and skips the loader.
56
79
  */
57
80
  export declare function RouterOutlet(_props?: RouterOutletProps): Stream.Stream<VElement, unknown, Navigator | RouterHandlers | AtomRegistry.AtomRegistry>;
81
+ export {};