@real-router/svelte 0.13.2 → 0.13.3

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 (41) hide show
  1. package/dist/RouterProvider.svelte +8 -0
  2. package/dist/components/Link.svelte +2 -0
  3. package/dist/components/RouteView.svelte +2 -0
  4. package/dist/dom-utils/link-utils.js +3 -3
  5. package/dist/dom-utils/scroll-spy.js +1 -0
  6. package/package.json +6 -6
  7. package/dist/dom-utils/__test-helpers/expected-fragment.d.ts +0 -30
  8. package/dist/dom-utils/__test-helpers/expected-fragment.js +0 -43
  9. package/dist/dom-utils/__test-helpers/index.d.ts +0 -8
  10. package/dist/dom-utils/__test-helpers/index.js +0 -8
  11. package/src/RouterProvider.svelte +0 -112
  12. package/src/actions/link.svelte.ts +0 -88
  13. package/src/components/Await.svelte +0 -48
  14. package/src/components/ClientOnly.svelte +0 -22
  15. package/src/components/HttpStatusCode.svelte +0 -63
  16. package/src/components/HttpStatusProvider.svelte +0 -45
  17. package/src/components/Lazy.svelte +0 -55
  18. package/src/components/Link.svelte +0 -95
  19. package/src/components/RouteView.helpers.ts +0 -24
  20. package/src/components/RouteView.svelte +0 -35
  21. package/src/components/RouterErrorBoundary.svelte +0 -47
  22. package/src/components/ServerOnly.svelte +0 -22
  23. package/src/components/Streamed.svelte +0 -37
  24. package/src/composables/useDeferred.svelte.ts +0 -41
  25. package/src/composables/useIsActiveRoute.svelte.ts +0 -30
  26. package/src/composables/useNavigator.svelte.ts +0 -6
  27. package/src/composables/useRoute.svelte.ts +0 -25
  28. package/src/composables/useRouteEnter.svelte.ts +0 -120
  29. package/src/composables/useRouteExit.svelte.ts +0 -113
  30. package/src/composables/useRouteNode.svelte.ts +0 -18
  31. package/src/composables/useRouteUtils.svelte.ts +0 -12
  32. package/src/composables/useRouter.svelte.ts +0 -6
  33. package/src/composables/useRouterTransition.svelte.ts +0 -15
  34. package/src/constants.ts +0 -7
  35. package/src/context.ts +0 -24
  36. package/src/createReactiveSource.svelte.ts +0 -21
  37. package/src/createRouteContext.svelte.ts +0 -27
  38. package/src/index.ts +0 -60
  39. package/src/ssr.ts +0 -28
  40. package/src/types.ts +0 -46
  41. package/src/utils/createHttpStatusSink.ts +0 -31
package/src/context.ts DELETED
@@ -1,24 +0,0 @@
1
- import { getContext } from "svelte";
2
-
3
- export const ROUTER_KEY = "real-router:router";
4
-
5
- export const NAVIGATOR_KEY = "real-router:navigator";
6
-
7
- export const ROUTE_KEY = "real-router:route";
8
-
9
- export const HTTP_STATUS_KEY = "real-router:http-status-sink";
10
-
11
- // The type parameter is used by the caller to narrow the return type.
12
- // ESLint's no-unnecessary-type-parameters sees only a single textual use of T
13
- // (the return type) — but each call site supplies a different T, so it is not
14
- // unnecessary. Inline generic helpers are a standard pattern for typed context.
15
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
16
- export function getContextOrThrow<T>(key: string, consumerName: string): T {
17
- const value = getContext<T | undefined>(key);
18
-
19
- if (!value) {
20
- throw new Error(`${consumerName} must be used within a RouterProvider`);
21
- }
22
-
23
- return value;
24
- }
@@ -1,21 +0,0 @@
1
- import { createSubscriber } from "svelte/reactivity";
2
-
3
- import type { RouterSource } from "@real-router/sources";
4
-
5
- export function createReactiveSource<T>(source: RouterSource<T>): {
6
- readonly current: T;
7
- } {
8
- const subscribe = createSubscriber((update) => {
9
- return source.subscribe(() => {
10
- update();
11
- });
12
- });
13
-
14
- return {
15
- get current(): T {
16
- subscribe();
17
-
18
- return source.getSnapshot();
19
- },
20
- };
21
- }
@@ -1,27 +0,0 @@
1
- import type { Navigator, State } from "@real-router/core";
2
-
3
- import type { RouteContext } from "./types";
4
-
5
- export interface RouteSnapshot {
6
- readonly route: State | undefined;
7
- readonly previousRoute: State | undefined;
8
- }
9
-
10
- export function createRouteContext(
11
- navigator: Navigator,
12
- reactive: { readonly current: RouteSnapshot },
13
- ): RouteContext {
14
- const route = {
15
- get current(): State | undefined {
16
- return reactive.current.route;
17
- },
18
- };
19
-
20
- const previousRoute = {
21
- get current(): State | undefined {
22
- return reactive.current.previousRoute;
23
- },
24
- };
25
-
26
- return { navigator, route, previousRoute };
27
- }
package/src/index.ts DELETED
@@ -1,60 +0,0 @@
1
- // Components
2
- export { default as RouteView } from "./components/RouteView.svelte";
3
-
4
- export { default as Link } from "./components/Link.svelte";
5
-
6
- export { default as Lazy } from "./components/Lazy.svelte";
7
-
8
- export { default as RouterErrorBoundary } from "./components/RouterErrorBoundary.svelte";
9
-
10
- // Reactive Primitives
11
- export { createReactiveSource } from "./createReactiveSource.svelte";
12
-
13
- // Composables
14
- export { useRouter } from "./composables/useRouter.svelte";
15
-
16
- export { useNavigator } from "./composables/useNavigator.svelte";
17
-
18
- export { useRouteUtils } from "./composables/useRouteUtils.svelte";
19
-
20
- export { useRoute } from "./composables/useRoute.svelte";
21
-
22
- export { useRouteNode } from "./composables/useRouteNode.svelte";
23
-
24
- export { useRouterTransition } from "./composables/useRouterTransition.svelte";
25
-
26
- export { useRouteExit } from "./composables/useRouteExit.svelte";
27
-
28
- export { useRouteEnter } from "./composables/useRouteEnter.svelte";
29
-
30
- // Actions
31
- export { createLinkAction } from "./actions/link.svelte";
32
-
33
- export type { LinkActionParams } from "./actions/link.svelte";
34
-
35
- // Context
36
- export { default as RouterProvider } from "./RouterProvider.svelte";
37
-
38
- export { ROUTER_KEY, NAVIGATOR_KEY, ROUTE_KEY } from "./context";
39
-
40
- // Types
41
- export type { LinkProps, RouteContext } from "./types";
42
-
43
- export type {
44
- RouteExitContext,
45
- RouteExitHandler,
46
- UseRouteExitOptions,
47
- } from "./composables/useRouteExit.svelte";
48
-
49
- export type {
50
- RouteEnterContext,
51
- RouteEnterHandler,
52
- UseRouteEnterOptions,
53
- } from "./composables/useRouteEnter.svelte";
54
-
55
- export type { Navigator } from "@real-router/core";
56
-
57
- export type {
58
- RouterTransitionSnapshot,
59
- RouterErrorSnapshot,
60
- } from "@real-router/sources";
package/src/ssr.ts DELETED
@@ -1,28 +0,0 @@
1
- // SSR-feature entry — Svelte 5+
2
- //
3
- // Server-side and SSR-aware components/composables. Mirror of `@real-router/react/ssr`
4
- // — same exports, Svelte-native idioms (`{#await}` block under the hood,
5
- // `$state` rune for ClientOnly/ServerOnly, useDeferred returns Promise<T>
6
- // for direct use with native `{#await}`).
7
-
8
- // Components
9
- export { default as ClientOnly } from "./components/ClientOnly.svelte";
10
-
11
- export { default as ServerOnly } from "./components/ServerOnly.svelte";
12
-
13
- export { default as Await } from "./components/Await.svelte";
14
-
15
- export { default as Streamed } from "./components/Streamed.svelte";
16
-
17
- export { default as HttpStatusCode } from "./components/HttpStatusCode.svelte";
18
-
19
- export { default as HttpStatusProvider } from "./components/HttpStatusProvider.svelte";
20
-
21
- // Composables
22
- export { useDeferred } from "./composables/useDeferred.svelte";
23
-
24
- // Utilities
25
- export { createHttpStatusSink } from "./utils/createHttpStatusSink";
26
-
27
- // Types
28
- export type { HttpStatusSink } from "./utils/createHttpStatusSink";
package/src/types.ts DELETED
@@ -1,46 +0,0 @@
1
- import type {
2
- NavigationOptions,
3
- Navigator,
4
- Params,
5
- State,
6
- } from "@real-router/core";
7
- import type { Snippet } from "svelte";
8
-
9
- export interface RouteContext<P extends Params = Params> {
10
- readonly navigator: Navigator;
11
- readonly route: { readonly current: State<P> | undefined };
12
- readonly previousRoute: { readonly current: State | undefined };
13
- }
14
-
15
- /**
16
- * Props accepted by `<Link>`. Mirrors the inline prop shape in
17
- * `src/components/Link.svelte` — any prop landed by `Link.svelte` is also
18
- * declared here, including the rest-props index signature for arbitrary
19
- * HTML attributes spread onto the rendered `<a>`.
20
- */
21
- export interface LinkProps<P extends Params = Params> {
22
- /**
23
- * All other props are spread onto the rendered `<a>` element. Use this for
24
- * `aria-*`, `data-*`, `id`, `title`, and any other native attributes.
25
- */
26
- readonly [key: string]: unknown;
27
- readonly routeName: string;
28
- readonly routeParams?: P;
29
- readonly routeOptions?: NavigationOptions;
30
- readonly class?: string;
31
- readonly activeClassName?: string;
32
- readonly activeStrict?: boolean;
33
- readonly ignoreQueryParams?: boolean;
34
- /**
35
- * URL fragment (decoded, no leading "#") — #532.
36
- * - `undefined` → preserve current `state.context.url.hash` on click.
37
- * - `""` → clear the hash.
38
- * - `"value"` → set the hash; same-route different-hash clicks route through
39
- * `navigateWithHash`, which adds `force: true, hashChange: true` to
40
- * bypass core's SAME_STATES check.
41
- */
42
- readonly hash?: string;
43
- readonly target?: string;
44
- readonly children?: Snippet;
45
- readonly onclick?: (evt: MouseEvent) => void;
46
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * Render-scoped HTTP status sink. Created per request on the server, passed to
3
- * `<HttpStatusProvider sink={...}>`, and read after `await render()` from
4
- * `svelte/server` to apply the value to the HTTP response.
5
- *
6
- * Last write wins: if the rendered tree mounts more than one
7
- * `<HttpStatusCode />`, the value reflects the last component that ran during
8
- * the render pass.
9
- *
10
- * No-op on the client — `<HttpStatusCode />` reads the optional injected sink
11
- * and skips the write when no provider is mounted, so the same component tree
12
- * can be hydrated without changing behaviour.
13
- *
14
- * Constraints:
15
- * - **Per-request only.** Don't share a sink across requests; the rendered
16
- * tree mutates `code` in place. Module-level singletons leak status
17
- * between concurrent requests.
18
- * - **Don't `Object.freeze` the sink.** The component writes to `.code`;
19
- * freezing makes the assignment throw under ESM strict mode.
20
- * - **Hydration is tolerant.** Svelte 5's hydration walker accepts
21
- * `{#if}`-branch asymmetry between server and client (verified by `ssr/`
22
- * e2e), so the example app uses a server-only provider wrapper. This
23
- * contrasts with Vue/Solid, which require symmetric provider mounting.
24
- */
25
- export interface HttpStatusSink {
26
- code: number | undefined;
27
- }
28
-
29
- export function createHttpStatusSink(): HttpStatusSink {
30
- return { code: undefined };
31
- }