nuxt-seo-utils 8.1.2 → 8.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/cli.mjs +1 -1
  2. package/dist/devtools/200.html +1 -1
  3. package/dist/devtools/404.html +1 -1
  4. package/dist/devtools/_nuxt/{V_pMFIP3.js → BTsue9pl.js} +14 -14
  5. package/dist/devtools/_nuxt/{BcMdz6-c.js → BbZG-7rr.js} +1 -1
  6. package/dist/devtools/_nuxt/{BcWmxi8A.js → CNGTv5Eg.js} +1 -1
  7. package/dist/devtools/_nuxt/DF4WSqh9.js +1 -0
  8. package/dist/devtools/_nuxt/DevtoolsMetric.DNT55gMM.css +1 -0
  9. package/dist/devtools/_nuxt/{CnDdOR4U.js → DmUbMtIl.js} +1 -1
  10. package/dist/devtools/_nuxt/{BLzUgHsL.js → EY_4p6hl.js} +1 -1
  11. package/dist/devtools/_nuxt/builds/latest.json +1 -1
  12. package/dist/devtools/_nuxt/builds/meta/0641d6c1-07c3-4fba-894b-5c40a3adb703.json +1 -0
  13. package/dist/devtools/_nuxt/debug.Al377-Ye.css +1 -0
  14. package/dist/devtools/_nuxt/entry.64xQvwV4.css +1 -0
  15. package/dist/devtools/_nuxt/{Dp5u6Va_.js → hFKhSWkH.js} +1 -1
  16. package/dist/devtools/_nuxt/{fl08PdQo.js → qSjTFP4y.js} +1 -1
  17. package/dist/devtools/_nuxt/tools.BtjZeki9.css +1 -0
  18. package/dist/devtools/debug/index.html +1 -1
  19. package/dist/devtools/docs/index.html +1 -1
  20. package/dist/devtools/identity/index.html +1 -1
  21. package/dist/devtools/index.html +1 -1
  22. package/dist/devtools/social/index.html +1 -1
  23. package/dist/module.json +1 -1
  24. package/dist/module.mjs +72 -49
  25. package/package.json +4 -4
  26. package/dist/devtools/_nuxt/CuTEUKU2.js +0 -1
  27. package/dist/devtools/_nuxt/DevtoolsMetric.oOth40om.css +0 -1
  28. package/dist/devtools/_nuxt/builds/meta/54b86ea9-8a8b-4391-9b24-d67fd4c26ab7.json +0 -1
  29. package/dist/devtools/_nuxt/debug.B_vyUEY4.css +0 -1
  30. package/dist/devtools/_nuxt/entry.p5YGwGey.css +0 -1
  31. package/dist/devtools/_nuxt/tools.wDkYv7qK.css +0 -1
@@ -1 +1 @@
1
- import{d as A,u as q,s as H,q as M,v as z,x as J,o as a,g as l,c as w,y as X,w as v,b as i,e as K,F as f,i as e,m as C,A as Q,n as B,j as n,p as Y,k as p,C as Z,z as F,a as L,r as U,f as h,l as ee}from"./V_pMFIP3.js";import{_ as te,a as ae,p as se}from"./CuTEUKU2.js";import{_ as oe}from"./BcWmxi8A.js";const le={class:"space-y-5 stagger-children"},ne={class:"space-y-1"},re={class:"min-w-0"},ie={class:"font-mono text-xs"},ce={class:"text-xs text-[var(--color-text-muted)]"},ue={class:"social-tab-bar"},de=["onClick"],ge={class:"social-tab__label"},ve={class:"social-preview-stage"},pe={key:0,class:"social-preview-card"},me={class:"rounded-2xl overflow-hidden border border-neutral-200 dark:border-neutral-700"},_e={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-800"},he=["src","alt"],xe={key:1,class:"social-image-placeholder aspect-[1.91/1]"},be={class:"p-3"},we={class:"text-xs text-neutral-500"},fe={class:"text-sm font-medium line-clamp-1"},ye={class:"text-xs text-neutral-500 line-clamp-2"},ke={key:1,class:"social-preview-card"},Ie={class:"rounded-lg overflow-hidden border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800"},Te={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-700"},Ce=["src","alt"],Ne={key:1,class:"social-image-placeholder aspect-[1.91/1]"},$e={class:"p-3"},Se={class:"text-[11px] text-neutral-500 uppercase tracking-wider"},Ue={class:"text-base font-semibold line-clamp-1 mt-0.5"},je={class:"text-sm text-neutral-500 line-clamp-1 mt-0.5"},De={key:2,class:"social-preview-card"},Me={class:"rounded-lg overflow-hidden border border-neutral-200 dark:border-neutral-700"},ze={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-800"},Be=["src","alt"],Fe={key:1,class:"social-image-placeholder aspect-[1.91/1]"},Le={class:"p-3 bg-neutral-50 dark:bg-neutral-800"},Oe={class:"text-sm font-semibold line-clamp-2"},Ee={class:"text-xs text-neutral-500 mt-1"},Pe={key:3,class:"social-preview-card"},Re={class:"rounded-lg overflow-hidden border-l-4 border-[#5865F2] bg-[#2f3136] text-white p-4"},Ve={class:"text-xs text-neutral-400 mb-1"},We={class:"text-[#00aff4] text-sm font-semibold hover:underline cursor-pointer"},Ge={class:"text-sm text-neutral-300 mt-1 line-clamp-2"},Ae={key:0,class:"mt-3 rounded-lg overflow-hidden max-w-[300px]"},qe=["src","alt"],He={key:1,class:"social-image-placeholder social-image-placeholder--discord mt-3 max-w-[300px] aspect-video rounded-lg"},Je={key:4,class:"social-preview-card"},Xe={class:"rounded-lg overflow-hidden border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 py-2"},Ke={class:"text-xs text-neutral-500 font-bold mb-1"},Qe={class:"text-[#1264a3] dark:text-[#1d9bd1] text-sm font-bold hover:underline cursor-pointer"},Ye={class:"text-sm text-neutral-600 dark:text-neutral-400 mt-0.5 line-clamp-2"},Ze={key:0,class:"mt-2 rounded overflow-hidden max-w-[360px]"},et=["src","alt"],tt={class:"social-tags-table"},at={class:"text-sm font-mono shrink-0 text-[var(--color-text)]"},st={class:"text-xs text-[var(--color-text-muted)] truncate min-w-0 flex-1 text-right font-mono"},ot={class:"text-sm font-mono shrink-0 text-[var(--color-text)]"},lt={class:"text-xs text-[var(--color-text-muted)] truncate min-w-0 flex-1 text-right font-mono"},nt={class:"rounded-lg overflow-hidden border border-[var(--color-border)]"},rt=["src","alt"],it={class:"flex items-center gap-2 text-xs text-[var(--color-text-muted)] font-mono"},ct={class:"truncate"},ut=A({__name:"social",setup(dt){const{copy:O,copied:E}=q(),N=U(!1),y=U(null),t=U(null),_=U("twitter"),P=[{label:"X / Twitter",value:"twitter",icon:"carbon:logo-x"},{label:"Facebook",value:"facebook",icon:"carbon:logo-facebook"},{label:"LinkedIn",value:"linkedin",icon:"carbon:logo-linkedin"},{label:"Discord",value:"discord",icon:"carbon:logo-discord"},{label:"Slack",value:"slack",icon:"carbon:logo-slack"}],x=h(()=>{if(!t.value)return[];const c=[];if(t.value.og["og:title"]||c.push({type:"warning",property:"og:title",message:"Missing og:title. Social previews will use the page title as fallback."}),t.value.og["og:description"]||c.push({type:"warning",property:"og:description",message:"Missing og:description."}),t.value.ogImages.length||c.push({type:"warning",property:"og:image",message:"No og:image found. Posts with images get higher engagement."}),t.value.og["og:url"]||c.push({type:"warning",property:"og:url",message:"Missing og:url."}),t.value.twitter["twitter:card"]||c.push({type:"warning",property:"twitter:card",message:'Missing twitter:card. Defaults to "summary".'}),t.value.ogImages.length){const o=t.value.ogImages[0];o.url&&!o.url.startsWith("http")&&c.push({type:"error",property:"og:image",message:"og:image must be an absolute URL."});const r=Number.parseInt(o.width||"0"),u=Number.parseInt(o.height||"0");r&&u&&(r<200||u<200)&&c.push({type:"warning",property:"og:image",message:`Image is ${r}x${u}. Minimum recommended: 200x200, ideal: 1200x630.`})}return c}),d=h(()=>t.value?.og["og:title"]||t.value?.twitter["twitter:title"]||t.value?.title||"Untitled"),$=h(()=>t.value?.og["og:description"]||t.value?.twitter["twitter:description"]||t.value?.description||""),g=h(()=>t.value?.ogImages[0]?.url||t.value?.twitter["twitter:image"]||null),k=h(()=>{if(t.value?.og["og:site_name"])return t.value.og["og:site_name"];try{return new URL(t.value?.url||"").hostname}catch{return""}}),R=h(()=>t.value?Object.keys(t.value.og).length:0),V=h(()=>t.value?Object.keys(t.value.twitter).length:0);function W(c,o){const r=se(c),u=[];r.ogTags["og:image"]&&u.push({url:r.ogTags["og:image"],width:r.ogTags["og:image:width"],height:r.ogTags["og:image:height"],alt:r.ogTags["og:image:alt"]});let I="";try{I=new URL(o).hostname}catch{I=o}return{title:r.title,description:r.description,url:o,siteName:r.ogTags["og:site_name"]||I,og:r.ogTags,ogImages:u,twitter:r.twitterTags,twitterCard:r.twitterTags["twitter:card"]||"summary"}}async function j(){N.value=!0,y.value=null,t.value=null;try{const o=`${window.parent?.location?.origin||window.location.origin}${z.value}`,r=await fetch(o,{headers:{Accept:"text/html"}});if(!r.ok)throw new Error(`HTTP ${r.status}`);const u=await r.text();t.value=W(u,o)}catch(c){y.value=c.message||"Failed to fetch page"}finally{N.value=!1}}return H([()=>M.value,z,J],()=>{M.value&&j()},{immediate:!0}),(c,o)=>{const r=X,u=K,I=te,T=oe,b=Q,S=Y,D=Z,G=ae;return a(),l("div",le,[N.value?(a(),w(r,{key:0})):y.value?(a(),w(I,{key:1,error:y.value,title:"Failed to check page"},{default:v(()=>[i(u,{size:"sm",variant:"ghost",icon:"carbon:reset",label:"Retry",onClick:j})]),_:1},8,["error"])):t.value?(a(),l(f,{key:2},[x.value.length?(a(),w(S,{key:0,icon:"carbon:warning",text:"Warnings"},{actions:v(()=>[i(T,{value:x.value.filter(s=>s.type==="error").length,label:"errors",variant:x.value.some(s=>s.type==="error")?"danger":void 0},null,8,["value","variant"]),i(T,{value:x.value.filter(s=>s.type==="warning").length,label:"warnings",variant:x.value.some(s=>s.type==="warning")?"warning":void 0},null,8,["value","variant"])]),default:v(()=>[e("div",ne,[(a(!0),l(f,null,C(x.value,s=>(a(),l("div",{key:s.property+s.message,class:"social-issue-row"},[i(b,{name:s.type==="error"?"carbon:close-filled":"carbon:warning-filled",class:B(["mt-0.5 shrink-0",s.type==="error"?"text-red-500":"text-amber-500"])},null,8,["name","class"]),e("div",re,[e("span",ie,n(s.property),1),e("p",ce,n(s.message),1)])]))),128))])]),_:1})):p("",!0),i(S,{icon:"carbon:view",text:"Social Preview",padding:!1},{default:v(()=>[e("div",ue,[(a(),l(f,null,C(P,s=>e("button",{key:s.value,class:B(["social-tab",{"social-tab--active":_.value===s.value}]),onClick:m=>_.value=s.value},[i(b,{name:s.icon,class:"text-sm"},null,8,["name"]),e("span",ge,n(s.label),1)],10,de)),64))]),e("div",ve,[_.value==="twitter"?(a(),l("div",pe,[e("div",me,[g.value?(a(),l("div",_e,[e("img",{src:g.value,class:"w-full h-full object-cover",alt:d.value},null,8,he)])):(a(),l("div",xe,[i(b,{name:"carbon:image",class:"text-2xl"}),o[1]||(o[1]=e("span",null,"No og:image",-1))])),e("div",be,[e("p",we,n(k.value),1),e("p",fe,n(d.value),1),e("p",ye,n($.value),1)])])])):p("",!0),_.value==="facebook"?(a(),l("div",ke,[e("div",Ie,[g.value?(a(),l("div",Te,[e("img",{src:g.value,class:"w-full h-full object-cover",alt:d.value},null,8,Ce)])):(a(),l("div",Ne,[i(b,{name:"carbon:image",class:"text-2xl"}),o[2]||(o[2]=e("span",null,"No og:image",-1))])),e("div",$e,[e("p",Se,n(k.value),1),e("p",Ue,n(d.value),1),e("p",je,n($.value),1)])])])):p("",!0),_.value==="linkedin"?(a(),l("div",De,[e("div",Me,[g.value?(a(),l("div",ze,[e("img",{src:g.value,class:"w-full h-full object-cover",alt:d.value},null,8,Be)])):(a(),l("div",Fe,[i(b,{name:"carbon:image",class:"text-2xl"}),o[3]||(o[3]=e("span",null,"No og:image",-1))])),e("div",Le,[e("p",Oe,n(d.value),1),e("p",Ee,n(k.value),1)])])])):p("",!0),_.value==="discord"?(a(),l("div",Pe,[e("div",Re,[e("p",Ve,n(k.value),1),e("p",We,n(d.value),1),e("p",Ge,n($.value),1),g.value?(a(),l("div",Ae,[e("img",{src:g.value,class:"w-full object-cover",alt:d.value},null,8,qe)])):(a(),l("div",He,[i(b,{name:"carbon:image",class:"text-xl"}),o[4]||(o[4]=e("span",null,"No image",-1))]))])])):p("",!0),_.value==="slack"?(a(),l("div",Je,[e("div",Xe,[e("p",Ke,n(k.value),1),e("p",Qe,n(d.value),1),e("p",Ye,n($.value),1),g.value?(a(),l("div",Ze,[e("img",{src:g.value,class:"w-full object-cover",alt:d.value},null,8,et)])):p("",!0)])])):p("",!0)])]),_:1}),i(S,{icon:"carbon:tag-group",text:"Open Graph Tags"},{actions:v(()=>[i(T,{value:R.value,label:"og"},null,8,["value"]),i(T,{value:V.value,label:"twitter"},null,8,["value"]),i(u,{size:"xs",variant:"ghost",color:"neutral",icon:"carbon:copy",label:L(E)?"Copied!":"Copy",onClick:o[0]||(o[0]=s=>L(O)(JSON.stringify({og:t.value.og,twitter:t.value.twitter},null,2)))},null,8,["label"])]),default:v(()=>[e("div",tt,[(a(!0),l(f,null,C(t.value.og,(s,m)=>(a(),l("div",{key:m,class:"social-tags-table__row"},[i(D,{color:"primary",variant:"subtle",size:"xs"},{default:v(()=>[...o[5]||(o[5]=[F(" og ",-1)])]),_:1}),e("span",at,n(m),1),e("span",st,n(s),1)]))),128)),(a(!0),l(f,null,C(t.value.twitter,(s,m)=>(a(),l("div",{key:m,class:"social-tags-table__row"},[i(D,{color:"neutral",variant:"subtle",size:"xs"},{default:v(()=>[...o[6]||(o[6]=[F(" twitter ",-1)])]),_:1}),e("span",ot,n(m),1),e("span",lt,n(s),1)]))),128))])]),_:1}),t.value.ogImages.length?(a(),w(S,{key:1,icon:"carbon:image",text:"OG Image"},{actions:v(()=>[t.value.ogImages[0]?.width&&t.value.ogImages[0]?.height?(a(),w(T,{key:0,value:`${t.value.ogImages[0].width}×${t.value.ogImages[0].height}`,label:"px"},null,8,["value"])):p("",!0)]),default:v(()=>[(a(!0),l(f,null,C(t.value.ogImages,(s,m)=>(a(),l("div",{key:m,class:"space-y-2"},[e("div",nt,[e("img",{src:s.url,class:"w-full max-h-64 object-contain bg-neutral-100 dark:bg-neutral-800",alt:s.alt||"OG Image"},null,8,rt)]),e("div",it,[e("span",ct,n(s.url),1)])]))),128))]),_:1})):p("",!0)],64)):!N.value&&!y.value?(a(),w(G,{key:3,icon:"carbon:share",title:"Waiting for connection",description:"Waiting for connection to host app..."})):p("",!0)])}}}),mt=ee(ut,[["__scopeId","data-v-59fbea83"]]);export{mt as default};
1
+ import{d as A,u as q,s as H,q as M,v as z,x as J,o as a,g as l,c as w,y as X,w as v,b as i,e as K,F as f,i as e,m as C,A as Q,n as B,j as n,p as Y,k as p,C as Z,z as F,a as L,r as U,f as h,l as ee}from"./BTsue9pl.js";import{_ as te,a as ae,p as se}from"./DF4WSqh9.js";import{_ as oe}from"./CNGTv5Eg.js";const le={class:"space-y-5 stagger-children"},ne={class:"space-y-1"},re={class:"min-w-0"},ie={class:"font-mono text-xs"},ce={class:"text-xs text-[var(--color-text-muted)]"},ue={class:"social-tab-bar"},de=["onClick"],ge={class:"social-tab__label"},ve={class:"social-preview-stage"},pe={key:0,class:"social-preview-card"},me={class:"rounded-2xl overflow-hidden border border-neutral-200 dark:border-neutral-700"},_e={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-800"},he=["src","alt"],xe={key:1,class:"social-image-placeholder aspect-[1.91/1]"},be={class:"p-3"},we={class:"text-xs text-neutral-500"},fe={class:"text-sm font-medium line-clamp-1"},ye={class:"text-xs text-neutral-500 line-clamp-2"},ke={key:1,class:"social-preview-card"},Ie={class:"rounded-lg overflow-hidden border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800"},Te={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-700"},Ce=["src","alt"],Ne={key:1,class:"social-image-placeholder aspect-[1.91/1]"},$e={class:"p-3"},Se={class:"text-[11px] text-neutral-500 uppercase tracking-wider"},Ue={class:"text-base font-semibold line-clamp-1 mt-0.5"},je={class:"text-sm text-neutral-500 line-clamp-1 mt-0.5"},De={key:2,class:"social-preview-card"},Me={class:"rounded-lg overflow-hidden border border-neutral-200 dark:border-neutral-700"},ze={key:0,class:"aspect-[1.91/1] bg-neutral-100 dark:bg-neutral-800"},Be=["src","alt"],Fe={key:1,class:"social-image-placeholder aspect-[1.91/1]"},Le={class:"p-3 bg-neutral-50 dark:bg-neutral-800"},Oe={class:"text-sm font-semibold line-clamp-2"},Ee={class:"text-xs text-neutral-500 mt-1"},Pe={key:3,class:"social-preview-card"},Re={class:"rounded-lg overflow-hidden border-l-4 border-[#5865F2] bg-[#2f3136] text-white p-4"},Ve={class:"text-xs text-neutral-400 mb-1"},We={class:"text-[#00aff4] text-sm font-semibold hover:underline cursor-pointer"},Ge={class:"text-sm text-neutral-300 mt-1 line-clamp-2"},Ae={key:0,class:"mt-3 rounded-lg overflow-hidden max-w-[300px]"},qe=["src","alt"],He={key:1,class:"social-image-placeholder social-image-placeholder--discord mt-3 max-w-[300px] aspect-video rounded-lg"},Je={key:4,class:"social-preview-card"},Xe={class:"rounded-lg overflow-hidden border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 py-2"},Ke={class:"text-xs text-neutral-500 font-bold mb-1"},Qe={class:"text-[#1264a3] dark:text-[#1d9bd1] text-sm font-bold hover:underline cursor-pointer"},Ye={class:"text-sm text-neutral-600 dark:text-neutral-400 mt-0.5 line-clamp-2"},Ze={key:0,class:"mt-2 rounded overflow-hidden max-w-[360px]"},et=["src","alt"],tt={class:"social-tags-table"},at={class:"text-sm font-mono shrink-0 text-[var(--color-text)]"},st={class:"text-xs text-[var(--color-text-muted)] truncate min-w-0 flex-1 text-right font-mono"},ot={class:"text-sm font-mono shrink-0 text-[var(--color-text)]"},lt={class:"text-xs text-[var(--color-text-muted)] truncate min-w-0 flex-1 text-right font-mono"},nt={class:"rounded-lg overflow-hidden border border-[var(--color-border)]"},rt=["src","alt"],it={class:"flex items-center gap-2 text-xs text-[var(--color-text-muted)] font-mono"},ct={class:"truncate"},ut=A({__name:"social",setup(dt){const{copy:O,copied:E}=q(),N=U(!1),y=U(null),t=U(null),_=U("twitter"),P=[{label:"X / Twitter",value:"twitter",icon:"carbon:logo-x"},{label:"Facebook",value:"facebook",icon:"carbon:logo-facebook"},{label:"LinkedIn",value:"linkedin",icon:"carbon:logo-linkedin"},{label:"Discord",value:"discord",icon:"carbon:logo-discord"},{label:"Slack",value:"slack",icon:"carbon:logo-slack"}],x=h(()=>{if(!t.value)return[];const c=[];if(t.value.og["og:title"]||c.push({type:"warning",property:"og:title",message:"Missing og:title. Social previews will use the page title as fallback."}),t.value.og["og:description"]||c.push({type:"warning",property:"og:description",message:"Missing og:description."}),t.value.ogImages.length||c.push({type:"warning",property:"og:image",message:"No og:image found. Posts with images get higher engagement."}),t.value.og["og:url"]||c.push({type:"warning",property:"og:url",message:"Missing og:url."}),t.value.twitter["twitter:card"]||c.push({type:"warning",property:"twitter:card",message:'Missing twitter:card. Defaults to "summary".'}),t.value.ogImages.length){const o=t.value.ogImages[0];o.url&&!o.url.startsWith("http")&&c.push({type:"error",property:"og:image",message:"og:image must be an absolute URL."});const r=Number.parseInt(o.width||"0"),u=Number.parseInt(o.height||"0");r&&u&&(r<200||u<200)&&c.push({type:"warning",property:"og:image",message:`Image is ${r}x${u}. Minimum recommended: 200x200, ideal: 1200x630.`})}return c}),d=h(()=>t.value?.og["og:title"]||t.value?.twitter["twitter:title"]||t.value?.title||"Untitled"),$=h(()=>t.value?.og["og:description"]||t.value?.twitter["twitter:description"]||t.value?.description||""),g=h(()=>t.value?.ogImages[0]?.url||t.value?.twitter["twitter:image"]||null),k=h(()=>{if(t.value?.og["og:site_name"])return t.value.og["og:site_name"];try{return new URL(t.value?.url||"").hostname}catch{return""}}),R=h(()=>t.value?Object.keys(t.value.og).length:0),V=h(()=>t.value?Object.keys(t.value.twitter).length:0);function W(c,o){const r=se(c),u=[];r.ogTags["og:image"]&&u.push({url:r.ogTags["og:image"],width:r.ogTags["og:image:width"],height:r.ogTags["og:image:height"],alt:r.ogTags["og:image:alt"]});let I="";try{I=new URL(o).hostname}catch{I=o}return{title:r.title,description:r.description,url:o,siteName:r.ogTags["og:site_name"]||I,og:r.ogTags,ogImages:u,twitter:r.twitterTags,twitterCard:r.twitterTags["twitter:card"]||"summary"}}async function j(){N.value=!0,y.value=null,t.value=null;try{const o=`${window.parent?.location?.origin||window.location.origin}${z.value}`,r=await fetch(o,{headers:{Accept:"text/html"}});if(!r.ok)throw new Error(`HTTP ${r.status}`);const u=await r.text();t.value=W(u,o)}catch(c){y.value=c.message||"Failed to fetch page"}finally{N.value=!1}}return H([()=>M.value,z,J],()=>{M.value&&j()},{immediate:!0}),(c,o)=>{const r=X,u=K,I=te,T=oe,b=Q,S=Y,D=Z,G=ae;return a(),l("div",le,[N.value?(a(),w(r,{key:0})):y.value?(a(),w(I,{key:1,error:y.value,title:"Failed to check page"},{default:v(()=>[i(u,{size:"sm",variant:"ghost",icon:"carbon:reset",label:"Retry",onClick:j})]),_:1},8,["error"])):t.value?(a(),l(f,{key:2},[x.value.length?(a(),w(S,{key:0,icon:"carbon:warning",text:"Warnings"},{actions:v(()=>[i(T,{value:x.value.filter(s=>s.type==="error").length,label:"errors",variant:x.value.some(s=>s.type==="error")?"danger":void 0},null,8,["value","variant"]),i(T,{value:x.value.filter(s=>s.type==="warning").length,label:"warnings",variant:x.value.some(s=>s.type==="warning")?"warning":void 0},null,8,["value","variant"])]),default:v(()=>[e("div",ne,[(a(!0),l(f,null,C(x.value,s=>(a(),l("div",{key:s.property+s.message,class:"social-issue-row"},[i(b,{name:s.type==="error"?"carbon:close-filled":"carbon:warning-filled",class:B(["mt-0.5 shrink-0",s.type==="error"?"text-red-500":"text-amber-500"])},null,8,["name","class"]),e("div",re,[e("span",ie,n(s.property),1),e("p",ce,n(s.message),1)])]))),128))])]),_:1})):p("",!0),i(S,{icon:"carbon:view",text:"Social Preview",padding:!1},{default:v(()=>[e("div",ue,[(a(),l(f,null,C(P,s=>e("button",{key:s.value,class:B(["social-tab",{"social-tab--active":_.value===s.value}]),onClick:m=>_.value=s.value},[i(b,{name:s.icon,class:"text-sm"},null,8,["name"]),e("span",ge,n(s.label),1)],10,de)),64))]),e("div",ve,[_.value==="twitter"?(a(),l("div",pe,[e("div",me,[g.value?(a(),l("div",_e,[e("img",{src:g.value,class:"w-full h-full object-cover",alt:d.value},null,8,he)])):(a(),l("div",xe,[i(b,{name:"carbon:image",class:"text-2xl"}),o[1]||(o[1]=e("span",null,"No og:image",-1))])),e("div",be,[e("p",we,n(k.value),1),e("p",fe,n(d.value),1),e("p",ye,n($.value),1)])])])):p("",!0),_.value==="facebook"?(a(),l("div",ke,[e("div",Ie,[g.value?(a(),l("div",Te,[e("img",{src:g.value,class:"w-full h-full object-cover",alt:d.value},null,8,Ce)])):(a(),l("div",Ne,[i(b,{name:"carbon:image",class:"text-2xl"}),o[2]||(o[2]=e("span",null,"No og:image",-1))])),e("div",$e,[e("p",Se,n(k.value),1),e("p",Ue,n(d.value),1),e("p",je,n($.value),1)])])])):p("",!0),_.value==="linkedin"?(a(),l("div",De,[e("div",Me,[g.value?(a(),l("div",ze,[e("img",{src:g.value,class:"w-full h-full object-cover",alt:d.value},null,8,Be)])):(a(),l("div",Fe,[i(b,{name:"carbon:image",class:"text-2xl"}),o[3]||(o[3]=e("span",null,"No og:image",-1))])),e("div",Le,[e("p",Oe,n(d.value),1),e("p",Ee,n(k.value),1)])])])):p("",!0),_.value==="discord"?(a(),l("div",Pe,[e("div",Re,[e("p",Ve,n(k.value),1),e("p",We,n(d.value),1),e("p",Ge,n($.value),1),g.value?(a(),l("div",Ae,[e("img",{src:g.value,class:"w-full object-cover",alt:d.value},null,8,qe)])):(a(),l("div",He,[i(b,{name:"carbon:image",class:"text-xl"}),o[4]||(o[4]=e("span",null,"No image",-1))]))])])):p("",!0),_.value==="slack"?(a(),l("div",Je,[e("div",Xe,[e("p",Ke,n(k.value),1),e("p",Qe,n(d.value),1),e("p",Ye,n($.value),1),g.value?(a(),l("div",Ze,[e("img",{src:g.value,class:"w-full object-cover",alt:d.value},null,8,et)])):p("",!0)])])):p("",!0)])]),_:1}),i(S,{icon:"carbon:tag-group",text:"Open Graph Tags"},{actions:v(()=>[i(T,{value:R.value,label:"og"},null,8,["value"]),i(T,{value:V.value,label:"twitter"},null,8,["value"]),i(u,{size:"xs",variant:"ghost",color:"neutral",icon:"carbon:copy",label:L(E)?"Copied!":"Copy",onClick:o[0]||(o[0]=s=>L(O)(JSON.stringify({og:t.value.og,twitter:t.value.twitter},null,2)))},null,8,["label"])]),default:v(()=>[e("div",tt,[(a(!0),l(f,null,C(t.value.og,(s,m)=>(a(),l("div",{key:m,class:"social-tags-table__row"},[i(D,{color:"primary",variant:"subtle",size:"xs"},{default:v(()=>[...o[5]||(o[5]=[F(" og ",-1)])]),_:1}),e("span",at,n(m),1),e("span",st,n(s),1)]))),128)),(a(!0),l(f,null,C(t.value.twitter,(s,m)=>(a(),l("div",{key:m,class:"social-tags-table__row"},[i(D,{color:"neutral",variant:"subtle",size:"xs"},{default:v(()=>[...o[6]||(o[6]=[F(" twitter ",-1)])]),_:1}),e("span",ot,n(m),1),e("span",lt,n(s),1)]))),128))])]),_:1}),t.value.ogImages.length?(a(),w(S,{key:1,icon:"carbon:image",text:"OG Image"},{actions:v(()=>[t.value.ogImages[0]?.width&&t.value.ogImages[0]?.height?(a(),w(T,{key:0,value:`${t.value.ogImages[0].width}×${t.value.ogImages[0].height}`,label:"px"},null,8,["value"])):p("",!0)]),default:v(()=>[(a(!0),l(f,null,C(t.value.ogImages,(s,m)=>(a(),l("div",{key:m,class:"space-y-2"},[e("div",nt,[e("img",{src:s.url,class:"w-full max-h-64 object-contain bg-neutral-100 dark:bg-neutral-800",alt:s.alt||"OG Image"},null,8,rt)]),e("div",it,[e("span",ct,n(s.url),1)])]))),128))]),_:1})):p("",!0)],64)):!N.value&&!y.value?(a(),w(G,{key:3,icon:"carbon:share",title:"Waiting for connection",description:"Waiting for connection to host app..."})):p("",!0)])}}}),mt=ee(ut,[["__scopeId","data-v-59fbea83"]]);export{mt as default};
@@ -0,0 +1 @@
1
+ .devtools-error[data-v-e4477e9a]{flex-direction:column;gap:.75rem;padding:3rem 1.5rem;text-align:center}.devtools-error[data-v-e4477e9a],.devtools-error-icon-wrap[data-v-e4477e9a]{align-items:center;display:flex;justify-content:center}.devtools-error-icon-wrap[data-v-e4477e9a]{background:#dc655f1a;border-radius:var(--radius-lg);height:3rem;width:3rem}.dark .devtools-error-icon-wrap[data-v-e4477e9a]{background:#843c3826}.devtools-error-icon[data-v-e4477e9a]{color:#d74745;font-size:1.5rem}.dark .devtools-error-icon[data-v-e4477e9a]{color:#ed756e}.devtools-error-title[data-v-e4477e9a]{color:var(--color-text);font-size:.875rem;font-weight:600}.devtools-error-message[data-v-e4477e9a]{color:var(--color-text-muted);font-size:.75rem;line-height:1.5;max-width:20rem}.devtools-error-actions[data-v-e4477e9a]{display:flex;gap:.5rem;margin-top:.25rem}.devtools-empty[data-v-f7b4b7ac]{align-items:center;display:flex;flex-direction:column;margin:0 auto;max-width:32rem;text-align:center}.devtools-empty-icon[data-v-f7b4b7ac]{align-items:center;border-radius:var(--radius-lg);display:inline-flex;height:4rem;justify-content:center;margin-bottom:1.5rem;width:4rem}.devtools-empty-icon-default[data-v-f7b4b7ac]{background:#11ad321f;color:var(--seo-green)}.dark .devtools-empty-icon-default[data-v-f7b4b7ac]{background:#11ad3226}.devtools-empty-icon-error[data-v-f7b4b7ac]{background:#cc272e1f;color:#cc272e}.dark .devtools-empty-icon-error[data-v-f7b4b7ac]{background:#cc272e26;color:#ff847d}.devtools-empty-title[data-v-f7b4b7ac]{color:var(--color-text);font-size:1.125rem;font-weight:600;margin-bottom:.75rem}@media(min-width:640px){.devtools-empty-title[data-v-f7b4b7ac]{font-size:1.25rem}}.devtools-empty-description[data-v-f7b4b7ac]{color:var(--color-text-muted);font-size:.875rem;line-height:1.5;margin-bottom:1.25rem}@media(min-width:640px){.devtools-empty-description[data-v-f7b4b7ac]{font-size:1rem}}.devtools-empty-actions[data-v-f7b4b7ac]{align-items:center;display:flex;flex-direction:column;gap:.75rem}
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.p5YGwGey.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"54b86ea9-8a8b-4391-9b24-d67fd4c26ab7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774546190835,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.64xQvwV4.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/BTsue9pl.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/BTsue9pl.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"0641d6c1-07c3-4fba-894b-5c40a3adb703",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774860683135,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.p5YGwGey.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"54b86ea9-8a8b-4391-9b24-d67fd4c26ab7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774546190836,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.64xQvwV4.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/BTsue9pl.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/BTsue9pl.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"0641d6c1-07c3-4fba-894b-5c40a3adb703",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774860683136,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.p5YGwGey.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"54b86ea9-8a8b-4391-9b24-d67fd4c26ab7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774546190836,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.64xQvwV4.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/BTsue9pl.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/BTsue9pl.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"0641d6c1-07c3-4fba-894b-5c40a3adb703",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774860683136,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.p5YGwGey.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT_SITE_CONFIG__={_priority:{env:-15},env:"production"}</script><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"54b86ea9-8a8b-4391-9b24-d67fd4c26ab7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774546190836,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.64xQvwV4.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/BTsue9pl.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/BTsue9pl.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT_SITE_CONFIG__={_priority:{env:-15},env:"production"}</script><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"0641d6c1-07c3-4fba-894b-5c40a3adb703",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774860683137,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.p5YGwGey.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/V_pMFIP3.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"54b86ea9-8a8b-4391-9b24-d67fd4c26ab7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774546190836,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-seo-utils/_nuxt/entry.64xQvwV4.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-seo-utils/_nuxt/BTsue9pl.js"><script type="module" src="/__nuxt-seo-utils/_nuxt/BTsue9pl.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{i18n:{baseUrl:"",defaultLocale:"",rootRedirect:"",redirectStatusCode:302,skipSettingLocaleOnNavigate:false,locales:[],detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",typedPages:true,typedOptionsAndMessages:false,alternateLinkCanonicalQueries:true,devCache:false,cacheLifetime:"",stripMessagesPayload:false,preload:false,strictSeo:false,nitroContextDetection:true,httpCacheDuration:10},domainLocales:{}}},app:{baseURL:"/__nuxt-seo-utils",buildId:"0641d6c1-07c3-4fba-894b-5c40a3adb703",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1774860683137,false]</script></body></html>
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.16.0"
6
6
  },
7
- "version": "8.1.2",
7
+ "version": "8.1.4",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -9,7 +9,7 @@ import { unpackMeta } from '@unhead/vue/utils';
9
9
  import { glob } from 'tinyglobby';
10
10
  import { encodePath, joinURL } from 'ufo';
11
11
  import escapeRE from 'escape-string-regexp';
12
- import { readFile } from 'node:fs/promises';
12
+ import { readFile, readdir } from 'node:fs/promises';
13
13
  import imageSize from 'image-size';
14
14
  import { setupDevToolsUI as setupDevToolsUI$1 } from 'nuxtseo-shared/devtools';
15
15
 
@@ -70,18 +70,22 @@ export {}
70
70
  });
71
71
  }
72
72
 
73
- const MetaTagFileGlobs = [
74
- "**/*og-image.{png,jpg,jpeg,gif}",
75
- "**/*opengraph-image.{png,jpg,jpeg,gif}",
76
- "**/*twitter-image.{png,jpg,jpeg,gif}",
77
- "**/*apple-icon.{jpg,jpeg,png}",
78
- "**/*apple-touch.{jpg,jpeg,png}",
79
- "**/*apple-touch-*.{jpg,jpeg,png}",
80
- "**/*apple-touch-icon.{jpg,jpeg,png}",
81
- "**/*apple-touch-icon-*.{jpg,jpeg,png}",
82
- "**/*icon.{ico,jpg,jpeg,png,svg}",
83
- "**/*icon-*.{ico,jpg,jpeg,png,svg}"
73
+ const MetaTagFileDeepGlobs = [
74
+ "**/og-image.{png,jpg,jpeg,gif}",
75
+ "**/opengraph-image.{png,jpg,jpeg,gif}",
76
+ "**/twitter-image.{png,jpg,jpeg,gif}",
77
+ "**/apple-icon.{jpg,jpeg,png}",
78
+ "**/apple-touch.{jpg,jpeg,png}",
79
+ "**/apple-touch-*.{jpg,jpeg,png}",
80
+ "**/apple-touch-icon.{jpg,jpeg,png}",
81
+ "**/apple-touch-icon-*.{jpg,jpeg,png}",
82
+ "**/icon.{ico,jpg,jpeg,png,svg}",
83
+ "**/icon-*.{ico,jpg,jpeg,png,svg}"
84
84
  ];
85
+ const META_TAG_FILE_RE = /^(?:(?:og-image|opengraph-image)\.(?:png|jpe?g|gif)|twitter-image\.(?:png|jpe?g|gif)|apple-(?:icon|touch|touch-icon)(?:-[^.]+)?\.(?:jpe?g|png)|icon(?:-[^.]+)?\.(?:ico|jpe?g|png|svg)|favicon\.ico)$/;
86
+ function isMetaTagFile(filename) {
87
+ return META_TAG_FILE_RE.test(filename);
88
+ }
85
89
 
86
90
  const INDEX_SUFFIX_RE = /-index$/;
87
91
  function generateNuxtPageFromFile(file, pagesDir) {
@@ -229,40 +233,43 @@ async function getImageDimensions(absolutePath) {
229
233
 
230
234
  const DIR_SUFFIX_RE = /\/_dir$/;
231
235
  async function generateTagsFromPageDirImages(nuxt = useNuxt()) {
232
- const pagesDir = resolve(nuxt.options.rootDir, nuxt.options.dir.pages);
233
- const files = await glob(MetaTagFileGlobs, { cwd: pagesDir, onlyFiles: true });
236
+ const pagesDirs = nuxt.options._layers.map((layer) => resolve(layer.config.rootDir, layer.config.dir?.pages || "pages")).filter((dir) => fs.existsSync(dir));
234
237
  const appendRouteRules = {};
235
238
  const devMiddlewareMap = {};
236
239
  const nitroOutputMap = [];
237
- for (const file of files) {
238
- const fileName = basename(file);
239
- const keyword = fileName.split(".")[0] || "";
240
- let { path } = generateNuxtPageFromFile(resolve(pagesDir, dirname(file)), pagesDir);
241
- const meta = await getImageMeta(pagesDir, file);
242
- if (path.endsWith("/_dir"))
243
- path = path.replace(DIR_SUFFIX_RE, "");
244
- const src = joinURL(path, fileName);
245
- if (["icon", "apple-touch-icon", "apple-icon"].includes(keyword) || keyword.startsWith("icon-")) {
246
- appendRouteRules[`${path}/**`] = {
247
- head: {
248
- link: [
249
- { rel: keyword, type: meta.type, href: src, sizes: meta.sizes }
250
- ]
251
- }
252
- };
253
- } else {
254
- appendRouteRules[`${path}/**`] = {
255
- seoMeta: {
256
- [["opengraph-image", "og-image"].includes(keyword) ? "ogImage" : "twitterImage"]: [{ url: src, ...meta, sizes: void 0 }]
257
- }
258
- };
240
+ for (const pagesDir of pagesDirs) {
241
+ const files = await glob(MetaTagFileDeepGlobs, { cwd: pagesDir, onlyFiles: true });
242
+ for (const file of files) {
243
+ const fileName = basename(file);
244
+ const keyword = fileName.split(".")[0] || "";
245
+ let { path } = generateNuxtPageFromFile(resolve(pagesDir, dirname(file)), pagesDir);
246
+ const meta = await getImageMeta(pagesDir, file);
247
+ if (path.endsWith("/_dir"))
248
+ path = path.replace(DIR_SUFFIX_RE, "");
249
+ const src = joinURL(path, fileName);
250
+ if (appendRouteRules[`${path}/**`])
251
+ continue;
252
+ if (["icon", "apple-touch-icon", "apple-icon"].includes(keyword) || keyword.startsWith("icon-")) {
253
+ appendRouteRules[`${path}/**`] = {
254
+ head: {
255
+ link: [
256
+ { rel: keyword, type: meta.type, href: src, sizes: meta.sizes }
257
+ ]
258
+ }
259
+ };
260
+ } else {
261
+ appendRouteRules[`${path}/**`] = {
262
+ seoMeta: {
263
+ [["opengraph-image", "og-image"].includes(keyword) ? "ogImage" : "twitterImage"]: [{ url: src, ...meta, sizes: void 0 }]
264
+ }
265
+ };
266
+ }
267
+ devMiddlewareMap[src] = resolve(pagesDir, file);
268
+ nitroOutputMap.push({
269
+ src: resolve(pagesDir, file),
270
+ dest: src.slice(1)
271
+ });
259
272
  }
260
- devMiddlewareMap[src] = resolve(pagesDir, file);
261
- nitroOutputMap.push({
262
- src: resolve(pagesDir, file),
263
- dest: src.slice(1)
264
- // remove leading slash
265
- });
266
273
  }
267
274
  nuxt.options.routeRules = defu(appendRouteRules, nuxt.options.routeRules);
268
275
  nuxt.options.nitro.routeRules = defu(appendRouteRules, nuxt.options.nitro.routeRules);
@@ -284,9 +291,24 @@ async function generateTagsFromPageDirImages(nuxt = useNuxt()) {
284
291
  });
285
292
  }
286
293
 
294
+ async function listMetaTagFiles(dir) {
295
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
296
+ return entries.filter((e) => e.isFile() && isMetaTagFile(e.name)).map((e) => e.name);
297
+ }
287
298
  async function generateTagsFromPublicFiles(nuxt = useNuxt()) {
288
- const publicDirPath = resolve(nuxt.options.rootDir, nuxt.options.dir.public);
289
- const rootPublicFiles = (await glob(MetaTagFileGlobs, { cwd: publicDirPath, onlyFiles: true, deep: 1 })).map((file) => basename(file));
299
+ const publicDirs = nuxt.options._layers.map((layer) => resolve(layer.config.rootDir, layer.config.dir?.public || "public"));
300
+ const seen = /* @__PURE__ */ new Set();
301
+ const fileEntries = [];
302
+ for (const dir of publicDirs) {
303
+ const files = await listMetaTagFiles(dir);
304
+ for (const file of files) {
305
+ if (!seen.has(file)) {
306
+ seen.add(file);
307
+ fileEntries.push({ file, dir });
308
+ }
309
+ }
310
+ }
311
+ const rootPublicFiles = fileEntries.map((e) => e.file);
290
312
  const headConfig = defu(nuxt.options.app.head, {
291
313
  link: [],
292
314
  meta: []
@@ -301,10 +323,11 @@ async function generateTagsFromPublicFiles(nuxt = useNuxt()) {
301
323
  }
302
324
  const isIcon = (file) => file.includes("icon") && !file.endsWith(".ico");
303
325
  const isAppleTouchIcon = (file) => file.includes("apple-icon") || file.includes("apple-touch-icon") || file.includes("apple-touch");
326
+ const resolveDir = (file) => fileEntries.find((e) => e.file === file).dir;
304
327
  headConfig.link.push(
305
328
  ...await Promise.all([
306
329
  ...rootPublicFiles.filter((file) => isIcon(file) && !isAppleTouchIcon(file)).sort().map(async (iconFile) => {
307
- const meta = await getImageMeta(publicDirPath, iconFile, true);
330
+ const meta = await getImageMeta(resolveDir(iconFile), iconFile, true);
308
331
  return {
309
332
  rel: "icon",
310
333
  href: joinURL(nuxt.options.app.baseURL, iconFile),
@@ -312,7 +335,7 @@ async function generateTagsFromPublicFiles(nuxt = useNuxt()) {
312
335
  };
313
336
  }),
314
337
  ...rootPublicFiles.filter((file) => isAppleTouchIcon(file)).sort().map(async (appleIconFile) => {
315
- const meta = await getImageMeta(publicDirPath, appleIconFile, true);
338
+ const meta = await getImageMeta(resolveDir(appleIconFile), appleIconFile, true);
316
339
  return {
317
340
  rel: "apple-touch-icon",
318
341
  href: joinURL(nuxt.options.app.baseURL, appleIconFile),
@@ -328,7 +351,7 @@ async function generateTagsFromPublicFiles(nuxt = useNuxt()) {
328
351
  if (twitterImageFiles.length) {
329
352
  headConfig.meta.push(
330
353
  ...(await Promise.all(twitterImageFiles.map(async (twitterImageFile) => {
331
- const dimensions = await getImageDimensions(resolve(publicDirPath, twitterImageFile));
354
+ const dimensions = await getImageDimensions(resolve(fileEntries.find((e) => e.file === twitterImageFile).dir, twitterImageFile));
332
355
  return unpackMeta({
333
356
  twitterImage: {
334
357
  url: twitterImageFile,
@@ -346,7 +369,7 @@ async function generateTagsFromPublicFiles(nuxt = useNuxt()) {
346
369
  if (ogImageFiles.length) {
347
370
  headConfig.meta.push(
348
371
  ...(await Promise.all(ogImageFiles.map(async (src) => {
349
- const meta = await getImageMeta(publicDirPath, src, false);
372
+ const meta = await getImageMeta(fileEntries.find((e) => e.file === src).dir, src, false);
350
373
  delete meta.sizes;
351
374
  const seoMeta = {
352
375
  ogImage: {
@@ -684,7 +707,7 @@ const module$1 = defineNuxtModule({
684
707
  nuxt.options.alias["#seo-utils"] = runtimeDir;
685
708
  nuxt.options.runtimeConfig.public["nuxt-seo-utils-version"] = nuxt.options.runtimeConfig.public["nuxt-seo-utils-version"] || version || "";
686
709
  nuxt.options.runtimeConfig.public["seo-utils"] = defu(nuxt.options.runtimeConfig.public["seo-utils"] || {}, {
687
- canonicalQueryWhitelist: config.canonicalQueryWhitelist || [
710
+ canonicalQueryWhitelist: config.canonicalQueryWhitelist ?? [
688
711
  "page",
689
712
  "sort",
690
713
  "filter",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-seo-utils",
3
3
  "type": "module",
4
- "version": "8.1.2",
4
+ "version": "8.1.4",
5
5
  "description": "SEO utilities to improve your Nuxt sites discoverability and shareability",
6
6
  "license": "MIT",
7
7
  "funding": "https://github.com/sponsors/harlan-zw",
@@ -61,8 +61,8 @@
61
61
  "escape-string-regexp": "^5.0.0",
62
62
  "image-size": "^2.0.2",
63
63
  "nuxt-site-config": "^4.0.7",
64
- "nuxtseo-layer-devtools": "^5.0.1",
65
- "nuxtseo-shared": "^5.0.1",
64
+ "nuxtseo-layer-devtools": "^5.1.0",
65
+ "nuxtseo-shared": "^5.1.0",
66
66
  "pathe": "^2.0.3",
67
67
  "pkg-types": "^2.3.0",
68
68
  "scule": "^1.3.0",
@@ -89,7 +89,7 @@
89
89
  "cheerio": "^1.2.0",
90
90
  "eslint": "^10.1.0",
91
91
  "eslint-plugin-harlanzw": "^0.12.0",
92
- "happy-dom": "^20.8.8",
92
+ "happy-dom": "^20.8.9",
93
93
  "lint-staged": "^16.4.0",
94
94
  "markdownlint-cli": "^0.48.0",
95
95
  "nuxt": "^4.4.2",
@@ -1 +0,0 @@
1
- import{d as E,o as a,g as c,i as d,b,A as C,j as p,k as m,h as A,l as k,n as $,z as w}from"./V_pMFIP3.js";const q={class:"devtools-error"},D={class:"devtools-error-icon-wrap"},M={class:"devtools-error-title"},R={key:0,class:"devtools-error-message"},N={key:1,class:"devtools-error-actions"},L=E({__name:"DevtoolsError",props:{icon:{default:"carbon:warning"},title:{default:"Something went wrong"},error:{}},setup(t){return(n,s)=>{const i=C;return a(),c("div",q,[d("div",D,[b(i,{name:t.icon,class:"devtools-error-icon"},null,8,["name"])]),d("p",M,p(t.title),1),t.error?(a(),c("p",R,p(typeof t.error=="string"?t.error:t.error.message),1)):m("",!0),n.$slots.default?(a(),c("div",N,[A(n.$slots,"default",{},void 0,!0)])):m("",!0)])}}}),P=Object.assign(k(L,[["__scopeId","data-v-98d242a0"]]),{__name:"DevtoolsError"}),X={class:"devtools-empty"},H={class:"devtools-empty-title"},O={key:0,class:"devtools-empty-description"},x={key:1,class:"devtools-empty-actions"},j=E({__name:"DevtoolsEmptyState",props:{icon:{default:"carbon:search"},title:{},description:{},variant:{default:"default"}},setup(t){return(n,s)=>{const i=C;return a(),c("div",X,[d("div",{class:$(["devtools-empty-icon",`devtools-empty-icon-${t.variant}`])},[b(i,{name:t.icon,class:"w-8 h-8","aria-hidden":"true"},null,8,["name"])],2),d("h2",H,p(t.title),1),t.description||n.$slots.description?(a(),c("p",O,[A(n.$slots,"description",{},()=>[w(p(t.description),1)],!0)])):m("",!0),n.$slots.default?(a(),c("div",x,[A(n.$slots,"default",{},void 0,!0)])):m("",!0)])}}}),V=Object.assign(k(j,[["__scopeId","data-v-72d2ca37"]]),{__name:"DevtoolsEmptyState"}),y={TITLE_MAX_CHARS:60,TITLE_WARN_CHARS:50,TITLE_MAX_PIXELS:580,DESC_MAX_CHARS:160,DESC_WARN_CHARS:150,DESC_MAX_PIXELS:920};function W(t,n=16){return Math.round(t.length*n*.55)}function B(t){const s=new DOMParser().parseFromString(t,"text/html"),i=s.querySelector("title")?.textContent?.trim()||"",I=s.querySelector('meta[name="description"]')?.getAttribute("content")?.trim()||"",T=s.querySelector('link[rel="canonical"]')?.getAttribute("href")||"",v={};s.querySelectorAll('meta[property^="og:"]').forEach(e=>{const o=e.getAttribute("property"),r=e.getAttribute("content");o&&r&&(v[o]=r)});const g={};s.querySelectorAll('meta[name^="twitter:"]').forEach(e=>{const o=e.getAttribute("name"),r=e.getAttribute("content");o&&r&&(g[o]=r)});const l=[];s.querySelectorAll("meta").forEach(e=>{const o=e.getAttribute("name"),r=e.getAttribute("property"),u=e.getAttribute("http-equiv"),h=e.getAttribute("content")||"",f=e.getAttribute("media")||void 0;o?l.push({name:o,content:h,type:"name",media:f}):r?l.push({name:r,content:h,type:"property",media:f}):u&&l.push({name:u,content:h,type:"http-equiv",media:f})});const _=[];s.querySelectorAll('script[type="application/ld+json"]').forEach(e=>{const o=e.textContent?.trim()||"";try{const r=JSON.parse(o),u=r["@type"]||(r["@graph"]?"Graph":"Unknown");_.push({type:u,data:r,raw:o})}catch{_.push({type:"Invalid JSON",data:null,raw:o})}});const S=[];return s.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"], link[rel="shortcut icon"]').forEach(e=>{const o=e.getAttribute("href");o&&S.push({rel:e.getAttribute("rel")||"icon",href:o,type:e.getAttribute("type")||void 0,sizes:e.getAttribute("sizes")||void 0,media:e.getAttribute("media")||void 0})}),{title:i,description:I,ogTags:v,twitterTags:g,allMeta:l,canonical:T,schemas:_,iconLinks:S}}function U(t){return t>y.TITLE_MAX_CHARS?"error":t<30?"warning":"success"}function J(t){return t>y.DESC_MAX_CHARS?"error":t>y.DESC_WARN_CHARS||t<70?"warning":"success"}export{y as S,P as _,V as a,J as d,W as e,B as p,U as t};
@@ -1 +0,0 @@
1
- .devtools-metric[data-v-a55b9946]{align-items:center;border-radius:var(--radius-sm);display:inline-flex;font-size:.75rem;font-variant-numeric:tabular-nums;font-weight:500;gap:.375rem;padding:.25rem .625rem}.devtools-metric-icon[data-v-a55b9946]{flex-shrink:0;font-size:.875rem}.devtools-metric-value[data-v-a55b9946]{font-family:var(--font-mono);font-weight:600}.devtools-metric-label[data-v-a55b9946]{color:inherit;opacity:.7}.devtools-metric-default[data-v-a55b9946]{background:var(--color-surface-sunken);border:1px solid var(--color-border-subtle);color:var(--color-text)}.devtools-metric-success[data-v-a55b9946]{background:#6bc6701f;color:#107823}.dark .devtools-metric-success[data-v-a55b9946]{background:#10782326;color:#57cb60}.devtools-metric-warning[data-v-a55b9946]{background:#e1b75c1f;color:#906b00;color:oklch(55% .15 85)}.dark .devtools-metric-warning[data-v-a55b9946]{background:#906b0026;background:oklch(55% .12 85/.15);color:#d9a514}.devtools-metric-danger[data-v-a55b9946]{background:#ce70691a;color:#b94642}.dark .devtools-metric-danger[data-v-a55b9946]{background:#843c3826;color:#df7f78}.devtools-metric-info[data-v-a55b9946]{background:#8cdee21a;color:#007277;color:oklch(50% .12 200)}.dark .devtools-metric-info[data-v-a55b9946]{background:#00444726;background:oklch(35% .08 200/.15);color:#40b1b7}
@@ -1 +0,0 @@
1
- {"id":"54b86ea9-8a8b-4391-9b24-d67fd4c26ab7","timestamp":1774546180435,"prerendered":[]}
@@ -1 +0,0 @@
1
- .devtools-snippet[data-v-6466b502]{margin:.5rem .75rem}.devtools-snippet-header[data-v-6466b502]{align-items:center;display:flex;justify-content:space-between;margin-bottom:.375rem}.devtools-snippet-label[data-v-6466b502]{color:var(--color-text-muted);font-family:var(--font-mono);font-size:.6875rem;font-weight:500;letter-spacing:-.01em}.devtools-snippet-block[data-v-6466b502]{border-radius:var(--radius-sm);font-size:.6875rem;line-height:1.6;max-height:300px;overflow-y:auto;padding:.5rem .625rem!important}.devtools-kv-row[data-v-7156e643]{align-items:center;display:flex;gap:1rem;justify-content:space-between;padding:.625rem 1.25rem;transition:background-color .15s ease}.devtools-kv-row.devtools-kv-stacked[data-v-7156e643]{align-items:flex-start;flex-direction:column;gap:.375rem}.devtools-kv-row[data-v-7156e643]:hover{background:var(--color-surface-sunken)}.devtools-kv-striped[data-v-7156e643]:nth-child(2n){background:oklch(from var(--color-surface-sunken) l c h/.5)}.devtools-kv-key[data-v-7156e643]{color:var(--color-text-muted);flex-shrink:0;font-family:var(--font-mono);font-size:.8125rem}.devtools-kv-value-wrap[data-v-7156e643]{align-items:center;display:flex;gap:.5rem;min-width:0}.devtools-kv-value-wrap-full[data-v-7156e643]{width:100%}.devtools-kv-value[data-v-7156e643]{font-size:.8125rem;overflow-wrap:break-word;text-align:right;word-break:break-all}.devtools-kv-snippet[data-v-7156e643]{margin:0!important;width:100%}.devtools-kv-true[data-v-7156e643]{color:var(--seo-green)}.devtools-kv-false[data-v-7156e643]{color:#dc655f}.devtools-kv-empty[data-v-7156e643]{color:var(--color-text-subtle);font-style:italic}