@tanstack/solid-router 1.112.0 → 1.112.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.
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const web = require("solid-js/web");
4
- var _tmpl$ = /* @__PURE__ */ web.template(`<title>`), _tmpl$2 = /* @__PURE__ */ web.template(`<meta>`), _tmpl$3 = /* @__PURE__ */ web.template(`<link>`), _tmpl$4 = /* @__PURE__ */ web.template(`<style>`), _tmpl$5 = /* @__PURE__ */ web.template(`<script>`);
4
+ const meta = require("@solidjs/meta");
5
+ var _tmpl$ = /* @__PURE__ */ web.template(`<link>`), _tmpl$2 = /* @__PURE__ */ web.template(`<script>`);
5
6
  function Asset({
6
7
  tag,
7
8
  attrs,
@@ -9,46 +10,35 @@ function Asset({
9
10
  }) {
10
11
  switch (tag) {
11
12
  case "title":
12
- return (() => {
13
- var _el$ = _tmpl$();
14
- web.spread(_el$, attrs, false, true);
15
- web.insert(_el$, children);
16
- return _el$;
17
- })();
13
+ return web.createComponent(meta.Title, web.mergeProps(attrs, {
14
+ children
15
+ }));
18
16
  case "meta":
19
- return (() => {
20
- var _el$2 = _tmpl$2();
21
- web.spread(_el$2, attrs, false, false);
22
- return _el$2;
23
- })();
17
+ return web.createComponent(meta.Meta, attrs);
24
18
  case "link":
25
19
  return (() => {
26
- var _el$3 = _tmpl$3();
27
- web.spread(_el$3, attrs, false, false);
28
- return _el$3;
20
+ var _el$ = _tmpl$();
21
+ web.spread(_el$, attrs, false, false);
22
+ return _el$;
29
23
  })();
30
24
  case "style":
31
- return (() => {
32
- var _el$4 = _tmpl$4();
33
- web.spread(_el$4, web.mergeProps(attrs, {
34
- "innerHTML": children
35
- }), false, false);
36
- return _el$4;
37
- })();
25
+ return web.createComponent(meta.Style, web.mergeProps(attrs, {
26
+ innerHTML: children
27
+ }));
38
28
  case "script":
39
29
  if (attrs && attrs.src) {
40
30
  return (() => {
41
- var _el$5 = _tmpl$5();
42
- web.spread(_el$5, attrs, false, false);
43
- return _el$5;
31
+ var _el$2 = _tmpl$2();
32
+ web.spread(_el$2, attrs, false, false);
33
+ return _el$2;
44
34
  })();
45
35
  }
46
36
  if (typeof children === "string") return (() => {
47
- var _el$6 = _tmpl$5();
48
- web.spread(_el$6, web.mergeProps(attrs, {
37
+ var _el$3 = _tmpl$2();
38
+ web.spread(_el$3, web.mergeProps(attrs, {
49
39
  "innerHTML": children
50
40
  }), false, false);
51
- return _el$6;
41
+ return _el$3;
52
42
  })();
53
43
  return null;
54
44
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.cjs","sources":["../../src/Asset.tsx"],"sourcesContent":["import type { RouterManagedTag } from '@tanstack/router-core'\n\nexport function Asset({ tag, attrs, children }: RouterManagedTag): any {\n switch (tag) {\n case 'title':\n return <title {...attrs}>{children}</title>\n case 'meta':\n return <meta {...attrs} />\n case 'link':\n return <link {...attrs} />\n case 'style':\n return <style {...attrs} innerHTML={children} />\n case 'script':\n if ((attrs as any) && (attrs as any).src) {\n return <script {...attrs} />\n }\n if (typeof children === 'string')\n return <script {...attrs} innerHTML={children} />\n return null\n default:\n return null\n }\n}\n"],"names":["Asset","tag","attrs","children","_el$","_tmpl$","_$insert","_el$2","_tmpl$2","_el$3","_tmpl$3","_el$4","_tmpl$4","_$mergeProps","src","_el$5","_tmpl$5","_el$6"],"mappings":";;;;AAEO,SAASA,MAAM;AAAA,EAAEC;AAAAA,EAAKC;AAAAA,EAAOC;AAA2B,GAAQ;AACrE,UAAQF,KAAG;AAAA,IACT,KAAK;AACH,cAAA,MAAA;AAAA,YAAAG,OAAAC,OAAA;AAAAD,YAAAA,OAAAA,MAAkBF,OAAK,OAAA,IAAA;AAAAI,YAAAA,OAAAF,MAAGD,QAAQ;AAAAC,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACpC,KAAK;AACH,cAAA,MAAA;AAAA,YAAAG,QAAAC,QAAA;AAAAD,YAAAA,OAAAA,OAAiBL,OAAK,OAAA,KAAA;AAAAK,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACxB,KAAK;AACH,cAAA,MAAA;AAAA,YAAAE,QAAAC,QAAA;AAAAD,YAAAA,OAAAA,OAAiBP,OAAK,OAAA,KAAA;AAAAO,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACxB,KAAK;AACH,cAAA,MAAA;AAAA,YAAAE,QAAAC,QAAA;AAAAD,mBAAAA,OAAAE,eAAkBX,OAAK;AAAA,UAAA,aAAaC;AAAAA,QAAAA,CAAQ,GAAA,OAAA,KAAA;AAAAQ,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IAC9C,KAAK;AACET,UAAAA,SAAkBA,MAAcY,KAAK;AACxC,gBAAA,MAAA;AAAA,cAAAC,QAAAC,QAAA;AAAAD,cAAAA,OAAAA,OAAmBb,OAAK,OAAA,KAAA;AAAAa,iBAAAA;AAAAA,QAAAA,GAAA;AAAA,MAAA;AAE1B,UAAI,OAAOZ,aAAa,SACtB,SAAA,MAAA;AAAA,YAAAc,QAAAD,QAAA;AAAAC,mBAAAA,OAAAJ,eAAmBX,OAAK;AAAA,UAAA,aAAaC;AAAAA,QAAAA,CAAQ,GAAA,OAAA,KAAA;AAAAc,eAAAA;AAAAA,MAAAA,GAAA;AACxC,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EAAA;AAEb;;"}
1
+ {"version":3,"file":"Asset.cjs","sources":["../../src/Asset.tsx"],"sourcesContent":["import { Meta, Style, Title } from '@solidjs/meta'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport function Asset({ tag, attrs, children }: RouterManagedTag): any {\n switch (tag) {\n case 'title':\n return <Title {...attrs}>{children}</Title>\n case 'meta':\n return <Meta {...attrs} />\n case 'link':\n return <link {...attrs} />\n case 'style':\n return <Style {...attrs} innerHTML={children} />\n case 'script':\n if ((attrs as any) && (attrs as any).src) {\n return <script {...attrs} />\n }\n if (typeof children === 'string')\n return <script {...attrs} innerHTML={children} />\n return null\n default:\n return null\n }\n}\n"],"names":["Asset","tag","attrs","children","_$createComponent","Title","_$mergeProps","Meta","_el$","_tmpl$","Style","innerHTML","src","_el$2","_tmpl$2","_el$3"],"mappings":";;;;;AAGO,SAASA,MAAM;AAAA,EAAEC;AAAAA,EAAKC;AAAAA,EAAOC;AAA2B,GAAQ;AACrE,UAAQF,KAAG;AAAA,IACT,KAAK;AACHG,aAAAA,oBAAQC,KAAAA,OAAKC,IAAAA,WAAKJ,OAAK;AAAA,QAAAC;AAAAA,MAAAA,CAAW,CAAA;AAAA,IACpC,KAAK;AACHC,aAAAA,IAAAA,gBAAQG,WAASL,KAAK;AAAA,IACxB,KAAK;AACH,cAAA,MAAA;AAAA,YAAAM,OAAAC,OAAA;AAAAD,YAAAA,OAAAA,MAAiBN,OAAK,OAAA,KAAA;AAAAM,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACxB,KAAK;AACHJ,aAAAA,oBAAQM,KAAAA,OAAKJ,IAAAA,WAAKJ,OAAK;AAAA,QAAES,WAAWR;AAAAA,MAAAA,CAAQ,CAAA;AAAA,IAC9C,KAAK;AACED,UAAAA,SAAkBA,MAAcU,KAAK;AACxC,gBAAA,MAAA;AAAA,cAAAC,QAAAC,QAAA;AAAAD,cAAAA,OAAAA,OAAmBX,OAAK,OAAA,KAAA;AAAAW,iBAAAA;AAAAA,QAAAA,GAAA;AAAA,MAAA;AAE1B,UAAI,OAAOV,aAAa,SACtB,SAAA,MAAA;AAAA,YAAAY,QAAAD,QAAA;AAAAC,mBAAAA,OAAAT,eAAmBJ,OAAK;AAAA,UAAA,aAAaC;AAAAA,QAAAA,CAAQ,GAAA,OAAA,KAAA;AAAAY,eAAAA;AAAAA,MAAAA,GAAA;AACxC,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EAAA;AAEb;;"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const web = require("solid-js/web");
4
4
  const Solid = require("solid-js");
5
+ const meta = require("@solidjs/meta");
5
6
  const Asset = require("./Asset.cjs");
6
7
  const useRouter = require("./useRouter.cjs");
7
8
  const useRouterState = require("./useRouterState.cjs");
@@ -29,7 +30,7 @@ const useTags = () => {
29
30
  return state.matches.map((match) => match.meta).filter(Boolean);
30
31
  }
31
32
  });
32
- const meta = Solid__namespace.createMemo(() => {
33
+ const meta2 = Solid__namespace.createMemo(() => {
33
34
  const resultMeta = [];
34
35
  const metaByAttribute = {};
35
36
  let title;
@@ -66,7 +67,7 @@ const useTags = () => {
66
67
  }
67
68
  resultMeta.reverse();
68
69
  return resultMeta;
69
- }, [routeMeta]);
70
+ });
70
71
  const links = useRouterState.useRouterState({
71
72
  select: (state) => state.matches.map((match) => match.links).filter(Boolean).flat(1).map((link) => ({
72
73
  tag: "link",
@@ -105,13 +106,17 @@ const useTags = () => {
105
106
  children
106
107
  }))
107
108
  });
108
- return uniqBy([...meta(), ...preloadMeta(), ...links(), ...headScripts()], (d) => {
109
+ return () => uniqBy([...meta2(), ...preloadMeta(), ...links(), ...headScripts()], (d) => {
109
110
  return JSON.stringify(d);
110
111
  });
111
112
  };
112
113
  function HeadContent() {
113
114
  const tags = useTags();
114
- return tags.map((tag) => web.createComponent(Asset.Asset, tag));
115
+ return web.createComponent(meta.MetaProvider, {
116
+ get children() {
117
+ return tags().map((tag) => web.createComponent(Asset.Asset, tag));
118
+ }
119
+ });
115
120
  }
116
121
  function uniqBy(arr, fn) {
117
122
  const seen = /* @__PURE__ */ new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.cjs","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n ;[...routeMeta()].reverse().forEach((metas) => {\n ;[...metas].reverse().forEach((m) => {\n if (!m) return\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n return\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n },\n })\n }\n })\n })\n\n if (title) {\n resultMeta.push(title)\n }\n\n resultMeta.reverse()\n\n return resultMeta\n }, [routeMeta])\n\n const links = useRouterState({\n select: (state) =>\n state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n },\n })) as Array<RouterManagedTag>,\n })\n\n const preloadMeta = useRouterState({\n select: (state) => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n },\n })\n }),\n )\n\n return preloadMeta\n },\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n })\n\n return uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\n ...links(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * It should be rendered in the `<head>` of your document.\n */\nexport function HeadContent() {\n const tags = useTags()\n return tags.map((tag) => <Asset {...tag} />)\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","reverse","forEach","metas","m","tag","children","attribute","name","property","push","attrs","links","flat","link","preloadMeta","looseRoutesById","routeId","route","ssr","manifest","routes","id","preloads","preload","rel","href","headScripts","script","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
1
+ {"version":3,"file":"HeadContent.cjs","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { MetaProvider } from '@solidjs/meta'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n ;[...routeMeta()].reverse().forEach((metas) => {\n ;[...metas].reverse().forEach((m) => {\n if (!m) return\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n return\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n },\n })\n }\n })\n })\n\n if (title) {\n resultMeta.push(title)\n }\n\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = useRouterState({\n select: (state) =>\n state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n },\n })) as Array<RouterManagedTag>,\n })\n\n const preloadMeta = useRouterState({\n select: (state) => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n },\n })\n }),\n )\n\n return preloadMeta\n },\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n })\n\n return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\n ...links(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * It should be rendered in the `<head>` of your document.\n */\nexport function HeadContent() {\n const tags = useTags()\n return (\n <MetaProvider>\n {tags().map((tag) => (\n <Asset {...tag} />\n ))}\n </MetaProvider>\n )\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","reverse","forEach","metas","m","tag","children","attribute","name","property","push","attrs","links","flat","link","preloadMeta","looseRoutesById","routeId","route","ssr","manifest","routes","id","preloads","preload","rel","href","headScripts","script","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { RouterManagedTag } from '@tanstack/router-core';
2
2
  import * as Solid from 'solid-js';
3
- export declare const useTags: () => RouterManagedTag[];
3
+ export declare const useTags: () => () => RouterManagedTag[];
4
4
  /**
5
5
  * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
6
6
  * It should be rendered in the `<head>` of your document.
7
7
  */
8
- export declare function HeadContent(): Solid.JSX.Element[];
8
+ export declare function HeadContent(): Solid.JSX.Element;
@@ -256,5 +256,6 @@ exports.notFound = notFound.notFound;
256
256
  exports.ScriptOnce = ScriptOnce.ScriptOnce;
257
257
  exports.Asset = Asset.Asset;
258
258
  exports.HeadContent = HeadContent.HeadContent;
259
+ exports.useTags = HeadContent.useTags;
259
260
  exports.Scripts = Scripts.Scripts;
260
261
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -46,5 +46,5 @@ export type { NotFoundError } from './not-found.cjs';
46
46
  export * from './typePrimitives.cjs';
47
47
  export { ScriptOnce } from './ScriptOnce.cjs';
48
48
  export { Asset } from './Asset.cjs';
49
- export { HeadContent } from './HeadContent.cjs';
49
+ export { HeadContent, useTags } from './HeadContent.cjs';
50
50
  export { Scripts } from './Scripts.cjs';
@@ -5,7 +5,11 @@ const routerCore = require("@tanstack/router-core");
5
5
  const useRouter = require("./useRouter.cjs");
6
6
  const ScriptOnce = require("./ScriptOnce.cjs");
7
7
  const storageKey = "tsr-scroll-restoration-v1_3";
8
- const sessionsStorage = typeof window !== "undefined" && window.sessionStorage;
8
+ let sessionsStorage = false;
9
+ try {
10
+ sessionsStorage = typeof window !== "undefined" && typeof window.sessionStorage === "object";
11
+ } catch {
12
+ }
9
13
  const throttle = (fn, wait) => {
10
14
  let timeout;
11
15
  return (...args) => {
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-restoration.cjs","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import { functionalUpdate } from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\nimport type { AnyRouter } from './router'\nimport type { NonNullableUpdater, ParsedLocation } from '@tanstack/router-core'\n\nexport type ScrollRestorationEntry = { scrollX: number; scrollY: number }\n\nexport type ScrollRestorationByElement = Record<string, ScrollRestorationEntry>\n\nexport type ScrollRestorationByKey = Record<string, ScrollRestorationByElement>\n\nexport type ScrollRestorationCache = {\n state: ScrollRestorationByKey\n set: (updater: NonNullableUpdater<ScrollRestorationByKey>) => void\n}\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n scrollBehavior?: ScrollToOptions['behavior']\n}\n\nexport const storageKey = 'tsr-scroll-restoration-v1_3'\nconst sessionsStorage = typeof window !== 'undefined' && window.sessionStorage\nconst throttle = (fn: (...args: Array<any>) => void, wait: number) => {\n let timeout: any\n return (...args: Array<any>) => {\n if (!timeout) {\n timeout = setTimeout(() => {\n fn(...args)\n timeout = null\n }, wait)\n }\n }\n}\nexport const scrollRestorationCache: ScrollRestorationCache = sessionsStorage\n ? (() => {\n const state: ScrollRestorationByKey =\n JSON.parse(window.sessionStorage.getItem(storageKey) || 'null') || {}\n\n return {\n state,\n // This setter is simply to make sure that we set the sessionStorage right\n // after the state is updated. It doesn't necessarily need to be a functional\n // update.\n set: (updater) => (\n (scrollRestorationCache.state =\n functionalUpdate(updater, scrollRestorationCache.state) ||\n scrollRestorationCache.state),\n window.sessionStorage.setItem(\n storageKey,\n JSON.stringify(scrollRestorationCache.state),\n )\n ),\n }\n })()\n : (undefined as any)\n/**\n * The default `getKey` function for `useScrollRestoration`.\n * It returns the `key` from the location state or the `href` of the location.\n *\n * The `location.href` is used as a fallback to support the use case where the location state is not available like the initial render.\n */\n\nexport const defaultGetScrollRestorationKey = (location: ParsedLocation) => {\n return location.state.key! || location.href\n}\n\nexport function getCssSelector(el: any): string {\n const path = []\n let parent\n while ((parent = el.parentNode)) {\n path.unshift(\n `${el.tagName}:nth-child(${([].indexOf as any).call(parent.children, el) + 1})`,\n )\n el = parent\n }\n return `${path.join(' > ')}`.toLowerCase()\n}\n\nlet ignoreScroll = false\n\n// NOTE: This function must remain pure and not use any outside variables\n// unless they are passed in as arguments. Why? Because we need to be able to\n// toString() it into a script tag to execute as early as possible in the browser\n// during SSR. Additionally, we also call it from within the router lifecycle\nexport function restoreScroll(\n storageKey: string,\n key?: string,\n behavior?: ScrollToOptions['behavior'],\n shouldScrollRestoration?: boolean,\n scrollToTopSelectors?: Array<string>,\n) {\n let byKey: ScrollRestorationByKey\n\n try {\n byKey = JSON.parse(sessionStorage.getItem(storageKey) || '{}')\n } catch (error: any) {\n console.error(error)\n return\n }\n\n const resolvedKey = key || window.history.state?.key\n const elementEntries = byKey[resolvedKey]\n\n //\n ignoreScroll = true\n\n //\n ;(() => {\n // If we have a cached entry for this location state,\n // we always need to prefer that over the hash scroll.\n if (shouldScrollRestoration && elementEntries) {\n for (const elementSelector in elementEntries) {\n const entry = elementEntries[elementSelector]!\n if (elementSelector === 'window') {\n window.scrollTo({\n top: entry.scrollY,\n left: entry.scrollX,\n behavior,\n })\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n element.scrollLeft = entry.scrollX\n element.scrollTop = entry.scrollY\n }\n }\n }\n\n return\n }\n\n // If we don't have a cached entry for the hash,\n // Which means we've never seen this location before,\n // we need to check if there is a hash in the URL.\n // If there is, we need to scroll it's ID into view.\n const hash = window.location.hash.split('#')[1]\n\n if (hash) {\n const hashScrollIntoViewOptions =\n (window.history.state || {}).__hashScrollIntoViewOptions ?? true\n\n if (hashScrollIntoViewOptions) {\n const el = document.getElementById(hash)\n if (el) {\n el.scrollIntoView(hashScrollIntoViewOptions)\n }\n }\n\n return\n }\n\n // If there is no cached entry for the hash and there is no hash in the URL,\n // we need to scroll to the top of the page for every scrollToTop element\n ;[\n 'window',\n ...(scrollToTopSelectors?.filter((d) => d !== 'window') ?? []),\n ].forEach((selector) => {\n const element =\n selector === 'window' ? window : document.querySelector(selector)\n if (element) {\n element.scrollTo({\n top: 0,\n left: 0,\n behavior,\n })\n }\n })\n })()\n\n //\n ignoreScroll = false\n}\n\nexport function setupScrollRestoration(router: AnyRouter, force?: boolean) {\n const shouldScrollRestoration =\n force ?? router.options.scrollRestoration ?? false\n\n if (shouldScrollRestoration) {\n router.isScrollRestoring = true\n }\n\n if (typeof document === 'undefined' || router.isScrollRestorationSetup) {\n return\n }\n\n router.isScrollRestorationSetup = true\n\n //\n ignoreScroll = false\n\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n\n window.history.scrollRestoration = 'manual'\n\n // // Create a MutationObserver to monitor DOM changes\n // const mutationObserver = new MutationObserver(() => {\n // ;ignoreScroll = true\n // requestAnimationFrame(() => {\n // ;ignoreScroll = false\n\n // // Attempt to restore scroll position on each dom\n // // mutation until the user scrolls. We do this\n // // because dynamic content may come in at different\n // // ticks after the initial render and we want to\n // // keep up with that content as much as possible.\n // // As soon as the user scrolls, we no longer need\n // // to attempt router.\n // // console.log('mutation observer restoreScroll')\n // restoreScroll(\n // storageKey,\n // getKey(router.state.location),\n // router.options.scrollRestorationBehavior,\n // )\n // })\n // })\n\n // const observeDom = () => {\n // // Observe changes to the entire document\n // mutationObserver.observe(document, {\n // childList: true, // Detect added or removed child nodes\n // subtree: true, // Monitor all descendants\n // characterData: true, // Detect text content changes\n // })\n // }\n\n // const unobserveDom = () => {\n // mutationObserver.disconnect()\n // }\n\n // observeDom()\n\n const onScroll = (event: Event) => {\n // unobserveDom()\n\n if (ignoreScroll || !router.isScrollRestoring) {\n return\n }\n\n let elementSelector = ''\n\n if (event.target === document || event.target === window) {\n elementSelector = 'window'\n } else {\n const attrId = (event.target as Element).getAttribute(\n 'data-scroll-restoration-id',\n )\n\n if (attrId) {\n elementSelector = `[data-scroll-restoration-id=\"${attrId}\"]`\n } else {\n elementSelector = getCssSelector(event.target)\n }\n }\n\n const restoreKey = getKey(router.state.location)\n\n scrollRestorationCache.set((state) => {\n const keyEntry = (state[restoreKey] =\n state[restoreKey] || ({} as ScrollRestorationByElement))\n\n const elementEntry = (keyEntry[elementSelector] =\n keyEntry[elementSelector] || ({} as ScrollRestorationEntry))\n\n if (elementSelector === 'window') {\n elementEntry.scrollX = window.scrollX || 0\n elementEntry.scrollY = window.scrollY || 0\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n elementEntry.scrollX = element.scrollLeft || 0\n elementEntry.scrollY = element.scrollTop || 0\n }\n }\n\n return state\n })\n }\n\n // Throttle the scroll event to avoid excessive updates\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', throttle(onScroll, 100), true)\n }\n\n router.subscribe('onRendered', (event) => {\n // unobserveDom()\n\n const cacheKey = getKey(event.toLocation)\n\n // If the user doesn't want to restore the scroll position,\n // we don't need to do anything.\n if (!router.resetNextScroll) {\n router.resetNextScroll = true\n return\n }\n\n restoreScroll(\n storageKey,\n cacheKey,\n router.options.scrollRestorationBehavior,\n router.isScrollRestoring,\n router.options.scrollToTopSelectors,\n )\n\n if (router.isScrollRestoring) {\n // Mark the location as having been seen\n scrollRestorationCache.set((state) => {\n state[cacheKey] = state[cacheKey] || ({} as ScrollRestorationByElement)\n\n return state\n })\n }\n })\n}\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n : null\n\n if (!router.isScrollRestoring || !router.isServer) {\n return null\n }\n\n return (\n <ScriptOnce\n children={`(${restoreScroll.toString()})(${JSON.stringify(storageKey)},${JSON.stringify(resolvedKey)}, undefined, true)`}\n log={false}\n />\n )\n}\n"],"names":["storageKey","sessionsStorage","window","sessionStorage","throttle","fn","wait","timeout","args","setTimeout","scrollRestorationCache","state","JSON","parse","getItem","set","updater","functionalUpdate","setItem","stringify","undefined","defaultGetScrollRestorationKey","location","key","href","getCssSelector","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","join","toLowerCase","ignoreScroll","restoreScroll","behavior","shouldScrollRestoration","scrollToTopSelectors","byKey","error","console","resolvedKey","history","elementEntries","elementSelector","entry","scrollTo","top","scrollY","left","scrollX","element","document","querySelector","scrollLeft","scrollTop","hash","split","hashScrollIntoViewOptions","__hashScrollIntoViewOptions","getElementById","scrollIntoView","filter","d","forEach","selector","setupScrollRestoration","router","force","options","scrollRestoration","isScrollRestoring","isScrollRestorationSetup","getKey","getScrollRestorationKey","onScroll","event","target","attrId","getAttribute","restoreKey","keyEntry","elementEntry","addEventListener","subscribe","cacheKey","toLocation","resetNextScroll","scrollRestorationBehavior","ScrollRestoration","useRouter","userKey","latestLocation","isServer","_$createComponent","ScriptOnce","toString","log"],"mappings":"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"}
1
+ {"version":3,"file":"scroll-restoration.cjs","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import { functionalUpdate } from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\nimport type { AnyRouter } from './router'\nimport type { NonNullableUpdater, ParsedLocation } from '@tanstack/router-core'\n\nexport type ScrollRestorationEntry = { scrollX: number; scrollY: number }\n\nexport type ScrollRestorationByElement = Record<string, ScrollRestorationEntry>\n\nexport type ScrollRestorationByKey = Record<string, ScrollRestorationByElement>\n\nexport type ScrollRestorationCache = {\n state: ScrollRestorationByKey\n set: (updater: NonNullableUpdater<ScrollRestorationByKey>) => void\n}\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n scrollBehavior?: ScrollToOptions['behavior']\n}\n\nexport const storageKey = 'tsr-scroll-restoration-v1_3'\nlet sessionsStorage = false\ntry {\n sessionsStorage =\n typeof window !== 'undefined' && typeof window.sessionStorage === 'object'\n} catch {}\nconst throttle = (fn: (...args: Array<any>) => void, wait: number) => {\n let timeout: any\n return (...args: Array<any>) => {\n if (!timeout) {\n timeout = setTimeout(() => {\n fn(...args)\n timeout = null\n }, wait)\n }\n }\n}\nexport const scrollRestorationCache: ScrollRestorationCache = sessionsStorage\n ? (() => {\n const state: ScrollRestorationByKey =\n JSON.parse(window.sessionStorage.getItem(storageKey) || 'null') || {}\n\n return {\n state,\n // This setter is simply to make sure that we set the sessionStorage right\n // after the state is updated. It doesn't necessarily need to be a functional\n // update.\n set: (updater) => (\n (scrollRestorationCache.state =\n functionalUpdate(updater, scrollRestorationCache.state) ||\n scrollRestorationCache.state),\n window.sessionStorage.setItem(\n storageKey,\n JSON.stringify(scrollRestorationCache.state),\n )\n ),\n }\n })()\n : (undefined as any)\n/**\n * The default `getKey` function for `useScrollRestoration`.\n * It returns the `key` from the location state or the `href` of the location.\n *\n * The `location.href` is used as a fallback to support the use case where the location state is not available like the initial render.\n */\n\nexport const defaultGetScrollRestorationKey = (location: ParsedLocation) => {\n return location.state.key! || location.href\n}\n\nexport function getCssSelector(el: any): string {\n const path = []\n let parent\n while ((parent = el.parentNode)) {\n path.unshift(\n `${el.tagName}:nth-child(${([].indexOf as any).call(parent.children, el) + 1})`,\n )\n el = parent\n }\n return `${path.join(' > ')}`.toLowerCase()\n}\n\nlet ignoreScroll = false\n\n// NOTE: This function must remain pure and not use any outside variables\n// unless they are passed in as arguments. Why? Because we need to be able to\n// toString() it into a script tag to execute as early as possible in the browser\n// during SSR. Additionally, we also call it from within the router lifecycle\nexport function restoreScroll(\n storageKey: string,\n key?: string,\n behavior?: ScrollToOptions['behavior'],\n shouldScrollRestoration?: boolean,\n scrollToTopSelectors?: Array<string>,\n) {\n let byKey: ScrollRestorationByKey\n\n try {\n byKey = JSON.parse(sessionStorage.getItem(storageKey) || '{}')\n } catch (error: any) {\n console.error(error)\n return\n }\n\n const resolvedKey = key || window.history.state?.key\n const elementEntries = byKey[resolvedKey]\n\n //\n ignoreScroll = true\n\n //\n ;(() => {\n // If we have a cached entry for this location state,\n // we always need to prefer that over the hash scroll.\n if (shouldScrollRestoration && elementEntries) {\n for (const elementSelector in elementEntries) {\n const entry = elementEntries[elementSelector]!\n if (elementSelector === 'window') {\n window.scrollTo({\n top: entry.scrollY,\n left: entry.scrollX,\n behavior,\n })\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n element.scrollLeft = entry.scrollX\n element.scrollTop = entry.scrollY\n }\n }\n }\n\n return\n }\n\n // If we don't have a cached entry for the hash,\n // Which means we've never seen this location before,\n // we need to check if there is a hash in the URL.\n // If there is, we need to scroll it's ID into view.\n const hash = window.location.hash.split('#')[1]\n\n if (hash) {\n const hashScrollIntoViewOptions =\n (window.history.state || {}).__hashScrollIntoViewOptions ?? true\n\n if (hashScrollIntoViewOptions) {\n const el = document.getElementById(hash)\n if (el) {\n el.scrollIntoView(hashScrollIntoViewOptions)\n }\n }\n\n return\n }\n\n // If there is no cached entry for the hash and there is no hash in the URL,\n // we need to scroll to the top of the page for every scrollToTop element\n ;[\n 'window',\n ...(scrollToTopSelectors?.filter((d) => d !== 'window') ?? []),\n ].forEach((selector) => {\n const element =\n selector === 'window' ? window : document.querySelector(selector)\n if (element) {\n element.scrollTo({\n top: 0,\n left: 0,\n behavior,\n })\n }\n })\n })()\n\n //\n ignoreScroll = false\n}\n\nexport function setupScrollRestoration(router: AnyRouter, force?: boolean) {\n const shouldScrollRestoration =\n force ?? router.options.scrollRestoration ?? false\n\n if (shouldScrollRestoration) {\n router.isScrollRestoring = true\n }\n\n if (typeof document === 'undefined' || router.isScrollRestorationSetup) {\n return\n }\n\n router.isScrollRestorationSetup = true\n\n //\n ignoreScroll = false\n\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n\n window.history.scrollRestoration = 'manual'\n\n // // Create a MutationObserver to monitor DOM changes\n // const mutationObserver = new MutationObserver(() => {\n // ;ignoreScroll = true\n // requestAnimationFrame(() => {\n // ;ignoreScroll = false\n\n // // Attempt to restore scroll position on each dom\n // // mutation until the user scrolls. We do this\n // // because dynamic content may come in at different\n // // ticks after the initial render and we want to\n // // keep up with that content as much as possible.\n // // As soon as the user scrolls, we no longer need\n // // to attempt router.\n // // console.log('mutation observer restoreScroll')\n // restoreScroll(\n // storageKey,\n // getKey(router.state.location),\n // router.options.scrollRestorationBehavior,\n // )\n // })\n // })\n\n // const observeDom = () => {\n // // Observe changes to the entire document\n // mutationObserver.observe(document, {\n // childList: true, // Detect added or removed child nodes\n // subtree: true, // Monitor all descendants\n // characterData: true, // Detect text content changes\n // })\n // }\n\n // const unobserveDom = () => {\n // mutationObserver.disconnect()\n // }\n\n // observeDom()\n\n const onScroll = (event: Event) => {\n // unobserveDom()\n\n if (ignoreScroll || !router.isScrollRestoring) {\n return\n }\n\n let elementSelector = ''\n\n if (event.target === document || event.target === window) {\n elementSelector = 'window'\n } else {\n const attrId = (event.target as Element).getAttribute(\n 'data-scroll-restoration-id',\n )\n\n if (attrId) {\n elementSelector = `[data-scroll-restoration-id=\"${attrId}\"]`\n } else {\n elementSelector = getCssSelector(event.target)\n }\n }\n\n const restoreKey = getKey(router.state.location)\n\n scrollRestorationCache.set((state) => {\n const keyEntry = (state[restoreKey] =\n state[restoreKey] || ({} as ScrollRestorationByElement))\n\n const elementEntry = (keyEntry[elementSelector] =\n keyEntry[elementSelector] || ({} as ScrollRestorationEntry))\n\n if (elementSelector === 'window') {\n elementEntry.scrollX = window.scrollX || 0\n elementEntry.scrollY = window.scrollY || 0\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n elementEntry.scrollX = element.scrollLeft || 0\n elementEntry.scrollY = element.scrollTop || 0\n }\n }\n\n return state\n })\n }\n\n // Throttle the scroll event to avoid excessive updates\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', throttle(onScroll, 100), true)\n }\n\n router.subscribe('onRendered', (event) => {\n // unobserveDom()\n\n const cacheKey = getKey(event.toLocation)\n\n // If the user doesn't want to restore the scroll position,\n // we don't need to do anything.\n if (!router.resetNextScroll) {\n router.resetNextScroll = true\n return\n }\n\n restoreScroll(\n storageKey,\n cacheKey,\n router.options.scrollRestorationBehavior,\n router.isScrollRestoring,\n router.options.scrollToTopSelectors,\n )\n\n if (router.isScrollRestoring) {\n // Mark the location as having been seen\n scrollRestorationCache.set((state) => {\n state[cacheKey] = state[cacheKey] || ({} as ScrollRestorationByElement)\n\n return state\n })\n }\n })\n}\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n : null\n\n if (!router.isScrollRestoring || !router.isServer) {\n return null\n }\n\n return (\n <ScriptOnce\n children={`(${restoreScroll.toString()})(${JSON.stringify(storageKey)},${JSON.stringify(resolvedKey)}, undefined, true)`}\n log={false}\n />\n )\n}\n"],"names":["storageKey","sessionsStorage","window","sessionStorage","throttle","fn","wait","timeout","args","setTimeout","scrollRestorationCache","state","JSON","parse","getItem","set","updater","functionalUpdate","setItem","stringify","undefined","defaultGetScrollRestorationKey","location","key","href","getCssSelector","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","join","toLowerCase","ignoreScroll","restoreScroll","behavior","shouldScrollRestoration","scrollToTopSelectors","byKey","error","console","resolvedKey","history","elementEntries","elementSelector","entry","scrollTo","top","scrollY","left","scrollX","element","document","querySelector","scrollLeft","scrollTop","hash","split","hashScrollIntoViewOptions","__hashScrollIntoViewOptions","getElementById","scrollIntoView","filter","d","forEach","selector","setupScrollRestoration","router","force","options","scrollRestoration","isScrollRestoring","isScrollRestorationSetup","getKey","getScrollRestorationKey","onScroll","event","target","attrId","getAttribute","restoreKey","keyEntry","elementEntry","addEventListener","subscribe","cacheKey","toLocation","resetNextScroll","scrollRestorationBehavior","ScrollRestoration","useRouter","userKey","latestLocation","isServer","_$createComponent","ScriptOnce","toString","log"],"mappings":"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"}
package/dist/esm/Asset.js CHANGED
@@ -1,5 +1,6 @@
1
- import { template, spread, mergeProps, insert } from "solid-js/web";
2
- var _tmpl$ = /* @__PURE__ */ template(`<title>`), _tmpl$2 = /* @__PURE__ */ template(`<meta>`), _tmpl$3 = /* @__PURE__ */ template(`<link>`), _tmpl$4 = /* @__PURE__ */ template(`<style>`), _tmpl$5 = /* @__PURE__ */ template(`<script>`);
1
+ import { template, spread, mergeProps, createComponent } from "solid-js/web";
2
+ import { Style, Meta, Title } from "@solidjs/meta";
3
+ var _tmpl$ = /* @__PURE__ */ template(`<link>`), _tmpl$2 = /* @__PURE__ */ template(`<script>`);
3
4
  function Asset({
4
5
  tag,
5
6
  attrs,
@@ -7,46 +8,35 @@ function Asset({
7
8
  }) {
8
9
  switch (tag) {
9
10
  case "title":
10
- return (() => {
11
- var _el$ = _tmpl$();
12
- spread(_el$, attrs, false, true);
13
- insert(_el$, children);
14
- return _el$;
15
- })();
11
+ return createComponent(Title, mergeProps(attrs, {
12
+ children
13
+ }));
16
14
  case "meta":
17
- return (() => {
18
- var _el$2 = _tmpl$2();
19
- spread(_el$2, attrs, false, false);
20
- return _el$2;
21
- })();
15
+ return createComponent(Meta, attrs);
22
16
  case "link":
23
17
  return (() => {
24
- var _el$3 = _tmpl$3();
25
- spread(_el$3, attrs, false, false);
26
- return _el$3;
18
+ var _el$ = _tmpl$();
19
+ spread(_el$, attrs, false, false);
20
+ return _el$;
27
21
  })();
28
22
  case "style":
29
- return (() => {
30
- var _el$4 = _tmpl$4();
31
- spread(_el$4, mergeProps(attrs, {
32
- "innerHTML": children
33
- }), false, false);
34
- return _el$4;
35
- })();
23
+ return createComponent(Style, mergeProps(attrs, {
24
+ innerHTML: children
25
+ }));
36
26
  case "script":
37
27
  if (attrs && attrs.src) {
38
28
  return (() => {
39
- var _el$5 = _tmpl$5();
40
- spread(_el$5, attrs, false, false);
41
- return _el$5;
29
+ var _el$2 = _tmpl$2();
30
+ spread(_el$2, attrs, false, false);
31
+ return _el$2;
42
32
  })();
43
33
  }
44
34
  if (typeof children === "string") return (() => {
45
- var _el$6 = _tmpl$5();
46
- spread(_el$6, mergeProps(attrs, {
35
+ var _el$3 = _tmpl$2();
36
+ spread(_el$3, mergeProps(attrs, {
47
37
  "innerHTML": children
48
38
  }), false, false);
49
- return _el$6;
39
+ return _el$3;
50
40
  })();
51
41
  return null;
52
42
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.js","sources":["../../src/Asset.tsx"],"sourcesContent":["import type { RouterManagedTag } from '@tanstack/router-core'\n\nexport function Asset({ tag, attrs, children }: RouterManagedTag): any {\n switch (tag) {\n case 'title':\n return <title {...attrs}>{children}</title>\n case 'meta':\n return <meta {...attrs} />\n case 'link':\n return <link {...attrs} />\n case 'style':\n return <style {...attrs} innerHTML={children} />\n case 'script':\n if ((attrs as any) && (attrs as any).src) {\n return <script {...attrs} />\n }\n if (typeof children === 'string')\n return <script {...attrs} innerHTML={children} />\n return null\n default:\n return null\n }\n}\n"],"names":["Asset","tag","attrs","children","_el$","_tmpl$","_$insert","_el$2","_tmpl$2","_el$3","_tmpl$3","_el$4","_tmpl$4","_$mergeProps","src","_el$5","_tmpl$5","_el$6"],"mappings":";;AAEO,SAASA,MAAM;AAAA,EAAEC;AAAAA,EAAKC;AAAAA,EAAOC;AAA2B,GAAQ;AACrE,UAAQF,KAAG;AAAA,IACT,KAAK;AACH,cAAA,MAAA;AAAA,YAAAG,OAAAC,OAAA;AAAAD,eAAAA,MAAkBF,OAAK,OAAA,IAAA;AAAAI,eAAAF,MAAGD,QAAQ;AAAAC,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACpC,KAAK;AACH,cAAA,MAAA;AAAA,YAAAG,QAAAC,QAAA;AAAAD,eAAAA,OAAiBL,OAAK,OAAA,KAAA;AAAAK,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACxB,KAAK;AACH,cAAA,MAAA;AAAA,YAAAE,QAAAC,QAAA;AAAAD,eAAAA,OAAiBP,OAAK,OAAA,KAAA;AAAAO,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACxB,KAAK;AACH,cAAA,MAAA;AAAA,YAAAE,QAAAC,QAAA;AAAAD,eAAAA,OAAAE,WAAkBX,OAAK;AAAA,UAAA,aAAaC;AAAAA,QAAAA,CAAQ,GAAA,OAAA,KAAA;AAAAQ,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IAC9C,KAAK;AACET,UAAAA,SAAkBA,MAAcY,KAAK;AACxC,gBAAA,MAAA;AAAA,cAAAC,QAAAC,QAAA;AAAAD,iBAAAA,OAAmBb,OAAK,OAAA,KAAA;AAAAa,iBAAAA;AAAAA,QAAAA,GAAA;AAAA,MAAA;AAE1B,UAAI,OAAOZ,aAAa,SACtB,SAAA,MAAA;AAAA,YAAAc,QAAAD,QAAA;AAAAC,eAAAA,OAAAJ,WAAmBX,OAAK;AAAA,UAAA,aAAaC;AAAAA,QAAAA,CAAQ,GAAA,OAAA,KAAA;AAAAc,eAAAA;AAAAA,MAAAA,GAAA;AACxC,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EAAA;AAEb;"}
1
+ {"version":3,"file":"Asset.js","sources":["../../src/Asset.tsx"],"sourcesContent":["import { Meta, Style, Title } from '@solidjs/meta'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport function Asset({ tag, attrs, children }: RouterManagedTag): any {\n switch (tag) {\n case 'title':\n return <Title {...attrs}>{children}</Title>\n case 'meta':\n return <Meta {...attrs} />\n case 'link':\n return <link {...attrs} />\n case 'style':\n return <Style {...attrs} innerHTML={children} />\n case 'script':\n if ((attrs as any) && (attrs as any).src) {\n return <script {...attrs} />\n }\n if (typeof children === 'string')\n return <script {...attrs} innerHTML={children} />\n return null\n default:\n return null\n }\n}\n"],"names":["Asset","tag","attrs","children","_$createComponent","Title","_$mergeProps","Meta","_el$","_tmpl$","Style","innerHTML","src","_el$2","_tmpl$2","_el$3"],"mappings":";;;AAGO,SAASA,MAAM;AAAA,EAAEC;AAAAA,EAAKC;AAAAA,EAAOC;AAA2B,GAAQ;AACrE,UAAQF,KAAG;AAAA,IACT,KAAK;AACHG,aAAAA,gBAAQC,OAAKC,WAAKJ,OAAK;AAAA,QAAAC;AAAAA,MAAAA,CAAW,CAAA;AAAA,IACpC,KAAK;AACHC,aAAAA,gBAAQG,MAASL,KAAK;AAAA,IACxB,KAAK;AACH,cAAA,MAAA;AAAA,YAAAM,OAAAC,OAAA;AAAAD,eAAAA,MAAiBN,OAAK,OAAA,KAAA;AAAAM,eAAAA;AAAAA,MAAAA,GAAA;AAAA,IACxB,KAAK;AACHJ,aAAAA,gBAAQM,OAAKJ,WAAKJ,OAAK;AAAA,QAAES,WAAWR;AAAAA,MAAAA,CAAQ,CAAA;AAAA,IAC9C,KAAK;AACED,UAAAA,SAAkBA,MAAcU,KAAK;AACxC,gBAAA,MAAA;AAAA,cAAAC,QAAAC,QAAA;AAAAD,iBAAAA,OAAmBX,OAAK,OAAA,KAAA;AAAAW,iBAAAA;AAAAA,QAAAA,GAAA;AAAA,MAAA;AAE1B,UAAI,OAAOV,aAAa,SACtB,SAAA,MAAA;AAAA,YAAAY,QAAAD,QAAA;AAAAC,eAAAA,OAAAT,WAAmBJ,OAAK;AAAA,UAAA,aAAaC;AAAAA,QAAAA,CAAQ,GAAA,OAAA,KAAA;AAAAY,eAAAA;AAAAA,MAAAA,GAAA;AACxC,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EAAA;AAEb;"}
@@ -1,8 +1,8 @@
1
1
  import { RouterManagedTag } from '@tanstack/router-core';
2
2
  import * as Solid from 'solid-js';
3
- export declare const useTags: () => RouterManagedTag[];
3
+ export declare const useTags: () => () => RouterManagedTag[];
4
4
  /**
5
5
  * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
6
6
  * It should be rendered in the `<head>` of your document.
7
7
  */
8
- export declare function HeadContent(): Solid.JSX.Element[];
8
+ export declare function HeadContent(): Solid.JSX.Element;
@@ -1,5 +1,6 @@
1
1
  import { createComponent } from "solid-js/web";
2
2
  import * as Solid from "solid-js";
3
+ import { MetaProvider } from "@solidjs/meta";
3
4
  import { Asset } from "./Asset.js";
4
5
  import { useRouter } from "./useRouter.js";
5
6
  import { useRouterState } from "./useRouterState.js";
@@ -47,7 +48,7 @@ const useTags = () => {
47
48
  }
48
49
  resultMeta.reverse();
49
50
  return resultMeta;
50
- }, [routeMeta]);
51
+ });
51
52
  const links = useRouterState({
52
53
  select: (state) => state.matches.map((match) => match.links).filter(Boolean).flat(1).map((link) => ({
53
54
  tag: "link",
@@ -86,13 +87,17 @@ const useTags = () => {
86
87
  children
87
88
  }))
88
89
  });
89
- return uniqBy([...meta(), ...preloadMeta(), ...links(), ...headScripts()], (d) => {
90
+ return () => uniqBy([...meta(), ...preloadMeta(), ...links(), ...headScripts()], (d) => {
90
91
  return JSON.stringify(d);
91
92
  });
92
93
  };
93
94
  function HeadContent() {
94
95
  const tags = useTags();
95
- return tags.map((tag) => createComponent(Asset, tag));
96
+ return createComponent(MetaProvider, {
97
+ get children() {
98
+ return tags().map((tag) => createComponent(Asset, tag));
99
+ }
100
+ });
96
101
  }
97
102
  function uniqBy(arr, fn) {
98
103
  const seen = /* @__PURE__ */ new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.js","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n ;[...routeMeta()].reverse().forEach((metas) => {\n ;[...metas].reverse().forEach((m) => {\n if (!m) return\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n return\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n },\n })\n }\n })\n })\n\n if (title) {\n resultMeta.push(title)\n }\n\n resultMeta.reverse()\n\n return resultMeta\n }, [routeMeta])\n\n const links = useRouterState({\n select: (state) =>\n state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n },\n })) as Array<RouterManagedTag>,\n })\n\n const preloadMeta = useRouterState({\n select: (state) => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n },\n })\n }),\n )\n\n return preloadMeta\n },\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n })\n\n return uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\n ...links(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * It should be rendered in the `<head>` of your document.\n */\nexport function HeadContent() {\n const tags = useTags()\n return tags.map((tag) => <Asset {...tag} />)\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","reverse","forEach","metas","m","tag","children","attribute","name","property","push","attrs","links","flat","link","preloadMeta","looseRoutesById","routeId","route","ssr","manifest","routes","id","preloads","preload","rel","href","headScripts","script","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
1
+ {"version":3,"file":"HeadContent.js","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { MetaProvider } from '@solidjs/meta'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n ;[...routeMeta()].reverse().forEach((metas) => {\n ;[...metas].reverse().forEach((m) => {\n if (!m) return\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n return\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n },\n })\n }\n })\n })\n\n if (title) {\n resultMeta.push(title)\n }\n\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = useRouterState({\n select: (state) =>\n state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n },\n })) as Array<RouterManagedTag>,\n })\n\n const preloadMeta = useRouterState({\n select: (state) => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n },\n })\n }),\n )\n\n return preloadMeta\n },\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n })\n\n return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\n ...links(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * It should be rendered in the `<head>` of your document.\n */\nexport function HeadContent() {\n const tags = useTags()\n return (\n <MetaProvider>\n {tags().map((tag) => (\n <Asset {...tag} />\n ))}\n </MetaProvider>\n )\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","reverse","forEach","metas","m","tag","children","attribute","name","property","push","attrs","links","flat","link","preloadMeta","looseRoutesById","routeId","route","ssr","manifest","routes","id","preloads","preload","rel","href","headScripts","script","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
@@ -46,5 +46,5 @@ export type { NotFoundError } from './not-found.js';
46
46
  export * from './typePrimitives.js';
47
47
  export { ScriptOnce } from './ScriptOnce.js';
48
48
  export { Asset } from './Asset.js';
49
- export { HeadContent } from './HeadContent.js';
49
+ export { HeadContent, useTags } from './HeadContent.js';
50
50
  export { Scripts } from './Scripts.js';
package/dist/esm/index.js CHANGED
@@ -32,7 +32,7 @@ import { useLayoutEffect } from "./utils.js";
32
32
  import { CatchNotFound, DefaultGlobalNotFound, isNotFound, notFound } from "./not-found.js";
33
33
  import { ScriptOnce } from "./ScriptOnce.js";
34
34
  import { Asset } from "./Asset.js";
35
- import { HeadContent } from "./HeadContent.js";
35
+ import { HeadContent, useTags } from "./HeadContent.js";
36
36
  import { Scripts } from "./Scripts.js";
37
37
  export {
38
38
  Asset,
@@ -144,6 +144,7 @@ export {
144
144
  useRouter,
145
145
  useRouterState,
146
146
  useSearch,
147
+ useTags,
147
148
  default3 as warning
148
149
  };
149
150
  //# sourceMappingURL=index.js.map
@@ -3,7 +3,11 @@ import { functionalUpdate } from "@tanstack/router-core";
3
3
  import { useRouter } from "./useRouter.js";
4
4
  import { ScriptOnce } from "./ScriptOnce.js";
5
5
  const storageKey = "tsr-scroll-restoration-v1_3";
6
- const sessionsStorage = typeof window !== "undefined" && window.sessionStorage;
6
+ let sessionsStorage = false;
7
+ try {
8
+ sessionsStorage = typeof window !== "undefined" && typeof window.sessionStorage === "object";
9
+ } catch {
10
+ }
7
11
  const throttle = (fn, wait) => {
8
12
  let timeout;
9
13
  return (...args) => {
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import { functionalUpdate } from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\nimport type { AnyRouter } from './router'\nimport type { NonNullableUpdater, ParsedLocation } from '@tanstack/router-core'\n\nexport type ScrollRestorationEntry = { scrollX: number; scrollY: number }\n\nexport type ScrollRestorationByElement = Record<string, ScrollRestorationEntry>\n\nexport type ScrollRestorationByKey = Record<string, ScrollRestorationByElement>\n\nexport type ScrollRestorationCache = {\n state: ScrollRestorationByKey\n set: (updater: NonNullableUpdater<ScrollRestorationByKey>) => void\n}\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n scrollBehavior?: ScrollToOptions['behavior']\n}\n\nexport const storageKey = 'tsr-scroll-restoration-v1_3'\nconst sessionsStorage = typeof window !== 'undefined' && window.sessionStorage\nconst throttle = (fn: (...args: Array<any>) => void, wait: number) => {\n let timeout: any\n return (...args: Array<any>) => {\n if (!timeout) {\n timeout = setTimeout(() => {\n fn(...args)\n timeout = null\n }, wait)\n }\n }\n}\nexport const scrollRestorationCache: ScrollRestorationCache = sessionsStorage\n ? (() => {\n const state: ScrollRestorationByKey =\n JSON.parse(window.sessionStorage.getItem(storageKey) || 'null') || {}\n\n return {\n state,\n // This setter is simply to make sure that we set the sessionStorage right\n // after the state is updated. It doesn't necessarily need to be a functional\n // update.\n set: (updater) => (\n (scrollRestorationCache.state =\n functionalUpdate(updater, scrollRestorationCache.state) ||\n scrollRestorationCache.state),\n window.sessionStorage.setItem(\n storageKey,\n JSON.stringify(scrollRestorationCache.state),\n )\n ),\n }\n })()\n : (undefined as any)\n/**\n * The default `getKey` function for `useScrollRestoration`.\n * It returns the `key` from the location state or the `href` of the location.\n *\n * The `location.href` is used as a fallback to support the use case where the location state is not available like the initial render.\n */\n\nexport const defaultGetScrollRestorationKey = (location: ParsedLocation) => {\n return location.state.key! || location.href\n}\n\nexport function getCssSelector(el: any): string {\n const path = []\n let parent\n while ((parent = el.parentNode)) {\n path.unshift(\n `${el.tagName}:nth-child(${([].indexOf as any).call(parent.children, el) + 1})`,\n )\n el = parent\n }\n return `${path.join(' > ')}`.toLowerCase()\n}\n\nlet ignoreScroll = false\n\n// NOTE: This function must remain pure and not use any outside variables\n// unless they are passed in as arguments. Why? Because we need to be able to\n// toString() it into a script tag to execute as early as possible in the browser\n// during SSR. Additionally, we also call it from within the router lifecycle\nexport function restoreScroll(\n storageKey: string,\n key?: string,\n behavior?: ScrollToOptions['behavior'],\n shouldScrollRestoration?: boolean,\n scrollToTopSelectors?: Array<string>,\n) {\n let byKey: ScrollRestorationByKey\n\n try {\n byKey = JSON.parse(sessionStorage.getItem(storageKey) || '{}')\n } catch (error: any) {\n console.error(error)\n return\n }\n\n const resolvedKey = key || window.history.state?.key\n const elementEntries = byKey[resolvedKey]\n\n //\n ignoreScroll = true\n\n //\n ;(() => {\n // If we have a cached entry for this location state,\n // we always need to prefer that over the hash scroll.\n if (shouldScrollRestoration && elementEntries) {\n for (const elementSelector in elementEntries) {\n const entry = elementEntries[elementSelector]!\n if (elementSelector === 'window') {\n window.scrollTo({\n top: entry.scrollY,\n left: entry.scrollX,\n behavior,\n })\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n element.scrollLeft = entry.scrollX\n element.scrollTop = entry.scrollY\n }\n }\n }\n\n return\n }\n\n // If we don't have a cached entry for the hash,\n // Which means we've never seen this location before,\n // we need to check if there is a hash in the URL.\n // If there is, we need to scroll it's ID into view.\n const hash = window.location.hash.split('#')[1]\n\n if (hash) {\n const hashScrollIntoViewOptions =\n (window.history.state || {}).__hashScrollIntoViewOptions ?? true\n\n if (hashScrollIntoViewOptions) {\n const el = document.getElementById(hash)\n if (el) {\n el.scrollIntoView(hashScrollIntoViewOptions)\n }\n }\n\n return\n }\n\n // If there is no cached entry for the hash and there is no hash in the URL,\n // we need to scroll to the top of the page for every scrollToTop element\n ;[\n 'window',\n ...(scrollToTopSelectors?.filter((d) => d !== 'window') ?? []),\n ].forEach((selector) => {\n const element =\n selector === 'window' ? window : document.querySelector(selector)\n if (element) {\n element.scrollTo({\n top: 0,\n left: 0,\n behavior,\n })\n }\n })\n })()\n\n //\n ignoreScroll = false\n}\n\nexport function setupScrollRestoration(router: AnyRouter, force?: boolean) {\n const shouldScrollRestoration =\n force ?? router.options.scrollRestoration ?? false\n\n if (shouldScrollRestoration) {\n router.isScrollRestoring = true\n }\n\n if (typeof document === 'undefined' || router.isScrollRestorationSetup) {\n return\n }\n\n router.isScrollRestorationSetup = true\n\n //\n ignoreScroll = false\n\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n\n window.history.scrollRestoration = 'manual'\n\n // // Create a MutationObserver to monitor DOM changes\n // const mutationObserver = new MutationObserver(() => {\n // ;ignoreScroll = true\n // requestAnimationFrame(() => {\n // ;ignoreScroll = false\n\n // // Attempt to restore scroll position on each dom\n // // mutation until the user scrolls. We do this\n // // because dynamic content may come in at different\n // // ticks after the initial render and we want to\n // // keep up with that content as much as possible.\n // // As soon as the user scrolls, we no longer need\n // // to attempt router.\n // // console.log('mutation observer restoreScroll')\n // restoreScroll(\n // storageKey,\n // getKey(router.state.location),\n // router.options.scrollRestorationBehavior,\n // )\n // })\n // })\n\n // const observeDom = () => {\n // // Observe changes to the entire document\n // mutationObserver.observe(document, {\n // childList: true, // Detect added or removed child nodes\n // subtree: true, // Monitor all descendants\n // characterData: true, // Detect text content changes\n // })\n // }\n\n // const unobserveDom = () => {\n // mutationObserver.disconnect()\n // }\n\n // observeDom()\n\n const onScroll = (event: Event) => {\n // unobserveDom()\n\n if (ignoreScroll || !router.isScrollRestoring) {\n return\n }\n\n let elementSelector = ''\n\n if (event.target === document || event.target === window) {\n elementSelector = 'window'\n } else {\n const attrId = (event.target as Element).getAttribute(\n 'data-scroll-restoration-id',\n )\n\n if (attrId) {\n elementSelector = `[data-scroll-restoration-id=\"${attrId}\"]`\n } else {\n elementSelector = getCssSelector(event.target)\n }\n }\n\n const restoreKey = getKey(router.state.location)\n\n scrollRestorationCache.set((state) => {\n const keyEntry = (state[restoreKey] =\n state[restoreKey] || ({} as ScrollRestorationByElement))\n\n const elementEntry = (keyEntry[elementSelector] =\n keyEntry[elementSelector] || ({} as ScrollRestorationEntry))\n\n if (elementSelector === 'window') {\n elementEntry.scrollX = window.scrollX || 0\n elementEntry.scrollY = window.scrollY || 0\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n elementEntry.scrollX = element.scrollLeft || 0\n elementEntry.scrollY = element.scrollTop || 0\n }\n }\n\n return state\n })\n }\n\n // Throttle the scroll event to avoid excessive updates\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', throttle(onScroll, 100), true)\n }\n\n router.subscribe('onRendered', (event) => {\n // unobserveDom()\n\n const cacheKey = getKey(event.toLocation)\n\n // If the user doesn't want to restore the scroll position,\n // we don't need to do anything.\n if (!router.resetNextScroll) {\n router.resetNextScroll = true\n return\n }\n\n restoreScroll(\n storageKey,\n cacheKey,\n router.options.scrollRestorationBehavior,\n router.isScrollRestoring,\n router.options.scrollToTopSelectors,\n )\n\n if (router.isScrollRestoring) {\n // Mark the location as having been seen\n scrollRestorationCache.set((state) => {\n state[cacheKey] = state[cacheKey] || ({} as ScrollRestorationByElement)\n\n return state\n })\n }\n })\n}\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n : null\n\n if (!router.isScrollRestoring || !router.isServer) {\n return null\n }\n\n return (\n <ScriptOnce\n children={`(${restoreScroll.toString()})(${JSON.stringify(storageKey)},${JSON.stringify(resolvedKey)}, undefined, true)`}\n log={false}\n />\n )\n}\n"],"names":["storageKey","sessionsStorage","window","sessionStorage","throttle","fn","wait","timeout","args","setTimeout","scrollRestorationCache","state","JSON","parse","getItem","set","updater","functionalUpdate","setItem","stringify","undefined","defaultGetScrollRestorationKey","location","key","href","getCssSelector","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","join","toLowerCase","ignoreScroll","restoreScroll","behavior","shouldScrollRestoration","scrollToTopSelectors","byKey","error","console","resolvedKey","history","elementEntries","elementSelector","entry","scrollTo","top","scrollY","left","scrollX","element","document","querySelector","scrollLeft","scrollTop","hash","split","hashScrollIntoViewOptions","__hashScrollIntoViewOptions","getElementById","scrollIntoView","filter","d","forEach","selector","setupScrollRestoration","router","force","options","scrollRestoration","isScrollRestoring","isScrollRestorationSetup","getKey","getScrollRestorationKey","onScroll","event","target","attrId","getAttribute","restoreKey","keyEntry","elementEntry","addEventListener","subscribe","cacheKey","toLocation","resetNextScroll","scrollRestorationBehavior","ScrollRestoration","useRouter","userKey","latestLocation","isServer","_$createComponent","ScriptOnce","toString","log"],"mappings":"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"}
1
+ {"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import { functionalUpdate } from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\nimport type { AnyRouter } from './router'\nimport type { NonNullableUpdater, ParsedLocation } from '@tanstack/router-core'\n\nexport type ScrollRestorationEntry = { scrollX: number; scrollY: number }\n\nexport type ScrollRestorationByElement = Record<string, ScrollRestorationEntry>\n\nexport type ScrollRestorationByKey = Record<string, ScrollRestorationByElement>\n\nexport type ScrollRestorationCache = {\n state: ScrollRestorationByKey\n set: (updater: NonNullableUpdater<ScrollRestorationByKey>) => void\n}\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n scrollBehavior?: ScrollToOptions['behavior']\n}\n\nexport const storageKey = 'tsr-scroll-restoration-v1_3'\nlet sessionsStorage = false\ntry {\n sessionsStorage =\n typeof window !== 'undefined' && typeof window.sessionStorage === 'object'\n} catch {}\nconst throttle = (fn: (...args: Array<any>) => void, wait: number) => {\n let timeout: any\n return (...args: Array<any>) => {\n if (!timeout) {\n timeout = setTimeout(() => {\n fn(...args)\n timeout = null\n }, wait)\n }\n }\n}\nexport const scrollRestorationCache: ScrollRestorationCache = sessionsStorage\n ? (() => {\n const state: ScrollRestorationByKey =\n JSON.parse(window.sessionStorage.getItem(storageKey) || 'null') || {}\n\n return {\n state,\n // This setter is simply to make sure that we set the sessionStorage right\n // after the state is updated. It doesn't necessarily need to be a functional\n // update.\n set: (updater) => (\n (scrollRestorationCache.state =\n functionalUpdate(updater, scrollRestorationCache.state) ||\n scrollRestorationCache.state),\n window.sessionStorage.setItem(\n storageKey,\n JSON.stringify(scrollRestorationCache.state),\n )\n ),\n }\n })()\n : (undefined as any)\n/**\n * The default `getKey` function for `useScrollRestoration`.\n * It returns the `key` from the location state or the `href` of the location.\n *\n * The `location.href` is used as a fallback to support the use case where the location state is not available like the initial render.\n */\n\nexport const defaultGetScrollRestorationKey = (location: ParsedLocation) => {\n return location.state.key! || location.href\n}\n\nexport function getCssSelector(el: any): string {\n const path = []\n let parent\n while ((parent = el.parentNode)) {\n path.unshift(\n `${el.tagName}:nth-child(${([].indexOf as any).call(parent.children, el) + 1})`,\n )\n el = parent\n }\n return `${path.join(' > ')}`.toLowerCase()\n}\n\nlet ignoreScroll = false\n\n// NOTE: This function must remain pure and not use any outside variables\n// unless they are passed in as arguments. Why? Because we need to be able to\n// toString() it into a script tag to execute as early as possible in the browser\n// during SSR. Additionally, we also call it from within the router lifecycle\nexport function restoreScroll(\n storageKey: string,\n key?: string,\n behavior?: ScrollToOptions['behavior'],\n shouldScrollRestoration?: boolean,\n scrollToTopSelectors?: Array<string>,\n) {\n let byKey: ScrollRestorationByKey\n\n try {\n byKey = JSON.parse(sessionStorage.getItem(storageKey) || '{}')\n } catch (error: any) {\n console.error(error)\n return\n }\n\n const resolvedKey = key || window.history.state?.key\n const elementEntries = byKey[resolvedKey]\n\n //\n ignoreScroll = true\n\n //\n ;(() => {\n // If we have a cached entry for this location state,\n // we always need to prefer that over the hash scroll.\n if (shouldScrollRestoration && elementEntries) {\n for (const elementSelector in elementEntries) {\n const entry = elementEntries[elementSelector]!\n if (elementSelector === 'window') {\n window.scrollTo({\n top: entry.scrollY,\n left: entry.scrollX,\n behavior,\n })\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n element.scrollLeft = entry.scrollX\n element.scrollTop = entry.scrollY\n }\n }\n }\n\n return\n }\n\n // If we don't have a cached entry for the hash,\n // Which means we've never seen this location before,\n // we need to check if there is a hash in the URL.\n // If there is, we need to scroll it's ID into view.\n const hash = window.location.hash.split('#')[1]\n\n if (hash) {\n const hashScrollIntoViewOptions =\n (window.history.state || {}).__hashScrollIntoViewOptions ?? true\n\n if (hashScrollIntoViewOptions) {\n const el = document.getElementById(hash)\n if (el) {\n el.scrollIntoView(hashScrollIntoViewOptions)\n }\n }\n\n return\n }\n\n // If there is no cached entry for the hash and there is no hash in the URL,\n // we need to scroll to the top of the page for every scrollToTop element\n ;[\n 'window',\n ...(scrollToTopSelectors?.filter((d) => d !== 'window') ?? []),\n ].forEach((selector) => {\n const element =\n selector === 'window' ? window : document.querySelector(selector)\n if (element) {\n element.scrollTo({\n top: 0,\n left: 0,\n behavior,\n })\n }\n })\n })()\n\n //\n ignoreScroll = false\n}\n\nexport function setupScrollRestoration(router: AnyRouter, force?: boolean) {\n const shouldScrollRestoration =\n force ?? router.options.scrollRestoration ?? false\n\n if (shouldScrollRestoration) {\n router.isScrollRestoring = true\n }\n\n if (typeof document === 'undefined' || router.isScrollRestorationSetup) {\n return\n }\n\n router.isScrollRestorationSetup = true\n\n //\n ignoreScroll = false\n\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n\n window.history.scrollRestoration = 'manual'\n\n // // Create a MutationObserver to monitor DOM changes\n // const mutationObserver = new MutationObserver(() => {\n // ;ignoreScroll = true\n // requestAnimationFrame(() => {\n // ;ignoreScroll = false\n\n // // Attempt to restore scroll position on each dom\n // // mutation until the user scrolls. We do this\n // // because dynamic content may come in at different\n // // ticks after the initial render and we want to\n // // keep up with that content as much as possible.\n // // As soon as the user scrolls, we no longer need\n // // to attempt router.\n // // console.log('mutation observer restoreScroll')\n // restoreScroll(\n // storageKey,\n // getKey(router.state.location),\n // router.options.scrollRestorationBehavior,\n // )\n // })\n // })\n\n // const observeDom = () => {\n // // Observe changes to the entire document\n // mutationObserver.observe(document, {\n // childList: true, // Detect added or removed child nodes\n // subtree: true, // Monitor all descendants\n // characterData: true, // Detect text content changes\n // })\n // }\n\n // const unobserveDom = () => {\n // mutationObserver.disconnect()\n // }\n\n // observeDom()\n\n const onScroll = (event: Event) => {\n // unobserveDom()\n\n if (ignoreScroll || !router.isScrollRestoring) {\n return\n }\n\n let elementSelector = ''\n\n if (event.target === document || event.target === window) {\n elementSelector = 'window'\n } else {\n const attrId = (event.target as Element).getAttribute(\n 'data-scroll-restoration-id',\n )\n\n if (attrId) {\n elementSelector = `[data-scroll-restoration-id=\"${attrId}\"]`\n } else {\n elementSelector = getCssSelector(event.target)\n }\n }\n\n const restoreKey = getKey(router.state.location)\n\n scrollRestorationCache.set((state) => {\n const keyEntry = (state[restoreKey] =\n state[restoreKey] || ({} as ScrollRestorationByElement))\n\n const elementEntry = (keyEntry[elementSelector] =\n keyEntry[elementSelector] || ({} as ScrollRestorationEntry))\n\n if (elementSelector === 'window') {\n elementEntry.scrollX = window.scrollX || 0\n elementEntry.scrollY = window.scrollY || 0\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n elementEntry.scrollX = element.scrollLeft || 0\n elementEntry.scrollY = element.scrollTop || 0\n }\n }\n\n return state\n })\n }\n\n // Throttle the scroll event to avoid excessive updates\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', throttle(onScroll, 100), true)\n }\n\n router.subscribe('onRendered', (event) => {\n // unobserveDom()\n\n const cacheKey = getKey(event.toLocation)\n\n // If the user doesn't want to restore the scroll position,\n // we don't need to do anything.\n if (!router.resetNextScroll) {\n router.resetNextScroll = true\n return\n }\n\n restoreScroll(\n storageKey,\n cacheKey,\n router.options.scrollRestorationBehavior,\n router.isScrollRestoring,\n router.options.scrollToTopSelectors,\n )\n\n if (router.isScrollRestoring) {\n // Mark the location as having been seen\n scrollRestorationCache.set((state) => {\n state[cacheKey] = state[cacheKey] || ({} as ScrollRestorationByElement)\n\n return state\n })\n }\n })\n}\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n : null\n\n if (!router.isScrollRestoring || !router.isServer) {\n return null\n }\n\n return (\n <ScriptOnce\n children={`(${restoreScroll.toString()})(${JSON.stringify(storageKey)},${JSON.stringify(resolvedKey)}, undefined, true)`}\n log={false}\n />\n )\n}\n"],"names":["storageKey","sessionsStorage","window","sessionStorage","throttle","fn","wait","timeout","args","setTimeout","scrollRestorationCache","state","JSON","parse","getItem","set","updater","functionalUpdate","setItem","stringify","undefined","defaultGetScrollRestorationKey","location","key","href","getCssSelector","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","join","toLowerCase","ignoreScroll","restoreScroll","behavior","shouldScrollRestoration","scrollToTopSelectors","byKey","error","console","resolvedKey","history","elementEntries","elementSelector","entry","scrollTo","top","scrollY","left","scrollX","element","document","querySelector","scrollLeft","scrollTop","hash","split","hashScrollIntoViewOptions","__hashScrollIntoViewOptions","getElementById","scrollIntoView","filter","d","forEach","selector","setupScrollRestoration","router","force","options","scrollRestoration","isScrollRestoring","isScrollRestorationSetup","getKey","getScrollRestorationKey","onScroll","event","target","attrId","getAttribute","restoreKey","keyEntry","elementEntry","addEventListener","subscribe","cacheKey","toLocation","resetNextScroll","scrollRestorationBehavior","ScrollRestoration","useRouter","userKey","latestLocation","isServer","_$createComponent","ScriptOnce","toString","log"],"mappings":"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"}
@@ -1,13 +1,14 @@
1
+ import { Meta, Style, Title } from '@solidjs/meta';
1
2
  export function Asset({ tag, attrs, children }) {
2
3
  switch (tag) {
3
4
  case 'title':
4
- return <title {...attrs}>{children}</title>;
5
+ return <Title {...attrs}>{children}</Title>;
5
6
  case 'meta':
6
- return <meta {...attrs}/>;
7
+ return <Meta {...attrs}/>;
7
8
  case 'link':
8
9
  return <link {...attrs}/>;
9
10
  case 'style':
10
- return <style {...attrs} innerHTML={children}/>;
11
+ return <Style {...attrs} innerHTML={children}/>;
11
12
  case 'script':
12
13
  if (attrs && attrs.src) {
13
14
  return <script {...attrs}/>;
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"AAEA,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAoB;IAC9D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;QAC7C,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;QAClD,KAAK,QAAQ;YACX,IAAK,KAAa,IAAK,KAAa,CAAC,GAAG,EAAE,CAAC;gBACzC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;YAC9B,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;YACnD,OAAO,IAAI,CAAA;QACb;YACE,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAGlD,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAoB;IAC9D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;QAC7C,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;QAClD,KAAK,QAAQ;YACX,IAAK,KAAa,IAAK,KAAa,CAAC,GAAG,EAAE,CAAC;gBACzC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;YAC9B,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;YACnD,OAAO,IAAI,CAAA;QACb;YACE,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import * as Solid from 'solid-js';
2
2
  import type { RouterManagedTag } from '@tanstack/router-core';
3
- export declare const useTags: () => RouterManagedTag[];
3
+ export declare const useTags: () => () => RouterManagedTag[];
4
4
  /**
5
5
  * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
6
6
  * It should be rendered in the `<head>` of your document.
7
7
  */
8
- export declare function HeadContent(): Solid.JSX.Element[];
8
+ export declare function HeadContent(): Solid.JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import * as Solid from 'solid-js';
2
+ import { MetaProvider } from '@solidjs/meta';
2
3
  import { Asset } from './Asset';
3
4
  import { useRouter } from './useRouter';
4
5
  import { useRouterState } from './useRouterState';
@@ -50,7 +51,7 @@ export const useTags = () => {
50
51
  }
51
52
  resultMeta.reverse();
52
53
  return resultMeta;
53
- }, [routeMeta]);
54
+ });
54
55
  const links = useRouterState({
55
56
  select: (state) => state.matches
56
57
  .map((match) => match.links)
@@ -94,7 +95,7 @@ export const useTags = () => {
94
95
  children,
95
96
  })),
96
97
  });
97
- return uniqBy([
98
+ return () => uniqBy([
98
99
  ...meta(),
99
100
  ...preloadMeta(),
100
101
  ...links(),
@@ -109,7 +110,9 @@ export const useTags = () => {
109
110
  */
110
111
  export function HeadContent() {
111
112
  const tags = useTags();
112
- return tags.map((tag) => <Asset {...tag}/>);
113
+ return (<MetaProvider>
114
+ {tags().map((tag) => (<Asset {...tag}/>))}
115
+ </MetaProvider>);
113
116
  }
114
117
  function uniqBy(arr, fn) {
115
118
  const seen = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"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"}
@@ -46,5 +46,5 @@ export type { NotFoundError } from './not-found';
46
46
  export * from './typePrimitives';
47
47
  export { ScriptOnce } from './ScriptOnce';
48
48
  export { Asset } from './Asset';
49
- export { HeadContent } from './HeadContent';
49
+ export { HeadContent, useTags } from './HeadContent';
50
50
  export { Scripts } from './Scripts';
@@ -36,6 +36,6 @@ export { notFound, isNotFound, CatchNotFound, DefaultGlobalNotFound, } from './n
36
36
  export * from './typePrimitives';
37
37
  export { ScriptOnce } from './ScriptOnce';
38
38
  export { Asset } from './Asset';
39
- export { HeadContent } from './HeadContent';
39
+ export { HeadContent, useTags } from './HeadContent';
40
40
  export { Scripts } from './Scripts';
41
41
  //# sourceMappingURL=index.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
@@ -2,7 +2,12 @@ import { functionalUpdate } from '@tanstack/router-core';
2
2
  import { useRouter } from './useRouter';
3
3
  import { ScriptOnce } from './ScriptOnce';
4
4
  export const storageKey = 'tsr-scroll-restoration-v1_3';
5
- const sessionsStorage = typeof window !== 'undefined' && window.sessionStorage;
5
+ let sessionsStorage = false;
6
+ try {
7
+ sessionsStorage =
8
+ typeof window !== 'undefined' && typeof window.sessionStorage === 'object';
9
+ }
10
+ catch { }
6
11
  const throttle = (fn, wait) => {
7
12
  let timeout;
8
13
  return (...args) => {
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-restoration.jsx","sourceRoot":"","sources":["../../src/scroll-restoration.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAmBzC,MAAM,CAAC,MAAM,UAAU,GAAG,6BAA6B,CAAA;AACvD,MAAM,eAAe,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,CAAA;AAC9E,MAAM,QAAQ,GAAG,CAAC,EAAiC,EAAE,IAAY,EAAE,EAAE;IACnE,IAAI,OAAY,CAAA;IAChB,OAAO,CAAC,GAAG,IAAgB,EAAE,EAAE;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;gBACX,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;IACH,CAAC,CAAA;AACH,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,sBAAsB,GAA2B,eAAe;IAC3E,CAAC,CAAC,CAAC,GAAG,EAAE;QACJ,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAA;QAEvE,OAAO;YACL,KAAK;YACL,0EAA0E;YAC1E,6EAA6E;YAC7E,UAAU;YACV,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAChB,CAAC,sBAAsB,CAAC,KAAK;gBAC3B,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC;oBACvD,sBAAsB,CAAC,KAAK,CAAC;gBAC/B,MAAM,CAAC,cAAc,CAAC,OAAO,CAC3B,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAC7C,CACF;SACF,CAAA;IACH,CAAC,CAAC,EAAE;IACN,CAAC,CAAE,SAAiB,CAAA;AACtB;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,QAAwB,EAAE,EAAE;IACzE,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAI,IAAI,QAAQ,CAAC,IAAI,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,EAAO;IACpC,MAAM,IAAI,GAAG,EAAE,CAAA;IACf,IAAI,MAAM,CAAA;IACV,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CACV,GAAG,EAAE,CAAC,OAAO,cAAe,EAAE,CAAC,OAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAChF,CAAA;QACD,EAAE,GAAG,MAAM,CAAA;IACb,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAA;AAC5C,CAAC;AAED,IAAI,YAAY,GAAG,KAAK,CAAA;AAExB,yEAAyE;AACzE,6EAA6E;AAC7E,iFAAiF;AACjF,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,GAAY,EACZ,QAAsC,EACtC,uBAAiC,EACjC,oBAAoC;IAEpC,IAAI,KAA6B,CAAA;IAEjC,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAA;IAChE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACpB,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAA;IACpD,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,CAAA;IAEzC,EAAE;IACF,YAAY,GAAG,IAAI,CAGlB;IAAA,CAAC,GAAG,EAAE;QACL,qDAAqD;QACrD,sDAAsD;QACtD,IAAI,uBAAuB,IAAI,cAAc,EAAE,CAAC;YAC9C,KAAK,MAAM,eAAe,IAAI,cAAc,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,eAAe,CAAE,CAAA;gBAC9C,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,CAAC,QAAQ,CAAC;wBACd,GAAG,EAAE,KAAK,CAAC,OAAO;wBAClB,IAAI,EAAE,KAAK,CAAC,OAAO;wBACnB,QAAQ;qBACT,CAAC,CAAA;gBACJ,CAAC;qBAAM,IAAI,eAAe,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;oBACvD,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAA;wBAClC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAA;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAM;QACR,CAAC;QAED,gDAAgD;QAChD,qDAAqD;QACrD,kDAAkD;QAClD,oDAAoD;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAE/C,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,yBAAyB,GAC7B,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,2BAA2B,IAAI,IAAI,CAAA;YAElE,IAAI,yBAAyB,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACxC,IAAI,EAAE,EAAE,CAAC;oBACP,EAAE,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;YAED,OAAM;QACR,CAAC;QAED,4EAA4E;QAC5E,yEAAyE;QACzE,CAAC;QAAA;YACC,QAAQ;YACR,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC/D,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACrB,MAAM,OAAO,GACX,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YACnE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,QAAQ,CAAC;oBACf,GAAG,EAAE,CAAC;oBACN,IAAI,EAAE,CAAC;oBACP,QAAQ;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,EAAE,CAAA;IAEJ,EAAE;IACF,YAAY,GAAG,KAAK,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,KAAe;IACvE,MAAM,uBAAuB,GAC3B,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,IAAI,KAAK,CAAA;IAEpD,IAAI,uBAAuB,EAAE,CAAC;QAC5B,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAA;IACjC,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,wBAAwB,EAAE,CAAC;QACvE,OAAM;IACR,CAAC;IAED,MAAM,CAAC,wBAAwB,GAAG,IAAI,CAAA;IAEtC,EAAE;IACF,YAAY,GAAG,KAAK,CAAA;IAEpB,MAAM,MAAM,GACV,MAAM,CAAC,OAAO,CAAC,uBAAuB,IAAI,8BAA8B,CAAA;IAE1E,MAAM,CAAC,OAAO,CAAC,iBAAiB,GAAG,QAAQ,CAAA;IAE3C,sDAAsD;IACtD,wDAAwD;IACxD,yBAAyB;IACzB,kCAAkC;IAClC,4BAA4B;IAE5B,wDAAwD;IACxD,qDAAqD;IACrD,0DAA0D;IAC1D,uDAAuD;IACvD,wDAAwD;IACxD,wDAAwD;IACxD,4BAA4B;IAC5B,wDAAwD;IACxD,qBAAqB;IACrB,oBAAoB;IACpB,uCAAuC;IACvC,kDAAkD;IAClD,QAAQ;IACR,OAAO;IACP,KAAK;IAEL,6BAA6B;IAC7B,8CAA8C;IAC9C,yCAAyC;IACzC,8DAA8D;IAC9D,gDAAgD;IAChD,0DAA0D;IAC1D,OAAO;IACP,IAAI;IAEJ,+BAA+B;IAC/B,kCAAkC;IAClC,IAAI;IAEJ,eAAe;IAEf,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,EAAE;QAChC,iBAAiB;QAEjB,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC9C,OAAM;QACR,CAAC;QAED,IAAI,eAAe,GAAG,EAAE,CAAA;QAExB,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzD,eAAe,GAAG,QAAQ,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAI,KAAK,CAAC,MAAkB,CAAC,YAAY,CACnD,4BAA4B,CAC7B,CAAA;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,eAAe,GAAG,gCAAgC,MAAM,IAAI,CAAA;YAC9D,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAEhD,sBAAsB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;gBACjC,KAAK,CAAC,UAAU,CAAC,IAAK,EAAiC,CAAC,CAAA;YAE1D,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC7C,QAAQ,CAAC,eAAe,CAAC,IAAK,EAA6B,CAAC,CAAA;YAE9D,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACjC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAA;gBAC1C,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAA;YAC5C,CAAC;iBAAM,IAAI,eAAe,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;gBACvD,IAAI,OAAO,EAAE,CAAC;oBACZ,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAA;oBAC9C,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,uDAAuD;IACvD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;QACvC,iBAAiB;QAEjB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAEzC,2DAA2D;QAC3D,gCAAgC;QAChC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,CAAC,eAAe,GAAG,IAAI,CAAA;YAC7B,OAAM;QACR,CAAC;QAED,aAAa,CACX,UAAU,EACV,QAAQ,EACR,MAAM,CAAC,OAAO,CAAC,yBAAyB,EACxC,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,OAAO,CAAC,oBAAoB,CACpC,CAAA;QAED,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC7B,wCAAwC;YACxC,sBAAsB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACnC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAK,EAAiC,CAAA;gBAEvE,OAAO,KAAK,CAAA;YACd,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,MAAM,GACV,MAAM,CAAC,OAAO,CAAC,uBAAuB,IAAI,8BAA8B,CAAA;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAC7C,MAAM,WAAW,GACf,OAAO,KAAK,8BAA8B,CAAC,MAAM,CAAC,cAAc,CAAC;QAC/D,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,IAAI,CAAA;IAEV,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,CAAC,UAAU,CACT,QAAQ,CAAC,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC,CACzH,GAAG,CAAC,CAAC,KAAK,CAAC,EACX,CACH,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"scroll-restoration.jsx","sourceRoot":"","sources":["../../src/scroll-restoration.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-router",
3
- "version": "1.112.0",
3
+ "version": "1.112.7",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -55,12 +55,13 @@
55
55
  "dependencies": {
56
56
  "@solid-devtools/logger": "^0.9.4",
57
57
  "@solid-primitives/refs": "^1.0.8",
58
+ "@solidjs/meta": "^0.29.4",
58
59
  "@tanstack/solid-store": "^0.7.0",
59
60
  "jsesc": "^3.0.2",
60
61
  "tiny-invariant": "^1.3.3",
61
62
  "tiny-warning": "^1.0.3",
62
- "@tanstack/history": "1.99.13",
63
- "@tanstack/router-core": "1.112.0"
63
+ "@tanstack/router-core": "1.112.0",
64
+ "@tanstack/history": "1.99.13"
64
65
  },
65
66
  "devDependencies": {
66
67
  "@solidjs/testing-library": "^0.8.10",
@@ -68,12 +69,12 @@
68
69
  "@types/jsesc": "^3.0.3",
69
70
  "combinate": "^1.1.11",
70
71
  "eslint-plugin-solid": "^0.14.5",
71
- "solid-js": "^1",
72
+ "solid-js": "^1.9.5",
72
73
  "vite-plugin-solid": "^2.11.2",
73
74
  "zod": "^3.23.8"
74
75
  },
75
76
  "peerDependencies": {
76
- "solid-js": "^1"
77
+ "solid-js": "^1.9.5"
77
78
  },
78
79
  "scripts": {}
79
80
  }
package/src/Asset.tsx CHANGED
@@ -1,15 +1,16 @@
1
+ import { Meta, Style, Title } from '@solidjs/meta'
1
2
  import type { RouterManagedTag } from '@tanstack/router-core'
2
3
 
3
4
  export function Asset({ tag, attrs, children }: RouterManagedTag): any {
4
5
  switch (tag) {
5
6
  case 'title':
6
- return <title {...attrs}>{children}</title>
7
+ return <Title {...attrs}>{children}</Title>
7
8
  case 'meta':
8
- return <meta {...attrs} />
9
+ return <Meta {...attrs} />
9
10
  case 'link':
10
11
  return <link {...attrs} />
11
12
  case 'style':
12
- return <style {...attrs} innerHTML={children} />
13
+ return <Style {...attrs} innerHTML={children} />
13
14
  case 'script':
14
15
  if ((attrs as any) && (attrs as any).src) {
15
16
  return <script {...attrs} />
@@ -1,4 +1,5 @@
1
1
  import * as Solid from 'solid-js'
2
+ import { MetaProvider } from '@solidjs/meta'
2
3
  import { Asset } from './Asset'
3
4
  import { useRouter } from './useRouter'
4
5
  import { useRouterState } from './useRouterState'
@@ -55,7 +56,7 @@ export const useTags = () => {
55
56
  resultMeta.reverse()
56
57
 
57
58
  return resultMeta
58
- }, [routeMeta])
59
+ })
59
60
 
60
61
  const links = useRouterState({
61
62
  select: (state) =>
@@ -111,17 +112,18 @@ export const useTags = () => {
111
112
  })),
112
113
  })
113
114
 
114
- return uniqBy(
115
- [
116
- ...meta(),
117
- ...preloadMeta(),
118
- ...links(),
119
- ...headScripts(),
120
- ] as Array<RouterManagedTag>,
121
- (d) => {
122
- return JSON.stringify(d)
123
- },
124
- )
115
+ return () =>
116
+ uniqBy(
117
+ [
118
+ ...meta(),
119
+ ...preloadMeta(),
120
+ ...links(),
121
+ ...headScripts(),
122
+ ] as Array<RouterManagedTag>,
123
+ (d) => {
124
+ return JSON.stringify(d)
125
+ },
126
+ )
125
127
  }
126
128
 
127
129
  /**
@@ -130,7 +132,13 @@ export const useTags = () => {
130
132
  */
131
133
  export function HeadContent() {
132
134
  const tags = useTags()
133
- return tags.map((tag) => <Asset {...tag} />)
135
+ return (
136
+ <MetaProvider>
137
+ {tags().map((tag) => (
138
+ <Asset {...tag} />
139
+ ))}
140
+ </MetaProvider>
141
+ )
134
142
  }
135
143
 
136
144
  function uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {
package/src/index.tsx CHANGED
@@ -350,5 +350,5 @@ export * from './typePrimitives'
350
350
  export { ScriptOnce } from './ScriptOnce'
351
351
 
352
352
  export { Asset } from './Asset'
353
- export { HeadContent } from './HeadContent'
353
+ export { HeadContent, useTags } from './HeadContent'
354
354
  export { Scripts } from './Scripts'
@@ -20,7 +20,11 @@ export type ScrollRestorationOptions = {
20
20
  }
21
21
 
22
22
  export const storageKey = 'tsr-scroll-restoration-v1_3'
23
- const sessionsStorage = typeof window !== 'undefined' && window.sessionStorage
23
+ let sessionsStorage = false
24
+ try {
25
+ sessionsStorage =
26
+ typeof window !== 'undefined' && typeof window.sessionStorage === 'object'
27
+ } catch {}
24
28
  const throttle = (fn: (...args: Array<any>) => void, wait: number) => {
25
29
  let timeout: any
26
30
  return (...args: Array<any>) => {