@tanstack/solid-router 2.0.0-alpha.2 → 2.0.0-alpha.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 (204) hide show
  1. package/dist/cjs/Asset.cjs +124 -167
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/CatchBoundary.cjs +52 -68
  4. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  5. package/dist/cjs/ClientOnly.cjs +61 -39
  6. package/dist/cjs/ClientOnly.cjs.map +1 -1
  7. package/dist/cjs/HeadContent.cjs +35 -27
  8. package/dist/cjs/HeadContent.cjs.map +1 -1
  9. package/dist/cjs/HeadContent.dev.cjs +48 -41
  10. package/dist/cjs/HeadContent.dev.cjs.map +1 -1
  11. package/dist/cjs/Match.cjs +367 -442
  12. package/dist/cjs/Match.cjs.map +1 -1
  13. package/dist/cjs/Matches.cjs +114 -158
  14. package/dist/cjs/Matches.cjs.map +1 -1
  15. package/dist/cjs/RouterProvider.cjs +29 -41
  16. package/dist/cjs/RouterProvider.cjs.map +1 -1
  17. package/dist/cjs/SafeFragment.cjs +7 -5
  18. package/dist/cjs/SafeFragment.cjs.map +1 -1
  19. package/dist/cjs/ScriptOnce.cjs +20 -22
  20. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  21. package/dist/cjs/Scripts.cjs +43 -58
  22. package/dist/cjs/Scripts.cjs.map +1 -1
  23. package/dist/cjs/ScrollRestoration.cjs +26 -28
  24. package/dist/cjs/ScrollRestoration.cjs.map +1 -1
  25. package/dist/cjs/Transitioner.cjs +91 -124
  26. package/dist/cjs/Transitioner.cjs.map +1 -1
  27. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  28. package/dist/cjs/awaited.cjs +31 -53
  29. package/dist/cjs/awaited.cjs.map +1 -1
  30. package/dist/cjs/fileRoute.cjs +96 -91
  31. package/dist/cjs/fileRoute.cjs.map +1 -1
  32. package/dist/cjs/fileRoute.d.cts +2 -2
  33. package/dist/cjs/headContentUtils.cjs +132 -170
  34. package/dist/cjs/headContentUtils.cjs.map +1 -1
  35. package/dist/cjs/index.cjs +245 -176
  36. package/dist/cjs/index.dev.cjs +245 -176
  37. package/dist/cjs/lazyRouteComponent.cjs +48 -54
  38. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  39. package/dist/cjs/link.cjs +310 -345
  40. package/dist/cjs/link.cjs.map +1 -1
  41. package/dist/cjs/matchContext.cjs +9 -23
  42. package/dist/cjs/matchContext.cjs.map +1 -1
  43. package/dist/cjs/not-found.cjs +26 -34
  44. package/dist/cjs/not-found.cjs.map +1 -1
  45. package/dist/cjs/renderRouteNotFound.cjs +23 -16
  46. package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
  47. package/dist/cjs/route.cjs +200 -215
  48. package/dist/cjs/route.cjs.map +1 -1
  49. package/dist/cjs/router.cjs +18 -16
  50. package/dist/cjs/router.cjs.map +1 -1
  51. package/dist/cjs/routerContext.cjs +8 -22
  52. package/dist/cjs/routerContext.cjs.map +1 -1
  53. package/dist/cjs/scroll-restoration.cjs +25 -35
  54. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  55. package/dist/cjs/ssr/RouterClient.cjs +18 -23
  56. package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
  57. package/dist/cjs/ssr/RouterServer.cjs +10 -10
  58. package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
  59. package/dist/cjs/ssr/client.cjs +2 -4
  60. package/dist/cjs/ssr/defaultRenderHandler.cjs +12 -16
  61. package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -1
  62. package/dist/cjs/ssr/defaultStreamHandler.cjs +13 -18
  63. package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -1
  64. package/dist/cjs/ssr/renderRouterToStream.cjs +26 -54
  65. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  66. package/dist/cjs/ssr/renderRouterToString.cjs +33 -57
  67. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  68. package/dist/cjs/ssr/server.cjs +18 -18
  69. package/dist/cjs/useBlocker.cjs +140 -177
  70. package/dist/cjs/useBlocker.cjs.map +1 -1
  71. package/dist/cjs/useBlocker.d.cts +8 -5
  72. package/dist/cjs/useCanGoBack.cjs +6 -5
  73. package/dist/cjs/useCanGoBack.cjs.map +1 -1
  74. package/dist/cjs/useLoaderData.cjs +12 -11
  75. package/dist/cjs/useLoaderData.cjs.map +1 -1
  76. package/dist/cjs/useLoaderDeps.cjs +12 -14
  77. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  78. package/dist/cjs/useLocation.cjs +6 -7
  79. package/dist/cjs/useLocation.cjs.map +1 -1
  80. package/dist/cjs/useMatch.cjs +25 -46
  81. package/dist/cjs/useMatch.cjs.map +1 -1
  82. package/dist/cjs/useNavigate.cjs +20 -38
  83. package/dist/cjs/useNavigate.cjs.map +1 -1
  84. package/dist/cjs/useParams.cjs +14 -13
  85. package/dist/cjs/useParams.cjs.map +1 -1
  86. package/dist/cjs/useRouteContext.cjs +9 -8
  87. package/dist/cjs/useRouteContext.cjs.map +1 -1
  88. package/dist/cjs/useRouter.cjs +13 -26
  89. package/dist/cjs/useRouter.cjs.map +1 -1
  90. package/dist/cjs/useRouterState.cjs +38 -45
  91. package/dist/cjs/useRouterState.cjs.map +1 -1
  92. package/dist/cjs/useSearch.cjs +13 -12
  93. package/dist/cjs/useSearch.cjs.map +1 -1
  94. package/dist/cjs/utils.cjs +57 -49
  95. package/dist/cjs/utils.cjs.map +1 -1
  96. package/dist/esm/Asset.js +122 -166
  97. package/dist/esm/Asset.js.map +1 -1
  98. package/dist/esm/CatchBoundary.js +48 -50
  99. package/dist/esm/CatchBoundary.js.map +1 -1
  100. package/dist/esm/ClientOnly.js +58 -22
  101. package/dist/esm/ClientOnly.js.map +1 -1
  102. package/dist/esm/HeadContent.dev.js +46 -40
  103. package/dist/esm/HeadContent.dev.js.map +1 -1
  104. package/dist/esm/HeadContent.js +33 -26
  105. package/dist/esm/HeadContent.js.map +1 -1
  106. package/dist/esm/Match.js +359 -422
  107. package/dist/esm/Match.js.map +1 -1
  108. package/dist/esm/Matches.js +107 -142
  109. package/dist/esm/Matches.js.map +1 -1
  110. package/dist/esm/RouterProvider.js +26 -40
  111. package/dist/esm/RouterProvider.js.map +1 -1
  112. package/dist/esm/SafeFragment.js +6 -5
  113. package/dist/esm/SafeFragment.js.map +1 -1
  114. package/dist/esm/ScriptOnce.js +18 -21
  115. package/dist/esm/ScriptOnce.js.map +1 -1
  116. package/dist/esm/Scripts.js +42 -58
  117. package/dist/esm/Scripts.js.map +1 -1
  118. package/dist/esm/ScrollRestoration.js +25 -29
  119. package/dist/esm/ScrollRestoration.js.map +1 -1
  120. package/dist/esm/Transitioner.js +87 -105
  121. package/dist/esm/Transitioner.js.map +1 -1
  122. package/dist/esm/awaited.js +28 -36
  123. package/dist/esm/awaited.js.map +1 -1
  124. package/dist/esm/fileRoute.d.ts +2 -2
  125. package/dist/esm/fileRoute.js +90 -92
  126. package/dist/esm/fileRoute.js.map +1 -1
  127. package/dist/esm/headContentUtils.js +129 -152
  128. package/dist/esm/headContentUtils.js.map +1 -1
  129. package/dist/esm/index.dev.js +15 -115
  130. package/dist/esm/index.js +17 -116
  131. package/dist/esm/lazyRouteComponent.js +46 -53
  132. package/dist/esm/lazyRouteComponent.js.map +1 -1
  133. package/dist/esm/link.js +306 -329
  134. package/dist/esm/link.js.map +1 -1
  135. package/dist/esm/matchContext.js +7 -7
  136. package/dist/esm/matchContext.js.map +1 -1
  137. package/dist/esm/not-found.js +23 -33
  138. package/dist/esm/not-found.js.map +1 -1
  139. package/dist/esm/renderRouteNotFound.js +20 -15
  140. package/dist/esm/renderRouteNotFound.js.map +1 -1
  141. package/dist/esm/route.js +193 -218
  142. package/dist/esm/route.js.map +1 -1
  143. package/dist/esm/router.js +17 -17
  144. package/dist/esm/router.js.map +1 -1
  145. package/dist/esm/routerContext.js +6 -5
  146. package/dist/esm/routerContext.js.map +1 -1
  147. package/dist/esm/scroll-restoration.js +23 -34
  148. package/dist/esm/scroll-restoration.js.map +1 -1
  149. package/dist/esm/ssr/RouterClient.js +16 -22
  150. package/dist/esm/ssr/RouterClient.js.map +1 -1
  151. package/dist/esm/ssr/RouterServer.js +9 -10
  152. package/dist/esm/ssr/RouterServer.js.map +1 -1
  153. package/dist/esm/ssr/client.js +1 -4
  154. package/dist/esm/ssr/defaultRenderHandler.js +11 -15
  155. package/dist/esm/ssr/defaultRenderHandler.js.map +1 -1
  156. package/dist/esm/ssr/defaultStreamHandler.js +12 -17
  157. package/dist/esm/ssr/defaultStreamHandler.js.map +1 -1
  158. package/dist/esm/ssr/renderRouterToStream.js +23 -36
  159. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  160. package/dist/esm/ssr/renderRouterToString.js +31 -40
  161. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  162. package/dist/esm/ssr/server.js +3 -10
  163. package/dist/esm/useBlocker.d.ts +8 -5
  164. package/dist/esm/useBlocker.js +136 -159
  165. package/dist/esm/useBlocker.js.map +1 -1
  166. package/dist/esm/useCanGoBack.js +6 -5
  167. package/dist/esm/useCanGoBack.js.map +1 -1
  168. package/dist/esm/useLoaderData.js +12 -11
  169. package/dist/esm/useLoaderData.js.map +1 -1
  170. package/dist/esm/useLoaderDeps.js +12 -14
  171. package/dist/esm/useLoaderDeps.js.map +1 -1
  172. package/dist/esm/useLocation.js +6 -7
  173. package/dist/esm/useLocation.js.map +1 -1
  174. package/dist/esm/useMatch.js +21 -28
  175. package/dist/esm/useMatch.js.map +1 -1
  176. package/dist/esm/useNavigate.js +18 -22
  177. package/dist/esm/useNavigate.js.map +1 -1
  178. package/dist/esm/useParams.js +14 -13
  179. package/dist/esm/useParams.js.map +1 -1
  180. package/dist/esm/useRouteContext.js +9 -8
  181. package/dist/esm/useRouteContext.js.map +1 -1
  182. package/dist/esm/useRouter.js +9 -8
  183. package/dist/esm/useRouter.js.map +1 -1
  184. package/dist/esm/useRouterState.js +36 -44
  185. package/dist/esm/useRouterState.js.map +1 -1
  186. package/dist/esm/useSearch.js +13 -12
  187. package/dist/esm/useSearch.js.map +1 -1
  188. package/dist/esm/utils.js +55 -33
  189. package/dist/esm/utils.js.map +1 -1
  190. package/dist/source/fileRoute.d.ts +2 -2
  191. package/dist/source/useBlocker.d.ts +8 -5
  192. package/dist/source/useBlocker.jsx +2 -2
  193. package/dist/source/useBlocker.jsx.map +1 -1
  194. package/package.json +3 -3
  195. package/src/fileRoute.ts +2 -2
  196. package/src/useBlocker.tsx +15 -10
  197. package/dist/cjs/index.cjs.map +0 -1
  198. package/dist/cjs/index.dev.cjs.map +0 -1
  199. package/dist/cjs/ssr/client.cjs.map +0 -1
  200. package/dist/cjs/ssr/server.cjs.map +0 -1
  201. package/dist/esm/index.dev.js.map +0 -1
  202. package/dist/esm/index.js.map +0 -1
  203. package/dist/esm/ssr/client.js.map +0 -1
  204. package/dist/esm/ssr/server.js.map +0 -1
package/dist/cjs/link.cjs CHANGED
@@ -1,361 +1,326 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid$1 = require("@solidjs/web");
4
- const Solid = require("solid-js");
5
- const routerCore = require("@tanstack/router-core");
6
- const isServer = require("@tanstack/router-core/isServer");
7
- const useRouterState = require("./useRouterState.cjs");
8
- const useRouter = require("./useRouter.cjs");
9
- const utils = require("./utils.cjs");
10
- const ClientOnly = require("./ClientOnly.cjs");
11
- function _interopNamespaceDefault(e) {
12
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
13
- if (e) {
14
- for (const k in e) {
15
- if (k !== "default") {
16
- const d = Object.getOwnPropertyDescriptor(e, k);
17
- Object.defineProperty(n, k, d.get ? d : {
18
- enumerable: true,
19
- get: () => e[k]
20
- });
21
- }
22
- }
23
- }
24
- n.default = e;
25
- return Object.freeze(n);
26
- }
27
- const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
28
- var _tmpl$ = /* @__PURE__ */ Solid$1.template(`<svg><a>`);
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_ClientOnly = require("./ClientOnly.cjs");
3
+ const require_useRouter = require("./useRouter.cjs");
4
+ const require_useRouterState = require("./useRouterState.cjs");
5
+ const require_utils = require("./utils.cjs");
6
+ let _tanstack_router_core = require("@tanstack/router-core");
7
+ let _solidjs_web = require("@solidjs/web");
8
+ let solid_js = require("solid-js");
9
+ solid_js = require_runtime.__toESM(solid_js);
10
+ let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
11
+ //#region src/link.tsx
12
+ var _tmpl$ = /* @__PURE__ */ (0, _solidjs_web.template)(`<svg><a>`);
29
13
  function mergeRefs(...refs) {
30
- return (el) => {
31
- for (const ref of refs) {
32
- if (typeof ref === "function") {
33
- ref(el);
34
- }
35
- }
36
- };
14
+ return (el) => {
15
+ for (const ref of refs) if (typeof ref === "function") ref(el);
16
+ };
37
17
  }
38
18
  function splitProps(props, keys) {
39
- return [props, Solid__namespace.omit(props, ...keys)];
19
+ return [props, solid_js.omit(props, ...keys)];
40
20
  }
41
- const timeoutMap = /* @__PURE__ */ new WeakMap();
21
+ var timeoutMap = /* @__PURE__ */ new WeakMap();
42
22
  function useLinkProps(options) {
43
- const router = useRouter.useRouter();
44
- const [isTransitioning, setIsTransitioning] = Solid__namespace.createSignal(false);
45
- const shouldHydrateHash = !isServer.isServer && !!router.options.ssr;
46
- const hasHydrated = ClientOnly.useHydrated();
47
- let hasRenderFetched = false;
48
- const [local, rest] = splitProps(Solid__namespace.merge({
49
- activeProps: () => ({
50
- class: "active"
51
- }),
52
- inactiveProps: () => ({})
53
- }, options), ["activeProps", "inactiveProps", "activeOptions", "to", "preload", "preloadDelay", "hashScrollIntoView", "replace", "startTransition", "resetScroll", "viewTransition", "target", "disabled", "style", "class", "onClick", "onBlur", "onFocus", "onMouseEnter", "onMouseLeave", "onMouseOver", "onMouseOut", "onTouchStart", "ignoreBlocker"]);
54
- const [_, propsSafeToSpread] = splitProps(rest, ["params", "search", "hash", "state", "mask", "reloadDocument", "unsafeRelative"]);
55
- const currentLocation = useRouterState.useRouterState({
56
- select: (s) => s.location
57
- });
58
- const buildLocationKey = useRouterState.useRouterState({
59
- select: (s) => {
60
- const leaf = s.matches[s.matches.length - 1];
61
- return {
62
- search: leaf?.search,
63
- hash: s.location.hash,
64
- path: leaf?.pathname
65
- // path + params
66
- };
67
- }
68
- });
69
- const from = options.from;
70
- const _options = () => {
71
- const result = {
72
- ...options,
73
- from
74
- };
75
- return result;
76
- };
77
- const next = Solid__namespace.createMemo(() => {
78
- buildLocationKey();
79
- return router.buildLocation(_options());
80
- });
81
- const hrefOption = Solid__namespace.createMemo(() => {
82
- if (_options().disabled) return void 0;
83
- const location = next().maskedLocation ?? next();
84
- const publicHref = location.publicHref;
85
- const external = location.external;
86
- if (external) {
87
- return {
88
- href: publicHref,
89
- external: true
90
- };
91
- }
92
- return {
93
- href: router.history.createHref(publicHref) || "/",
94
- external: false
95
- };
96
- });
97
- const externalLink = Solid__namespace.createMemo(() => {
98
- const _href = hrefOption();
99
- if (_href?.external) {
100
- if (routerCore.isDangerousProtocol(_href.href, router.protocolAllowlist)) {
101
- if (process.env.NODE_ENV !== "production") {
102
- console.warn(`Blocked Link with dangerous protocol: ${_href.href}`);
103
- }
104
- return void 0;
105
- }
106
- return _href.href;
107
- }
108
- const to = _options().to;
109
- const isSafeInternal = typeof to === "string" && to.charCodeAt(0) === 47 && // '/'
110
- to.charCodeAt(1) !== 47;
111
- if (isSafeInternal) return void 0;
112
- try {
113
- new URL(to);
114
- if (routerCore.isDangerousProtocol(to, router.protocolAllowlist)) {
115
- if (process.env.NODE_ENV !== "production") {
116
- console.warn(`Blocked Link with dangerous protocol: ${to}`);
117
- }
118
- return void 0;
119
- }
120
- return to;
121
- } catch {
122
- }
123
- return void 0;
124
- });
125
- const preload = Solid__namespace.createMemo(() => {
126
- if (_options().reloadDocument || externalLink()) {
127
- return false;
128
- }
129
- return local.preload ?? router.options.defaultPreload;
130
- });
131
- const preloadDelay = () => local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0;
132
- const isActive = Solid__namespace.createMemo(() => {
133
- if (externalLink()) return false;
134
- if (local.activeOptions?.exact) {
135
- const testExact = routerCore.exactPathTest(currentLocation().pathname, next().pathname, router.basepath);
136
- if (!testExact) {
137
- return false;
138
- }
139
- } else {
140
- const currentPathSplit = routerCore.removeTrailingSlash(currentLocation().pathname, router.basepath).split("/");
141
- const nextPathSplit = routerCore.removeTrailingSlash(next()?.pathname, router.basepath)?.split("/");
142
- const pathIsFuzzyEqual = nextPathSplit?.every((d, i) => d === currentPathSplit[i]);
143
- if (!pathIsFuzzyEqual) {
144
- return false;
145
- }
146
- }
147
- if (local.activeOptions?.includeSearch ?? true) {
148
- const searchTest = routerCore.deepEqual(currentLocation().search, next().search, {
149
- partial: !local.activeOptions?.exact,
150
- ignoreUndefined: !local.activeOptions?.explicitUndefined
151
- });
152
- if (!searchTest) {
153
- return false;
154
- }
155
- }
156
- if (local.activeOptions?.includeHash) {
157
- const currentHash = shouldHydrateHash && !hasHydrated() ? "" : currentLocation().hash;
158
- return currentHash === next().hash;
159
- }
160
- return true;
161
- });
162
- const doPreload = () => router.preloadRoute(_options()).catch((err) => {
163
- console.warn(err);
164
- console.warn(routerCore.preloadWarning);
165
- });
166
- const preloadViewportIoCallback = (entry) => {
167
- if (entry?.isIntersecting) {
168
- doPreload();
169
- }
170
- };
171
- const [ref, setRefSignal] = Solid__namespace.createSignal(null);
172
- const setRef = (el) => {
173
- Solid__namespace.runWithOwner(null, () => {
174
- setRefSignal(el);
175
- });
176
- };
177
- utils.useIntersectionObserver(ref, preloadViewportIoCallback, {
178
- rootMargin: "100px"
179
- }, {
180
- disabled: !!local.disabled || !(Solid__namespace.untrack(preload) === "viewport")
181
- });
182
- Solid__namespace.createEffect(preload, (preloadValue) => {
183
- if (hasRenderFetched) {
184
- return;
185
- }
186
- if (!local.disabled && preloadValue === "render") {
187
- doPreload();
188
- hasRenderFetched = true;
189
- }
190
- });
191
- if (Solid__namespace.untrack(externalLink)) {
192
- return Solid__namespace.merge(propsSafeToSpread, {
193
- // ref: mergeRefs(setRef, _options().ref),
194
- href: externalLink()
195
- }, splitProps(local, ["target", "disabled", "style", "class", "onClick", "onBlur", "onFocus", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver", "onTouchStart"])[0]);
196
- }
197
- const handleClick = (e) => {
198
- const elementTarget = e.currentTarget.getAttribute("target");
199
- const effectiveTarget = local.target !== void 0 ? local.target : elementTarget;
200
- if (!local.disabled && !isCtrlEvent(e) && !e.defaultPrevented && (!effectiveTarget || effectiveTarget === "_self") && e.button === 0) {
201
- e.preventDefault();
202
- setIsTransitioning(true);
203
- const unsub = router.subscribe("onResolved", () => {
204
- unsub();
205
- setIsTransitioning(false);
206
- });
207
- router.navigate({
208
- ..._options(),
209
- replace: local.replace,
210
- resetScroll: local.resetScroll,
211
- hashScrollIntoView: local.hashScrollIntoView,
212
- startTransition: local.startTransition,
213
- viewTransition: local.viewTransition,
214
- ignoreBlocker: local.ignoreBlocker
215
- });
216
- }
217
- };
218
- const enqueueIntentPreload = (e) => {
219
- if (local.disabled || preload() !== "intent") return;
220
- if (!preloadDelay()) {
221
- doPreload();
222
- return;
223
- }
224
- const eventTarget = e.currentTarget || e.target;
225
- if (!eventTarget || timeoutMap.has(eventTarget)) return;
226
- timeoutMap.set(eventTarget, setTimeout(() => {
227
- timeoutMap.delete(eventTarget);
228
- doPreload();
229
- }, preloadDelay()));
230
- };
231
- const handleTouchStart = (_2) => {
232
- if (local.disabled || preload() !== "intent") return;
233
- doPreload();
234
- };
235
- const handleLeave = (e) => {
236
- if (local.disabled) return;
237
- const eventTarget = e.currentTarget || e.target;
238
- if (eventTarget) {
239
- const id = timeoutMap.get(eventTarget);
240
- clearTimeout(id);
241
- timeoutMap.delete(eventTarget);
242
- }
243
- };
244
- function callHandler(event, handler) {
245
- if (handler) {
246
- if (typeof handler === "function") {
247
- handler(event);
248
- } else {
249
- handler[0](handler[1], event);
250
- }
251
- }
252
- return event.defaultPrevented;
253
- }
254
- function composeEventHandlers(handlers) {
255
- return (event) => {
256
- for (const handler of handlers) {
257
- callHandler(event, handler);
258
- }
259
- };
260
- }
261
- const resolvedActiveProps = () => isActive() ? routerCore.functionalUpdate(local.activeProps, {}) ?? {} : {};
262
- const resolvedInactiveProps = () => isActive() ? {} : routerCore.functionalUpdate(local.inactiveProps, {});
263
- const resolvedClassName = () => [local.class, resolvedActiveProps().class, resolvedInactiveProps().class].filter(Boolean).join(" ");
264
- const resolvedStyle = () => ({
265
- ...local.style,
266
- ...resolvedActiveProps().style,
267
- ...resolvedInactiveProps().style
268
- });
269
- return Solid__namespace.merge(propsSafeToSpread, resolvedActiveProps, resolvedInactiveProps, () => {
270
- return {
271
- href: hrefOption()?.href,
272
- ref: mergeRefs(setRef, _options().ref),
273
- onClick: composeEventHandlers([local.onClick, handleClick]),
274
- onBlur: composeEventHandlers([local.onBlur, handleLeave]),
275
- onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),
276
- onMouseEnter: composeEventHandlers([local.onMouseEnter, enqueueIntentPreload]),
277
- onMouseOver: composeEventHandlers([local.onMouseOver, enqueueIntentPreload]),
278
- onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),
279
- onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),
280
- onTouchStart: composeEventHandlers([local.onTouchStart, handleTouchStart]),
281
- disabled: !!local.disabled,
282
- target: local.target,
283
- ...(() => {
284
- const s = resolvedStyle();
285
- return Object.keys(s).length ? {
286
- style: s
287
- } : {};
288
- })(),
289
- ...(() => {
290
- const c = resolvedClassName();
291
- return c ? {
292
- class: c
293
- } : {};
294
- })(),
295
- ...local.disabled && {
296
- role: "link",
297
- "aria-disabled": "true"
298
- },
299
- ...isActive() && {
300
- "data-status": "active",
301
- "aria-current": "page"
302
- },
303
- ...isTransitioning() && {
304
- "data-transitioning": "transitioning"
305
- }
306
- };
307
- });
23
+ const router = require_useRouter.useRouter();
24
+ const [isTransitioning, setIsTransitioning] = solid_js.createSignal(false);
25
+ const shouldHydrateHash = !_tanstack_router_core_isServer.isServer && !!router.options.ssr;
26
+ const hasHydrated = require_ClientOnly.useHydrated();
27
+ let hasRenderFetched = false;
28
+ const [local, rest] = splitProps(solid_js.merge({
29
+ activeProps: () => ({ class: "active" }),
30
+ inactiveProps: () => ({})
31
+ }, options), [
32
+ "activeProps",
33
+ "inactiveProps",
34
+ "activeOptions",
35
+ "to",
36
+ "preload",
37
+ "preloadDelay",
38
+ "hashScrollIntoView",
39
+ "replace",
40
+ "startTransition",
41
+ "resetScroll",
42
+ "viewTransition",
43
+ "target",
44
+ "disabled",
45
+ "style",
46
+ "class",
47
+ "onClick",
48
+ "onBlur",
49
+ "onFocus",
50
+ "onMouseEnter",
51
+ "onMouseLeave",
52
+ "onMouseOver",
53
+ "onMouseOut",
54
+ "onTouchStart",
55
+ "ignoreBlocker"
56
+ ]);
57
+ const [_, propsSafeToSpread] = splitProps(rest, [
58
+ "params",
59
+ "search",
60
+ "hash",
61
+ "state",
62
+ "mask",
63
+ "reloadDocument",
64
+ "unsafeRelative"
65
+ ]);
66
+ const currentLocation = require_useRouterState.useRouterState({ select: (s) => s.location });
67
+ const buildLocationKey = require_useRouterState.useRouterState({ select: (s) => {
68
+ const leaf = s.matches[s.matches.length - 1];
69
+ return {
70
+ search: leaf?.search,
71
+ hash: s.location.hash,
72
+ path: leaf?.pathname
73
+ };
74
+ } });
75
+ const from = options.from;
76
+ const _options = () => {
77
+ return {
78
+ ...options,
79
+ from
80
+ };
81
+ };
82
+ const next = solid_js.createMemo(() => {
83
+ buildLocationKey();
84
+ return router.buildLocation(_options());
85
+ });
86
+ const hrefOption = solid_js.createMemo(() => {
87
+ if (_options().disabled) return void 0;
88
+ const location = next().maskedLocation ?? next();
89
+ const publicHref = location.publicHref;
90
+ if (location.external) return {
91
+ href: publicHref,
92
+ external: true
93
+ };
94
+ return {
95
+ href: router.history.createHref(publicHref) || "/",
96
+ external: false
97
+ };
98
+ });
99
+ const externalLink = solid_js.createMemo(() => {
100
+ const _href = hrefOption();
101
+ if (_href?.external) {
102
+ if ((0, _tanstack_router_core.isDangerousProtocol)(_href.href, router.protocolAllowlist)) {
103
+ if (process.env.NODE_ENV !== "production") console.warn(`Blocked Link with dangerous protocol: ${_href.href}`);
104
+ return;
105
+ }
106
+ return _href.href;
107
+ }
108
+ const to = _options().to;
109
+ if (typeof to === "string" && to.charCodeAt(0) === 47 && to.charCodeAt(1) !== 47) return void 0;
110
+ try {
111
+ new URL(to);
112
+ if ((0, _tanstack_router_core.isDangerousProtocol)(to, router.protocolAllowlist)) {
113
+ if (process.env.NODE_ENV !== "production") console.warn(`Blocked Link with dangerous protocol: ${to}`);
114
+ return;
115
+ }
116
+ return to;
117
+ } catch {}
118
+ });
119
+ const preload = solid_js.createMemo(() => {
120
+ if (_options().reloadDocument || externalLink()) return false;
121
+ return local.preload ?? router.options.defaultPreload;
122
+ });
123
+ const preloadDelay = () => local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0;
124
+ const isActive = solid_js.createMemo(() => {
125
+ if (externalLink()) return false;
126
+ if (local.activeOptions?.exact) {
127
+ if (!(0, _tanstack_router_core.exactPathTest)(currentLocation().pathname, next().pathname, router.basepath)) return false;
128
+ } else {
129
+ const currentPathSplit = (0, _tanstack_router_core.removeTrailingSlash)(currentLocation().pathname, router.basepath).split("/");
130
+ if (!((0, _tanstack_router_core.removeTrailingSlash)(next()?.pathname, router.basepath)?.split("/"))?.every((d, i) => d === currentPathSplit[i])) return false;
131
+ }
132
+ if (local.activeOptions?.includeSearch ?? true) {
133
+ if (!(0, _tanstack_router_core.deepEqual)(currentLocation().search, next().search, {
134
+ partial: !local.activeOptions?.exact,
135
+ ignoreUndefined: !local.activeOptions?.explicitUndefined
136
+ })) return false;
137
+ }
138
+ if (local.activeOptions?.includeHash) return (shouldHydrateHash && !hasHydrated() ? "" : currentLocation().hash) === next().hash;
139
+ return true;
140
+ });
141
+ const doPreload = () => router.preloadRoute(_options()).catch((err) => {
142
+ console.warn(err);
143
+ console.warn(_tanstack_router_core.preloadWarning);
144
+ });
145
+ const preloadViewportIoCallback = (entry) => {
146
+ if (entry?.isIntersecting) doPreload();
147
+ };
148
+ const [ref, setRefSignal] = solid_js.createSignal(null);
149
+ const setRef = (el) => {
150
+ solid_js.runWithOwner(null, () => {
151
+ setRefSignal(el);
152
+ });
153
+ };
154
+ require_utils.useIntersectionObserver(ref, preloadViewportIoCallback, { rootMargin: "100px" }, { disabled: !!local.disabled || !(solid_js.untrack(preload) === "viewport") });
155
+ solid_js.createEffect(preload, (preloadValue) => {
156
+ if (hasRenderFetched) return;
157
+ if (!local.disabled && preloadValue === "render") {
158
+ doPreload();
159
+ hasRenderFetched = true;
160
+ }
161
+ });
162
+ if (solid_js.untrack(externalLink)) return solid_js.merge(propsSafeToSpread, { href: externalLink() }, splitProps(local, [
163
+ "target",
164
+ "disabled",
165
+ "style",
166
+ "class",
167
+ "onClick",
168
+ "onBlur",
169
+ "onFocus",
170
+ "onMouseEnter",
171
+ "onMouseLeave",
172
+ "onMouseOut",
173
+ "onMouseOver",
174
+ "onTouchStart"
175
+ ])[0]);
176
+ const handleClick = (e) => {
177
+ const elementTarget = e.currentTarget.getAttribute("target");
178
+ const effectiveTarget = local.target !== void 0 ? local.target : elementTarget;
179
+ if (!local.disabled && !isCtrlEvent(e) && !e.defaultPrevented && (!effectiveTarget || effectiveTarget === "_self") && e.button === 0) {
180
+ e.preventDefault();
181
+ setIsTransitioning(true);
182
+ const unsub = router.subscribe("onResolved", () => {
183
+ unsub();
184
+ setIsTransitioning(false);
185
+ });
186
+ router.navigate({
187
+ ..._options(),
188
+ replace: local.replace,
189
+ resetScroll: local.resetScroll,
190
+ hashScrollIntoView: local.hashScrollIntoView,
191
+ startTransition: local.startTransition,
192
+ viewTransition: local.viewTransition,
193
+ ignoreBlocker: local.ignoreBlocker
194
+ });
195
+ }
196
+ };
197
+ const enqueueIntentPreload = (e) => {
198
+ if (local.disabled || preload() !== "intent") return;
199
+ if (!preloadDelay()) {
200
+ doPreload();
201
+ return;
202
+ }
203
+ const eventTarget = e.currentTarget || e.target;
204
+ if (!eventTarget || timeoutMap.has(eventTarget)) return;
205
+ timeoutMap.set(eventTarget, setTimeout(() => {
206
+ timeoutMap.delete(eventTarget);
207
+ doPreload();
208
+ }, preloadDelay()));
209
+ };
210
+ const handleTouchStart = (_) => {
211
+ if (local.disabled || preload() !== "intent") return;
212
+ doPreload();
213
+ };
214
+ const handleLeave = (e) => {
215
+ if (local.disabled) return;
216
+ const eventTarget = e.currentTarget || e.target;
217
+ if (eventTarget) {
218
+ const id = timeoutMap.get(eventTarget);
219
+ clearTimeout(id);
220
+ timeoutMap.delete(eventTarget);
221
+ }
222
+ };
223
+ /** Call a JSX.EventHandlerUnion with the event. */
224
+ function callHandler(event, handler) {
225
+ if (handler) if (typeof handler === "function") handler(event);
226
+ else handler[0](handler[1], event);
227
+ return event.defaultPrevented;
228
+ }
229
+ function composeEventHandlers(handlers) {
230
+ return (event) => {
231
+ for (const handler of handlers) callHandler(event, handler);
232
+ };
233
+ }
234
+ const resolvedActiveProps = () => isActive() ? (0, _tanstack_router_core.functionalUpdate)(local.activeProps, {}) ?? {} : {};
235
+ const resolvedInactiveProps = () => isActive() ? {} : (0, _tanstack_router_core.functionalUpdate)(local.inactiveProps, {});
236
+ const resolvedClassName = () => [
237
+ local.class,
238
+ resolvedActiveProps().class,
239
+ resolvedInactiveProps().class
240
+ ].filter(Boolean).join(" ");
241
+ const resolvedStyle = () => ({
242
+ ...local.style,
243
+ ...resolvedActiveProps().style,
244
+ ...resolvedInactiveProps().style
245
+ });
246
+ return solid_js.merge(propsSafeToSpread, resolvedActiveProps, resolvedInactiveProps, () => {
247
+ return {
248
+ href: hrefOption()?.href,
249
+ ref: mergeRefs(setRef, _options().ref),
250
+ onClick: composeEventHandlers([local.onClick, handleClick]),
251
+ onBlur: composeEventHandlers([local.onBlur, handleLeave]),
252
+ onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),
253
+ onMouseEnter: composeEventHandlers([local.onMouseEnter, enqueueIntentPreload]),
254
+ onMouseOver: composeEventHandlers([local.onMouseOver, enqueueIntentPreload]),
255
+ onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),
256
+ onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),
257
+ onTouchStart: composeEventHandlers([local.onTouchStart, handleTouchStart]),
258
+ disabled: !!local.disabled,
259
+ target: local.target,
260
+ ...(() => {
261
+ const s = resolvedStyle();
262
+ return Object.keys(s).length ? { style: s } : {};
263
+ })(),
264
+ ...(() => {
265
+ const c = resolvedClassName();
266
+ return c ? { class: c } : {};
267
+ })(),
268
+ ...local.disabled && {
269
+ role: "link",
270
+ "aria-disabled": "true"
271
+ },
272
+ ...isActive() && {
273
+ "data-status": "active",
274
+ "aria-current": "page"
275
+ },
276
+ ...isTransitioning() && { "data-transitioning": "transitioning" }
277
+ };
278
+ });
308
279
  }
309
280
  function createLink(Comp) {
310
- return (props) => Solid$1.createComponent(Link, Solid$1.mergeProps(props, {
311
- _asChild: Comp
312
- }));
281
+ return (props) => (0, _solidjs_web.createComponent)(Link, (0, _solidjs_web.mergeProps)(props, { _asChild: Comp }));
313
282
  }
314
- const Link = (props) => {
315
- const [local, rest] = splitProps(props, ["_asChild", "children"]);
316
- const [_, linkProps] = splitProps(useLinkProps(rest), ["type"]);
317
- const resolvedChildren = Solid__namespace.children(() => local.children);
318
- const children = () => {
319
- const ch = resolvedChildren();
320
- if (typeof ch === "function") {
321
- return ch({
322
- get isActive() {
323
- return linkProps["data-status"] === "active";
324
- },
325
- get isTransitioning() {
326
- return linkProps["data-transitioning"] === "transitioning";
327
- }
328
- });
329
- }
330
- return ch;
331
- };
332
- if (local._asChild === "svg") {
333
- const [_2, svgLinkProps] = splitProps(linkProps, ["class"]);
334
- return (() => {
335
- var _el$ = _tmpl$(), _el$2 = _el$.firstChild;
336
- Solid$1.spread(_el$2, svgLinkProps, false, true);
337
- Solid$1.insert(_el$2, children);
338
- return _el$;
339
- })();
340
- }
341
- return Solid$1.createComponent(Solid$1.Dynamic, Solid$1.mergeProps({
342
- get component() {
343
- return Solid$1.memo(() => !!local._asChild)() ? local._asChild : "a";
344
- }
345
- }, linkProps, {
346
- get children() {
347
- return children();
348
- }
349
- }));
283
+ var Link = (props) => {
284
+ const [local, rest] = splitProps(props, ["_asChild", "children"]);
285
+ const [_, linkProps] = splitProps(useLinkProps(rest), ["type"]);
286
+ const resolvedChildren = solid_js.children(() => local.children);
287
+ const children = () => {
288
+ const ch = resolvedChildren();
289
+ if (typeof ch === "function") return ch({
290
+ get isActive() {
291
+ return linkProps["data-status"] === "active";
292
+ },
293
+ get isTransitioning() {
294
+ return linkProps["data-transitioning"] === "transitioning";
295
+ }
296
+ });
297
+ return ch;
298
+ };
299
+ if (local._asChild === "svg") {
300
+ const [_, svgLinkProps] = splitProps(linkProps, ["class"]);
301
+ return (() => {
302
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild;
303
+ (0, _solidjs_web.spread)(_el$2, svgLinkProps, false, true);
304
+ (0, _solidjs_web.insert)(_el$2, children);
305
+ return _el$;
306
+ })();
307
+ }
308
+ return (0, _solidjs_web.createComponent)(_solidjs_web.Dynamic, (0, _solidjs_web.mergeProps)({ get component() {
309
+ return (0, _solidjs_web.memo)(() => !!local._asChild)() ? local._asChild : "a";
310
+ } }, linkProps, { get children() {
311
+ return children();
312
+ } }));
350
313
  };
351
314
  function isCtrlEvent(e) {
352
- return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);
315
+ return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);
353
316
  }
354
- const linkOptions = (options) => {
355
- return options;
317
+ var linkOptions = (options) => {
318
+ return options;
356
319
  };
320
+ //#endregion
357
321
  exports.Link = Link;
358
322
  exports.createLink = createLink;
359
323
  exports.linkOptions = linkOptions;
360
324
  exports.useLinkProps = useLinkProps;
361
- //# sourceMappingURL=link.cjs.map
325
+
326
+ //# sourceMappingURL=link.cjs.map