@tanstack/solid-router 1.111.3 → 1.111.4

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 (118) hide show
  1. package/dist/source/Asset.d.ts +2 -0
  2. package/dist/source/Asset.jsx +22 -0
  3. package/dist/source/Asset.jsx.map +1 -0
  4. package/dist/source/CatchBoundary.d.ts +11 -0
  5. package/dist/source/CatchBoundary.jsx +43 -0
  6. package/dist/source/CatchBoundary.jsx.map +1 -0
  7. package/dist/source/HeadContent.d.ts +8 -0
  8. package/dist/source/HeadContent.jsx +125 -0
  9. package/dist/source/HeadContent.jsx.map +1 -0
  10. package/dist/source/Match.d.ts +8 -0
  11. package/dist/source/Match.jsx +256 -0
  12. package/dist/source/Match.jsx.map +1 -0
  13. package/dist/source/Matches.d.ts +67 -0
  14. package/dist/source/Matches.jsx +103 -0
  15. package/dist/source/Matches.jsx.map +1 -0
  16. package/dist/source/RouterProvider.d.ts +10 -0
  17. package/dist/source/RouterProvider.jsx +27 -0
  18. package/dist/source/RouterProvider.jsx.map +1 -0
  19. package/dist/source/SafeFragment.d.ts +1 -0
  20. package/dist/source/SafeFragment.jsx +4 -0
  21. package/dist/source/SafeFragment.jsx.map +1 -0
  22. package/dist/source/ScriptOnce.d.ts +5 -0
  23. package/dist/source/ScriptOnce.jsx +17 -0
  24. package/dist/source/ScriptOnce.jsx.map +1 -0
  25. package/dist/source/Scripts.d.ts +1 -0
  26. package/dist/source/Scripts.jsx +49 -0
  27. package/dist/source/Scripts.jsx.map +1 -0
  28. package/dist/source/ScrollRestoration.d.ts +15 -0
  29. package/dist/source/ScrollRestoration.jsx +36 -0
  30. package/dist/source/ScrollRestoration.jsx.map +1 -0
  31. package/dist/source/Transitioner.d.ts +1 -0
  32. package/dist/source/Transitioner.jsx +112 -0
  33. package/dist/source/Transitioner.jsx.map +1 -0
  34. package/dist/source/awaited.d.ts +11 -0
  35. package/dist/source/awaited.jsx +24 -0
  36. package/dist/source/awaited.jsx.map +1 -0
  37. package/dist/source/fileRoute.d.ts +46 -0
  38. package/dist/source/fileRoute.js +85 -0
  39. package/dist/source/fileRoute.js.map +1 -0
  40. package/dist/source/history.d.ts +8 -0
  41. package/dist/source/history.js +2 -0
  42. package/dist/source/history.js.map +1 -0
  43. package/dist/source/index.d.ts +52 -0
  44. package/dist/source/index.jsx +41 -0
  45. package/dist/source/index.jsx.map +1 -0
  46. package/dist/source/lazyRouteComponent.d.ts +7 -0
  47. package/dist/source/lazyRouteComponent.jsx +82 -0
  48. package/dist/source/lazyRouteComponent.jsx.map +1 -0
  49. package/dist/source/link.d.ts +41 -0
  50. package/dist/source/link.jsx +339 -0
  51. package/dist/source/link.jsx.map +1 -0
  52. package/dist/source/matchContext.d.ts +3 -0
  53. package/dist/source/matchContext.jsx +5 -0
  54. package/dist/source/matchContext.jsx.map +1 -0
  55. package/dist/source/not-found.d.ts +27 -0
  56. package/dist/source/not-found.jsx +39 -0
  57. package/dist/source/not-found.jsx.map +1 -0
  58. package/dist/source/redirects.d.ts +19 -0
  59. package/dist/source/redirects.js +25 -0
  60. package/dist/source/redirects.js.map +1 -0
  61. package/dist/source/renderRouteNotFound.d.ts +3 -0
  62. package/dist/source/renderRouteNotFound.jsx +15 -0
  63. package/dist/source/renderRouteNotFound.jsx.map +1 -0
  64. package/dist/source/route.d.ts +257 -0
  65. package/dist/source/route.js +240 -0
  66. package/dist/source/route.js.map +1 -0
  67. package/dist/source/router.d.ts +550 -0
  68. package/dist/source/router.js +1802 -0
  69. package/dist/source/router.js.map +1 -0
  70. package/dist/source/routerContext.d.ts +8 -0
  71. package/dist/source/routerContext.jsx +13 -0
  72. package/dist/source/routerContext.jsx.map +1 -0
  73. package/dist/source/scroll-restoration.d.ts +29 -0
  74. package/dist/source/scroll-restoration.jsx +244 -0
  75. package/dist/source/scroll-restoration.jsx.map +1 -0
  76. package/dist/source/typePrimitives.d.ts +70 -0
  77. package/dist/source/typePrimitives.js +2 -0
  78. package/dist/source/typePrimitives.js.map +1 -0
  79. package/dist/source/useBlocker.d.ts +68 -0
  80. package/dist/source/useBlocker.jsx +136 -0
  81. package/dist/source/useBlocker.jsx.map +1 -0
  82. package/dist/source/useCanGoBack.d.ts +1 -0
  83. package/dist/source/useCanGoBack.js +5 -0
  84. package/dist/source/useCanGoBack.js.map +1 -0
  85. package/dist/source/useLoaderData.d.ts +12 -0
  86. package/dist/source/useLoaderData.jsx +11 -0
  87. package/dist/source/useLoaderData.jsx.map +1 -0
  88. package/dist/source/useLoaderDeps.d.ts +11 -0
  89. package/dist/source/useLoaderDeps.jsx +11 -0
  90. package/dist/source/useLoaderDeps.jsx.map +1 -0
  91. package/dist/source/useLocation.d.ts +7 -0
  92. package/dist/source/useLocation.jsx +7 -0
  93. package/dist/source/useLocation.jsx.map +1 -0
  94. package/dist/source/useMatch.d.ts +14 -0
  95. package/dist/source/useMatch.jsx +19 -0
  96. package/dist/source/useMatch.jsx.map +1 -0
  97. package/dist/source/useNavigate.d.ts +7 -0
  98. package/dist/source/useNavigate.jsx +32 -0
  99. package/dist/source/useNavigate.jsx.map +1 -0
  100. package/dist/source/useParams.d.ts +14 -0
  101. package/dist/source/useParams.jsx +12 -0
  102. package/dist/source/useParams.jsx.map +1 -0
  103. package/dist/source/useRouteContext.d.ts +12 -0
  104. package/dist/source/useRouteContext.js +8 -0
  105. package/dist/source/useRouteContext.js.map +1 -0
  106. package/dist/source/useRouter.d.ts +4 -0
  107. package/dist/source/useRouter.jsx +9 -0
  108. package/dist/source/useRouter.jsx.map +1 -0
  109. package/dist/source/useRouterState.d.ts +8 -0
  110. package/dist/source/useRouterState.jsx +14 -0
  111. package/dist/source/useRouterState.jsx.map +1 -0
  112. package/dist/source/useSearch.d.ts +14 -0
  113. package/dist/source/useSearch.jsx +12 -0
  114. package/dist/source/useSearch.jsx.map +1 -0
  115. package/dist/source/utils.d.ts +43 -0
  116. package/dist/source/utils.js +59 -0
  117. package/dist/source/utils.js.map +1 -0
  118. package/package.json +5 -1
@@ -0,0 +1,136 @@
1
+ import * as Solid from 'solid-js';
2
+ import { useRouter } from './useRouter';
3
+ function _resolveBlockerOpts(opts, condition) {
4
+ if (opts === undefined) {
5
+ return {
6
+ shouldBlockFn: () => true,
7
+ withResolver: false,
8
+ };
9
+ }
10
+ if ('shouldBlockFn' in opts) {
11
+ return opts;
12
+ }
13
+ if (typeof opts === 'function') {
14
+ const shouldBlock = Boolean(condition ?? true);
15
+ const _customBlockerFn = async () => {
16
+ if (shouldBlock)
17
+ return await opts();
18
+ return false;
19
+ };
20
+ return {
21
+ shouldBlockFn: _customBlockerFn,
22
+ enableBeforeUnload: shouldBlock,
23
+ withResolver: false,
24
+ };
25
+ }
26
+ const shouldBlock = Boolean(opts.condition ?? true);
27
+ const fn = opts.blockerFn;
28
+ const _customBlockerFn = async () => {
29
+ if (shouldBlock && fn !== undefined) {
30
+ return await fn();
31
+ }
32
+ return shouldBlock;
33
+ };
34
+ return {
35
+ shouldBlockFn: _customBlockerFn,
36
+ enableBeforeUnload: shouldBlock,
37
+ withResolver: fn === undefined,
38
+ };
39
+ }
40
+ export function useBlocker(opts, condition) {
41
+ const { shouldBlockFn, enableBeforeUnload = true, disabled = false, withResolver = false, } = _resolveBlockerOpts(opts, condition);
42
+ const router = useRouter();
43
+ const { history } = router;
44
+ const [resolver, setResolver] = Solid.createSignal({
45
+ status: 'idle',
46
+ current: undefined,
47
+ next: undefined,
48
+ action: undefined,
49
+ proceed: undefined,
50
+ reset: undefined,
51
+ });
52
+ Solid.createEffect(() => {
53
+ const blockerFnComposed = async (blockerFnArgs) => {
54
+ function getLocation(location) {
55
+ const parsedLocation = router.parseLocation(undefined, location);
56
+ const matchedRoutes = router.getMatchedRoutes(parsedLocation);
57
+ if (matchedRoutes.foundRoute === undefined) {
58
+ throw new Error(`No route found for location ${location.href}`);
59
+ }
60
+ return {
61
+ routeId: matchedRoutes.foundRoute.id,
62
+ fullPath: matchedRoutes.foundRoute.fullPath,
63
+ pathname: parsedLocation.pathname,
64
+ params: matchedRoutes.routeParams,
65
+ search: parsedLocation.search,
66
+ };
67
+ }
68
+ const current = getLocation(blockerFnArgs.currentLocation);
69
+ const next = getLocation(blockerFnArgs.nextLocation);
70
+ const shouldBlock = await shouldBlockFn({
71
+ action: blockerFnArgs.action,
72
+ current,
73
+ next,
74
+ });
75
+ if (!withResolver) {
76
+ return shouldBlock;
77
+ }
78
+ if (!shouldBlock) {
79
+ return false;
80
+ }
81
+ const promise = new Promise((resolve) => {
82
+ setResolver({
83
+ status: 'blocked',
84
+ current,
85
+ next,
86
+ action: blockerFnArgs.action,
87
+ proceed: () => resolve(false),
88
+ reset: () => resolve(true),
89
+ });
90
+ });
91
+ const canNavigateAsync = await promise;
92
+ setResolver({
93
+ status: 'idle',
94
+ current: undefined,
95
+ next: undefined,
96
+ action: undefined,
97
+ proceed: undefined,
98
+ reset: undefined,
99
+ });
100
+ return canNavigateAsync;
101
+ };
102
+ return disabled
103
+ ? undefined
104
+ : history.block({ blockerFn: blockerFnComposed, enableBeforeUnload });
105
+ });
106
+ return resolver;
107
+ }
108
+ const _resolvePromptBlockerArgs = (props) => {
109
+ if ('shouldBlockFn' in props) {
110
+ return { ...props };
111
+ }
112
+ const shouldBlock = Boolean(props.condition ?? true);
113
+ const fn = props.blockerFn;
114
+ const _customBlockerFn = async () => {
115
+ if (shouldBlock && fn !== undefined) {
116
+ return await fn();
117
+ }
118
+ return shouldBlock;
119
+ };
120
+ return {
121
+ shouldBlockFn: _customBlockerFn,
122
+ enableBeforeUnload: shouldBlock,
123
+ withResolver: fn === undefined,
124
+ };
125
+ };
126
+ export function Block(opts) {
127
+ const { children, ...rest } = opts;
128
+ const args = _resolvePromptBlockerArgs(rest);
129
+ const resolver = useBlocker(args);
130
+ return children
131
+ ? typeof children === 'function'
132
+ ? children(resolver)
133
+ : children
134
+ : null;
135
+ }
136
+ //# sourceMappingURL=useBlocker.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlocker.jsx","sourceRoot":"","sources":["../../src/useBlocker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function useCanGoBack(): import("solid-js").Accessor<boolean>;
@@ -0,0 +1,5 @@
1
+ import { useRouterState } from './useRouterState';
2
+ export function useCanGoBack() {
3
+ return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 });
4
+ }
5
+ //# sourceMappingURL=useCanGoBack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCanGoBack.js","sourceRoot":"","sources":["../../src/useCanGoBack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,UAAU,YAAY;IAC1B,OAAO,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC,CAAA;AAC9E,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Accessor } from 'solid-js';
2
+ import type { AnyRouter, RegisteredRouter } from './router';
3
+ import type { StrictOrFrom } from './utils';
4
+ import type { AllLoaderData, Expand, RouteById } from '@tanstack/router-core';
5
+ export interface UseLoaderDataBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> {
6
+ select?: (match: ResolveLoaderData<TRouter, TFrom, TStrict>) => TSelected;
7
+ }
8
+ export type UseLoaderDataOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>;
9
+ export type ResolveLoaderData<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllLoaderData<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderData']>;
10
+ export type UseLoaderDataResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveLoaderData<TRouter, TFrom, TStrict> : TSelected;
11
+ export type UseLoaderDataRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>;
12
+ export declare function useLoaderData<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>>;
@@ -0,0 +1,11 @@
1
+ import { useMatch } from './useMatch';
2
+ export function useLoaderData(opts) {
3
+ return useMatch({
4
+ from: opts.from,
5
+ strict: opts.strict,
6
+ select: (s) => {
7
+ return opts.select ? opts.select(s.loaderData) : s.loaderData;
8
+ },
9
+ });
10
+ }
11
+ //# sourceMappingURL=useLoaderData.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoaderData.jsx","sourceRoot":"","sources":["../../src/useLoaderData.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA+CrC,MAAM,UAAU,aAAa,CAM3B,IAA8D;IAE9D,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,IAAI,CAAC,IAAK;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,CAAC,CAAM,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QAC/D,CAAC;KACK,CAAQ,CAAA;AAClB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { AnyRouter, RegisteredRouter } from './router';
2
+ import type { StrictOrFrom } from './utils';
3
+ import type { Expand, RouteById } from '@tanstack/router-core';
4
+ export interface UseLoaderDepsBaseOptions<TRouter extends AnyRouter, TFrom, TSelected> {
5
+ select?: (deps: ResolveLoaderDeps<TRouter, TFrom>) => TSelected;
6
+ }
7
+ export type UseLoaderDepsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TSelected> = StrictOrFrom<TRouter, TFrom> & UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>;
8
+ export type ResolveLoaderDeps<TRouter extends AnyRouter, TFrom> = Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderDeps']>;
9
+ export type UseLoaderDepsResult<TRouter extends AnyRouter, TFrom, TSelected> = unknown extends TSelected ? ResolveLoaderDeps<TRouter, TFrom> : TSelected;
10
+ export type UseLoaderDepsRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>) => UseLoaderDepsResult<TRouter, TId, TSelected>;
11
+ export declare function useLoaderDeps<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TSelected = unknown>(opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>): UseLoaderDepsResult<TRouter, TFrom, TSelected>;
@@ -0,0 +1,11 @@
1
+ import { useMatch } from './useMatch';
2
+ export function useLoaderDeps(opts) {
3
+ const { select, ...rest } = opts;
4
+ return useMatch({
5
+ ...rest,
6
+ select: (s) => {
7
+ return select ? select(s.loaderDeps) : s.loaderDeps;
8
+ },
9
+ });
10
+ }
11
+ //# sourceMappingURL=useLoaderDeps.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoaderDeps.jsx","sourceRoot":"","sources":["../../src/useLoaderDeps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAoCrC,MAAM,UAAU,aAAa,CAK3B,IAAqD;IAErD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAChC,OAAO,QAAQ,CAAC;QACd,GAAG,IAAI;QACP,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QACrD,CAAC;KACF,CAAmD,CAAA;AACtD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Accessor } from 'solid-js';
2
+ import type { AnyRouter, RegisteredRouter, RouterState } from './router';
3
+ export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {
4
+ select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected;
5
+ }
6
+ export type UseLocationResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? RouterState<TRouter['routeTree']>['location'] : TSelected;
7
+ export declare function useLocation<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLocationBaseOptions<TRouter, TSelected>): Accessor<UseLocationResult<TRouter, TSelected>>;
@@ -0,0 +1,7 @@
1
+ import { useRouterState } from './useRouterState';
2
+ export function useLocation(opts) {
3
+ return useRouterState({
4
+ select: (state) => opts?.select ? opts.select(state.location) : state.location,
5
+ });
6
+ }
7
+ //# sourceMappingURL=useLocation.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLocation.jsx","sourceRoot":"","sources":["../../src/useLocation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAejD,MAAM,UAAU,WAAW,CAIzB,IAAiD;IAEjD,OAAO,cAAc,CAAC;QACpB,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE,CACrB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;KACvD,CAAoD,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,14 @@
1
+ import * as Solid from 'solid-js';
2
+ import type { AnyRouter, RegisteredRouter } from './router';
3
+ import type { MakeRouteMatch, MakeRouteMatchUnion } from './Matches';
4
+ import type { StrictOrFrom } from './utils';
5
+ import type { ThrowOrOptional } from '@tanstack/router-core';
6
+ export interface UseMatchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
7
+ select?: (match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>) => TSelected;
8
+ shouldThrow?: TThrow;
9
+ }
10
+ export type UseMatchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>;
11
+ export type UseMatchOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
12
+ export type UseMatchResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? TStrict extends true ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict> : MakeRouteMatchUnion<TRouter> : TSelected;
13
+ export type ThrowConstraint<TStrict extends boolean, TThrow extends boolean> = TStrict extends false ? (TThrow extends true ? never : TThrow) : TThrow;
14
+ export declare function useMatch<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseMatchOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Solid.Accessor<ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
@@ -0,0 +1,19 @@
1
+ import * as Solid from 'solid-js';
2
+ import invariant from 'tiny-invariant';
3
+ import { useRouterState } from './useRouterState';
4
+ import { dummyMatchContext, matchContext } from './matchContext';
5
+ export function useMatch(opts) {
6
+ const nearestMatchId = Solid.useContext(opts.from ? dummyMatchContext : matchContext);
7
+ const matchSelection = useRouterState({
8
+ select: (state) => {
9
+ const match = state.matches.find((d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId());
10
+ invariant(!((opts.shouldThrow ?? true) && !match), `Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
11
+ if (match === undefined) {
12
+ return undefined;
13
+ }
14
+ return opts.select ? opts.select(match) : match;
15
+ },
16
+ });
17
+ return matchSelection;
18
+ }
19
+ //# sourceMappingURL=useMatch.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMatch.jsx","sourceRoot":"","sources":["../../src/useMatch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAmDhE,MAAM,UAAU,QAAQ,CAOtB,IAMC;IAID,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAC7C,CAAA;IAED,MAAM,cAAc,GAAG,cAAc,CAAC;QACpC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,EAAE,CAChE,CAAA;YAED,SAAS,CACP,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACvC,kBAAkB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAC3F,CAAA;YAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAA;YAClB,CAAC;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACjD,CAAC;KACK,CAAC,CAAA;IAET,OAAO,cAAqB,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { FromPathOption, NavigateOptions } from '@tanstack/router-core';
2
+ import type { AnyRouter, RegisteredRouter } from './router';
3
+ export type UseNavigateResult<TDefaultFrom extends string> = <TRouter extends RegisteredRouter, TTo extends string | undefined, TFrom extends string = TDefaultFrom, TMaskFrom extends string = TFrom, TMaskTo extends string = ''>({ from, ...rest }: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>;
4
+ export declare function useNavigate<TRouter extends AnyRouter = RegisteredRouter, TDefaultFrom extends string = string>(_defaultOpts?: {
5
+ from?: FromPathOption<TRouter, TDefaultFrom>;
6
+ }): UseNavigateResult<TDefaultFrom>;
7
+ export declare function Navigate<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null;
@@ -0,0 +1,32 @@
1
+ import * as Solid from 'solid-js';
2
+ import { useRouter } from './useRouter';
3
+ export function useNavigate(_defaultOpts) {
4
+ const { navigate } = useRouter();
5
+ return ((options) => {
6
+ return navigate({ ...options });
7
+ });
8
+ }
9
+ // NOTE: I don't know of anyone using this. It's undocumented, so let's wait until someone needs it
10
+ // export function typedNavigate<
11
+ // TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
12
+ // TDefaultFrom extends RoutePaths<TRouteTree> = '/',
13
+ // >(navigate: (opts: NavigateOptions<any>) => Promise<void>) {
14
+ // return navigate as <
15
+ // TFrom extends RoutePaths<TRouteTree> = TDefaultFrom,
16
+ // TTo extends string = '',
17
+ // TMaskFrom extends RoutePaths<TRouteTree> = '/',
18
+ // TMaskTo extends string = '',
19
+ // >(
20
+ // opts?: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,
21
+ // ) => Promise<void>
22
+ // } //
23
+ export function Navigate(props) {
24
+ const { navigate } = useRouter();
25
+ Solid.onMount(() => {
26
+ navigate({
27
+ ...props,
28
+ });
29
+ });
30
+ return null;
31
+ }
32
+ //# sourceMappingURL=useNavigate.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavigate.jsx","sourceRoot":"","sources":["../../src/useNavigate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAevC,MAAM,UAAU,WAAW,CAGzB,YAED;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAA;IAEhC,OAAO,CAAC,CAAC,OAAwB,EAAE,EAAE;QACnC,OAAO,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;IACjC,CAAC,CAAoC,CAAA;AACvC,CAAC;AAED,mGAAmG;AACnG,iCAAiC;AACjC,iEAAiE;AACjE,uDAAuD;AACvD,+DAA+D;AAC/D,yBAAyB;AACzB,2DAA2D;AAC3D,+BAA+B;AAC/B,sDAAsD;AACtD,mCAAmC;AACnC,OAAO;AACP,0EAA0E;AAC1E,uBAAuB;AACvB,OAAO;AAEP,MAAM,UAAU,QAAQ,CAMtB,KAA+D;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAA;IAEhC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC;YACP,GAAG,KAAK;SACT,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ThrowConstraint } from './useMatch';
2
+ import type { Accessor } from 'solid-js';
3
+ import type { AnyRouter, RegisteredRouter } from './router';
4
+ import type { StrictOrFrom } from './utils';
5
+ import type { AllParams, Expand, RouteById, ThrowOrOptional } from '@tanstack/router-core';
6
+ export interface UseParamsBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
7
+ select?: (params: ResolveParams<TRouter, TFrom, TStrict>) => TSelected;
8
+ shouldThrow?: TThrow;
9
+ }
10
+ export type UseParamsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
11
+ export type ResolveParams<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllParams<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allParams']>;
12
+ export type UseParamsResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveParams<TRouter, TFrom, TStrict> : TSelected;
13
+ export type UseParamsRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseParamsBaseOptions<TRouter, TFrom, true, true, TSelected>) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>;
14
+ export declare function useParams<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseParamsOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Accessor<ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
@@ -0,0 +1,12 @@
1
+ import { useMatch } from './useMatch';
2
+ export function useParams(opts) {
3
+ return useMatch({
4
+ from: opts.from,
5
+ strict: opts.strict,
6
+ shouldThrow: opts.shouldThrow,
7
+ select: (match) => {
8
+ return opts.select ? opts.select(match.params) : match.params;
9
+ },
10
+ });
11
+ }
12
+ //# sourceMappingURL=useParams.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useParams.jsx","sourceRoot":"","sources":["../../src/useParams.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA6DrC,MAAM,UAAU,SAAS,CAOvB,IAMC;IAID,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,IAAI,CAAC,IAAK;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;YACrB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;QAC/D,CAAC;KACK,CAAQ,CAAA;AAClB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Accessor } from 'solid-js';
2
+ import type { AnyRouter, RegisteredRouter } from './router';
3
+ import type { StrictOrFrom } from './utils';
4
+ import type { AllContext, Expand, RouteById } from '@tanstack/router-core';
5
+ export interface UseRouteContextBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> {
6
+ select?: (search: ResolveRouteContext<TRouter, TFrom, TStrict>) => TSelected;
7
+ }
8
+ export type UseRouteContextOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseRouteContextBaseOptions<TRouter, TFrom, TStrict, TSelected>;
9
+ export type ResolveRouteContext<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllContext<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allContext']>;
10
+ export type UseRouteContextResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveRouteContext<TRouter, TFrom, TStrict> : TSelected;
11
+ export type UseRouteContextRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>) => Accessor<UseRouteContextResult<TRouter, TFrom, true, TSelected>>;
12
+ export declare function useRouteContext<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>): Accessor<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>>;
@@ -0,0 +1,8 @@
1
+ import { useMatch } from './useMatch';
2
+ export function useRouteContext(opts) {
3
+ return useMatch({
4
+ ...opts,
5
+ select: (match) => opts.select ? opts.select(match.context) : match.context,
6
+ });
7
+ }
8
+ //# sourceMappingURL=useRouteContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRouteContext.js","sourceRoot":"","sources":["../../src/useRouteContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAgDrC,MAAM,UAAU,eAAe,CAM7B,IAAgE;IAEhE,OAAO,QAAQ,CAAC;QACd,GAAI,IAAY;QAChB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;KAC3D,CAAQ,CAAA;AACX,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AnyRouter, RegisteredRouter } from './router';
2
+ export declare function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
3
+ warn?: boolean;
4
+ }): TRouter;
@@ -0,0 +1,9 @@
1
+ import * as Solid from 'solid-js';
2
+ import warning from 'tiny-warning';
3
+ import { getRouterContext } from './routerContext';
4
+ export function useRouter(opts) {
5
+ const value = Solid.useContext(getRouterContext());
6
+ warning(!((opts?.warn ?? true) && !value), 'useRouter must be used inside a <RouterProvider> component!');
7
+ return value;
8
+ }
9
+ //# sourceMappingURL=useRouter.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRouter.jsx","sourceRoot":"","sources":["../../src/useRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGlD,MAAM,UAAU,SAAS,CAA+C,IAEvE;IACC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAS,CAAC,CAAA;IACzD,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACjC,6DAA6D,CAC9D,CAAA;IACD,OAAO,KAAY,CAAA;AACrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AnyRouter, RegisteredRouter, RouterState } from './router';
2
+ import type { Accessor } from 'solid-js';
3
+ export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {
4
+ router?: TRouter;
5
+ select?: (state: RouterState<TRouter['routeTree']>) => TSelected;
6
+ };
7
+ export type UseRouterStateResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected;
8
+ export declare function useRouterState<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseRouterStateOptions<TRouter, TSelected>): Accessor<UseRouterStateResult<TRouter, TSelected>>;
@@ -0,0 +1,14 @@
1
+ import { useStore } from '@tanstack/solid-store';
2
+ import { useRouter } from './useRouter';
3
+ export function useRouterState(opts) {
4
+ const contextRouter = useRouter({
5
+ warn: opts?.router === undefined,
6
+ });
7
+ const router = opts?.router || contextRouter;
8
+ return useStore(router.__store, (state) => {
9
+ if (opts?.select)
10
+ return opts.select(state);
11
+ return state;
12
+ });
13
+ }
14
+ //# sourceMappingURL=useRouterState.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRouterState.jsx","sourceRoot":"","sources":["../../src/useRouterState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAcvC,MAAM,UAAU,cAAc,CAI5B,IAAgD;IAEhD,MAAM,aAAa,GAAG,SAAS,CAAU;QACvC,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS;KACjC,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,aAAa,CAAA;IAE5C,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,IAAI,IAAI,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3C,OAAO,KAAK,CAAA;IACd,CAAC,CAAuD,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ThrowConstraint } from './useMatch';
2
+ import type { Accessor } from 'solid-js';
3
+ import type { AnyRouter, RegisteredRouter } from './router';
4
+ import type { StrictOrFrom } from './utils';
5
+ import type { Expand, FullSearchSchema, RouteById, ThrowOrOptional } from '@tanstack/router-core';
6
+ export interface UseSearchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
7
+ select?: (state: ResolveSearch<TRouter, TFrom, TStrict>) => TSelected;
8
+ shouldThrow?: TThrow;
9
+ }
10
+ export type UseSearchOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
11
+ export type UseSearchResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveSearch<TRouter, TFrom, TStrict> : TSelected;
12
+ export type ResolveSearch<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? FullSearchSchema<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['fullSearchSchema']>;
13
+ export type UseSearchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseSearchBaseOptions<TRouter, TFrom, true, true, TSelected>) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>;
14
+ export declare function useSearch<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseSearchOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Accessor<ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
@@ -0,0 +1,12 @@
1
+ import { useMatch } from './useMatch';
2
+ export function useSearch(opts) {
3
+ return useMatch({
4
+ from: opts.from,
5
+ strict: opts.strict,
6
+ shouldThrow: opts.shouldThrow,
7
+ select: (match) => {
8
+ return opts.select ? opts.select(match.search) : match.search;
9
+ },
10
+ });
11
+ }
12
+ //# sourceMappingURL=useSearch.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearch.jsx","sourceRoot":"","sources":["../../src/useSearch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA8DrC,MAAM,UAAU,SAAS,CAOvB,IAMC;IAID,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,IAAI,CAAC,IAAK;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;YACrB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;QAC/D,CAAC;KACF,CAAQ,CAAA;AACX,CAAC"}
@@ -0,0 +1,43 @@
1
+ import * as Solid from 'solid-js';
2
+ import type { AnyRouter } from './router';
3
+ import type { ConstrainLiteral, RouteIds } from '@tanstack/router-core';
4
+ export type StrictOrFrom<TRouter extends AnyRouter, TFrom, TStrict extends boolean = true> = TStrict extends false ? {
5
+ from?: never;
6
+ strict: TStrict;
7
+ } : {
8
+ from: ConstrainLiteral<TFrom, RouteIds<TRouter['routeTree']>>;
9
+ strict?: TStrict;
10
+ };
11
+ export declare const useLayoutEffect: typeof Solid.createRenderEffect;
12
+ export declare const usePrevious: (fn: () => boolean) => Solid.Accessor<{
13
+ current: boolean | null;
14
+ previous: boolean | null;
15
+ }>;
16
+ /**
17
+ * React hook to wrap `IntersectionObserver`.
18
+ *
19
+ * This hook will create an `IntersectionObserver` and observe the ref passed to it.
20
+ *
21
+ * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.
22
+ *
23
+ * @param ref - The ref to observe
24
+ * @param intersectionObserverOptions - The options to pass to the IntersectionObserver
25
+ * @param options - The options to pass to the hook
26
+ * @param callback - The callback to call when the intersection changes
27
+ * @returns The IntersectionObserver instance
28
+ * @example
29
+ * ```tsx
30
+ * const MyComponent = () => {
31
+ * const ref = React.useRef<HTMLDivElement>(null)
32
+ * useIntersectionObserver(
33
+ * ref,
34
+ * (entry) => { doSomething(entry) },
35
+ * { rootMargin: '10px' },
36
+ * { disabled: false }
37
+ * )
38
+ * return <div ref={ref} />
39
+ * ```
40
+ */
41
+ export declare function useIntersectionObserver<T extends Element>(ref: Solid.Accessor<T | null>, callback: (entry: IntersectionObserverEntry | undefined) => void, intersectionObserverOptions?: IntersectionObserverInit, options?: {
42
+ disabled?: boolean;
43
+ }): Solid.Accessor<IntersectionObserver | null>;
@@ -0,0 +1,59 @@
1
+ import * as Solid from 'solid-js';
2
+ export const useLayoutEffect = typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect;
3
+ export const usePrevious = (fn) => {
4
+ return Solid.createMemo((prev = {
5
+ current: null,
6
+ previous: null,
7
+ }) => {
8
+ const current = fn();
9
+ if (prev.current !== current) {
10
+ prev.previous = prev.current;
11
+ prev.current = current;
12
+ }
13
+ return prev;
14
+ });
15
+ };
16
+ /**
17
+ * React hook to wrap `IntersectionObserver`.
18
+ *
19
+ * This hook will create an `IntersectionObserver` and observe the ref passed to it.
20
+ *
21
+ * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.
22
+ *
23
+ * @param ref - The ref to observe
24
+ * @param intersectionObserverOptions - The options to pass to the IntersectionObserver
25
+ * @param options - The options to pass to the hook
26
+ * @param callback - The callback to call when the intersection changes
27
+ * @returns The IntersectionObserver instance
28
+ * @example
29
+ * ```tsx
30
+ * const MyComponent = () => {
31
+ * const ref = React.useRef<HTMLDivElement>(null)
32
+ * useIntersectionObserver(
33
+ * ref,
34
+ * (entry) => { doSomething(entry) },
35
+ * { rootMargin: '10px' },
36
+ * { disabled: false }
37
+ * )
38
+ * return <div ref={ref} />
39
+ * ```
40
+ */
41
+ export function useIntersectionObserver(ref, callback, intersectionObserverOptions = {}, options = {}) {
42
+ const isIntersectionObserverAvailable = typeof IntersectionObserver === 'function';
43
+ let observerRef = null;
44
+ Solid.createEffect(() => {
45
+ const r = ref();
46
+ if (!r || !isIntersectionObserverAvailable || options.disabled) {
47
+ return;
48
+ }
49
+ observerRef = new IntersectionObserver(([entry]) => {
50
+ callback(entry);
51
+ }, intersectionObserverOptions);
52
+ observerRef.observe(r);
53
+ Solid.onCleanup(() => {
54
+ observerRef?.disconnect();
55
+ });
56
+ });
57
+ return () => observerRef;
58
+ }
59
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AAkBjC,MAAM,CAAC,MAAM,eAAe,GAC1B,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAA;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAiB,EAAE,EAAE;IAC/C,OAAO,KAAK,CAAC,UAAU,CACrB,CACE,OAA8D;QAC5D,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,EACD,EAAE;QACF,MAAM,OAAO,GAAG,EAAE,EAAE,CAAA;QAEpB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAA;YAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACxB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC,CACF,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAA6B,EAC7B,QAAgE,EAChE,8BAAwD,EAAE,EAC1D,UAAkC,EAAE;IAEpC,MAAM,+BAA+B,GACnC,OAAO,oBAAoB,KAAK,UAAU,CAAA;IAC5C,IAAI,WAAW,GAAgC,IAAI,CAAA;IAEnD,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;QACtB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,CAAC,IAAI,CAAC,+BAA+B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/D,OAAM;QACR,CAAC;QAED,WAAW,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;YACjD,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC,EAAE,2BAA2B,CAAC,CAAA;QAE/B,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEtB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;YACnB,WAAW,EAAE,UAAU,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE,CAAC,WAAW,CAAA;AAC1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-router",
3
- "version": "1.111.3",
3
+ "version": "1.111.4",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -29,6 +29,10 @@
29
29
  "module": "dist/esm/index.js",
30
30
  "exports": {
31
31
  ".": {
32
+ "solid": {
33
+ "types": "./dist/source/index.d.ts",
34
+ "default": "./dist/source/index.jsx"
35
+ },
32
36
  "import": {
33
37
  "types": "./dist/esm/index.d.ts",
34
38
  "default": "./dist/esm/index.js"