@tanstack/solid-router 2.0.0-alpha.5 → 2.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Asset.cjs +2 -2
- package/dist/cjs/Asset.cjs.map +1 -1
- package/dist/cjs/HeadContent.cjs +11 -1
- package/dist/cjs/HeadContent.cjs.map +1 -1
- package/dist/cjs/HeadContent.dev.cjs +11 -1
- package/dist/cjs/HeadContent.dev.cjs.map +1 -1
- package/dist/cjs/Match.cjs +265 -248
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/Match.d.cts +1 -3
- package/dist/cjs/Matches.cjs +35 -34
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/RouterProvider.cjs +12 -8
- package/dist/cjs/RouterProvider.cjs.map +1 -1
- package/dist/cjs/RouterProvider.d.cts +1 -1
- package/dist/cjs/Scripts.cjs +23 -12
- package/dist/cjs/Scripts.cjs.map +1 -1
- package/dist/cjs/Scripts.d.cts +2 -1
- package/dist/cjs/Transitioner.cjs +57 -36
- package/dist/cjs/Transitioner.cjs.map +1 -1
- package/dist/cjs/headContentUtils.cjs +26 -23
- package/dist/cjs/headContentUtils.cjs.map +1 -1
- package/dist/cjs/headContentUtils.d.cts +2 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.dev.cjs +1 -1
- package/dist/cjs/link.cjs +143 -101
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/cjs/matchContext.cjs +7 -5
- package/dist/cjs/matchContext.cjs.map +1 -1
- package/dist/cjs/matchContext.d.cts +8 -2
- package/dist/cjs/not-found.cjs +8 -4
- package/dist/cjs/not-found.cjs.map +1 -1
- package/dist/cjs/not-found.d.cts +1 -1
- package/dist/cjs/router.cjs +2 -1
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/routerStores.cjs +75 -0
- package/dist/cjs/routerStores.cjs.map +1 -0
- package/dist/cjs/routerStores.d.cts +10 -0
- package/dist/cjs/ssr/RouterClient.cjs +1 -1
- package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToStream.cjs +1 -1
- package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToString.cjs +1 -1
- package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
- package/dist/cjs/useBlocker.cjs +12 -3
- package/dist/cjs/useBlocker.cjs.map +1 -1
- package/dist/cjs/useCanGoBack.cjs +6 -2
- package/dist/cjs/useCanGoBack.cjs.map +1 -1
- package/dist/cjs/useCanGoBack.d.cts +2 -1
- package/dist/cjs/useLoaderDeps.cjs +2 -3
- package/dist/cjs/useLoaderDeps.cjs.map +1 -1
- package/dist/cjs/useLocation.cjs +13 -2
- package/dist/cjs/useLocation.cjs.map +1 -1
- package/dist/cjs/useMatch.cjs +27 -15
- package/dist/cjs/useMatch.cjs.map +1 -1
- package/dist/cjs/useParams.cjs +1 -1
- package/dist/cjs/useParams.cjs.map +1 -1
- package/dist/cjs/useRouterState.cjs +12 -30
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/cjs/useSearch.cjs +2 -1
- package/dist/cjs/useSearch.cjs.map +1 -1
- package/dist/cjs/utils.cjs +3 -17
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/cjs/utils.d.cts +0 -5
- package/dist/esm/Asset.js +6 -6
- package/dist/esm/Asset.js.map +1 -1
- package/dist/esm/HeadContent.dev.js +12 -2
- package/dist/esm/HeadContent.dev.js.map +1 -1
- package/dist/esm/HeadContent.js +12 -2
- package/dist/esm/HeadContent.js.map +1 -1
- package/dist/esm/Match.d.ts +1 -3
- package/dist/esm/Match.js +267 -250
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Matches.js +40 -39
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/RouterProvider.d.ts +1 -1
- package/dist/esm/RouterProvider.js +10 -7
- package/dist/esm/RouterProvider.js.map +1 -1
- package/dist/esm/ScriptOnce.js +2 -2
- package/dist/esm/ScriptOnce.js.map +1 -1
- package/dist/esm/Scripts.d.ts +2 -1
- package/dist/esm/Scripts.js +21 -11
- package/dist/esm/Scripts.js.map +1 -1
- package/dist/esm/Transitioner.js +58 -37
- package/dist/esm/Transitioner.js.map +1 -1
- package/dist/esm/headContentUtils.d.ts +2 -1
- package/dist/esm/headContentUtils.js +26 -23
- package/dist/esm/headContentUtils.js.map +1 -1
- package/dist/esm/index.dev.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/link.js +146 -104
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/matchContext.d.ts +8 -2
- package/dist/esm/matchContext.js +7 -4
- package/dist/esm/matchContext.js.map +1 -1
- package/dist/esm/not-found.d.ts +1 -1
- package/dist/esm/not-found.js +6 -3
- package/dist/esm/not-found.js.map +1 -1
- package/dist/esm/router.js +2 -1
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/routerStores.d.ts +10 -0
- package/dist/esm/routerStores.js +73 -0
- package/dist/esm/routerStores.js.map +1 -0
- package/dist/esm/scroll-restoration.js +2 -2
- package/dist/esm/scroll-restoration.js.map +1 -1
- package/dist/esm/ssr/RouterClient.js +1 -1
- package/dist/esm/ssr/RouterClient.js.map +1 -1
- package/dist/esm/ssr/renderRouterToStream.js +1 -1
- package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
- package/dist/esm/ssr/renderRouterToString.js +1 -1
- package/dist/esm/ssr/renderRouterToString.js.map +1 -1
- package/dist/esm/useBlocker.js +12 -3
- package/dist/esm/useBlocker.js.map +1 -1
- package/dist/esm/useCanGoBack.d.ts +2 -1
- package/dist/esm/useCanGoBack.js +4 -2
- package/dist/esm/useCanGoBack.js.map +1 -1
- package/dist/esm/useLoaderDeps.js +2 -3
- package/dist/esm/useLoaderDeps.js.map +1 -1
- package/dist/esm/useLocation.js +11 -2
- package/dist/esm/useLocation.js.map +1 -1
- package/dist/esm/useMatch.js +28 -16
- package/dist/esm/useMatch.js.map +1 -1
- package/dist/esm/useParams.js +1 -1
- package/dist/esm/useParams.js.map +1 -1
- package/dist/esm/useRouterState.js +11 -30
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/esm/useSearch.js +2 -1
- package/dist/esm/useSearch.js.map +1 -1
- package/dist/esm/utils.d.ts +0 -5
- package/dist/esm/utils.js +4 -17
- package/dist/esm/utils.js.map +1 -1
- package/dist/source/Asset.jsx +3 -3
- package/dist/source/Asset.jsx.map +1 -1
- package/dist/source/HeadContent.dev.jsx +5 -1
- package/dist/source/HeadContent.dev.jsx.map +1 -1
- package/dist/source/HeadContent.jsx +5 -1
- package/dist/source/HeadContent.jsx.map +1 -1
- package/dist/source/Match.d.ts +1 -3
- package/dist/source/Match.jsx +260 -264
- package/dist/source/Match.jsx.map +1 -1
- package/dist/source/Matches.jsx +46 -46
- package/dist/source/Matches.jsx.map +1 -1
- package/dist/source/RouterProvider.d.ts +1 -1
- package/dist/source/RouterProvider.jsx +13 -9
- package/dist/source/RouterProvider.jsx.map +1 -1
- package/dist/source/Scripts.d.ts +2 -1
- package/dist/source/Scripts.jsx +46 -47
- package/dist/source/Scripts.jsx.map +1 -1
- package/dist/source/Transitioner.jsx +80 -44
- package/dist/source/Transitioner.jsx.map +1 -1
- package/dist/source/headContentUtils.d.ts +2 -1
- package/dist/source/headContentUtils.jsx +79 -80
- package/dist/source/headContentUtils.jsx.map +1 -1
- package/dist/source/link.jsx +145 -112
- package/dist/source/link.jsx.map +1 -1
- package/dist/source/matchContext.d.ts +8 -2
- package/dist/source/matchContext.jsx +7 -3
- package/dist/source/matchContext.jsx.map +1 -1
- package/dist/source/not-found.d.ts +1 -1
- package/dist/source/not-found.jsx +6 -5
- package/dist/source/not-found.jsx.map +1 -1
- package/dist/source/router.js +2 -1
- package/dist/source/router.js.map +1 -1
- package/dist/source/routerStores.d.ts +10 -0
- package/dist/source/routerStores.js +82 -0
- package/dist/source/routerStores.js.map +1 -0
- package/dist/source/ssr/RouterClient.jsx +1 -1
- package/dist/source/ssr/RouterClient.jsx.map +1 -1
- package/dist/source/ssr/renderRouterToStream.jsx +1 -1
- package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
- package/dist/source/ssr/renderRouterToString.jsx +1 -1
- package/dist/source/ssr/renderRouterToString.jsx.map +1 -1
- package/dist/source/useBlocker.jsx +19 -8
- package/dist/source/useBlocker.jsx.map +1 -1
- package/dist/source/useCanGoBack.d.ts +2 -1
- package/dist/source/useCanGoBack.js +4 -2
- package/dist/source/useCanGoBack.js.map +1 -1
- package/dist/source/useLoaderDeps.jsx +2 -3
- package/dist/source/useLoaderDeps.jsx.map +1 -1
- package/dist/source/useLocation.jsx +13 -3
- package/dist/source/useLocation.jsx.map +1 -1
- package/dist/source/useMatch.jsx +33 -23
- package/dist/source/useMatch.jsx.map +1 -1
- package/dist/source/useParams.jsx +1 -1
- package/dist/source/useParams.jsx.map +1 -1
- package/dist/source/useRouterState.jsx +14 -55
- package/dist/source/useRouterState.jsx.map +1 -1
- package/dist/source/useSearch.jsx +2 -1
- package/dist/source/useSearch.jsx.map +1 -1
- package/dist/source/utils.d.ts +0 -5
- package/dist/source/utils.js +2 -15
- package/dist/source/utils.js.map +1 -1
- package/package.json +7 -7
- package/skills/solid-router/SKILL.md +2 -0
- package/src/Asset.tsx +3 -3
- package/src/HeadContent.dev.tsx +10 -1
- package/src/HeadContent.tsx +10 -1
- package/src/Match.tsx +395 -349
- package/src/Matches.tsx +55 -54
- package/src/RouterProvider.tsx +13 -10
- package/src/Scripts.tsx +55 -54
- package/src/Transitioner.tsx +103 -60
- package/src/headContentUtils.tsx +104 -96
- package/src/link.tsx +188 -146
- package/src/matchContext.tsx +16 -7
- package/src/not-found.tsx +6 -6
- package/src/router.ts +2 -1
- package/src/routerStores.ts +119 -0
- package/src/ssr/RouterClient.tsx +1 -1
- package/src/ssr/renderRouterToStream.tsx +1 -1
- package/src/ssr/renderRouterToString.tsx +1 -1
- package/src/useBlocker.tsx +80 -63
- package/src/useCanGoBack.ts +6 -2
- package/src/useLoaderDeps.tsx +2 -3
- package/src/useLocation.tsx +18 -5
- package/src/useMatch.tsx +37 -38
- package/src/useParams.tsx +2 -3
- package/src/useRouterState.tsx +21 -67
- package/src/useSearch.tsx +2 -1
- package/src/utils.ts +2 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transitioner.jsx","sourceRoot":"","sources":["../../src/Transitioner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"Transitioner.jsx","sourceRoot":"","sources":["../../src/Transitioner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import * as Solid from 'solid-js';
|
|
1
2
|
import type { RouterManagedTag } from '@tanstack/router-core';
|
|
2
3
|
/**
|
|
3
4
|
* Build the list of head/link/meta/script tags to render for active matches.
|
|
4
5
|
* Used internally by `HeadContent`.
|
|
5
6
|
*/
|
|
6
|
-
export declare const useTags: () =>
|
|
7
|
+
export declare const useTags: () => Solid.Accessor<RouterManagedTag[]>;
|
|
7
8
|
export declare function uniqBy<T>(arr: Array<T>, fn: (item: T) => string): T[];
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as Solid from 'solid-js';
|
|
2
2
|
import { escapeHtml } from '@tanstack/router-core';
|
|
3
3
|
import { useRouter } from './useRouter';
|
|
4
|
-
import { useRouterState } from './useRouterState';
|
|
5
4
|
/**
|
|
6
5
|
* Build the list of head/link/meta/script tags to render for active matches.
|
|
7
6
|
* Used internally by `HeadContent`.
|
|
@@ -9,11 +8,11 @@ import { useRouterState } from './useRouterState';
|
|
|
9
8
|
export const useTags = () => {
|
|
10
9
|
const router = useRouter();
|
|
11
10
|
const nonce = router.options.ssr?.nonce;
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
const getTagKey = (tag) => JSON.stringify(tag);
|
|
12
|
+
const activeMatches = Solid.createMemo(() => router.stores.activeMatchesSnapshot.state);
|
|
13
|
+
const routeMeta = Solid.createMemo(() => activeMatches()
|
|
14
|
+
.map((match) => match.meta)
|
|
15
|
+
.filter(Boolean));
|
|
17
16
|
const meta = Solid.createMemo(() => {
|
|
18
17
|
const resultMeta = [];
|
|
19
18
|
const metaByAttribute = {};
|
|
@@ -85,86 +84,86 @@ export const useTags = () => {
|
|
|
85
84
|
resultMeta.reverse();
|
|
86
85
|
return resultMeta;
|
|
87
86
|
});
|
|
88
|
-
const links =
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
.flat(1)
|
|
94
|
-
.map((link) => ({
|
|
95
|
-
tag: 'link',
|
|
96
|
-
attrs: {
|
|
97
|
-
...link,
|
|
98
|
-
nonce,
|
|
99
|
-
},
|
|
100
|
-
}));
|
|
101
|
-
const manifest = router.ssr?.manifest;
|
|
102
|
-
const assets = state.matches
|
|
103
|
-
.map((match) => manifest?.routes[match.routeId]?.assets ?? [])
|
|
104
|
-
.filter(Boolean)
|
|
105
|
-
.flat(1)
|
|
106
|
-
.filter((asset) => asset.tag === 'link')
|
|
107
|
-
.map((asset) => ({
|
|
108
|
-
tag: 'link',
|
|
109
|
-
attrs: { ...asset.attrs, nonce },
|
|
110
|
-
}));
|
|
111
|
-
return [...constructed, ...assets];
|
|
112
|
-
},
|
|
113
|
-
});
|
|
114
|
-
const preloadLinks = useRouterState({
|
|
115
|
-
select: (state) => {
|
|
116
|
-
const preloadLinks = [];
|
|
117
|
-
state.matches
|
|
118
|
-
.map((match) => router.looseRoutesById[match.routeId])
|
|
119
|
-
.forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads
|
|
120
|
-
?.filter(Boolean)
|
|
121
|
-
.forEach((preload) => {
|
|
122
|
-
preloadLinks.push({
|
|
123
|
-
tag: 'link',
|
|
124
|
-
attrs: {
|
|
125
|
-
rel: 'modulepreload',
|
|
126
|
-
href: preload,
|
|
127
|
-
nonce,
|
|
128
|
-
},
|
|
129
|
-
});
|
|
130
|
-
}));
|
|
131
|
-
return preloadLinks;
|
|
132
|
-
},
|
|
133
|
-
});
|
|
134
|
-
const styles = useRouterState({
|
|
135
|
-
select: (state) => state.matches
|
|
136
|
-
.map((match) => match.styles)
|
|
87
|
+
const links = Solid.createMemo(() => {
|
|
88
|
+
const matches = activeMatches();
|
|
89
|
+
const constructed = matches
|
|
90
|
+
.map((match) => match.links)
|
|
91
|
+
.filter(Boolean)
|
|
137
92
|
.flat(1)
|
|
138
|
-
.
|
|
139
|
-
tag: '
|
|
93
|
+
.map((link) => ({
|
|
94
|
+
tag: 'link',
|
|
140
95
|
attrs: {
|
|
141
|
-
...
|
|
96
|
+
...link,
|
|
142
97
|
nonce,
|
|
143
98
|
},
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
.map((match) => match.headScripts)
|
|
99
|
+
}));
|
|
100
|
+
const manifest = router.ssr?.manifest;
|
|
101
|
+
const assets = matches
|
|
102
|
+
.map((match) => manifest?.routes[match.routeId]?.assets ?? [])
|
|
103
|
+
.filter(Boolean)
|
|
150
104
|
.flat(1)
|
|
151
|
-
.filter(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
105
|
+
.filter((asset) => asset.tag === 'link')
|
|
106
|
+
.map((asset) => ({
|
|
107
|
+
tag: 'link',
|
|
108
|
+
attrs: { ...asset.attrs, nonce },
|
|
109
|
+
}));
|
|
110
|
+
return [...constructed, ...assets];
|
|
111
|
+
});
|
|
112
|
+
const preloadLinks = Solid.createMemo(() => {
|
|
113
|
+
const matches = activeMatches();
|
|
114
|
+
const preloadLinks = [];
|
|
115
|
+
matches
|
|
116
|
+
.map((match) => router.looseRoutesById[match.routeId])
|
|
117
|
+
.forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads
|
|
118
|
+
?.filter(Boolean)
|
|
119
|
+
.forEach((preload) => {
|
|
120
|
+
preloadLinks.push({
|
|
121
|
+
tag: 'link',
|
|
122
|
+
attrs: {
|
|
123
|
+
rel: 'modulepreload',
|
|
124
|
+
href: preload,
|
|
125
|
+
nonce,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
}));
|
|
129
|
+
return preloadLinks;
|
|
159
130
|
});
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
131
|
+
const styles = Solid.createMemo(() => activeMatches()
|
|
132
|
+
.map((match) => match.styles)
|
|
133
|
+
.flat(1)
|
|
134
|
+
.filter(Boolean).map(({ children, ...style }) => ({
|
|
135
|
+
tag: 'style',
|
|
136
|
+
attrs: {
|
|
137
|
+
...style,
|
|
138
|
+
nonce,
|
|
139
|
+
},
|
|
140
|
+
children,
|
|
141
|
+
})));
|
|
142
|
+
const headScripts = Solid.createMemo(() => activeMatches()
|
|
143
|
+
.map((match) => match.headScripts)
|
|
144
|
+
.flat(1)
|
|
145
|
+
.filter(Boolean).map(({ children, ...script }) => ({
|
|
146
|
+
tag: 'script',
|
|
147
|
+
attrs: {
|
|
148
|
+
...script,
|
|
149
|
+
nonce,
|
|
150
|
+
},
|
|
151
|
+
children,
|
|
152
|
+
})));
|
|
153
|
+
return Solid.createMemo((prev) => {
|
|
154
|
+
const next = uniqBy([
|
|
155
|
+
...meta(),
|
|
156
|
+
...preloadLinks(),
|
|
157
|
+
...links(),
|
|
158
|
+
...styles(),
|
|
159
|
+
...headScripts(),
|
|
160
|
+
], getTagKey);
|
|
161
|
+
if (prev &&
|
|
162
|
+
prev.length === next.length &&
|
|
163
|
+
prev.every((tag, index) => getTagKey(tag) === getTagKey(next[index]))) {
|
|
164
|
+
return prev;
|
|
165
|
+
}
|
|
166
|
+
return next;
|
|
168
167
|
});
|
|
169
168
|
};
|
|
170
169
|
export function uniqBy(arr, fn) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headContentUtils.jsx","sourceRoot":"","sources":["../../src/headContentUtils.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"headContentUtils.jsx","sourceRoot":"","sources":["../../src/headContentUtils.tsx"],"names":[],"mappings":"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"}
|
package/dist/source/link.jsx
CHANGED
|
@@ -2,7 +2,6 @@ import * as Solid from 'solid-js';
|
|
|
2
2
|
import { deepEqual, exactPathTest, functionalUpdate, isDangerousProtocol, preloadWarning, removeTrailingSlash, } from '@tanstack/router-core';
|
|
3
3
|
import { isServer } from '@tanstack/router-core/isServer';
|
|
4
4
|
import { Dynamic } from '@solidjs/web';
|
|
5
|
-
import { useRouterState } from './useRouterState';
|
|
6
5
|
import { useRouter } from './useRouter';
|
|
7
6
|
import { useIntersectionObserver } from './utils';
|
|
8
7
|
import { useHydrated } from './ClientOnly';
|
|
@@ -32,8 +31,8 @@ export function useLinkProps(options) {
|
|
|
32
31
|
const hasHydrated = useHydrated();
|
|
33
32
|
let hasRenderFetched = false;
|
|
34
33
|
const [local, rest] = splitProps(Solid.merge({
|
|
35
|
-
activeProps:
|
|
36
|
-
inactiveProps:
|
|
34
|
+
activeProps: STATIC_ACTIVE_PROPS_GET,
|
|
35
|
+
inactiveProps: STATIC_INACTIVE_PROPS_GET,
|
|
37
36
|
}, options), [
|
|
38
37
|
'activeProps',
|
|
39
38
|
'inactiveProps',
|
|
@@ -69,30 +68,14 @@ export function useLinkProps(options) {
|
|
|
69
68
|
'reloadDocument',
|
|
70
69
|
'unsafeRelative',
|
|
71
70
|
]);
|
|
72
|
-
const currentLocation =
|
|
73
|
-
|
|
74
|
-
});
|
|
75
|
-
const buildLocationKey = useRouterState({
|
|
76
|
-
select: (s) => {
|
|
77
|
-
const leaf = s.matches[s.matches.length - 1];
|
|
78
|
-
return {
|
|
79
|
-
search: leaf?.search,
|
|
80
|
-
hash: s.location.hash,
|
|
81
|
-
path: leaf?.pathname, // path + params
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
});
|
|
85
|
-
const from = options.from;
|
|
86
|
-
const _options = () => {
|
|
87
|
-
const result = {
|
|
88
|
-
...options,
|
|
89
|
-
from,
|
|
90
|
-
};
|
|
91
|
-
return result;
|
|
92
|
-
};
|
|
71
|
+
const currentLocation = Solid.createMemo(() => router.stores.location.state, undefined, { equals: (prev, next) => prev?.href === next?.href });
|
|
72
|
+
const _options = () => options;
|
|
93
73
|
const next = Solid.createMemo(() => {
|
|
94
|
-
|
|
95
|
-
|
|
74
|
+
// Rebuild when inherited search/hash or the current route context changes.
|
|
75
|
+
const _fromLocation = currentLocation();
|
|
76
|
+
const options = { _fromLocation, ..._options() };
|
|
77
|
+
// untrack because router-core will also access stores, which are signals in solid
|
|
78
|
+
return Solid.untrack(() => router.buildLocation(options));
|
|
96
79
|
});
|
|
97
80
|
const hrefOption = Solid.createMemo(() => {
|
|
98
81
|
if (_options().disabled)
|
|
@@ -125,10 +108,10 @@ export function useLinkProps(options) {
|
|
|
125
108
|
return _href.href;
|
|
126
109
|
}
|
|
127
110
|
const to = _options().to;
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (
|
|
111
|
+
const safeInternal = isSafeInternal(to);
|
|
112
|
+
if (safeInternal)
|
|
113
|
+
return undefined;
|
|
114
|
+
if (typeof to !== 'string' || to.indexOf(':') === -1)
|
|
132
115
|
return undefined;
|
|
133
116
|
try {
|
|
134
117
|
new URL(to);
|
|
@@ -154,36 +137,43 @@ export function useLinkProps(options) {
|
|
|
154
137
|
const isActive = Solid.createMemo(() => {
|
|
155
138
|
if (externalLink())
|
|
156
139
|
return false;
|
|
157
|
-
|
|
158
|
-
|
|
140
|
+
const activeOptions = local.activeOptions;
|
|
141
|
+
const current = currentLocation();
|
|
142
|
+
const nextLocation = next();
|
|
143
|
+
if (activeOptions?.exact) {
|
|
144
|
+
const testExact = exactPathTest(current.pathname, nextLocation.pathname, router.basepath);
|
|
159
145
|
if (!testExact) {
|
|
160
146
|
return false;
|
|
161
147
|
}
|
|
162
148
|
}
|
|
163
149
|
else {
|
|
164
|
-
const
|
|
165
|
-
const
|
|
166
|
-
const pathIsFuzzyEqual =
|
|
150
|
+
const currentPath = removeTrailingSlash(current.pathname, router.basepath);
|
|
151
|
+
const nextPath = removeTrailingSlash(nextLocation.pathname, router.basepath);
|
|
152
|
+
const pathIsFuzzyEqual = currentPath.startsWith(nextPath) &&
|
|
153
|
+
(currentPath.length === nextPath.length ||
|
|
154
|
+
currentPath[nextPath.length] === '/');
|
|
167
155
|
if (!pathIsFuzzyEqual) {
|
|
168
156
|
return false;
|
|
169
157
|
}
|
|
170
158
|
}
|
|
171
|
-
if (
|
|
172
|
-
const searchTest = deepEqual(
|
|
173
|
-
partial: !
|
|
174
|
-
ignoreUndefined: !
|
|
159
|
+
if (activeOptions?.includeSearch ?? true) {
|
|
160
|
+
const searchTest = deepEqual(current.search, nextLocation.search, {
|
|
161
|
+
partial: !activeOptions?.exact,
|
|
162
|
+
ignoreUndefined: !activeOptions?.explicitUndefined,
|
|
175
163
|
});
|
|
176
164
|
if (!searchTest) {
|
|
177
165
|
return false;
|
|
178
166
|
}
|
|
179
167
|
}
|
|
180
|
-
if (
|
|
181
|
-
const currentHash = shouldHydrateHash && !hasHydrated() ? '' :
|
|
182
|
-
return currentHash ===
|
|
168
|
+
if (activeOptions?.includeHash) {
|
|
169
|
+
const currentHash = shouldHydrateHash && !hasHydrated() ? '' : current.hash;
|
|
170
|
+
return currentHash === nextLocation.hash;
|
|
183
171
|
}
|
|
184
172
|
return true;
|
|
185
173
|
});
|
|
186
|
-
const doPreload = () => router
|
|
174
|
+
const doPreload = () => router
|
|
175
|
+
.preloadRoute({ ..._options(), _builtLocation: next() })
|
|
176
|
+
.catch((err) => {
|
|
187
177
|
console.warn(err);
|
|
188
178
|
console.warn(preloadWarning);
|
|
189
179
|
});
|
|
@@ -204,14 +194,15 @@ export function useLinkProps(options) {
|
|
|
204
194
|
return;
|
|
205
195
|
}
|
|
206
196
|
if (!local.disabled && preloadValue === 'render') {
|
|
207
|
-
doPreload();
|
|
197
|
+
Solid.untrack(() => doPreload());
|
|
208
198
|
hasRenderFetched = true;
|
|
209
199
|
}
|
|
210
200
|
});
|
|
211
201
|
if (Solid.untrack(externalLink)) {
|
|
202
|
+
const externalHref = Solid.untrack(externalLink);
|
|
212
203
|
return Solid.merge(propsSafeToSpread, {
|
|
213
204
|
// ref: mergeRefs(setRef, _options().ref),
|
|
214
|
-
href:
|
|
205
|
+
href: externalHref,
|
|
215
206
|
}, splitProps(local, [
|
|
216
207
|
'target',
|
|
217
208
|
'disabled',
|
|
@@ -238,10 +229,14 @@ export function useLinkProps(options) {
|
|
|
238
229
|
(!effectiveTarget || effectiveTarget === '_self') &&
|
|
239
230
|
e.button === 0) {
|
|
240
231
|
e.preventDefault();
|
|
241
|
-
|
|
232
|
+
Solid.runWithOwner(null, () => {
|
|
233
|
+
setIsTransitioning(true);
|
|
234
|
+
});
|
|
242
235
|
const unsub = router.subscribe('onResolved', () => {
|
|
243
236
|
unsub();
|
|
244
|
-
|
|
237
|
+
Solid.runWithOwner(null, () => {
|
|
238
|
+
setIsTransitioning(false);
|
|
239
|
+
});
|
|
245
240
|
});
|
|
246
241
|
// All is well? Navigate!
|
|
247
242
|
// N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing
|
|
@@ -286,76 +281,103 @@ export function useLinkProps(options) {
|
|
|
286
281
|
timeoutMap.delete(eventTarget);
|
|
287
282
|
}
|
|
288
283
|
};
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
callHandler(event, handler);
|
|
305
|
-
}
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
// Get the active props
|
|
309
|
-
const resolvedActiveProps = () => isActive() ? (functionalUpdate(local.activeProps, {}) ?? {}) : {};
|
|
310
|
-
// Get the inactive props
|
|
311
|
-
const resolvedInactiveProps = () => isActive() ? {} : functionalUpdate(local.inactiveProps, {});
|
|
312
|
-
const resolvedClassName = () => [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]
|
|
313
|
-
.filter(Boolean)
|
|
314
|
-
.join(' ');
|
|
315
|
-
const resolvedStyle = () => ({
|
|
316
|
-
...local.style,
|
|
317
|
-
...resolvedActiveProps().style,
|
|
318
|
-
...resolvedInactiveProps().style,
|
|
319
|
-
});
|
|
320
|
-
return Solid.merge(propsSafeToSpread, resolvedActiveProps, resolvedInactiveProps, () => {
|
|
321
|
-
return {
|
|
284
|
+
const simpleStyling = Solid.createMemo(() => local.activeProps === STATIC_ACTIVE_PROPS_GET &&
|
|
285
|
+
local.inactiveProps === STATIC_INACTIVE_PROPS_GET &&
|
|
286
|
+
local.class === undefined &&
|
|
287
|
+
local.style === undefined);
|
|
288
|
+
const onClick = createComposedHandler(() => local.onClick, handleClick);
|
|
289
|
+
const onBlur = createComposedHandler(() => local.onBlur, handleLeave);
|
|
290
|
+
const onFocus = createComposedHandler(() => local.onFocus, enqueueIntentPreload);
|
|
291
|
+
const onMouseEnter = createComposedHandler(() => local.onMouseEnter, enqueueIntentPreload);
|
|
292
|
+
const onMouseOver = createComposedHandler(() => local.onMouseOver, enqueueIntentPreload);
|
|
293
|
+
const onMouseLeave = createComposedHandler(() => local.onMouseLeave, handleLeave);
|
|
294
|
+
const onMouseOut = createComposedHandler(() => local.onMouseOut, handleLeave);
|
|
295
|
+
const onTouchStart = createComposedHandler(() => local.onTouchStart, handleTouchStart);
|
|
296
|
+
const resolvedProps = Solid.createMemo(() => {
|
|
297
|
+
const active = isActive();
|
|
298
|
+
const base = {
|
|
322
299
|
href: hrefOption()?.href,
|
|
323
300
|
ref: mergeRefs(setRef, _options().ref),
|
|
324
|
-
onClick
|
|
325
|
-
onBlur
|
|
326
|
-
onFocus
|
|
327
|
-
onMouseEnter
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
local.onMouseOver,
|
|
333
|
-
enqueueIntentPreload,
|
|
334
|
-
]),
|
|
335
|
-
onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),
|
|
336
|
-
onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),
|
|
337
|
-
onTouchStart: composeEventHandlers([
|
|
338
|
-
local.onTouchStart,
|
|
339
|
-
handleTouchStart,
|
|
340
|
-
]),
|
|
301
|
+
onClick,
|
|
302
|
+
onBlur,
|
|
303
|
+
onFocus,
|
|
304
|
+
onMouseEnter,
|
|
305
|
+
onMouseOver,
|
|
306
|
+
onMouseLeave,
|
|
307
|
+
onMouseOut,
|
|
308
|
+
onTouchStart,
|
|
341
309
|
disabled: !!local.disabled,
|
|
342
310
|
target: local.target,
|
|
343
|
-
...(
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
311
|
+
...(local.disabled && STATIC_DISABLED_PROPS),
|
|
312
|
+
...(isTransitioning() && STATIC_TRANSITIONING_ATTRIBUTES),
|
|
313
|
+
};
|
|
314
|
+
if (simpleStyling()) {
|
|
315
|
+
return {
|
|
316
|
+
...base,
|
|
317
|
+
...(active && STATIC_DEFAULT_ACTIVE_ATTRIBUTES),
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
const activeProps = active
|
|
321
|
+
? (functionalUpdate(local.activeProps, {}) ?? EMPTY_OBJECT)
|
|
322
|
+
: EMPTY_OBJECT;
|
|
323
|
+
const inactiveProps = active
|
|
324
|
+
? EMPTY_OBJECT
|
|
325
|
+
: functionalUpdate(local.inactiveProps, {});
|
|
326
|
+
const style = {
|
|
327
|
+
...local.style,
|
|
328
|
+
...activeProps.style,
|
|
329
|
+
...inactiveProps.style,
|
|
330
|
+
};
|
|
331
|
+
const className = [local.class, activeProps.class, inactiveProps.class]
|
|
332
|
+
.filter(Boolean)
|
|
333
|
+
.join(' ');
|
|
334
|
+
return {
|
|
335
|
+
...activeProps,
|
|
336
|
+
...inactiveProps,
|
|
337
|
+
...base,
|
|
338
|
+
...(Object.keys(style).length ? { style } : undefined),
|
|
339
|
+
...(className ? { class: className } : undefined),
|
|
340
|
+
...(active && STATIC_ACTIVE_ATTRIBUTES),
|
|
357
341
|
};
|
|
358
342
|
});
|
|
343
|
+
return Solid.merge(propsSafeToSpread, resolvedProps);
|
|
344
|
+
}
|
|
345
|
+
const STATIC_ACTIVE_PROPS = { class: 'active' };
|
|
346
|
+
const STATIC_ACTIVE_PROPS_GET = () => STATIC_ACTIVE_PROPS;
|
|
347
|
+
const EMPTY_OBJECT = {};
|
|
348
|
+
const STATIC_INACTIVE_PROPS_GET = () => EMPTY_OBJECT;
|
|
349
|
+
const STATIC_DEFAULT_ACTIVE_ATTRIBUTES = {
|
|
350
|
+
class: 'active',
|
|
351
|
+
'data-status': 'active',
|
|
352
|
+
'aria-current': 'page',
|
|
353
|
+
};
|
|
354
|
+
const STATIC_DISABLED_PROPS = {
|
|
355
|
+
role: 'link',
|
|
356
|
+
'aria-disabled': 'true',
|
|
357
|
+
};
|
|
358
|
+
const STATIC_ACTIVE_ATTRIBUTES = {
|
|
359
|
+
'data-status': 'active',
|
|
360
|
+
'aria-current': 'page',
|
|
361
|
+
};
|
|
362
|
+
const STATIC_TRANSITIONING_ATTRIBUTES = {
|
|
363
|
+
'data-transitioning': 'transitioning',
|
|
364
|
+
};
|
|
365
|
+
/** Call a JSX.EventHandlerUnion with the event. */
|
|
366
|
+
function callHandler(event, handler) {
|
|
367
|
+
if (typeof handler === 'function') {
|
|
368
|
+
handler(event);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
handler[0](handler[1], event);
|
|
372
|
+
}
|
|
373
|
+
return event.defaultPrevented;
|
|
374
|
+
}
|
|
375
|
+
function createComposedHandler(getHandler, fallback) {
|
|
376
|
+
return (event) => {
|
|
377
|
+
const handler = getHandler();
|
|
378
|
+
if (!handler || !callHandler(event, handler))
|
|
379
|
+
fallback(event);
|
|
380
|
+
};
|
|
359
381
|
}
|
|
360
382
|
export function createLink(Comp) {
|
|
361
383
|
return (props) => <Link {...props} _asChild={Comp}/>;
|
|
@@ -392,13 +414,24 @@ export const Link = (props) => {
|
|
|
392
414
|
<a {...svgLinkProps}>{children()}</a>
|
|
393
415
|
</svg>);
|
|
394
416
|
}
|
|
395
|
-
|
|
417
|
+
if (!local._asChild) {
|
|
418
|
+
return <a {...linkProps}>{children()}</a>;
|
|
419
|
+
}
|
|
420
|
+
return (<Dynamic component={local._asChild} {...linkProps}>
|
|
396
421
|
{children()}
|
|
397
422
|
</Dynamic>);
|
|
398
423
|
};
|
|
399
424
|
function isCtrlEvent(e) {
|
|
400
425
|
return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);
|
|
401
426
|
}
|
|
427
|
+
function isSafeInternal(to) {
|
|
428
|
+
if (typeof to !== 'string')
|
|
429
|
+
return false;
|
|
430
|
+
const zero = to.charCodeAt(0);
|
|
431
|
+
if (zero === 47)
|
|
432
|
+
return to.charCodeAt(1) !== 47; // '/' but not '//'
|
|
433
|
+
return zero === 46; // '.', '..', './', '../'
|
|
434
|
+
}
|
|
402
435
|
export const linkOptions = (options) => {
|
|
403
436
|
return options;
|
|
404
437
|
};
|