@tanstack/vue-router 1.168.19 → 1.168.21

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,2 +1,2 @@
1
1
  import { RouterManagedTag } from '@tanstack/router-core';
2
- export declare function Asset({ tag, attrs, children }: RouterManagedTag): any;
2
+ export declare function Asset(asset: RouterManagedTag): any;
package/dist/esm/Asset.js CHANGED
@@ -3,6 +3,7 @@ import * as Vue from "vue";
3
3
  import { createVNode, mergeProps } from "vue";
4
4
  import { isServer } from "@tanstack/router-core/isServer";
5
5
  //#region src/Asset.tsx
6
+ var INLINE_CSS_HYDRATION_ATTR = "data-tsr-inline-css";
6
7
  var Title = Vue.defineComponent({
7
8
  name: "Title",
8
9
  props: { children: {
@@ -94,12 +95,44 @@ var Script = Vue.defineComponent({
94
95
  };
95
96
  }
96
97
  });
97
- function Asset({ tag, attrs, children }) {
98
+ var InlineCssStyle = Vue.defineComponent({
99
+ name: "InlineCssStyle",
100
+ props: {
101
+ attrs: {
102
+ type: Object,
103
+ default: () => ({})
104
+ },
105
+ children: {
106
+ type: String,
107
+ default: void 0
108
+ }
109
+ },
110
+ setup(props) {
111
+ const isInlineCssPlaceholder = props.children === void 0;
112
+ const hydratedInlineCss = isInlineCssPlaceholder && typeof document !== "undefined" ? document.querySelector(`style[${INLINE_CSS_HYDRATION_ATTR}]`)?.textContent ?? "" : void 0;
113
+ return () => Vue.h("style", {
114
+ ...props.attrs,
115
+ [INLINE_CSS_HYDRATION_ATTR]: "",
116
+ "data-allow-mismatch": true,
117
+ innerHTML: isInlineCssPlaceholder ? hydratedInlineCss ?? "" : props.children ?? ""
118
+ });
119
+ }
120
+ });
121
+ function Asset(asset) {
122
+ const { tag, attrs, children } = asset;
98
123
  switch (tag) {
99
124
  case "title": return Vue.h(Title, { children });
100
125
  case "meta": return createVNode("meta", attrs, null);
101
126
  case "link": return createVNode("link", attrs, null);
102
- case "style": return createVNode("style", mergeProps(attrs, { "innerHTML": children }), null);
127
+ case "style":
128
+ if (asset.inlineCss && (process.env.TSS_INLINE_CSS_ENABLED === "true" || process.env.TSS_INLINE_CSS_ENABLED === void 0 && isServer)) return Vue.h(InlineCssStyle, {
129
+ attrs,
130
+ children
131
+ });
132
+ return createVNode("style", mergeProps(attrs, {
133
+ "data-allow-mismatch": asset.inlineCss || void 0,
134
+ "innerHTML": children
135
+ }), null);
103
136
  case "script": return Vue.h(Script, {
104
137
  attrs,
105
138
  children
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.js","names":["Vue","isServer","useRouter","Title","defineComponent","name","props","children","type","String","default","setup","router","onMounted","document","title","watch","newTitle","h","Script","attrs","Object","undefined","dataScript","src","normSrc","base","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","script","createElement","key","value","entries","setAttribute","head","appendChild","typeAttr","nonceAttr","nonce","HTMLScriptElement","sType","getAttribute","sNonce","textContent","innerHTML","_src","rest","Asset","tag","_createVNode","_mergeProps"],"sources":["../../src/Asset.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\ninterface ScriptAttrs {\n [key: string]: string | boolean | undefined\n src?: string\n}\n\nconst Title = Vue.defineComponent({\n name: 'Title',\n props: {\n children: {\n type: String,\n default: '',\n },\n },\n setup(props) {\n const router = useRouter()\n\n if (!(isServer ?? router.isServer)) {\n Vue.onMounted(() => {\n if (props.children) {\n document.title = props.children\n }\n })\n\n Vue.watch(\n () => props.children,\n (newTitle) => {\n if (newTitle) {\n document.title = newTitle\n }\n },\n )\n }\n\n return () => Vue.h('title', {}, props.children)\n },\n})\n\nconst Script = Vue.defineComponent({\n name: 'Script',\n props: {\n attrs: {\n type: Object as Vue.PropType<ScriptAttrs>,\n default: () => ({}),\n },\n children: {\n type: String,\n default: undefined,\n },\n },\n setup(props) {\n const router = useRouter()\n const dataScript =\n typeof props.attrs?.type === 'string' &&\n props.attrs.type !== '' &&\n props.attrs.type !== 'text/javascript' &&\n props.attrs.type !== 'module'\n\n if (!(isServer ?? router.isServer)) {\n Vue.onMounted(() => {\n if (dataScript) return\n\n const attrs = props.attrs\n const children = props.children\n\n if (attrs?.src) {\n const normSrc = (() => {\n try {\n const base = document.baseURI || window.location.href\n return new URL(attrs.src, base).href\n } catch {\n return attrs.src\n }\n })()\n const existingScript = Array.from(\n document.querySelectorAll('script[src]'),\n ).find((el) => (el as HTMLScriptElement).src === normSrc)\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n\n document.head.appendChild(script)\n } else if (typeof children === 'string') {\n const typeAttr =\n typeof attrs?.type === 'string' ? attrs.type : 'text/javascript'\n const nonceAttr =\n typeof attrs?.nonce === 'string' ? attrs.nonce : undefined\n const existingScript = Array.from(\n document.querySelectorAll('script:not([src])'),\n ).find((el) => {\n if (!(el instanceof HTMLScriptElement)) return false\n const sType = el.getAttribute('type') ?? 'text/javascript'\n const sNonce = el.getAttribute('nonce') ?? undefined\n return (\n el.textContent === children &&\n sType === typeAttr &&\n sNonce === nonceAttr\n )\n })\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n script.textContent = children\n\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n }\n\n document.head.appendChild(script)\n }\n })\n }\n\n return () => {\n if (!(isServer ?? router.isServer)) {\n if (dataScript && typeof props.children === 'string') {\n return Vue.h('script', {\n ...props.attrs,\n 'data-allow-mismatch': true,\n innerHTML: props.children,\n })\n }\n\n const { src: _src, ...rest } = props.attrs || {}\n return Vue.h('script', {\n ...rest,\n 'data-allow-mismatch': true,\n innerHTML: '',\n })\n }\n\n if (props.attrs?.src && typeof props.attrs.src === 'string') {\n return Vue.h('script', props.attrs)\n }\n\n if (typeof props.children === 'string') {\n return Vue.h('script', {\n ...props.attrs,\n innerHTML: props.children,\n })\n }\n\n return null\n }\n },\n})\n\nexport function Asset({ tag, attrs, children }: RouterManagedTag): any {\n switch (tag) {\n case 'title':\n return Vue.h(Title, { children: children })\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 return Vue.h(Script, { attrs, children: children })\n default:\n return null\n }\n}\n"],"mappings":";;;;;AAUA,IAAMG,QAAQH,IAAII,gBAAgB;CAChCC,MAAM;CACNC,OAAO,EACLC,UAAU;EACRC,MAAMC;EACNC,SAAS;EACX,EACD;CACDC,MAAML,OAAO;EACX,MAAMM,SAASV,WAAW;AAE1B,MAAI,EAAED,YAAYW,OAAOX,WAAW;AAClCD,OAAIa,gBAAgB;AAClB,QAAIP,MAAMC,SACRO,UAASC,QAAQT,MAAMC;KAEzB;AAEFP,OAAIgB,YACIV,MAAMC,WACXU,aAAa;AACZ,QAAIA,SACFH,UAASC,QAAQE;KAGtB;;AAGH,eAAajB,IAAIkB,EAAE,SAAS,EAAE,EAAEZ,MAAMC,SAAS;;CAElD,CAAC;AAEF,IAAMY,SAASnB,IAAII,gBAAgB;CACjCC,MAAM;CACNC,OAAO;EACLc,OAAO;GACLZ,MAAMa;GACNX,gBAAgB,EAAE;GACnB;EACDH,UAAU;GACRC,MAAMC;GACNC,SAASY,KAAAA;GACX;EACD;CACDX,MAAML,OAAO;EACX,MAAMM,SAASV,WAAW;EAC1B,MAAMqB,aACJ,OAAOjB,MAAMc,OAAOZ,SAAS,YAC7BF,MAAMc,MAAMZ,SAAS,MACrBF,MAAMc,MAAMZ,SAAS,qBACrBF,MAAMc,MAAMZ,SAAS;AAEvB,MAAI,EAAEP,YAAYW,OAAOX,UACvBD,KAAIa,gBAAgB;AAClB,OAAIU,WAAY;GAEhB,MAAMH,QAAQd,MAAMc;GACpB,MAAMb,WAAWD,MAAMC;AAEvB,OAAIa,OAAOI,KAAK;IACd,MAAMC,iBAAiB;AACrB,SAAI;MACF,MAAMC,OAAOZ,SAASa,WAAWC,OAAOC,SAASC;AACjD,aAAO,IAAIC,IAAIX,MAAMI,KAAKE,KAAK,CAACI;aAC1B;AACN,aAAOV,MAAMI;;QAEb;AAKJ,QAJuBS,MAAMC,KAC3BpB,SAASqB,iBAAiB,cAC5B,CAAC,CAACC,MAAMC,OAAQA,GAAyBb,QAAQC,QAAQ,CAGvD;IAGF,MAAMa,SAASxB,SAASyB,cAAc,SAAS;AAE/C,SAAK,MAAM,CAACC,KAAKC,UAAUpB,OAAOqB,QAAQtB,MAAM,CAC9C,KAAIqB,UAAUnB,KAAAA,KAAamB,UAAU,MACnCH,QAAOK,aACLH,KACA,OAAOC,UAAU,YAAY,KAAKhC,OAAOgC,MAC3C,CAAC;AAIL3B,aAAS8B,KAAKC,YAAYP,OAAO;cACxB,OAAO/B,aAAa,UAAU;IACvC,MAAMuC,WACJ,OAAO1B,OAAOZ,SAAS,WAAWY,MAAMZ,OAAO;IACjD,MAAMuC,YACJ,OAAO3B,OAAO4B,UAAU,WAAW5B,MAAM4B,QAAQ1B,KAAAA;AAcnD,QAbuBW,MAAMC,KAC3BpB,SAASqB,iBAAiB,oBAC5B,CAAC,CAACC,MAAMC,OAAO;AACb,SAAI,EAAEA,cAAcY,mBAAoB,QAAO;KAC/C,MAAMC,QAAQb,GAAGc,aAAa,OAAO,IAAI;KACzC,MAAMC,SAASf,GAAGc,aAAa,QAAQ,IAAI7B,KAAAA;AAC3C,YACEe,GAAGgB,gBAAgB9C,YACnB2C,UAAUJ,YACVM,WAAWL;MAEb,CAGA;IAGF,MAAMT,SAASxB,SAASyB,cAAc,SAAS;AAC/CD,WAAOe,cAAc9C;AAErB,QAAIa;UACG,MAAM,CAACoB,KAAKC,UAAUpB,OAAOqB,QAAQtB,MAAM,CAC9C,KAAIqB,UAAUnB,KAAAA,KAAamB,UAAU,MACnCH,QAAOK,aACLH,KACA,OAAOC,UAAU,YAAY,KAAKhC,OAAOgC,MAC3C,CAAC;;AAKP3B,aAAS8B,KAAKC,YAAYP,OAAO;;IAEnC;AAGJ,eAAa;AACX,OAAI,EAAErC,YAAYW,OAAOX,WAAW;AAClC,QAAIsB,cAAc,OAAOjB,MAAMC,aAAa,SAC1C,QAAOP,IAAIkB,EAAE,UAAU;KACrB,GAAGZ,MAAMc;KACT,uBAAuB;KACvBkC,WAAWhD,MAAMC;KAClB,CAAC;IAGJ,MAAM,EAAEiB,KAAK+B,MAAM,GAAGC,SAASlD,MAAMc,SAAS,EAAE;AAChD,WAAOpB,IAAIkB,EAAE,UAAU;KACrB,GAAGsC;KACH,uBAAuB;KACvBF,WAAW;KACZ,CAAC;;AAGJ,OAAIhD,MAAMc,OAAOI,OAAO,OAAOlB,MAAMc,MAAMI,QAAQ,SACjD,QAAOxB,IAAIkB,EAAE,UAAUZ,MAAMc,MAAM;AAGrC,OAAI,OAAOd,MAAMC,aAAa,SAC5B,QAAOP,IAAIkB,EAAE,UAAU;IACrB,GAAGZ,MAAMc;IACTkC,WAAWhD,MAAMC;IAClB,CAAC;AAGJ,UAAO;;;CAGZ,CAAC;AAEF,SAAgBkD,MAAM,EAAEC,KAAKtC,OAAOb,YAAmC;AACrE,SAAQmD,KAAR;EACE,KAAK,QACH,QAAO1D,IAAIkB,EAAEf,OAAO,EAAYI,UAAU,CAAC;EAC7C,KAAK,OACH,QAAAoD,YAAA,QAAiBvC,OAAK,KAAA;EACxB,KAAK,OACH,QAAAuC,YAAA,QAAiBvC,OAAK,KAAA;EACxB,KAAK,QACH,QAAAuC,YAAA,SAAAC,WAAkBxC,OAAK,EAAA,aAAab,UAAQ,CAAA,EAAA,KAAA;EAC9C,KAAK,SACH,QAAOP,IAAIkB,EAAEC,QAAQ;GAAEC;GAAiBb;GAAU,CAAC;EACrD,QACE,QAAO"}
1
+ {"version":3,"file":"Asset.js","names":["Vue","isServer","useRouter","INLINE_CSS_HYDRATION_ATTR","Title","defineComponent","name","props","children","type","String","default","setup","router","onMounted","document","title","watch","newTitle","h","Script","attrs","Object","undefined","dataScript","src","normSrc","base","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","script","createElement","key","value","entries","setAttribute","head","appendChild","typeAttr","nonceAttr","nonce","HTMLScriptElement","sType","getAttribute","sNonce","textContent","innerHTML","_src","rest","InlineCssStyle","isInlineCssPlaceholder","hydratedInlineCss","querySelector","Asset","asset","tag","_createVNode","inlineCss","process","env","TSS_INLINE_CSS_ENABLED","_mergeProps"],"sources":["../../src/Asset.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nconst INLINE_CSS_HYDRATION_ATTR = 'data-tsr-inline-css'\n\ninterface ScriptAttrs {\n [key: string]: string | boolean | undefined\n src?: string\n}\n\nconst Title = Vue.defineComponent({\n name: 'Title',\n props: {\n children: {\n type: String,\n default: '',\n },\n },\n setup(props) {\n const router = useRouter()\n\n if (!(isServer ?? router.isServer)) {\n Vue.onMounted(() => {\n if (props.children) {\n document.title = props.children\n }\n })\n\n Vue.watch(\n () => props.children,\n (newTitle) => {\n if (newTitle) {\n document.title = newTitle\n }\n },\n )\n }\n\n return () => Vue.h('title', {}, props.children)\n },\n})\n\nconst Script = Vue.defineComponent({\n name: 'Script',\n props: {\n attrs: {\n type: Object as Vue.PropType<ScriptAttrs>,\n default: () => ({}),\n },\n children: {\n type: String,\n default: undefined,\n },\n },\n setup(props) {\n const router = useRouter()\n const dataScript =\n typeof props.attrs?.type === 'string' &&\n props.attrs.type !== '' &&\n props.attrs.type !== 'text/javascript' &&\n props.attrs.type !== 'module'\n\n if (!(isServer ?? router.isServer)) {\n Vue.onMounted(() => {\n if (dataScript) return\n\n const attrs = props.attrs\n const children = props.children\n\n if (attrs?.src) {\n const normSrc = (() => {\n try {\n const base = document.baseURI || window.location.href\n return new URL(attrs.src, base).href\n } catch {\n return attrs.src\n }\n })()\n const existingScript = Array.from(\n document.querySelectorAll('script[src]'),\n ).find((el) => (el as HTMLScriptElement).src === normSrc)\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n\n document.head.appendChild(script)\n } else if (typeof children === 'string') {\n const typeAttr =\n typeof attrs?.type === 'string' ? attrs.type : 'text/javascript'\n const nonceAttr =\n typeof attrs?.nonce === 'string' ? attrs.nonce : undefined\n const existingScript = Array.from(\n document.querySelectorAll('script:not([src])'),\n ).find((el) => {\n if (!(el instanceof HTMLScriptElement)) return false\n const sType = el.getAttribute('type') ?? 'text/javascript'\n const sNonce = el.getAttribute('nonce') ?? undefined\n return (\n el.textContent === children &&\n sType === typeAttr &&\n sNonce === nonceAttr\n )\n })\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n script.textContent = children\n\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n }\n\n document.head.appendChild(script)\n }\n })\n }\n\n return () => {\n if (!(isServer ?? router.isServer)) {\n if (dataScript && typeof props.children === 'string') {\n return Vue.h('script', {\n ...props.attrs,\n 'data-allow-mismatch': true,\n innerHTML: props.children,\n })\n }\n\n const { src: _src, ...rest } = props.attrs || {}\n return Vue.h('script', {\n ...rest,\n 'data-allow-mismatch': true,\n innerHTML: '',\n })\n }\n\n if (props.attrs?.src && typeof props.attrs.src === 'string') {\n return Vue.h('script', props.attrs)\n }\n\n if (typeof props.children === 'string') {\n return Vue.h('script', {\n ...props.attrs,\n innerHTML: props.children,\n })\n }\n\n return null\n }\n },\n})\n\nconst InlineCssStyle = Vue.defineComponent({\n name: 'InlineCssStyle',\n props: {\n attrs: {\n type: Object as Vue.PropType<Record<string, any>>,\n default: () => ({}),\n },\n children: {\n type: String,\n default: undefined,\n },\n },\n setup(props) {\n const isInlineCssPlaceholder = props.children === undefined\n const hydratedInlineCss =\n isInlineCssPlaceholder && typeof document !== 'undefined'\n ? (document.querySelector<HTMLStyleElement>(\n `style[${INLINE_CSS_HYDRATION_ATTR}]`,\n )?.textContent ?? '')\n : undefined\n\n return () =>\n Vue.h('style', {\n ...props.attrs,\n [INLINE_CSS_HYDRATION_ATTR]: '',\n 'data-allow-mismatch': true,\n innerHTML: isInlineCssPlaceholder\n ? (hydratedInlineCss ?? '')\n : (props.children ?? ''),\n })\n },\n})\n\nexport function Asset(asset: RouterManagedTag): any {\n const { tag, attrs, children } = asset\n\n switch (tag) {\n case 'title':\n return Vue.h(Title, { children: children })\n case 'meta':\n return <meta {...attrs} />\n case 'link':\n return <link {...attrs} />\n case 'style':\n if (\n asset.inlineCss &&\n (process.env.TSS_INLINE_CSS_ENABLED === 'true' ||\n (process.env.TSS_INLINE_CSS_ENABLED === undefined && isServer))\n ) {\n return Vue.h(InlineCssStyle, { attrs, children })\n }\n\n return (\n <style\n {...attrs}\n data-allow-mismatch={asset.inlineCss || undefined}\n innerHTML={children}\n />\n )\n case 'script':\n return Vue.h(Script, { attrs, children: children })\n default:\n return null\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { useRouter } from "./useRouter.js";
2
- import { escapeHtml, getAssetCrossOrigin, resolveManifestAssetLink } from "@tanstack/router-core";
2
+ import { escapeHtml, getAssetCrossOrigin, isInlinableStylesheet, resolveManifestAssetLink } from "@tanstack/router-core";
3
3
  import * as Vue from "vue";
4
4
  import { useStore } from "@tanstack/vue-store";
5
5
  //#region src/headContentUtils.tsx
@@ -67,13 +67,25 @@ var useTags = (assetCrossOrigin) => {
67
67
  })));
68
68
  const manifestAssets = Vue.computed(() => {
69
69
  const manifest = router.ssr?.manifest;
70
- return matches.value.map((match) => manifest?.routes[match.routeId]?.assets ?? []).filter(Boolean).flat(1).filter((asset) => asset.tag === "link").map((asset) => ({
71
- tag: "link",
72
- attrs: {
73
- ...asset.attrs,
74
- crossOrigin: getAssetCrossOrigin(assetCrossOrigin, "stylesheet") ?? asset.attrs?.crossOrigin
70
+ return matches.value.map((match) => manifest?.routes[match.routeId]?.assets ?? []).filter(Boolean).flat(1).flatMap((asset) => {
71
+ if (asset.tag === "link") {
72
+ if (isInlinableStylesheet(manifest, asset)) return [];
73
+ return [{
74
+ tag: "link",
75
+ attrs: {
76
+ ...asset.attrs,
77
+ crossOrigin: getAssetCrossOrigin(assetCrossOrigin, "stylesheet") ?? asset.attrs?.crossOrigin
78
+ }
79
+ }];
75
80
  }
76
- }));
81
+ if (asset.tag === "style") return [{
82
+ tag: "style",
83
+ attrs: asset.attrs,
84
+ children: asset.children,
85
+ ...asset.inlineCss ? { inlineCss: true } : {}
86
+ }];
87
+ return [];
88
+ });
77
89
  });
78
90
  return () => uniqBy([
79
91
  ...manifestAssets.value,
@@ -1 +1 @@
1
- {"version":3,"file":"headContentUtils.js","names":["Vue","escapeHtml","getAssetCrossOrigin","resolveManifestAssetLink","useStore","useRouter","useTags","assetCrossOrigin","router","matches","stores","value","meta","computed","resultMeta","metaByAttribute","title","map","match","filter","Boolean","reverse","forEach","metas","m","tag","children","json","JSON","stringify","push","attrs","type","attribute","name","property","links","flat","link","preloadMeta","looseRoutesById","routeId","route","ssr","manifest","routes","id","preloads","preload","preloadLink","rel","href","crossOrigin","headScripts","script","manifestAssets","assets","asset","uniqBy","d","arr","fn","seen","Set","item","key","has","add"],"sources":["../../src/headContentUtils.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport {\n escapeHtml,\n getAssetCrossOrigin,\n resolveManifestAssetLink,\n} from '@tanstack/router-core'\nimport { useStore } from '@tanstack/vue-store'\nimport { useRouter } from './useRouter'\nimport type {\n AssetCrossOriginConfig,\n RouterManagedTag,\n} from '@tanstack/router-core'\n\nexport const useTags = (assetCrossOrigin?: AssetCrossOriginConfig) => {\n const router = useRouter()\n const matches = useStore(router.stores.matches, (value) => value)\n\n const meta = Vue.computed<Array<RouterManagedTag>>(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n ;[...matches.value.map((match) => match.meta!).filter(Boolean)]\n .reverse()\n .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 if ('script:ld+json' in m) {\n // Handle JSON-LD structured data\n // Content is HTML-escaped to prevent XSS when injected via innerHTML\n try {\n const json = JSON.stringify(m['script:ld+json'])\n resultMeta.push({\n tag: 'script',\n attrs: {\n type: 'application/ld+json',\n },\n children: escapeHtml(json),\n })\n } catch {\n // Skip invalid JSON-LD objects\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 = Vue.computed<Array<RouterManagedTag>>(\n () =>\n matches.value\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 = Vue.computed<Array<RouterManagedTag>>(() => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n matches.value\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 const preloadLink = resolveManifestAssetLink(preload)\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preloadLink.href,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'modulepreload') ??\n preloadLink.crossOrigin,\n },\n })\n }),\n )\n\n return preloadMeta\n })\n\n const headScripts = Vue.computed<Array<RouterManagedTag>>(() =>\n (\n matches.value\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 const manifestAssets = Vue.computed<Array<RouterManagedTag>>(() => {\n const manifest = router.ssr?.manifest\n\n const assets = matches.value\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .filter((asset) => asset.tag === 'link')\n .map(\n (asset) =>\n ({\n tag: 'link',\n attrs: {\n ...asset.attrs,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??\n asset.attrs?.crossOrigin,\n },\n }) satisfies RouterManagedTag,\n )\n\n return assets\n })\n\n return () =>\n uniqBy(\n [\n ...manifestAssets.value,\n ...meta.value,\n ...preloadMeta.value,\n ...links.value,\n ...headScripts.value,\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\nexport function 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"],"mappings":"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"}
1
+ {"version":3,"file":"headContentUtils.js","names":["Vue","escapeHtml","getAssetCrossOrigin","isInlinableStylesheet","resolveManifestAssetLink","useStore","useRouter","useTags","assetCrossOrigin","router","matches","stores","value","meta","computed","resultMeta","metaByAttribute","title","map","match","filter","Boolean","reverse","forEach","metas","m","tag","children","json","JSON","stringify","push","attrs","type","attribute","name","property","links","flat","link","preloadMeta","looseRoutesById","routeId","route","ssr","manifest","routes","id","preloads","preload","preloadLink","rel","href","crossOrigin","headScripts","script","manifestAssets","assets","flatMap","asset","inlineCss","uniqBy","d","arr","fn","seen","Set","item","key","has","add"],"sources":["../../src/headContentUtils.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport {\n escapeHtml,\n getAssetCrossOrigin,\n isInlinableStylesheet,\n resolveManifestAssetLink,\n} from '@tanstack/router-core'\nimport { useStore } from '@tanstack/vue-store'\nimport { useRouter } from './useRouter'\nimport type {\n AssetCrossOriginConfig,\n RouterManagedTag,\n} from '@tanstack/router-core'\n\nexport const useTags = (assetCrossOrigin?: AssetCrossOriginConfig) => {\n const router = useRouter()\n const matches = useStore(router.stores.matches, (value) => value)\n\n const meta = Vue.computed<Array<RouterManagedTag>>(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n ;[...matches.value.map((match) => match.meta!).filter(Boolean)]\n .reverse()\n .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 if ('script:ld+json' in m) {\n // Handle JSON-LD structured data\n // Content is HTML-escaped to prevent XSS when injected via innerHTML\n try {\n const json = JSON.stringify(m['script:ld+json'])\n resultMeta.push({\n tag: 'script',\n attrs: {\n type: 'application/ld+json',\n },\n children: escapeHtml(json),\n })\n } catch {\n // Skip invalid JSON-LD objects\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 = Vue.computed<Array<RouterManagedTag>>(\n () =>\n matches.value\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 = Vue.computed<Array<RouterManagedTag>>(() => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n matches.value\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 const preloadLink = resolveManifestAssetLink(preload)\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preloadLink.href,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'modulepreload') ??\n preloadLink.crossOrigin,\n },\n })\n }),\n )\n\n return preloadMeta\n })\n\n const headScripts = Vue.computed<Array<RouterManagedTag>>(() =>\n (\n matches.value\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 const manifestAssets = Vue.computed<Array<RouterManagedTag>>(() => {\n const manifest = router.ssr?.manifest\n\n const assets = matches.value\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .flatMap((asset): Array<RouterManagedTag> => {\n if (asset.tag === 'link') {\n if (isInlinableStylesheet(manifest, asset)) {\n return []\n }\n\n return [\n {\n tag: 'link',\n attrs: {\n ...asset.attrs,\n crossOrigin:\n getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??\n asset.attrs?.crossOrigin,\n },\n },\n ]\n }\n\n if (asset.tag === 'style') {\n return [\n {\n tag: 'style',\n attrs: asset.attrs,\n children: asset.children,\n ...(asset.inlineCss ? { inlineCss: true as const } : {}),\n },\n ]\n }\n\n return []\n })\n\n return assets\n })\n\n return () =>\n uniqBy(\n [\n ...manifestAssets.value,\n ...meta.value,\n ...preloadMeta.value,\n ...links.value,\n ...headScripts.value,\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\nexport function 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"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import type { RouterManagedTag } from '@tanstack/router-core';
2
- export declare function Asset({ tag, attrs, children }: RouterManagedTag): any;
2
+ export declare function Asset(asset: RouterManagedTag): any;
@@ -1,6 +1,7 @@
1
1
  import * as Vue from 'vue';
2
2
  import { isServer } from '@tanstack/router-core/isServer';
3
3
  import { useRouter } from './useRouter';
4
+ const INLINE_CSS_HYDRATION_ATTR = 'data-tsr-inline-css';
4
5
  const Title = Vue.defineComponent({
5
6
  name: 'Title',
6
7
  props: {
@@ -129,7 +130,35 @@ const Script = Vue.defineComponent({
129
130
  };
130
131
  },
131
132
  });
132
- export function Asset({ tag, attrs, children }) {
133
+ const InlineCssStyle = Vue.defineComponent({
134
+ name: 'InlineCssStyle',
135
+ props: {
136
+ attrs: {
137
+ type: Object,
138
+ default: () => ({}),
139
+ },
140
+ children: {
141
+ type: String,
142
+ default: undefined,
143
+ },
144
+ },
145
+ setup(props) {
146
+ const isInlineCssPlaceholder = props.children === undefined;
147
+ const hydratedInlineCss = isInlineCssPlaceholder && typeof document !== 'undefined'
148
+ ? (document.querySelector(`style[${INLINE_CSS_HYDRATION_ATTR}]`)?.textContent ?? '')
149
+ : undefined;
150
+ return () => Vue.h('style', {
151
+ ...props.attrs,
152
+ [INLINE_CSS_HYDRATION_ATTR]: '',
153
+ 'data-allow-mismatch': true,
154
+ innerHTML: isInlineCssPlaceholder
155
+ ? (hydratedInlineCss ?? '')
156
+ : (props.children ?? ''),
157
+ });
158
+ },
159
+ });
160
+ export function Asset(asset) {
161
+ const { tag, attrs, children } = asset;
133
162
  switch (tag) {
134
163
  case 'title':
135
164
  return Vue.h(Title, { children: children });
@@ -138,7 +167,12 @@ export function Asset({ tag, attrs, children }) {
138
167
  case 'link':
139
168
  return <link {...attrs}/>;
140
169
  case 'style':
141
- return <style {...attrs} innerHTML={children}/>;
170
+ if (asset.inlineCss &&
171
+ (process.env.TSS_INLINE_CSS_ENABLED === 'true' ||
172
+ (process.env.TSS_INLINE_CSS_ENABLED === undefined && isServer))) {
173
+ return Vue.h(InlineCssStyle, { attrs, children });
174
+ }
175
+ return (<style {...attrs} data-allow-mismatch={asset.inlineCss || undefined} innerHTML={children}/>);
142
176
  case 'script':
143
177
  return Vue.h(Script, { attrs, children: children });
144
178
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as Vue from 'vue';
2
- import { escapeHtml, getAssetCrossOrigin, resolveManifestAssetLink, } from '@tanstack/router-core';
2
+ import { escapeHtml, getAssetCrossOrigin, isInlinableStylesheet, resolveManifestAssetLink, } from '@tanstack/router-core';
3
3
  import { useStore } from '@tanstack/vue-store';
4
4
  import { useRouter } from './useRouter';
5
5
  export const useTags = (assetCrossOrigin) => {
@@ -112,15 +112,34 @@ export const useTags = (assetCrossOrigin) => {
112
112
  .map((match) => manifest?.routes[match.routeId]?.assets ?? [])
113
113
  .filter(Boolean)
114
114
  .flat(1)
115
- .filter((asset) => asset.tag === 'link')
116
- .map((asset) => ({
117
- tag: 'link',
118
- attrs: {
119
- ...asset.attrs,
120
- crossOrigin: getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??
121
- asset.attrs?.crossOrigin,
122
- },
123
- }));
115
+ .flatMap((asset) => {
116
+ if (asset.tag === 'link') {
117
+ if (isInlinableStylesheet(manifest, asset)) {
118
+ return [];
119
+ }
120
+ return [
121
+ {
122
+ tag: 'link',
123
+ attrs: {
124
+ ...asset.attrs,
125
+ crossOrigin: getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??
126
+ asset.attrs?.crossOrigin,
127
+ },
128
+ },
129
+ ];
130
+ }
131
+ if (asset.tag === 'style') {
132
+ return [
133
+ {
134
+ tag: 'style',
135
+ attrs: asset.attrs,
136
+ children: asset.children,
137
+ ...(asset.inlineCss ? { inlineCss: true } : {}),
138
+ },
139
+ ];
140
+ }
141
+ return [];
142
+ });
124
143
  return assets;
125
144
  });
126
145
  return () => uniqBy([
@@ -1 +1 @@
1
- {"version":3,"file":"headContentUtils.jsx","sourceRoot":"","sources":["../../src/headContentUtils.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAMvC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,gBAAyC,EAAE,EAAE;IACnE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAEjE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAA0B,GAAG,EAAE;QACtD,MAAM,UAAU,GAA4B,EAAE,CAAA;QAC9C,MAAM,eAAe,GAAyB,EAAE,CAAA;QAChD,IAAI,KAAmC,CACtC;QAAA,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aAC5D,OAAO,EAAE;aACT,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,CAAC;YAAA,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClC,IAAI,CAAC,CAAC;oBAAE,OAAM;gBAEd,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACZ,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,KAAK,GAAG;4BACN,GAAG,EAAE,OAAO;4BACZ,QAAQ,EAAE,CAAC,CAAC,KAAK;yBAClB,CAAA;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;oBACjC,iCAAiC;oBACjC,qEAAqE;oBACrE,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAA;wBAChD,UAAU,CAAC,IAAI,CAAC;4BACd,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,IAAI,EAAE,qBAAqB;6BAC5B;4BACD,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;yBAC3B,CAAC,CAAA;oBACJ,CAAC;oBAAC,MAAM,CAAC;wBACP,+BAA+B;oBACjC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAA;oBACtC,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC/B,OAAM;wBACR,CAAC;6BAAM,CAAC;4BACN,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;wBACnC,CAAC;oBACH,CAAC;oBAED,UAAU,CAAC,IAAI,CAAC;wBACd,GAAG,EAAE,MAAM;wBACX,KAAK,EAAE;4BACL,GAAG,CAAC;yBACL;qBACF,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEJ,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QAED,UAAU,CAAC,OAAO,EAAE,CAAA;QAEpB,OAAO,UAAU,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CACxB,GAAG,EAAE,CACH,OAAO,CAAC,KAAK;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAM,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,CAAC,CAAC;SACP,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,GAAG,EAAE,MAAM;QACX,KAAK,EAAE;YACL,GAAG,IAAI;SACR;KACF,CAAC,CAA4B,CACnC,CAAA;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAA0B,GAAG,EAAE;QAC7D,MAAM,WAAW,GAA4B,EAAE,CAAA;QAE/C,OAAO,CAAC,KAAK;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;aACtD,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ;YAC9C,EAAE,MAAM,CAAC,OAAO,CAAC;aAChB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnB,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;YACrD,WAAW,CAAC,IAAI,CAAC;gBACf,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE;oBACL,GAAG,EAAE,eAAe;oBACpB,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,WAAW,EACT,mBAAmB,CAAC,gBAAgB,EAAE,eAAe,CAAC;wBACtD,WAAW,CAAC,WAAW;iBAC1B;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CACL,CAAA;QAEH,OAAO,WAAW,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAA0B,GAAG,EAAE,CAE3D,OAAO,CAAC,KAAK;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAY,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC;SACP,MAAM,CAAC,OAAO,CAClB,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE;YACL,GAAG,MAAM;SACV;QACD,QAAQ;KACT,CAAC,CAAC,CACJ,CAAA;IAED,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,CAA0B,GAAG,EAAE;QAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAA;QAErC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK;aACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;aAC7D,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,CAAC,CAAC;aACP,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC;aACvC,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CACR,CAAC;YACC,GAAG,EAAE,MAAM;YACX,KAAK,EAAE;gBACL,GAAG,KAAK,CAAC,KAAK;gBACd,WAAW,EACT,mBAAmB,CAAC,gBAAgB,EAAE,YAAY,CAAC;oBACnD,KAAK,CAAC,KAAK,EAAE,WAAW;aAC3B;SACF,CAA4B,CAChC,CAAA;QAEH,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE,CACV,MAAM,CACJ;QACE,GAAG,cAAc,CAAC,KAAK;QACvB,GAAG,IAAI,CAAC,KAAK;QACb,GAAG,WAAW,CAAC,KAAK;QACpB,GAAG,KAAK,CAAC,KAAK;QACd,GAAG,WAAW,CAAC,KAAK;KACM,EAC5B,CAAC,CAAC,EAAE,EAAE;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC,CACF,CAAA;AACL,CAAC,CAAA;AAED,MAAM,UAAU,MAAM,CAAI,GAAa,EAAE,EAAuB;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"headContentUtils.jsx","sourceRoot":"","sources":["../../src/headContentUtils.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/vue-router",
3
- "version": "1.168.19",
3
+ "version": "1.168.21",
4
4
  "description": "Modern and scalable routing for Vue applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -65,7 +65,7 @@
65
65
  "isbot": "^5.1.22",
66
66
  "jsesc": "^3.0.2",
67
67
  "@tanstack/history": "1.161.6",
68
- "@tanstack/router-core": "1.168.15"
68
+ "@tanstack/router-core": "1.168.17"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@tanstack/intent": "^0.0.14",
package/src/Asset.tsx CHANGED
@@ -3,6 +3,8 @@ import { isServer } from '@tanstack/router-core/isServer'
3
3
  import { useRouter } from './useRouter'
4
4
  import type { RouterManagedTag } from '@tanstack/router-core'
5
5
 
6
+ const INLINE_CSS_HYDRATION_ATTR = 'data-tsr-inline-css'
7
+
6
8
  interface ScriptAttrs {
7
9
  [key: string]: string | boolean | undefined
8
10
  src?: string
@@ -171,7 +173,42 @@ const Script = Vue.defineComponent({
171
173
  },
172
174
  })
173
175
 
174
- export function Asset({ tag, attrs, children }: RouterManagedTag): any {
176
+ const InlineCssStyle = Vue.defineComponent({
177
+ name: 'InlineCssStyle',
178
+ props: {
179
+ attrs: {
180
+ type: Object as Vue.PropType<Record<string, any>>,
181
+ default: () => ({}),
182
+ },
183
+ children: {
184
+ type: String,
185
+ default: undefined,
186
+ },
187
+ },
188
+ setup(props) {
189
+ const isInlineCssPlaceholder = props.children === undefined
190
+ const hydratedInlineCss =
191
+ isInlineCssPlaceholder && typeof document !== 'undefined'
192
+ ? (document.querySelector<HTMLStyleElement>(
193
+ `style[${INLINE_CSS_HYDRATION_ATTR}]`,
194
+ )?.textContent ?? '')
195
+ : undefined
196
+
197
+ return () =>
198
+ Vue.h('style', {
199
+ ...props.attrs,
200
+ [INLINE_CSS_HYDRATION_ATTR]: '',
201
+ 'data-allow-mismatch': true,
202
+ innerHTML: isInlineCssPlaceholder
203
+ ? (hydratedInlineCss ?? '')
204
+ : (props.children ?? ''),
205
+ })
206
+ },
207
+ })
208
+
209
+ export function Asset(asset: RouterManagedTag): any {
210
+ const { tag, attrs, children } = asset
211
+
175
212
  switch (tag) {
176
213
  case 'title':
177
214
  return Vue.h(Title, { children: children })
@@ -180,7 +217,21 @@ export function Asset({ tag, attrs, children }: RouterManagedTag): any {
180
217
  case 'link':
181
218
  return <link {...attrs} />
182
219
  case 'style':
183
- return <style {...attrs} innerHTML={children} />
220
+ if (
221
+ asset.inlineCss &&
222
+ (process.env.TSS_INLINE_CSS_ENABLED === 'true' ||
223
+ (process.env.TSS_INLINE_CSS_ENABLED === undefined && isServer))
224
+ ) {
225
+ return Vue.h(InlineCssStyle, { attrs, children })
226
+ }
227
+
228
+ return (
229
+ <style
230
+ {...attrs}
231
+ data-allow-mismatch={asset.inlineCss || undefined}
232
+ innerHTML={children}
233
+ />
234
+ )
184
235
  case 'script':
185
236
  return Vue.h(Script, { attrs, children: children })
186
237
  default:
@@ -2,6 +2,7 @@ import * as Vue from 'vue'
2
2
  import {
3
3
  escapeHtml,
4
4
  getAssetCrossOrigin,
5
+ isInlinableStylesheet,
5
6
  resolveManifestAssetLink,
6
7
  } from '@tanstack/router-core'
7
8
  import { useStore } from '@tanstack/vue-store'
@@ -138,19 +139,38 @@ export const useTags = (assetCrossOrigin?: AssetCrossOriginConfig) => {
138
139
  .map((match) => manifest?.routes[match.routeId]?.assets ?? [])
139
140
  .filter(Boolean)
140
141
  .flat(1)
141
- .filter((asset) => asset.tag === 'link')
142
- .map(
143
- (asset) =>
144
- ({
145
- tag: 'link',
146
- attrs: {
147
- ...asset.attrs,
148
- crossOrigin:
149
- getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??
150
- asset.attrs?.crossOrigin,
142
+ .flatMap((asset): Array<RouterManagedTag> => {
143
+ if (asset.tag === 'link') {
144
+ if (isInlinableStylesheet(manifest, asset)) {
145
+ return []
146
+ }
147
+
148
+ return [
149
+ {
150
+ tag: 'link',
151
+ attrs: {
152
+ ...asset.attrs,
153
+ crossOrigin:
154
+ getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??
155
+ asset.attrs?.crossOrigin,
156
+ },
151
157
  },
152
- }) satisfies RouterManagedTag,
153
- )
158
+ ]
159
+ }
160
+
161
+ if (asset.tag === 'style') {
162
+ return [
163
+ {
164
+ tag: 'style',
165
+ attrs: asset.attrs,
166
+ children: asset.children,
167
+ ...(asset.inlineCss ? { inlineCss: true as const } : {}),
168
+ },
169
+ ]
170
+ }
171
+
172
+ return []
173
+ })
154
174
 
155
175
  return assets
156
176
  })