@tanstack/solid-router 1.166.7 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Asset.cjs +111 -68
- package/dist/cjs/Asset.cjs.map +1 -1
- package/dist/cjs/CatchBoundary.cjs +15 -15
- package/dist/cjs/CatchBoundary.cjs.map +1 -1
- package/dist/cjs/ClientOnly.cjs +2 -2
- package/dist/cjs/ClientOnly.cjs.map +1 -1
- package/dist/cjs/HeadContent.cjs +16 -8
- package/dist/cjs/HeadContent.cjs.map +1 -1
- package/dist/cjs/HeadContent.dev.cjs +18 -10
- package/dist/cjs/HeadContent.dev.cjs.map +1 -1
- package/dist/cjs/Match.cjs +125 -81
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/Matches.cjs +23 -16
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/RouterProvider.cjs +3 -2
- package/dist/cjs/RouterProvider.cjs.map +1 -1
- package/dist/cjs/SafeFragment.cjs +1 -1
- package/dist/cjs/ScriptOnce.cjs +4 -2
- package/dist/cjs/ScriptOnce.cjs.map +1 -1
- package/dist/cjs/Scripts.cjs +6 -2
- package/dist/cjs/Scripts.cjs.map +1 -1
- package/dist/cjs/Transitioner.cjs +11 -16
- package/dist/cjs/Transitioner.cjs.map +1 -1
- package/dist/cjs/awaited.cjs +20 -16
- package/dist/cjs/awaited.cjs.map +1 -1
- package/dist/cjs/lazyRouteComponent.cjs +3 -3
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
- package/dist/cjs/link.cjs +40 -22
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/cjs/not-found.cjs +1 -1
- package/dist/cjs/renderRouteNotFound.cjs +1 -1
- package/dist/cjs/route.cjs +1 -1
- package/dist/cjs/scroll-restoration.cjs +1 -1
- package/dist/cjs/ssr/RouterClient.cjs +4 -23
- package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
- package/dist/cjs/ssr/RouterServer.cjs +4 -47
- package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
- package/dist/cjs/ssr/RouterServer.d.cts +0 -1
- package/dist/cjs/ssr/defaultRenderHandler.cjs +1 -1
- package/dist/cjs/ssr/defaultStreamHandler.cjs +1 -1
- package/dist/cjs/ssr/renderRouterToStream.cjs +2 -3
- package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToString.cjs +2 -2
- package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToString.d.cts +1 -1
- package/dist/cjs/useBlocker.cjs +9 -5
- package/dist/cjs/useBlocker.cjs.map +1 -1
- package/dist/cjs/useMatch.cjs +3 -6
- package/dist/cjs/useMatch.cjs.map +1 -1
- package/dist/cjs/useNavigate.cjs +1 -1
- package/dist/cjs/useNavigate.cjs.map +1 -1
- package/dist/cjs/useRouterState.cjs +19 -9
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/cjs/utils.cjs +2 -4
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/cjs/utils.d.cts +1 -0
- package/dist/esm/Asset.js +111 -68
- package/dist/esm/Asset.js.map +1 -1
- package/dist/esm/CatchBoundary.js +15 -15
- package/dist/esm/CatchBoundary.js.map +1 -1
- package/dist/esm/ClientOnly.js +2 -2
- package/dist/esm/ClientOnly.js.map +1 -1
- package/dist/esm/HeadContent.dev.js +18 -10
- package/dist/esm/HeadContent.dev.js.map +1 -1
- package/dist/esm/HeadContent.js +16 -8
- package/dist/esm/HeadContent.js.map +1 -1
- package/dist/esm/Match.js +89 -45
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Matches.js +23 -16
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/RouterProvider.js +3 -2
- package/dist/esm/RouterProvider.js.map +1 -1
- package/dist/esm/SafeFragment.js +1 -1
- package/dist/esm/ScriptOnce.js +4 -2
- package/dist/esm/ScriptOnce.js.map +1 -1
- package/dist/esm/Scripts.js +6 -2
- package/dist/esm/Scripts.js.map +1 -1
- package/dist/esm/Transitioner.js +11 -16
- package/dist/esm/Transitioner.js.map +1 -1
- package/dist/esm/awaited.js +18 -14
- package/dist/esm/awaited.js.map +1 -1
- package/dist/esm/lazyRouteComponent.js +3 -3
- package/dist/esm/lazyRouteComponent.js.map +1 -1
- package/dist/esm/link.js +39 -21
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/not-found.js +1 -1
- package/dist/esm/renderRouteNotFound.js +1 -1
- package/dist/esm/route.js +1 -1
- package/dist/esm/scroll-restoration.js +1 -1
- package/dist/esm/ssr/RouterClient.js +4 -23
- package/dist/esm/ssr/RouterClient.js.map +1 -1
- package/dist/esm/ssr/RouterServer.d.ts +0 -1
- package/dist/esm/ssr/RouterServer.js +5 -48
- package/dist/esm/ssr/RouterServer.js.map +1 -1
- package/dist/esm/ssr/defaultRenderHandler.js +1 -1
- package/dist/esm/ssr/defaultStreamHandler.js +1 -1
- package/dist/esm/ssr/renderRouterToStream.js +2 -4
- package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
- package/dist/esm/ssr/renderRouterToString.d.ts +1 -1
- package/dist/esm/ssr/renderRouterToString.js +2 -2
- package/dist/esm/ssr/renderRouterToString.js.map +1 -1
- package/dist/esm/useBlocker.js +9 -5
- package/dist/esm/useBlocker.js.map +1 -1
- package/dist/esm/useMatch.js +3 -6
- package/dist/esm/useMatch.js.map +1 -1
- package/dist/esm/useNavigate.js +1 -1
- package/dist/esm/useNavigate.js.map +1 -1
- package/dist/esm/useRouterState.js +19 -9
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/esm/utils.d.ts +1 -0
- package/dist/esm/utils.js +2 -4
- package/dist/esm/utils.js.map +1 -1
- package/dist/source/Asset.jsx +58 -35
- package/dist/source/Asset.jsx.map +1 -1
- package/dist/source/CatchBoundary.jsx +9 -5
- package/dist/source/CatchBoundary.jsx.map +1 -1
- package/dist/source/ClientOnly.jsx +1 -1
- package/dist/source/ClientOnly.jsx.map +1 -1
- package/dist/source/HeadContent.dev.jsx +8 -6
- package/dist/source/HeadContent.dev.jsx.map +1 -1
- package/dist/source/HeadContent.jsx +6 -4
- package/dist/source/HeadContent.jsx.map +1 -1
- package/dist/source/Match.jsx +76 -35
- package/dist/source/Match.jsx.map +1 -1
- package/dist/source/Matches.jsx +25 -17
- package/dist/source/Matches.jsx.map +1 -1
- package/dist/source/RouterProvider.jsx +2 -3
- package/dist/source/RouterProvider.jsx.map +1 -1
- package/dist/source/Scripts.jsx +4 -3
- package/dist/source/Scripts.jsx.map +1 -1
- package/dist/source/Transitioner.jsx +15 -16
- package/dist/source/Transitioner.jsx.map +1 -1
- package/dist/source/awaited.jsx +7 -8
- package/dist/source/awaited.jsx.map +1 -1
- package/dist/source/lazyRouteComponent.jsx +3 -3
- package/dist/source/lazyRouteComponent.jsx.map +1 -1
- package/dist/source/link.jsx +53 -48
- package/dist/source/link.jsx.map +1 -1
- package/dist/source/ssr/RouterClient.jsx +1 -13
- package/dist/source/ssr/RouterClient.jsx.map +1 -1
- package/dist/source/ssr/RouterServer.d.ts +0 -1
- package/dist/source/ssr/RouterServer.jsx +1 -34
- package/dist/source/ssr/RouterServer.jsx.map +1 -1
- package/dist/source/ssr/renderRouterToStream.jsx +2 -6
- package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
- package/dist/source/ssr/renderRouterToString.d.ts +1 -1
- package/dist/source/ssr/renderRouterToString.jsx +2 -2
- package/dist/source/ssr/renderRouterToString.jsx.map +1 -1
- package/dist/source/useBlocker.jsx +8 -4
- package/dist/source/useBlocker.jsx.map +1 -1
- package/dist/source/useMatch.jsx +3 -8
- package/dist/source/useMatch.jsx.map +1 -1
- package/dist/source/useNavigate.jsx +1 -1
- package/dist/source/useNavigate.jsx.map +1 -1
- package/dist/source/useRouterState.jsx +30 -10
- package/dist/source/useRouterState.jsx.map +1 -1
- package/dist/source/utils.d.ts +1 -0
- package/dist/source/utils.js +3 -4
- package/dist/source/utils.js.map +1 -1
- package/package.json +7 -6
- package/src/Asset.tsx +123 -95
- package/src/CatchBoundary.tsx +9 -7
- package/src/ClientOnly.tsx +8 -3
- package/src/HeadContent.dev.tsx +16 -11
- package/src/HeadContent.tsx +6 -4
- package/src/Match.tsx +112 -44
- package/src/Matches.tsx +39 -30
- package/src/RouterProvider.tsx +7 -4
- package/src/Scripts.tsx +4 -3
- package/src/Transitioner.tsx +51 -58
- package/src/awaited.tsx +11 -12
- package/src/lazyRouteComponent.tsx +3 -3
- package/src/link.tsx +68 -60
- package/src/ssr/RouterClient.tsx +1 -22
- package/src/ssr/RouterServer.tsx +1 -53
- package/src/ssr/renderRouterToStream.tsx +5 -15
- package/src/ssr/renderRouterToString.tsx +2 -2
- package/src/useBlocker.tsx +8 -4
- package/src/useMatch.tsx +6 -11
- package/src/useNavigate.tsx +1 -1
- package/src/useRouterState.tsx +44 -22
- package/src/utils.ts +5 -4
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createMemo, createSignal, onCleanup } from "solid-js";
|
|
2
2
|
import { isServer } from "@tanstack/router-core/isServer";
|
|
3
3
|
import { useRouter } from "./useRouter.js";
|
|
4
4
|
function deepEqual(a, b) {
|
|
5
5
|
if (Object.is(a, b)) return true;
|
|
6
|
+
if (isPromiseLike(a) || isPromiseLike(b)) return false;
|
|
6
7
|
if (typeof a !== "object" || a === null || typeof b !== "object" || b === null) {
|
|
7
8
|
return false;
|
|
8
9
|
}
|
|
@@ -15,6 +16,9 @@ function deepEqual(a, b) {
|
|
|
15
16
|
}
|
|
16
17
|
return true;
|
|
17
18
|
}
|
|
19
|
+
function isPromiseLike(value) {
|
|
20
|
+
return !!value && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
|
|
21
|
+
}
|
|
18
22
|
function useRouterState(opts) {
|
|
19
23
|
const contextRouter = useRouter({
|
|
20
24
|
warn: opts?.router === void 0
|
|
@@ -23,18 +27,24 @@ function useRouterState(opts) {
|
|
|
23
27
|
const _isServer = isServer ?? router.isServer;
|
|
24
28
|
if (_isServer) {
|
|
25
29
|
const state = router.state;
|
|
26
|
-
const
|
|
27
|
-
return
|
|
30
|
+
const selected2 = createMemo(() => opts?.select ? opts.select(state) : state);
|
|
31
|
+
return selected2;
|
|
28
32
|
}
|
|
29
|
-
|
|
33
|
+
const selector = (state) => {
|
|
30
34
|
if (opts?.select) return opts.select(state);
|
|
31
35
|
return state;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
};
|
|
37
|
+
const [storeState, setStoreState] = createSignal(router.__store.get());
|
|
38
|
+
const unsub = router.__store.subscribe((s) => {
|
|
39
|
+
setStoreState(s);
|
|
40
|
+
}).unsubscribe;
|
|
41
|
+
onCleanup(() => {
|
|
42
|
+
unsub();
|
|
43
|
+
});
|
|
44
|
+
const selected = createMemo(() => selector(storeState()), void 0, {
|
|
45
|
+
equals: (a, b) => deepEqual(a, b)
|
|
37
46
|
});
|
|
47
|
+
return selected;
|
|
38
48
|
}
|
|
39
49
|
export {
|
|
40
50
|
useRouterState
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouterState.js","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useRouterState.js","sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { createMemo, createSignal, onCleanup } from 'solid-js'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nfunction deepEqual(a: any, b: any): boolean {\n if (Object.is(a, b)) return true\n\n if (isPromiseLike(a) || isPromiseLike(b)) return false\n\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return false\n }\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n\n if (keysA.length !== keysB.length) return false\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (!deepEqual(a[key], b[key])) return false\n }\n\n return true\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as PromiseLike<unknown>).then === 'function'\n )\n}\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n // During SSR we render exactly once and do not need reactivity.\n // Avoid subscribing to the store on the server since the server store\n // implementation does not provide subscribe() semantics.\n const _isServer = isServer ?? router.isServer\n if (_isServer) {\n const state = router.state as RouterState<TRouter['routeTree']>\n const selected = createMemo(() =>\n opts?.select ? opts.select(state) : state,\n ) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n return selected\n }\n\n const selector = (state: any) => {\n if (opts?.select) return opts.select(state)\n\n return state\n }\n\n // Track the latest store state in a signal that updates via subscription.\n // We store the full state so that the selector (which may read reactive\n // props like props.matchId) re-runs inside a Solid tracking scope (the\n // createMemo below) rather than inside the store subscriber callback\n // where reactive reads would be untracked.\n const [storeState, setStoreState] = createSignal(router.__store.get())\n\n const unsub = router.__store.subscribe((s) => {\n setStoreState(s)\n }).unsubscribe\n\n onCleanup(() => {\n unsub()\n })\n\n // Run the selector inside a memo so that:\n // 1. Reactive values read by the selector (e.g. props.matchId) are tracked\n // 2. The result is memoized and only updates when the selected value changes\n const selected = createMemo(() => selector(storeState()), undefined, {\n equals: (a: any, b: any) => deepEqual(a, b),\n })\n\n return selected as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"names":["deepEqual","a","b","Object","is","isPromiseLike","keysA","keys","keysB","length","key","prototype","hasOwnProperty","call","value","then","useRouterState","opts","contextRouter","useRouter","warn","router","undefined","_isServer","isServer","state","selected","createMemo","select","selector","storeState","setStoreState","createSignal","__store","get","unsub","subscribe","s","unsubscribe","onCleanup","equals"],"mappings":";;;AAUA,SAASA,UAAUC,GAAQC,GAAiB;AAC1C,MAAIC,OAAOC,GAAGH,GAAGC,CAAC,EAAG,QAAO;AAE5B,MAAIG,cAAcJ,CAAC,KAAKI,cAAcH,CAAC,EAAG,QAAO;AAEjD,MACE,OAAOD,MAAM,YACbA,MAAM,QACN,OAAOC,MAAM,YACbA,MAAM,MACN;AACA,WAAO;AAAA,EACT;AAEA,QAAMI,QAAQH,OAAOI,KAAKN,CAAC;AAC3B,QAAMO,QAAQL,OAAOI,KAAKL,CAAC;AAE3B,MAAII,MAAMG,WAAWD,MAAMC,OAAQ,QAAO;AAE1C,aAAWC,OAAOJ,OAAO;AACvB,QAAI,CAACH,OAAOQ,UAAUC,eAAeC,KAAKX,GAAGQ,GAAG,EAAG,QAAO;AAC1D,QAAI,CAACV,UAAUC,EAAES,GAAG,GAAGR,EAAEQ,GAAG,CAAC,EAAG,QAAO;AAAA,EACzC;AAEA,SAAO;AACT;AAEA,SAASL,cAAcS,OAA+C;AACpE,SACE,CAAC,CAACA,UACD,OAAOA,UAAU,YAAY,OAAOA,UAAU,eAC/C,OAAQA,MAA+BC,SAAS;AAEpD;AAYO,SAASC,eAIdC,MACoD;AACpD,QAAMC,gBAAgBC,UAAmB;AAAA,IACvCC,MAAMH,MAAMI,WAAWC;AAAAA,EAAAA,CACxB;AACD,QAAMD,SAASJ,MAAMI,UAAUH;AAK/B,QAAMK,YAAYC,YAAYH,OAAOG;AACrC,MAAID,WAAW;AACb,UAAME,QAAQJ,OAAOI;AACrB,UAAMC,YAAWC,WAAW,MAC1BV,MAAMW,SAASX,KAAKW,OAAOH,KAAK,IAAIA,KACtC;AACA,WAAOC;AAAAA,EACT;AAEA,QAAMG,WAAWA,CAACJ,UAAe;AAC/B,QAAIR,MAAMW,OAAQ,QAAOX,KAAKW,OAAOH,KAAK;AAE1C,WAAOA;AAAAA,EACT;AAOA,QAAM,CAACK,YAAYC,aAAa,IAAIC,aAAaX,OAAOY,QAAQC,KAAK;AAErE,QAAMC,QAAQd,OAAOY,QAAQG,UAAWC,CAAAA,MAAM;AAC5CN,kBAAcM,CAAC;AAAA,EACjB,CAAC,EAAEC;AAEHC,YAAU,MAAM;AACdJ,UAAAA;AAAAA,EACF,CAAC;AAKD,QAAMT,WAAWC,WAAW,MAAME,SAASC,WAAAA,CAAY,GAAGR,QAAW;AAAA,IACnEkB,QAAQA,CAACvC,GAAQC,MAAWF,UAAUC,GAAGC,CAAC;AAAA,EAAA,CAC3C;AAED,SAAOwB;AACT;"}
|
package/dist/esm/utils.d.ts
CHANGED
package/dist/esm/utils.js
CHANGED
|
@@ -7,8 +7,7 @@ const usePrevious = (fn) => {
|
|
|
7
7
|
}) => {
|
|
8
8
|
const current = fn();
|
|
9
9
|
if (prev.current !== current) {
|
|
10
|
-
|
|
11
|
-
prev.current = current;
|
|
10
|
+
return { previous: prev.current, current };
|
|
12
11
|
}
|
|
13
12
|
return prev;
|
|
14
13
|
}
|
|
@@ -17,8 +16,7 @@ const usePrevious = (fn) => {
|
|
|
17
16
|
function useIntersectionObserver(ref, callback, intersectionObserverOptions = {}, options = {}) {
|
|
18
17
|
const isIntersectionObserverAvailable = typeof IntersectionObserver === "function";
|
|
19
18
|
let observerRef = null;
|
|
20
|
-
Solid.createEffect(() => {
|
|
21
|
-
const r = ref();
|
|
19
|
+
Solid.createEffect(ref, (r) => {
|
|
22
20
|
if (!r || !isIntersectionObserverAvailable || options.disabled) {
|
|
23
21
|
return;
|
|
24
22
|
}
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const usePrevious = (fn: () => boolean) => {\n return Solid.createMemo(\n (\n prev: { current: boolean | null; previous: boolean | null } = {\n current: null,\n previous: null,\n },\n ) => {\n const current = fn()\n\n if (prev.current !== current) {\n
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const useLayoutEffect =\n typeof window !== 'undefined' ? Solid.createEffect : Solid.createEffect\n\nexport const usePrevious = (fn: () => boolean) => {\n return Solid.createMemo(\n (\n prev: { current: boolean | null; previous: boolean | null } = {\n current: null,\n previous: null,\n },\n ) => {\n const current = fn()\n\n if (prev.current !== current) {\n return { previous: prev.current, current }\n }\n\n return prev\n },\n )\n}\n\n/**\n * React hook to wrap `IntersectionObserver`.\n *\n * This hook will create an `IntersectionObserver` and observe the ref passed to it.\n *\n * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n *\n * @param ref - The ref to observe\n * @param intersectionObserverOptions - The options to pass to the IntersectionObserver\n * @param options - The options to pass to the hook\n * @param callback - The callback to call when the intersection changes\n * @returns The IntersectionObserver instance\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const ref = React.useRef<HTMLDivElement>(null)\n * useIntersectionObserver(\n * ref,\n * (entry) => { doSomething(entry) },\n * { rootMargin: '10px' },\n * { disabled: false }\n * )\n * return <div ref={ref} />\n * ```\n */\nexport function useIntersectionObserver<T extends Element>(\n ref: Solid.Accessor<T | null>,\n callback: (entry: IntersectionObserverEntry | undefined) => void,\n intersectionObserverOptions: IntersectionObserverInit = {},\n options: { disabled?: boolean } = {},\n): Solid.Accessor<IntersectionObserver | null> {\n const isIntersectionObserverAvailable =\n typeof IntersectionObserver === 'function'\n let observerRef: IntersectionObserver | null = null\n\n Solid.createEffect(ref, (r) => {\n if (!r || !isIntersectionObserverAvailable || options.disabled) {\n return\n }\n\n observerRef = new IntersectionObserver(([entry]) => {\n callback(entry)\n }, intersectionObserverOptions)\n\n observerRef.observe(r)\n\n Solid.onCleanup(() => {\n observerRef?.disconnect()\n })\n })\n\n return () => observerRef\n}\n"],"names":[],"mappings":";AAKO,MAAM,cAAc,CAAC,OAAsB;AAChD,SAAO,MAAM;AAAA,IACX,CACE,OAA8D;AAAA,MAC5D,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,MAET;AACH,YAAM,UAAU,GAAA;AAEhB,UAAI,KAAK,YAAY,SAAS;AAC5B,eAAO,EAAE,UAAU,KAAK,SAAS,QAAA;AAAA,MACnC;AAEA,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;AA2BO,SAAS,wBACd,KACA,UACA,8BAAwD,CAAA,GACxD,UAAkC,IACW;AAC7C,QAAM,kCACJ,OAAO,yBAAyB;AAClC,MAAI,cAA2C;AAE/C,QAAM,aAAa,KAAK,CAAC,MAAM;AAC7B,QAAI,CAAC,KAAK,CAAC,mCAAmC,QAAQ,UAAU;AAC9D;AAAA,IACF;AAEA,kBAAc,IAAI,qBAAqB,CAAC,CAAC,KAAK,MAAM;AAClD,eAAS,KAAK;AAAA,IAChB,GAAG,2BAA2B;AAE9B,gBAAY,QAAQ,CAAC;AAErB,UAAM,UAAU,MAAM;AACpB,mBAAa,WAAA;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AAED,SAAO,MAAM;AACf;"}
|
package/dist/source/Asset.jsx
CHANGED
|
@@ -1,32 +1,73 @@
|
|
|
1
|
-
import { Link, Meta, Style, Title } from '@solidjs/meta';
|
|
2
|
-
import { onCleanup, onMount } from 'solid-js';
|
|
3
1
|
import { isServer } from '@tanstack/router-core/isServer';
|
|
2
|
+
import { createEffect, onCleanup } from 'solid-js';
|
|
4
3
|
import { useRouter } from './useRouter';
|
|
5
4
|
export function Asset({ tag, attrs, children, }) {
|
|
6
5
|
switch (tag) {
|
|
7
6
|
case 'title':
|
|
8
|
-
return <Title {
|
|
7
|
+
return <Title attrs={attrs} children={children}/>;
|
|
9
8
|
case 'meta':
|
|
10
|
-
return <
|
|
9
|
+
return <meta {...attrs}/>;
|
|
11
10
|
case 'link':
|
|
12
|
-
return <
|
|
11
|
+
return <link {...attrs}/>;
|
|
13
12
|
case 'style':
|
|
14
|
-
|
|
13
|
+
if (typeof children === 'string') {
|
|
14
|
+
return <style {...attrs} innerHTML={children}/>;
|
|
15
|
+
}
|
|
16
|
+
return <style {...attrs}/>;
|
|
15
17
|
case 'script':
|
|
16
|
-
return <Script attrs={attrs}
|
|
18
|
+
return <Script attrs={attrs} children={children}/>;
|
|
17
19
|
default:
|
|
18
20
|
return null;
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
|
-
function
|
|
23
|
+
function Title(props) {
|
|
22
24
|
const router = useRouter();
|
|
25
|
+
const attrs = props.attrs;
|
|
26
|
+
const children = props.children;
|
|
27
|
+
// Server: render <title> normally
|
|
28
|
+
if (isServer ?? router.isServer) {
|
|
29
|
+
return <title {...attrs}>{children}</title>;
|
|
30
|
+
}
|
|
31
|
+
// Client: imperatively set document.title so it updates during
|
|
32
|
+
// client-side navigation (JSX <title> in <head> doesn't reliably
|
|
33
|
+
// update the browser's document.title).
|
|
34
|
+
createEffect(() => children, (titleText) => {
|
|
35
|
+
document.title = typeof titleText === 'string' ? titleText : '';
|
|
36
|
+
});
|
|
37
|
+
// Still render the <title> element in the DOM for consistency,
|
|
38
|
+
// but the imperative assignment above is what actually drives the update.
|
|
39
|
+
return <title {...attrs}>{children}</title>;
|
|
40
|
+
}
|
|
41
|
+
function Script(props) {
|
|
42
|
+
const router = useRouter();
|
|
43
|
+
const attrs = props.attrs;
|
|
44
|
+
const children = props.children;
|
|
23
45
|
const dataScript = typeof attrs?.type === 'string' &&
|
|
24
46
|
attrs.type !== '' &&
|
|
25
47
|
attrs.type !== 'text/javascript' &&
|
|
26
48
|
attrs.type !== 'module';
|
|
27
|
-
|
|
49
|
+
// --- Server rendering ---
|
|
50
|
+
if (isServer ?? router.isServer) {
|
|
51
|
+
if (attrs?.src) {
|
|
52
|
+
return <script {...attrs}/>;
|
|
53
|
+
}
|
|
54
|
+
if (typeof children === 'string') {
|
|
55
|
+
return <script {...attrs} innerHTML={children}/>;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// --- Client rendering ---
|
|
60
|
+
// Data scripts (e.g. application/ld+json) are rendered in the tree;
|
|
61
|
+
// they don't need to execute.
|
|
62
|
+
if (dataScript && typeof children === 'string') {
|
|
63
|
+
return <script {...attrs} innerHTML={children}/>;
|
|
64
|
+
}
|
|
65
|
+
// For executable scripts, use imperative DOM injection so the browser
|
|
66
|
+
// actually executes them during client-side navigation.
|
|
67
|
+
createEffect(() => ({ attrs, children, dataScript }), ({ attrs, children, dataScript }) => {
|
|
28
68
|
if (dataScript)
|
|
29
69
|
return;
|
|
70
|
+
let script;
|
|
30
71
|
if (attrs?.src) {
|
|
31
72
|
const normSrc = (() => {
|
|
32
73
|
try {
|
|
@@ -41,20 +82,15 @@ function Script({ attrs, children, }) {
|
|
|
41
82
|
if (existingScript) {
|
|
42
83
|
return;
|
|
43
84
|
}
|
|
44
|
-
|
|
85
|
+
script = document.createElement('script');
|
|
45
86
|
for (const [key, value] of Object.entries(attrs)) {
|
|
46
87
|
if (value !== undefined && value !== false) {
|
|
47
88
|
script.setAttribute(key, typeof value === 'boolean' ? '' : String(value));
|
|
48
89
|
}
|
|
49
90
|
}
|
|
50
91
|
document.head.appendChild(script);
|
|
51
|
-
onCleanup(() => {
|
|
52
|
-
if (script.parentNode) {
|
|
53
|
-
script.parentNode.removeChild(script);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
92
|
}
|
|
57
|
-
if (typeof children === 'string') {
|
|
93
|
+
else if (typeof children === 'string') {
|
|
58
94
|
const typeAttr = typeof attrs?.type === 'string' ? attrs.type : 'text/javascript';
|
|
59
95
|
const nonceAttr = typeof attrs?.nonce === 'string' ? attrs.nonce : undefined;
|
|
60
96
|
const existingScript = Array.from(document.querySelectorAll('script:not([src])')).find((el) => {
|
|
@@ -69,7 +105,7 @@ function Script({ attrs, children, }) {
|
|
|
69
105
|
if (existingScript) {
|
|
70
106
|
return;
|
|
71
107
|
}
|
|
72
|
-
|
|
108
|
+
script = document.createElement('script');
|
|
73
109
|
script.textContent = children;
|
|
74
110
|
if (attrs) {
|
|
75
111
|
for (const [key, value] of Object.entries(attrs)) {
|
|
@@ -79,26 +115,13 @@ function Script({ attrs, children, }) {
|
|
|
79
115
|
}
|
|
80
116
|
}
|
|
81
117
|
document.head.appendChild(script);
|
|
82
|
-
onCleanup(() => {
|
|
83
|
-
if (script.parentNode) {
|
|
84
|
-
script.parentNode.removeChild(script);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
118
|
}
|
|
119
|
+
onCleanup(() => {
|
|
120
|
+
if (script?.parentNode) {
|
|
121
|
+
script.parentNode.removeChild(script);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
88
124
|
});
|
|
89
|
-
if (!(isServer ?? router.isServer)) {
|
|
90
|
-
if (dataScript && typeof children === 'string') {
|
|
91
|
-
return <script {...attrs} innerHTML={children}/>;
|
|
92
|
-
}
|
|
93
|
-
// render an empty script on the client just to avoid hydration errors
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
if (attrs?.src && typeof attrs.src === 'string') {
|
|
97
|
-
return <script {...attrs}/>;
|
|
98
|
-
}
|
|
99
|
-
if (typeof children === 'string') {
|
|
100
|
-
return <script {...attrs} innerHTML={children}/>;
|
|
101
|
-
}
|
|
102
125
|
return null;
|
|
103
126
|
}
|
|
104
127
|
//# sourceMappingURL=Asset.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import * as Solid from 'solid-js';
|
|
2
|
-
import { Dynamic } from '
|
|
2
|
+
import { Dynamic } from '@solidjs/web';
|
|
3
3
|
export function CatchBoundary(props) {
|
|
4
|
-
return (<Solid.
|
|
4
|
+
return (<Solid.Errored fallback={(error, reset) => {
|
|
5
5
|
props.onCatch?.(error);
|
|
6
|
-
Solid.createEffect(
|
|
6
|
+
Solid.createEffect(props.getResetKey, () => {
|
|
7
|
+
// We trigger reset here. For a fully deferred effect we might need usePrevious,
|
|
8
|
+
// but calling reset on key change is the main goal.
|
|
9
|
+
reset();
|
|
10
|
+
});
|
|
7
11
|
return (<Dynamic component={props.errorComponent ?? ErrorComponent} error={error} reset={reset}/>);
|
|
8
12
|
}}>
|
|
9
13
|
{props.children}
|
|
10
|
-
</Solid.
|
|
14
|
+
</Solid.Errored>);
|
|
11
15
|
}
|
|
12
16
|
export function ErrorComponent({ error }) {
|
|
13
17
|
const [show, setShow] = Solid.createSignal(process.env.NODE_ENV !== 'production');
|
|
14
18
|
return (<div style={{ padding: '.5rem', 'max-width': '100%' }}>
|
|
15
19
|
<div style={{ display: 'flex', 'align-items': 'center', gap: '.5rem' }}>
|
|
16
|
-
|
|
20
|
+
∂<strong style={{ 'font-size': '1rem' }}>Something went wrong!</strong>
|
|
17
21
|
<button style={{
|
|
18
22
|
appearance: 'none',
|
|
19
23
|
'font-size': '.6em',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatchBoundary.jsx","sourceRoot":"","sources":["../../src/CatchBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,UAAU,aAAa,CAC3B,KAKqB;IAErB,OAAO,CACL,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"CatchBoundary.jsx","sourceRoot":"","sources":["../../src/CatchBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,UAAU,aAAa,CAC3B,KAKqB;IAErB,OAAO,CACL,CAAC,KAAK,CAAC,OAAO,CACZ,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACzB,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;YAEtB,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE;gBACzC,gFAAgF;gBAChF,oDAAoD;gBACpD,KAAK,EAAE,CAAA;YACT,CAAC,CAAC,CAAA;YAEF,OAAO,CACL,CAAC,OAAO,CACN,SAAS,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,cAAc,CAAC,CAClD,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,KAAK,CAAC,CAAC,KAAK,CAAC,EACb,CACH,CAAA;QACH,CAAC,CAAC,CAEF;MAAA,CAAC,KAAK,CAAC,QAAQ,CACjB;IAAA,EAAE,KAAK,CAAC,OAAO,CAAC,CACjB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAkB;IACtD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CACtC,CAAA;IAED,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CACpD;MAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CACrE;SAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,qBAAqB,EAAE,MAAM,CACtE;QAAA,CAAC,MAAM,CACL,KAAK,CAAC,CAAC;YACL,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,wBAAwB;YAChC,OAAO,EAAE,aAAa;YACtB,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE,QAAQ;SAC1B,CAAC,CACF,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAElC;UAAA,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CACvC;QAAA,EAAE,MAAM,CACV;MAAA,EAAE,GAAG,CACL;MAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EACjC;MAAA,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACR,CAAC,GAAG,CACF;UAAA,CAAC,GAAG,CACF,KAAK,CAAC,CAAC;gBACL,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,eAAe;gBACvB,eAAe,EAAE,QAAQ;gBACzB,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,MAAM;aACjB,CAAC,CAEF;YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACtD;UAAA,EAAE,GAAG,CACP;QAAA,EAAE,GAAG,CAAC,CACP,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientOnly.jsx","sourceRoot":"","sources":["../../src/ClientOnly.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AAajC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAC7D;MAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GACpB;IAAA,EAAE,KAAK,CAAC,IAAI,CAAC,CACd,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"ClientOnly.jsx","sourceRoot":"","sources":["../../src/ClientOnly.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AAajC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,OAAO,CACL,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAC7D;MAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GACpB;IAAA,EAAE,KAAK,CAAC,IAAI,CAAC,CACd,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAEzD,KAAK,CAAC,YAAY,CAChB,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE;QACH,WAAW,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC,CACF,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { MetaProvider } from '@solidjs/meta';
|
|
2
1
|
import { For, createEffect, createMemo } from 'solid-js';
|
|
3
2
|
import { Asset } from './Asset';
|
|
4
3
|
import { useHydrated } from './ClientOnly';
|
|
@@ -18,8 +17,8 @@ export function HeadContent() {
|
|
|
18
17
|
const hydrated = useHydrated();
|
|
19
18
|
// Fallback cleanup for hydration mismatch cases
|
|
20
19
|
// Runs when hydration completes to remove any orphaned dev styles links from DOM
|
|
21
|
-
createEffect(() => {
|
|
22
|
-
if (hydrated
|
|
20
|
+
createEffect(() => [hydrated()], ([hydrated]) => {
|
|
21
|
+
if (hydrated) {
|
|
23
22
|
document
|
|
24
23
|
.querySelectorAll(`link[${DEV_STYLES_ATTR}]`)
|
|
25
24
|
.forEach((el) => el.remove());
|
|
@@ -32,8 +31,11 @@ export function HeadContent() {
|
|
|
32
31
|
}
|
|
33
32
|
return tags();
|
|
34
33
|
});
|
|
35
|
-
return (<
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
return (<For each={filteredTags()}>
|
|
35
|
+
{(tag) => {
|
|
36
|
+
const t = tag();
|
|
37
|
+
return <Asset tag={t.tag} attrs={t.attrs} children={t.children}/>;
|
|
38
|
+
}}
|
|
39
|
+
</For>);
|
|
38
40
|
}
|
|
39
41
|
//# sourceMappingURL=HeadContent.dev.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadContent.dev.jsx","sourceRoot":"","sources":["../../src/HeadContent.dev.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"HeadContent.dev.jsx","sourceRoot":"","sources":["../../src/HeadContent.dev.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,MAAM,eAAe,GAAG,iCAAiC,CAAA;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,gDAAgD;IAChD,iFAAiF;IACjF,YAAY,CACV,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAU,EAC3B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE;QACb,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ;iBACL,gBAAgB,CAAC,QAAQ,eAAe,GAAG,CAAC;iBAC5C,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,CACF,CAAA;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;QACnC,IAAI,QAAQ,EAAE,EAAE,CAAC;YACf,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,OAAO,CACL,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CACxB;MAAA,CAAC,CAAC,GAAG,EAAE,EAAE;YACP,MAAM,CAAC,GAAG,GAAG,EAAS,CAAA;YACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;QACpE,CAAC,CACH;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { MetaProvider } from '@solidjs/meta';
|
|
2
1
|
import { For } from 'solid-js';
|
|
3
2
|
import { Asset } from './Asset';
|
|
4
3
|
import { useTags } from './headContentUtils';
|
|
@@ -10,8 +9,11 @@ import { useTags } from './headContentUtils';
|
|
|
10
9
|
*/
|
|
11
10
|
export function HeadContent() {
|
|
12
11
|
const tags = useTags();
|
|
13
|
-
return (<
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
return (<For each={tags()}>
|
|
13
|
+
{(tag) => {
|
|
14
|
+
const t = tag();
|
|
15
|
+
return <Asset tag={t.tag} attrs={t.attrs} children={t.children}/>;
|
|
16
|
+
}}
|
|
17
|
+
</For>);
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=HeadContent.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,OAAO,CACL,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAChB;MAAA,CAAC,CAAC,GAAG,EAAE,EAAE;YACP,MAAM,CAAC,GAAG,GAAG,EAAS,CAAA;YACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;QACpE,CAAC,CACH;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC"}
|