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