+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pr-preview/pr-232/assets/chunks/chunk-DWHPiCBQ.js b/pr-preview/pr-232/assets/chunks/chunk-DWHPiCBQ.js
new file mode 100644
index 000000000..52faccc13
--- /dev/null
+++ b/pr-preview/pr-232/assets/chunks/chunk-DWHPiCBQ.js
@@ -0,0 +1 @@
+const l={context:void 0,registry:void 0};function AM(M){l.context=M}function se(){return{...l.context,id:`${l.context.id}${l.context.count++}-`,count:0}}const Le=(M,e)=>M===e,m=Symbol("solid-proxy"),zM=Symbol("solid-track"),eM={equals:Le};let RM=KM;const U=1,IM=2,BM={owned:null,cleanups:null,context:null,owner:null},yM={};var T=null;let sM=null,Te=null,A=null,w=null,Q=null,jM=0;function q(M,e){const I=A,i=T,N=M.length===0,t=e===void 0?i:e,j=N?BM:{owned:null,cleanups:null,context:t?t.context:null,owner:t},g=N?M:()=>M(()=>d(()=>uM(j)));T=j,A=null;try{return Z(g,!0)}finally{A=I,T=i}}function R(M,e){e=e?Object.assign({},eM,e):eM;const I={value:M,observers:null,observerSlots:null,comparator:e.equals||void 0},i=N=>(typeof N=="function"&&(N=N(I.value)),XM(I,N));return[FM.bind(I),i]}function fM(M,e,I){const i=gM(M,e,!0,U);V(i)}function G(M,e,I){const i=gM(M,e,!1,U);V(i)}function Ae(M,e,I){RM=we;const i=gM(M,e,!1,U);(!I||!I.render)&&(i.user=!0),Q?Q.push(i):V(i)}function x(M,e,I){I=I?Object.assign({},eM,I):eM;const i=gM(M,e,!0,0);return i.observers=null,i.observerSlots=null,i.comparator=I.equals||void 0,V(i),FM.bind(i)}function ze(M){return M&&typeof M=="object"&&"then"in M}function CI(M,e,I){let i,N,t;arguments.length===2&&typeof e=="object"||arguments.length===1?(i=!0,N=M,t=e||{}):(i=M,N=e,t=I||{});let j=null,g=yM,D=null,n=!1,u="initialValue"in t,c=typeof i=="function"&&x(i);const y=new Set,[s,L]=(t.storage||R)(t.initialValue),[C,E]=R(void 0),[f,r]=R(void 0,{equals:!1}),[S,b]=R(u?"ready":"unresolved");if(l.context){D=`${l.context.id}${l.context.count++}`;let z;t.ssrLoadFrom==="initial"?g=t.initialValue:l.load&&(z=l.load(D))&&(g=z)}function O(z,o,a,W){return j===z&&(j=null,W!==void 0&&(u=!0),(z===g||o===g)&&t.onHydrated&&queueMicrotask(()=>t.onHydrated(W,{value:o})),g=yM,nM(o,a)),o}function nM(z,o){Z(()=>{o===void 0&&L(()=>z),b(o!==void 0?"errored":u?"ready":"unresolved"),E(o);for(const a of y.keys())a.decrement();y.clear()},!1)}function cM(){const z=ae,o=s(),a=C();if(a!==void 0&&!j)throw a;return A&&!A.user&&z&&fM(()=>{f(),j&&(z.resolved||y.has(z)||(z.increment(),y.add(z)))}),o}function lM(z=!0){if(z!==!1&&n)return;n=!1;const o=c?c():i;if(o==null||o===!1){O(j,d(s));return}const a=g!==yM?g:d(()=>N(o,{value:s(),refetching:z}));return ze(a)?(j=a,"value"in a?(a.status==="success"?O(j,a.value,void 0,o):O(j,void 0,void 0,o),a):(n=!0,queueMicrotask(()=>n=!1),Z(()=>{b(u?"refreshing":"pending"),r()},!1),a.then(W=>O(a,W,void 0,o),W=>O(a,void 0,$M(W),o)))):(O(j,a,void 0,o),a)}return Object.defineProperties(cM,{state:{get:()=>S()},error:{get:()=>C()},loading:{get(){const z=S();return z==="pending"||z==="refreshing"}},latest:{get(){if(!u)return cM();const z=C();if(z&&!j)throw z;return s()}}}),c?fM(()=>lM(!1)):lM(!1),[cM,{refetch:lM,mutate:L}]}function oM(M){return Z(M,!1)}function d(M){if(A===null)return M();const e=A;A=null;try{return M()}finally{A=e}}function EI(M){Ae(()=>d(M))}function oe(M){return T===null||(T.cleanups===null?T.cleanups=[M]:T.cleanups.push(M)),M}function aM(){return A}function HM(M,e){const I=Symbol("context");return{id:I,Provider:de(I),defaultValue:M}}function JM(M){return T&&T.context&&T.context[M.id]!==void 0?T.context[M.id]:M.defaultValue}function VM(M){const e=x(M),I=x(()=>rM(e()));return I.toArray=()=>{const i=I();return Array.isArray(i)?i:i!=null?[i]:[]},I}let ae;function FM(){if(this.sources&&this.state)if(this.state===U)V(this);else{const M=w;w=null,Z(()=>tM(this),!1),w=M}if(A){const M=this.observers?this.observers.length:0;A.sources?(A.sources.push(this),A.sourceSlots.push(M)):(A.sources=[this],A.sourceSlots=[M]),this.observers?(this.observers.push(A),this.observerSlots.push(A.sources.length-1)):(this.observers=[A],this.observerSlots=[A.sources.length-1])}return this.value}function XM(M,e,I){let i=M.value;return(!M.comparator||!M.comparator(i,e))&&(M.value=e,M.observers&&M.observers.length&&Z(()=>{for(let N=0;N1e6)throw w=[],new Error},!1)),e}function V(M){if(!M.fn)return;uM(M);const e=jM;re(M,M.value,e)}function re(M,e,I){let i;const N=T,t=A;A=T=M;try{i=M.fn(e)}catch(j){return M.pure&&(M.state=U,M.owned&&M.owned.forEach(uM),M.owned=null),M.updatedAt=I+1,qM(j)}finally{A=t,T=N}(!M.updatedAt||M.updatedAt<=I)&&(M.updatedAt!=null&&"observers"in M?XM(M,i):M.value=i,M.updatedAt=I)}function gM(M,e,I,i=U,N){const t={fn:M,state:i,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:e,owner:T,context:T?T.context:null,pure:I};return T===null||T!==BM&&(T.owned?T.owned.push(t):T.owned=[t]),t}function iM(M){if(M.state===0)return;if(M.state===IM)return tM(M);if(M.suspense&&d(M.suspense.inFallback))return M.suspense.effects.push(M);const e=[M];for(;(M=M.owner)&&(!M.updatedAt||M.updatedAt=0;I--)if(M=e[I],M.state===U)V(M);else if(M.state===IM){const i=w;w=null,Z(()=>tM(M,e[0]),!1),w=i}}function Z(M,e){if(w)return M();let I=!1;e||(w=[]),Q?I=!0:Q=[],jM++;try{const i=M();return xe(I),i}catch(i){I||(Q=null),w=null,qM(i)}}function xe(M){if(w&&(KM(w),w=null),M)return;const e=Q;Q=null,e.length&&Z(()=>RM(e),!1)}function KM(M){for(let e=0;e=0;e--)uM(M.owned[e]);M.owned=null}if(M.cleanups){for(e=M.cleanups.length-1;e>=0;e--)M.cleanups[e]();M.cleanups=null}M.state=0}function $M(M){return M instanceof Error?M:new Error(typeof M=="string"?M:"Unknown error",{cause:M})}function qM(M,e=T){throw $M(M)}function rM(M){if(typeof M=="function"&&!M.length)return rM(M());if(Array.isArray(M)){const e=[];for(let I=0;IN=d(()=>(T.context={...T.context,[M]:i.value},VM(()=>i.children))),void 0),N}}const Ce=Symbol("fallback");function bM(M){for(let e=0;e1?[]:null;return oe(()=>bM(t)),()=>{let D=M()||[],n,u;return D[zM],d(()=>{let y=D.length,s,L,C,E,f,r,S,b,O;if(y===0)j!==0&&(bM(t),t=[],i=[],N=[],j=0,g&&(g=[])),I.fallback&&(i=[Ce],N[0]=q(nM=>(t[0]=nM,I.fallback())),j=1);else if(j===0){for(N=new Array(y),u=0;u=r&&b>=r&&i[S]===D[b];S--,b--)C[b]=N[S],E[b]=t[S],g&&(f[b]=g[S]);for(s=new Map,L=new Array(b+1),u=b;u>=r;u--)O=D[u],n=s.get(O),L[u]=n===void 0?-1:n,s.set(O,u);for(n=r;n<=S;n++)O=i[n],u=s.get(O),u!==void 0&&u!==-1?(C[u]=N[n],E[u]=t[n],g&&(f[u]=g[n]),u=L[u],s.set(O,u)):t[n]();for(u=r;uM(e||{}));return AM(I),i}return d(()=>M(e||{}))}function _(){return!0}const xM={get(M,e,I){return e===m?I:M.get(e)},has(M,e){return e===m?!0:M.has(e)},set:_,deleteProperty:_,getOwnPropertyDescriptor(M,e){return{configurable:!0,enumerable:!0,get(){return M.get(e)},set:_,deleteProperty:_}},ownKeys(M){return M.keys()}};function LM(M){return(M=typeof M=="function"?M():M)?M:{}}function Oe(){for(let M=0,e=this.length;M=0;g--){const D=LM(M[g])[j];if(D!==void 0)return D}},has(j){for(let g=M.length-1;g>=0;g--)if(j in LM(M[g]))return!0;return!1},keys(){const j=[];for(let g=0;g=0;j--){const g=M[j];if(!g)continue;const D=Object.getOwnPropertyNames(g);for(let n=D.length-1;n>=0;n--){const u=D[n];if(u==="__proto__"||u==="constructor")continue;const c=Object.getOwnPropertyDescriptor(g,u);if(!i[u])i[u]=c.get?{enumerable:!0,configurable:!0,get:Oe.bind(I[u]=[c.get.bind(g)])}:c.value!==void 0?c:void 0;else{const y=I[u];y&&(c.get?y.push(c.get.bind(g)):c.value!==void 0&&y.push(()=>c.value))}}}const N={},t=Object.keys(i);for(let j=t.length-1;j>=0;j--){const g=t[j],D=i[g];D&&D.get?Object.defineProperty(N,g,D):N[g]=D?D.value:void 0}return N}function fe(M,...e){if(m in M){const N=new Set(e.length>1?e.flat():e[0]),t=e.map(j=>new Proxy({get(g){return j.includes(g)?M[g]:void 0},has(g){return j.includes(g)&&g in M},keys(){return j.filter(g=>g in M)}},xM));return t.push(new Proxy({get(j){return N.has(j)?void 0:M[j]},has(j){return N.has(j)?!1:j in M},keys(){return Object.keys(M).filter(j=>!N.has(j))}},xM)),t}const I={},i=e.map(()=>({}));for(const N of Object.getOwnPropertyNames(M)){const t=Object.getOwnPropertyDescriptor(M,N),j=!t.get&&!t.set&&t.enumerable&&t.writable&&t.configurable;let g=!1,D=0;for(const n of e)n.includes(N)&&(g=!0,j?i[D][N]=t.value:Object.defineProperty(i[D],N,t)),++D;g||(j?I[N]=t.value:Object.defineProperty(I,N,t))}return[...i,I]}const ee=M=>`Stale read from <${M}>.`;function OI(M){const e="fallback"in M&&{fallback:()=>M.fallback};return x(Ee(()=>M.each,M.children,e||void 0))}function fI(M){const e=M.keyed,I=x(()=>M.when,void 0,{equals:(i,N)=>e?i===N:!i==!N});return x(()=>{const i=I();if(i){const N=M.children;return typeof N=="function"&&N.length>0?d(()=>N(e?i:()=>{if(!d(I))throw ee("Show");return M.when})):N}return M.fallback},void 0,void 0)}function bI(M){let e=!1;const I=(t,j)=>(e?t[1]===j[1]:!t[1]==!j[1])&&t[2]===j[2],i=VM(()=>M.children),N=x(()=>{let t=i();Array.isArray(t)||(t=[t]);for(let j=0;j{const[t,j,g]=N();if(t<0)return M.fallback;const D=g.children;return typeof D=="function"&&D.length>0?d(()=>D(e?j:()=>{if(d(N)[0]!==t)throw ee("Match");return g.when})):D},void 0,void 0)}function YI(M){return M}const be=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected"],Ye=new Set(["className","value","readOnly","formNoValidate","isMap","noModule","playsInline",...be]),me=new Set(["innerHTML","textContent","innerText","children"]),he=Object.assign(Object.create(null),{className:"class",htmlFor:"for"}),Qe=Object.assign(Object.create(null),{class:"className",formnovalidate:{$:"formNoValidate",BUTTON:1,INPUT:1},ismap:{$:"isMap",IMG:1},nomodule:{$:"noModule",SCRIPT:1},playsinline:{$:"playsInline",VIDEO:1},readonly:{$:"readOnly",INPUT:1,TEXTAREA:1}});function Ue(M,e){const I=Qe[M];return typeof I=="object"?I[e]?I.$:void 0:I}const ke=new Set(["beforeinput","click","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"]),Ze=new Set(["altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","stop","svg","switch","symbol","text","textPath","tref","tspan","use","view","vkern"]),pe={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};function Ge(M,e,I){let i=I.length,N=e.length,t=i,j=0,g=0,D=e[N-1].nextSibling,n=null;for(;ju-g){const L=e[j];for(;g{N=t,e===document?M():SM(e,M(),e.firstChild?null:void 0,I)},i.owner),()=>{N(),e.textContent=""}}function DM(M,e,I){let i;const N=()=>{const j=document.createElement("template");return j.innerHTML=M,I?j.content.firstChild.firstChild:j.content.firstChild},t=e?()=>d(()=>document.importNode(i||(i=N()),!0)):()=>(i||(i=N())).cloneNode(!0);return t.cloneNode=t,t}function We(M,e=window.document){const I=e[YM]||(e[YM]=new Set);for(let i=0,N=M.length;iN.call(M,I[1],t))}else M.addEventListener(e,I)}function Be(M,e,I={}){const i=Object.keys(e||{}),N=Object.keys(I);let t,j;for(t=0,j=N.length;tN.children=H(M,e.children,N.children)),G(()=>e.ref&&e.ref(M)),G(()=>Ve(M,e,I,!0,N,!0)),N}function hI(M,e,I){return d(()=>M(e,I))}function SM(M,e,I,i){if(I!==void 0&&!i&&(i=[]),typeof e!="function")return H(M,e,i,I);G(N=>H(M,e(),N,I),i)}function Ve(M,e,I,i,N={},t=!1){e||(e={});for(const j in N)if(!(j in e)){if(j==="children")continue;N[j]=hM(M,j,null,N[j],I,t)}for(const j in e){if(j==="children"){i||H(M,e.children);continue}const g=e[j];N[j]=hM(M,j,g,N[j],I,t)}}function Fe(M,e,I={}){l.completed=globalThis._$HY.completed,l.events=globalThis._$HY.events,l.load=N=>globalThis._$HY.r[N],l.has=N=>N in globalThis._$HY.r,l.gather=N=>UM(e,N),l.registry=new Map,l.context={id:I.renderId||"",count:0},UM(e,I.renderId);const i=Ie(M,e,[...e.childNodes],I);return l.context=null,i}function X(M){let e,I;return!l.context||!(e=l.registry.get(I=Ke()))?M():(l.completed&&l.completed.add(e),l.registry.delete(I),e)}function QI(M){let e=M,I=0,i=[];if(l.context)for(;e;){if(e.nodeType===8){const N=e.nodeValue;if(N==="$")I++;else if(N==="/"){if(I===0)return[e,i];I--}}i.push(e),e=e.nextSibling}return[e,i]}function UI(){l.events&&!l.events.queued&&(queueMicrotask(()=>{const{completed:M,events:e}=l;for(e.queued=!1;e.length;){const[I,i]=e[0];if(!M.has(I))return;ie(i),e.shift()}}),l.events.queued=!0)}function Xe(M){return M.toLowerCase().replace(/-([a-z])/g,(e,I)=>I.toUpperCase())}function mM(M,e,I){const i=e.trim().split(/\s+/);for(let N=0,t=i.length;N-1&&pe[e.split(":")[0]];c?Pe(M,c,e,I):wM(M,he[e]||e,I)}return I}function ie(M){const e=`$$${M.type}`;let I=M.composedPath&&M.composedPath()[0]||M.target;for(M.target!==I&&Object.defineProperty(M,"target",{configurable:!0,value:I}),Object.defineProperty(M,"currentTarget",{configurable:!0,get(){return I||document}}),l.registry&&!l.done&&(l.done=_$HY.done=!0);I;){const i=I[e];if(i&&!I.disabled){const N=I[`${e}Data`];if(N!==void 0?i.call(I,N,M):i.call(I,M),M.cancelBubble)return}I=I._$host||I.parentNode||I.host}}function H(M,e,I,i,N){const t=!!l.context&&M.isConnected;if(t){!I&&(I=[...M.childNodes]);let D=[];for(let n=0;n{let D=e();for(;typeof D=="function";)D=D();I=H(M,D,I,i)}),()=>I;if(Array.isArray(e)){const D=[],n=I&&Array.isArray(I);if(dM(D,e,I,N))return G(()=>I=H(M,D,I,i,!0)),()=>I;if(t){if(!D.length)return I;if(i===void 0)return[...M.childNodes];let u=D[0],c=[u];for(;(u=u.nextSibling)!==i;)c.push(u);return I=c}if(D.length===0){if(I=P(M,I,i),g)return I}else n?I.length===0?QM(M,D,i):Ge(M,I,D):(I&&P(M),QM(M,D));I=D}else if(e.nodeType){if(t&&e.parentNode)return I=g?[e]:e;if(Array.isArray(I)){if(g)return I=P(M,I,i,e);P(M,I,null,e)}else I==null||I===""||!M.firstChild?M.appendChild(e):M.replaceChild(e,M.firstChild);I=e}}return I}function dM(M,e,I,i){let N=!1;for(let t=0,j=e.length;t=0;j--){const g=e[j];if(N!==g){const D=g.parentNode===M;!t&&!j?D?M.replaceChild(N,g):M.insertBefore(N,I):D&&g.remove()}else t=!0}}else M.insertBefore(N,I);return[N]}function UM(M,e){const I=M.querySelectorAll("*[data-hk]");for(let i=0;i(Se(),Fe(...M));function te(M){const[e,I]=fe(M,["component"]),i=x(()=>e.component);return x(()=>{const N=i();switch(typeof N){case"function":return d(()=>N(I));case"string":const t=Ze.has(N),j=l.context?X():$e(N,t);return Je(j,I,t),j}})}function MI(M,e){const I=globalThis[kM]=globalThis[kM]||{};return I[M]=I[M]||e}const kM="_vike_solid",{Context:Ne}=MI("PageContextProvider.ts",{Context:HM()});function eI(M){if(!M.pageContext)throw new Error("Argument pageContext missing");return k(Ne.Provider,{get value(){return M.pageContext},get children(){return M.children}})}function je(){const M=JM(Ne);if(!M)throw new Error(" is needed for being able to use usePageContext()");return M}const CM=Symbol("store-raw"),B=Symbol("store-node"),h=Symbol("store-has"),ge=Symbol("store-self");function ue(M){let e=M[m];if(!e&&(Object.defineProperty(M,m,{value:e=new Proxy(M,tI)}),!Array.isArray(M))){const I=Object.keys(M),i=Object.getOwnPropertyDescriptors(M);for(let N=0,t=I.length;NM[m][e]),I}function De(M){aM()&&K(NM(M,B),ge)()}function iI(M){return De(M),Reflect.ownKeys(M)}const tI={get(M,e,I){if(e===CM)return M;if(e===m)return I;if(e===zM)return De(M),I;const i=NM(M,B),N=i[e];let t=N?N():M[e];if(e===B||e===h||e==="__proto__")return t;if(!N){const j=Object.getOwnPropertyDescriptor(M,e);aM()&&(typeof t!="function"||M.hasOwnProperty(e))&&!(j&&j.get)&&(t=K(i,e,t)())}return p(t)?ue(t):t},has(M,e){return e===CM||e===m||e===zM||e===B||e===h||e==="__proto__"?!0:(aM()&&K(NM(M,h),e)(),e in M)},set(){return!0},deleteProperty(){return!0},ownKeys:iI,getOwnPropertyDescriptor:II};function Y(M,e,I,i=!1){if(!i&&M[e]===I)return;const N=M[e],t=M.length;I===void 0?(delete M[e],M[h]&&M[h][e]&&N!==void 0&&M[h][e].$()):(M[e]=I,M[h]&&M[h][e]&&N===void 0&&M[h][e].$());let j=NM(M,B),g;if((g=K(j,e,N))&&g.$(()=>I),Array.isArray(M)&&M.length!==t){for(let D=M.length;D1){i=e.shift();const j=typeof i,g=Array.isArray(M);if(Array.isArray(i)){for(let D=0;D1){F(M[i],e,[i].concat(I));return}N=M[i],I=[i].concat(I)}let t=e[0];typeof t=="function"&&(t=t(N,I),t===N)||i===void 0&&t==null||(t=J(t),i===void 0||p(N)&&p(t)&&!Array.isArray(t)?ne(N,t):Y(M,i,t))}function ce(...[M,e]){const I=J(M||{}),i=Array.isArray(I),N=ue(I);function t(...j){oM(()=>{i&&j.length===1?NI(I,j[0]):F(I,j)})}return[N,t]}const EM=Symbol("store-root");function v(M,e,I,i,N){const t=e[I];if(M===t)return;const j=Array.isArray(M);if(I!==EM&&(!p(M)||!p(t)||j!==Array.isArray(t)||N&&M[N]!==t[N])){Y(e,I,M);return}if(j){if(M.length&&t.length&&(!i||N&&M[0]&&M[0][N]!=null)){let n,u,c,y,s,L,C,E;for(c=0,y=Math.min(t.length,M.length);c=c&&s>=c&&(t[y]===M[s]||N&&t[c]&&M[c]&&t[y][N]===M[s][N]);y--,s--)f[s]=t[y];if(c>s||c>y){for(u=c;u<=s;u++)Y(t,u,M[u]);for(;uM.length&&Y(t,"length",M.length);return}for(C=new Array(s+1),u=s;u>=c;u--)L=M[u],E=N&&L?L[N]:L,n=r.get(E),C[u]=n===void 0?-1:n,r.set(E,u);for(n=c;n<=y;n++)L=t[n],E=N&&L?L[N]:L,u=r.get(E),u!==void 0&&u!==-1&&(f[u]=t[n],u=C[u],r.set(E,u));for(u=c;uM.length&&Y(t,"length",M.length);return}const g=Object.keys(M);for(let n=0,u=g.length;n{if(!p(t)||!p(N))return N;const j=v(N,{[EM]:t},EM,I,i);return j===void 0?t:j}}function gI(M){return M instanceof Function||typeof M=="function"}function TM(M,e){var N;const I=(N=e.configEntries[M])==null?void 0:N[0];if(!I)return;const i=I.configValue;if(typeof i=="string")return i;if(!i)return null;if(gI(i)){const t=i(e);if(typeof t!="string")throw new Error(I.configDefinedAt+" should return a string");return t}else throw new Error(I.configDefinedAt+" should be a string or a function returning a string")}function ZM(M){return k(eI,{pageContext:M,get children(){return k(uI,{get children(){return k(DI,{})}})}})}function uI(M){const e=je();return k(te,{get component(){return e.config.Layout??nI},get children(){return M.children}})}function DI(){const M=je();return k(te,{get component(){return M.Page}})}function nI(M){return x(()=>M.children)}const[pM,GM]=ce({});let $,WM=!1;const kI=async M=>{if(WM){GM(jI(M));const e=TM("title",M)||"",I=TM("lang",M)||"en",i=TM("favicon",M);e!==void 0&&(document.title=e),I!==void 0&&(document.documentElement.lang=I),i!==void 0&&cI(i)}else{$&&$(),GM(M);const e=document.getElementById("page-view");e.innerHTML!==""&&M.isHydration?$=qe(()=>ZM(pM),e):$=Ie(()=>ZM(pM),e),WM=!0}};function cI(M){let e=document.querySelector("link[rel~='icon']");if(!M){e&&document.head.removeChild(e);return}e||(e=document.createElement("link"),e.rel="icon",document.head.appendChild(e)),e.href=M}const ZI="/assets/static/logo.BFdUWfho.svg";var OM=[{category:"Framework",label:"React",flag:"react",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjEzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyOCI+PHBhdGggZmlsbD0iIzAwRDhGRiIgZD0iTTIxMC40ODMgNzMuODI0YTE3MS40OSAxNzEuNDkgMCAwIDAtOC4yNC0yLjU5N2MuNDY1LTEuOS44OTMtMy43NzcgMS4yNzMtNS42MjFjNi4yMzgtMzAuMjgxIDIuMTYtNTQuNjc2LTExLjc2OS02Mi43MDhjLTEzLjM1NS03LjctMzUuMTk2LjMyOS01Ny4yNTQgMTkuNTI2YTE3MS4yMyAxNzEuMjMgMCAwIDAtNi4zNzUgNS44NDhhMTU1Ljg2NiAxNTUuODY2IDAgMCAwLTQuMjQxLTMuOTE3QzEwMC43NTkgMy44MjkgNzcuNTg3LTQuODIyIDYzLjY3MyAzLjIzM0M1MC4zMyAxMC45NTcgNDYuMzc5IDMzLjg5IDUxLjk5NSA2Mi41ODhhMTcwLjk3NCAxNzAuOTc0IDAgMCAwIDEuODkyIDguNDhjLTMuMjguOTMyLTYuNDQ1IDEuOTI0LTkuNDc0IDIuOThDMTcuMzA5IDgzLjQ5OCAwIDk4LjMwNyAwIDExMy42NjhjMCAxNS44NjUgMTguNTgyIDMxLjc3OCA0Ni44MTIgNDEuNDI3YTE0NS41MiAxNDUuNTIgMCAwIDAgNi45MjEgMi4xNjVhMTY3LjQ2NyAxNjcuNDY3IDAgMCAwLTIuMDEgOS4xMzhjLTUuMzU0IDI4LjItMS4xNzMgNTAuNTkxIDEyLjEzNCA1OC4yNjZjMTMuNzQ0IDcuOTI2IDM2LjgxMi0uMjIgNTkuMjczLTE5Ljg1NWExNDUuNTY3IDE0NS41NjcgMCAwIDAgNS4zNDItNC45MjNhMTY4LjA2NCAxNjguMDY0IDAgMCAwIDYuOTIgNi4zMTRjMjEuNzU4IDE4LjcyMiA0My4yNDYgMjYuMjgyIDU2LjU0IDE4LjU4NmMxMy43MzEtNy45NDkgMTguMTk0LTMyLjAwMyAxMi40LTYxLjI2OGExNDUuMDE2IDE0NS4wMTYgMCAwIDAtMS41MzUtNi44NDJjMS42Mi0uNDggMy4yMS0uOTc0IDQuNzYtMS40ODhjMjkuMzQ4LTkuNzIzIDQ4LjQ0My0yNS40NDMgNDguNDQzLTQxLjUyYzAtMTUuNDE3LTE3Ljg2OC0zMC4zMjYtNDUuNTE3LTM5Ljg0NFptLTYuMzY1IDcwLjk4NGMtMS40LjQ2My0yLjgzNi45MS00LjMgMS4zNDVjLTMuMjQtMTAuMjU3LTcuNjEyLTIxLjE2My0xMi45NjMtMzIuNDMyYzUuMTA2LTExIDkuMzEtMjEuNzY3IDEyLjQ1OS0zMS45NTdjMi42MTkuNzU4IDUuMTYgMS41NTcgNy42MSAyLjRjMjMuNjkgOC4xNTYgMzguMTQgMjAuMjEzIDM4LjE0IDI5LjUwNGMwIDkuODk2LTE1LjYwNiAyMi43NDMtNDAuOTQ2IDMxLjE0Wm0tMTAuNTE0IDIwLjgzNGMyLjU2MiAxMi45NCAyLjkyNyAyNC42NCAxLjIzIDMzLjc4N2MtMS41MjQgOC4yMTktNC41OSAxMy42OTgtOC4zODIgMTUuODkzYy04LjA2NyA0LjY3LTI1LjMyLTEuNC00My45MjctMTcuNDEyYTE1Ni43MjYgMTU2LjcyNiAwIDAgMS02LjQzNy01Ljg3YzcuMjE0LTcuODg5IDE0LjQyMy0xNy4wNiAyMS40NTktMjcuMjQ2YzEyLjM3Ni0xLjA5OCAyNC4wNjgtMi44OTQgMzQuNjcxLTUuMzQ1YTEzNC4xNyAxMzQuMTcgMCAwIDEgMS4zODYgNi4xOTNaTTg3LjI3NiAyMTQuNTE1Yy03Ljg4MiAyLjc4My0xNC4xNiAyLjg2My0xNy45NTUuNjc1Yy04LjA3NS00LjY1Ny0xMS40MzItMjIuNjM2LTYuODUzLTQ2Ljc1MmExNTYuOTIzIDE1Ni45MjMgMCAwIDEgMS44NjktOC40OTljMTAuNDg2IDIuMzIgMjIuMDkzIDMuOTg4IDM0LjQ5OCA0Ljk5NGM3LjA4NCA5Ljk2NyAxNC41MDEgMTkuMTI4IDIxLjk3NiAyNy4xNWExMzQuNjY4IDEzNC42NjggMCAwIDEtNC44NzcgNC40OTJjLTkuOTMzIDguNjgyLTE5Ljg4NiAxNC44NDItMjguNjU4IDE3Ljk0Wk01MC4zNSAxNDQuNzQ3Yy0xMi40ODMtNC4yNjctMjIuNzkyLTkuODEyLTI5Ljg1OC0xNS44NjNjLTYuMzUtNS40MzctOS41NTUtMTAuODM2LTkuNTU1LTE1LjIxNmMwLTkuMzIyIDEzLjg5Ny0yMS4yMTIgMzcuMDc2LTI5LjI5M2MyLjgxMy0uOTggNS43NTctMS45MDUgOC44MTItMi43NzNjMy4yMDQgMTAuNDIgNy40MDYgMjEuMzE1IDEyLjQ3NyAzMi4zMzJjLTUuMTM3IDExLjE4LTkuMzk5IDIyLjI0OS0xMi42MzQgMzIuNzkyYTEzNC43MTggMTM0LjcxOCAwIDAgMS02LjMxOC0xLjk3OVptMTIuMzc4LTg0LjI2Yy00LjgxMS0yNC41ODctMS42MTYtNDMuMTM0IDYuNDI1LTQ3Ljc4OWM4LjU2NC00Ljk1OCAyNy41MDIgMi4xMTEgNDcuNDYzIDE5LjgzNWExNDQuMzE4IDE0NC4zMTggMCAwIDEgMy44NDEgMy41NDVjLTcuNDM4IDcuOTg3LTE0Ljc4NyAxNy4wOC0yMS44MDggMjYuOTg4Yy0xMi4wNCAxLjExNi0yMy41NjUgMi45MDgtMzQuMTYxIDUuMzA5YTE2MC4zNDIgMTYwLjM0MiAwIDAgMS0xLjc2LTcuODg3Wm0xMTAuNDI3IDI3LjI2OGEzNDcuOCAzNDcuOCAwIDAgMC03Ljc4NS0xMi44MDNjOC4xNjggMS4wMzMgMTUuOTk0IDIuNDA0IDIzLjM0MyA0LjA4Yy0yLjIwNiA3LjA3Mi00Ljk1NiAxNC40NjUtOC4xOTMgMjIuMDQ1YTM4MS4xNTEgMzgxLjE1MSAwIDAgMC03LjM2NS0xMy4zMjJabS00NS4wMzItNDMuODYxYzUuMDQ0IDUuNDY1IDEwLjA5NiAxMS41NjYgMTUuMDY1IDE4LjE4NmEzMjIuMDQgMzIyLjA0IDAgMCAwLTMwLjI1Ny0uMDA2YzQuOTc0LTYuNTU5IDEwLjA2OS0xMi42NTIgMTUuMTkyLTE4LjE4Wk04Mi44MDIgODcuODNhMzIzLjE2NyAzMjMuMTY3IDAgMCAwLTcuMjI3IDEzLjIzOGMtMy4xODQtNy41NTMtNS45MDktMTQuOTgtOC4xMzQtMjIuMTUyYzcuMzA0LTEuNjM0IDE1LjA5My0yLjk3IDIzLjIwOS0zLjk4NGEzMjEuNTI0IDMyMS41MjQgMCAwIDAtNy44NDggMTIuODk3Wm04LjA4MSA2NS4zNTJjLTguMzg1LS45MzYtMTYuMjkxLTIuMjAzLTIzLjU5My0zLjc5M2MyLjI2LTcuMyA1LjA0NS0xNC44ODUgOC4yOTgtMjIuNmEzMjEuMTg3IDMyMS4xODcgMCAwIDAgNy4yNTcgMTMuMjQ2YzIuNTk0IDQuNDggNS4yOCA4Ljg2OCA4LjAzOCAxMy4xNDdabTM3LjU0MiAzMS4wM2MtNS4xODQtNS41OTItMTAuMzU0LTExLjc3OS0xNS40MDMtMTguNDMzYzQuOTAyLjE5MiA5Ljg5OS4yOSAxNC45NzguMjljNS4yMTggMCAxMC4zNzYtLjExNyAxNS40NTMtLjM0M2MtNC45ODUgNi43NzQtMTAuMDE4IDEyLjk3LTE1LjAyOCAxOC40ODZabTUyLjE5OC01Ny44MTdjMy40MjIgNy44IDYuMzA2IDE1LjM0NSA4LjU5NiAyMi41MmMtNy40MjIgMS42OTQtMTUuNDM2IDMuMDU4LTIzLjg4IDQuMDcxYTM4Mi40MTcgMzgyLjQxNyAwIDAgMCA3Ljg1OS0xMy4wMjZhMzQ3LjQwMyAzNDcuNDAzIDAgMCAwIDcuNDI1LTEzLjU2NVptLTE2Ljg5OCA4LjEwMWEzNTguNTU3IDM1OC41NTcgMCAwIDEtMTIuMjgxIDE5LjgxNWEzMjkuNCAzMjkuNCAwIDAgMS0yMy40NDQuODIzYy03Ljk2NyAwLTE1LjcxNi0uMjQ4LTIzLjE3OC0uNzMyYTMxMC4yMDIgMzEwLjIwMiAwIDAgMS0xMi41MTMtMTkuODQ2aC4wMDFhMzA3LjQxIDMwNy40MSAwIDAgMS0xMC45MjMtMjAuNjI3YTMxMC4yNzggMzEwLjI3OCAwIDAgMSAxMC44OS0yMC42MzdsLS4wMDEuMDAxYTMwNy4zMTggMzA3LjMxOCAwIDAgMSAxMi40MTMtMTkuNzYxYzcuNjEzLS41NzYgMTUuNDItLjg3NiAyMy4zMS0uODc2SDEyOGM3LjkyNiAwIDE1Ljc0My4zMDMgMjMuMzU0Ljg4M2EzMjkuMzU3IDMyOS4zNTcgMCAwIDEgMTIuMzM1IDE5LjY5NWEzNTguNDg5IDM1OC40ODkgMCAwIDEgMTEuMDM2IDIwLjU0YTMyOS40NzIgMzI5LjQ3MiAwIDAgMS0xMSAyMC43MjJabTIyLjU2LTEyMi4xMjRjOC41NzIgNC45NDQgMTEuOTA2IDI0Ljg4MSA2LjUyIDUxLjAyNmMtLjM0NCAxLjY2OC0uNzMgMy4zNjctMS4xNSA1LjA5Yy0xMC42MjItMi40NTItMjIuMTU1LTQuMjc1LTM0LjIzLTUuNDA4Yy03LjAzNC0xMC4wMTctMTQuMzIzLTE5LjEyNC0yMS42NC0yNy4wMDhhMTYwLjc4OSAxNjAuNzg5IDAgMCAxIDUuODg4LTUuNGMxOC45LTE2LjQ0NyAzNi41NjQtMjIuOTQxIDQ0LjYxMi0xOC4zWk0xMjggOTAuODA4YzEyLjYyNSAwIDIyLjg2IDEwLjIzNSAyMi44NiAyMi44NnMtMTAuMjM1IDIyLjg2LTIyLjg2IDIyLjg2cy0yMi44Ni0xMC4yMzUtMjIuODYtMjIuODZzMTAuMjM1LTIyLjg2IDIyLjg2LTIyLjg2WiIvPjwvc3ZnPg==",url:"https://react.dev",spectrum:"beaten_path",tagline:"The library for web and native user interfaces",repo:"facebook/react",links:[{label:"Learn",href:"https://react.dev/learn"},{label:"Docs",href:"https://react.dev/reference/react"}]},{category:"Framework",label:"Vue",flag:"vue",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE2ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyMSI+PHBhdGggZmlsbD0iIzQxQjg4MyIgZD0iTTIwNC44IDBIMjU2TDEyOCAyMjAuOEwwIDBoOTcuOTJMMTI4IDUxLjJMMTU3LjQ0IDBoNDcuMzZaIi8+PHBhdGggZmlsbD0iIzQxQjg4MyIgZD0ibTAgMGwxMjggMjIwLjhMMjU2IDBoLTUxLjJMMTI4IDEzMi40OEw1MC41NiAwSDBaIi8+PHBhdGggZmlsbD0iIzM1NDk1RSIgZD0iTTUwLjU2IDBMMTI4IDEzMy4xMkwyMDQuOCAwaC00Ny4zNkwxMjggNTEuMkw5Ny45MiAwSDUwLjU2WiIvPjwvc3ZnPg==",url:"https://vuejs.org",tagline:"The Progressive JavaScript Framework",repo:"vuejs/core",links:[{label:"Quick start",href:"https://vuejs.org/guide/quick-start.html"},{label:"Examples",href:"https://vuejs.org/examples/#hello-world"},{label:"API",href:"https://vuejs.org/api/"}]},{category:"Framework",label:"SolidJS",flag:"solid",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjA4ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIyNTYgMjM5IDI1NiAyMzkiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ibG9nb3NTb2xpZGpzSWNvbjAiIHgxPSIyNy41IiB4Mj0iMTUyIiB5MT0iMyIgeTI9IjYzLjUiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4xIiBzdG9wLWNvbG9yPSIjNzZiM2UxIi8+PHN0b3Agb2Zmc2V0PSIuMyIgc3RvcC1jb2xvcj0iI2RjZjJmZCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzc2YjNlMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsb2dvc1NvbGlkanNJY29uMSIgeDE9Ijk1LjgiIHgyPSI3NCIgeTE9IjMyLjYiIHkyPSIxMDUuMiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgyNDkuNTYgMjMzLjEyKSBzY2FsZSgxLjYxMDA2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzc2YjNlMSIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiM0Mzc3YmIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMxZjNiNzciLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibG9nb3NTb2xpZGpzSWNvbjIiIHgxPSIxOC40IiB4Mj0iMTQ0LjMiIHkxPSI2NC4yIiB5Mj0iMTQ5LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzMTVhYTkiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjNTE4YWM4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzE1YWE5Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvZ29zU29saWRqc0ljb24zIiB4MT0iNzUuMiIgeDI9IjI0LjQiIHkxPSI3NC41IiB5Mj0iMjYwLjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQ5LjU2IDIzMy4xMikgc2NhbGUoMS42MTAwNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM0Mzc3YmIiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjMWEzMzZiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMWEzMzZiIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0iIzc2YjNlMSIgZD0iTTUxMiAyODkuNDcycy04NS4zMzMtNjIuNzkxLTE1MS4zNDctNDguMzAxbC00LjgyOSAxLjYxYy05LjY2IDMuMjIxLTE3LjcxMSA4LjA1LTIyLjU0MiAxNC40OTFsLTMuMjE5IDQuODI5bC0yNC4xNTIgNDEuODYybDQxLjg2MyA4LjA1MWMxNy43MSAxMS4yNyA0MC4yNTEgMTYuMTAxIDYxLjE4MiAxMS4yN2w3NC4wNjMgMTQuNDkxTDUxMiAyODkuNDcyWiIvPjxwYXRoIGZpbGw9InVybCgjbG9nb3NTb2xpZGpzSWNvbjApIiBkPSJNNTEyIDI4OS40NzJzLTg1LjMzMy02Mi43OTEtMTUxLjM0Ny00OC4zMDFsLTQuODI5IDEuNjFjLTkuNjYgMy4yMjEtMTcuNzExIDguMDUtMjIuNTQyIDE0LjQ5MWwtMy4yMTkgNC44MjlsLTI0LjE1MiA0MS44NjJsNDEuODYzIDguMDUxYzE3LjcxIDExLjI3IDQwLjI1MSAxNi4xMDEgNjEuMTgyIDExLjI3bDc0LjA2MyAxNC40OTFMNTEyIDI4OS40NzJaIiBvcGFjaXR5PSIuMyIvPjxwYXRoIGZpbGw9IiM1MThhYzgiIGQ9Im0zMzMuMjgyIDI4OS40NzJsLTYuNDM5IDEuNjExYy0yNy4zNzEgOC4wNS0zNS40MjEgMzMuODExLTIwLjkzMiA1Ni4zNTJjMTYuMTAxIDIwLjkzMSA0OS45MTMgMzIuMjAxIDc3LjI4NCAyNC4xNTFsOTkuODI0LTMzLjgxMXMtODUuMzM0LTYyLjc5Mi0xNDkuNzM3LTQ4LjMwM1oiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24xKSIgZD0ibTMzMy4yODIgMjg5LjQ3MmwtNi40MzkgMS42MTFjLTI3LjM3MSA4LjA1LTM1LjQyMSAzMy44MTEtMjAuOTMyIDU2LjM1MmMxNi4xMDEgMjAuOTMxIDQ5LjkxMyAzMi4yMDEgNzcuMjg0IDI0LjE1MWw5OS44MjQtMzMuODExcy04NS4zMzQtNjIuNzkyLTE0OS43MzctNDguMzAzWiIgb3BhY2l0eT0iLjMiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24yKSIgZD0iTTQ2NS4zMDggMzYxLjkyNWMtMTguNDM5LTIzLjAzNi00OS4wMDgtMzIuNTg4LTc3LjI4My0yNC4xNWwtOTkuODIzIDMyLjIwMUwyNTYgNDI2LjMyOGwxODAuMzI3IDMwLjU5MmwzMi4yMDEtNTcuOTYzYzYuNDQxLTExLjI3MSA0LjgzMS0yNC4xNS0zLjIyLTM3LjAzMloiLz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zU29saWRqc0ljb24zKSIgZD0iTTQzMy4xMDYgNDE4LjI3N2MtMTguNDM5LTIzLjAzNi00OS4wMDYtMzIuNTg4LTc3LjI4Mi0yNC4xNUwyNTYgNDI2LjMyOHM4NS4zMzMgNjQuNDAyIDE1MS4zNDYgNDguMzAzbDQuODMtMS42MTJjMjcuMzcxLTguMDQ5IDM3LjAzMS0zMy44MSAyMC45My01NC43NDJaIi8+PC9zdmc+",url:"https://www.solidjs.com",spectrum:"bleeding_edge",tagline:"Simple and performant reactivity for building user interfaces",repo:"solidjs/solid",links:[{label:"Getting started",href:"https://www.solidjs.com/guides/getting-started"},{label:"Examples",href:"https://www.solidjs.com/examples"},{label:"API",href:"https://www.solidjs.com/docs/latest/api"}]},{category:"CSS",label:"TailwindCSS",flag:"tailwindcss",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjY3ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDE1NCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJsb2dvc1RhaWx3aW5kY3NzSWNvbjAiIHgxPSItMi43NzglIiB4Mj0iMTAwJSIgeTE9IjMyJSIgeTI9IjY3LjU1NiUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMyMjk4QkQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwRUQ3QjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cGF0aCBmaWxsPSJ1cmwoI2xvZ29zVGFpbHdpbmRjc3NJY29uMCkiIGQ9Ik0xMjggMEM5My44NjcgMCA3Mi41MzMgMTcuMDY3IDY0IDUxLjJDNzYuOCAzNC4xMzMgOTEuNzMzIDI3LjczMyAxMDguOCAzMmM5LjczNyAyLjQzNCAxNi42OTcgOS40OTkgMjQuNDAxIDE3LjMxOEMxNDUuNzUxIDYyLjA1NyAxNjAuMjc1IDc2LjggMTkyIDc2LjhjMzQuMTMzIDAgNTUuNDY3LTE3LjA2NyA2NC01MS4yYy0xMi44IDE3LjA2Ny0yNy43MzMgMjMuNDY3LTQ0LjggMTkuMmMtOS43MzctMi40MzQtMTYuNjk3LTkuNDk5LTI0LjQwMS0xNy4zMThDMTc0LjI0OSAxNC43NDMgMTU5LjcyNSAwIDEyOCAwWk02NCA3Ni44QzI5Ljg2NyA3Ni44IDguNTMzIDkzLjg2NyAwIDEyOGMxMi44LTE3LjA2NyAyNy43MzMtMjMuNDY3IDQ0LjgtMTkuMmM5LjczNyAyLjQzNCAxNi42OTcgOS40OTkgMjQuNDAxIDE3LjMxOEM4MS43NTEgMTM4Ljg1NyA5Ni4yNzUgMTUzLjYgMTI4IDE1My42YzM0LjEzMyAwIDU1LjQ2Ny0xNy4wNjcgNjQtNTEuMmMtMTIuOCAxNy4wNjctMjcuNzMzIDIzLjQ2Ny00NC44IDE5LjJjLTkuNzM3LTIuNDM0LTE2LjY5Ny05LjQ5OS0yNC40MDEtMTcuMzE4QzExMC4yNDkgOTEuNTQzIDk1LjcyNSA3Ni44IDY0IDc2LjhaIi8+PC9zdmc+",url:"https://tailwindcss.com",spectrum:"beaten_path",tagline:"Rapidly build modern websites without ever leaving your HTML",repo:"tailwindlabs/tailwindcss",links:[{label:"Docs",href:"https://tailwindcss.com/docs/installation"}]},{category:"CSS",label:"daisyUI",flag:"daisyui",dependsOn:["tailwindcss"],image:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMzInIGhlaWdodD0nMzInIHZpZXdCb3g9JzAgMCA0MTUgNDE1JyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxyZWN0IHg9JzgyLjUnIHk9JzI5MCcgd2lkdGg9JzI1MCcgaGVpZ2h0PScxMjUnIHJ4PSc2Mi41JyBmaWxsPScjMUFEMUE1Jz48L3JlY3Q+PGNpcmNsZSBjeD0nMjA3LjUnIGN5PScxMzUnIHI9JzEzMCcgZmlsbD0nYmxhY2snIGZpbGwtb3BhY2l0eT0nLjMnPjwvY2lyY2xlPjxjaXJjbGUgY3g9JzIwNy41JyBjeT0nMTM1JyByPScxMjUnIGZpbGw9J3doaXRlJz48L2NpcmNsZT48Y2lyY2xlIGN4PScyMDcuNScgY3k9JzEzNScgcj0nNTYnIGZpbGw9JyNGRjk5MDMnPjwvY2lyY2xlPjwvc3ZnPg==",url:"https://daisyui.com",tagline:"The most popular component library for Tailwind CSS",repo:"saadeghi/daisyui",links:[{label:"Docs",href:"https://daisyui.com/docs/use/"}]},{category:"CSS",label:"Compiled",flag:"compiled-css",image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAFf0lEQVR4nLSaXWzbVBvHz3OOncRJnY926vp27Uu7Tm3Vsi7hsxpDRahjrMAFEqsYlAk6IQECpF2ttEwwGBLccAE3fAmhCfEhJK4AiQ+BGGKirJuYhoRg68pKV5bSZCEfrpPYMXLSpE5iJ3ZyciRfxD5+nud3nuc5/9ouc/fjh1Ajhgxc09Kmx76QCL+5Y/WNMbu0Mt8IP7gRRtXxj/uuo0lb560y8fauuseONcpPQwDW2I6BqGv46fzvhGNon8i0DzbCV0MAQvyeFxBgpnACEAnzo9ON8EUdQGTa+wTH4L2l5+Pc0HiSae2h7Y86wNWmkUMIdOwCZkL87hna/qgCyMDxcaf/QaPrcS4wQTsLVAGizuvHFWCbDCcAZkP8nc/T9EkVIMb5x6vNiXP+/SLTPkDLJzUAGTiXaOsaqToREAm57zhCyy81AMHWvQsBtpuZu64LVLJADUC0b91penI2C3uP0vBLD4DdErAyP8EN3rfGdgzV65caQJpp7bN6z9Wm2w/X65cKgIIAScTzf6v30VBnKgASuLwIsMPyjRTUmU4GsM1d671xLvCQyLRZLr/8oAKQAYep7VN3qFlw167OVABAScn13F+PLlACkBL1GahdnakAMBkhXK+NXBas94JlgEi6ZehvsXNMUQA2jKTSkFkLWrVVNGp8arMEEJW8vScje0+djo58fjY2/JqibFyzSavnrTovHXHO/4BVXbAEsCBuPwyY2DDG6LK47cmLwsAT+Wu29PKvVmzpjhp0wTSAIPOdQalnAgCj7IEB/S5c96paUup1R2pprpaYS4fVpzbTAAupwDMIGBtgjDAGpGYBMLGfS+x8U+0HLnXhRM1Ra0f2qc18FkwBJDKe7mCmbxJng1cD3zgSmZbhS2L/pF0KnidS5EJdwa8PK+psCuBP6cYjCBh7Lujc6mth5pOBY3KG5ZrEc5/WHT2yps5VARIZX88q6psoDTp/qL9l4NoWU/0HeeHMB1QALKhzVYC/lJtnAAibX31t4AUYwOhyevApLnXpLJu+QqWZzapzRQBB8V4Tgv4Jo9LJB6/+TiJ3b0jesssXP/E6FQCT6lwRYBkPTyFMWKPSKT2/Im3b7xbmPiTyvwtUCEyosyGAiDwdIXztI0aB51d/4zygkNJ1DyhS2hf7/hUqACbU2RBgmdwyhXBu58Ga8ikEDtos5HpDAldnQvH1eBM/vkfk2BIVgirqrAsggrcjzO44qA2utOZLM5PPTkxpuwmjdNIX+/ZlKgBV1FkX4Ipt5FnAjKNazeudF1DLdtWGN3HybSLR6gXjd6plACLe1B2x+Sd1gwa9oIu3VhH5tuYMp1PNsa9fpAJQ4Z1qGUDQcds0rO88heDUstEtHShrbAm7NudteYTZ40SK1P1ndnYY6EIRgIg3dUUd/gNFwYFRves3tvb1Okay3Bz75iUqAAbqXASw6hqdzv29vx4c6DdqGZAmOwizRGvTI8y+z0iRP6gQ6GShAJAkrd0xZ+Bh/T3eXAOrBwNyotiBmoWvnqMCoPPFswAQ4ken1NovXVH9oMGwsW0grJQ69QizH7Pplfqf2FC5OmcBUqS5Pe4MHMg1K6my0pUb246iF8t9Koov/h1Fdd54p5oFCPO7pxAQB4C65aoHyX7mNax3w8bGyImCv+g5dQtzHzFShM6/G2jUGadI8/+izhseLboOCOECiEHpGGSHlxd/0POJkSz5KO5IeXXGIX7PjLr6uqBqRrKrTQwbWwvDKaE5hxJeNHKq6gIjhX+jQrCuzjjO7bi/4jzQguiXVf5cS/rMO5VsZXek6JfUPrPGOf8+7BZOvYsQqvpytrg/SNkuxWWCPzUn545Xs+NZO/0Jl5z/rN7gFYQyvPDzW/8FAAD//wWcstmJqV1FAAAAAElFTkSuQmCC",url:"https://compiledcssinjs.com",tagline:"A familiar and performant compile time CSS-in-JS library for React.",repo:"atlassian-labs/compiled",links:[{label:"Docs",href:"https://compiledcssinjs.com/docs/"}]},{category:"Auth",label:"Auth.js",flag:"authjs",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0iIzg4ODg4OCIgZD0ibTUwLjAyNyAxMC40NTlsLS4wMTgtLjAzMmwtMzMuNjA2IDE5LjQwNGwuMDc2LjEzMnYyMi44OTNoLjAxNGMuMjg2IDE5LjExMSAxNC44NTkgMzQuNzU1IDMzLjUxOSAzNi43MThjMTguNjYtMS45NjIgMzMuMjM0LTE3LjYwNiAzMy41MTktMzYuNzE4VjI5Ljk1M2wuMDY2LS4xMTRsLTMzLjU3LTE5LjM4em0tLjAxNSA2OS4wOTdWNTEuNjc3SDI2LjQzNVYzNS42NTFMNTAuMDEyIDIyLjA0djI5LjYzN2gyMy41NjN2MS4xNzloLjAxN2MtLjI3OCAxMy41OTMtMTAuNDM5IDI0Ljc5OC0yMy41OCAyNi43eiIvPjwvc3ZnPg==",url:"https://authjs.dev",spectrum:"bleeding_edge",tagline:"Authentication for the Web",repo:"nextauthjs/next-auth",links:[{label:"Getting started",href:"https://authjs.dev/getting-started/introduction"},{label:"API",href:"https://authjs.dev/reference"}]},{category:"Auth",label:"Auth0",flag:"auth0",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjllbSIgaGVpZ2h0PSIxZW0iIHZpZXdCb3g9IjAgMCAyNTYgMjg1Ij48cGF0aCBkPSJNMjIwLjQxMiAwaC05Mi40MTVsMjguNTYyIDg5LjAwNmg5Mi40MTZsLTc0Ljc3IDUzLjA3N2wyOC41NyA4OS41MTFjNDguMTI4LTM1LjA2IDYzLjg1NC04OC4xMiA0Ni4yMDgtMTQyLjU4OEwyMjAuNDEzIDBaTTcuMDE4IDg5LjAwNmg5Mi40MTZMMTI3Ljk5NyAwSDM1LjU4OUw3LjAxOSA4OS4wMDZjLTE3LjY1NSA1NC40NjgtMS45MiAxMDcuNTI5IDQ2LjIwNyAxNDIuNTg4bDI4LjU2My04OS41MWwtNzQuNzctNTMuMDc4Wm00Ni4yMDggMTQyLjU4OGw3NC43NyA1Mi45N2w3NC43Ny01Mi45N2wtNzQuNzctNTMuODQ3bC03NC43NyA1My44NDdaIi8+PC9zdmc+",url:"https://auth0.com",disabled:!0},{category:"Auth",label:"Firebase",flag:"firebase-auth",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjczZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDM1MSI+PGRlZnM+PGZpbHRlciBpZD0ibG9nb3NGaXJlYmFzZTAiIHdpZHRoPSIyMDAlIiBoZWlnaHQ9IjIwMCUiIHg9Ii01MCUiIHk9Ii01MCUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCI+PGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dCbHVySW5uZXIxIiBzdGREZXZpYXRpb249IjE3LjUiLz48ZmVPZmZzZXQgaW49InNoYWRvd0JsdXJJbm5lcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0SW5uZXIxIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRJbm5lcjEiIGluMj0iU291cmNlQWxwaGEiIGsyPSItMSIgazM9IjEiIG9wZXJhdG9yPSJhcml0aG1ldGljIiByZXN1bHQ9InNoYWRvd0lubmVySW5uZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd0lubmVySW5uZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDYgMCIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImxvZ29zRmlyZWJhc2UxIiB3aWR0aD0iMjAwJSIgaGVpZ2h0PSIyMDAlIiB4PSItNTAlIiB5PSItNTAlIiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPjxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHJlc3VsdD0ic2hhZG93Qmx1cklubmVyMSIgc3RkRGV2aWF0aW9uPSIzLjUiLz48ZmVPZmZzZXQgZHg9IjEiIGR5PSItOSIgaW49InNoYWRvd0JsdXJJbm5lcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0SW5uZXIxIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRJbm5lcjEiIGluMj0iU291cmNlQWxwaGEiIGsyPSItMSIgazM9IjEiIG9wZXJhdG9yPSJhcml0aG1ldGljIiByZXN1bHQ9InNoYWRvd0lubmVySW5uZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd0lubmVySW5uZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDkgMCIvPjwvZmlsdGVyPjxwYXRoIGlkPSJsb2dvc0ZpcmViYXNlMiIgZD0ibTEuMjUzIDI4MC43MzJsMS42MDUtMy4xMzFsOTkuMzUzLTE4OC41MThsLTQ0LjE1LTgzLjQ3NUM1NC4zOTItMS4yODMgNDUuMDc0LjQ3NCA0My44NyA4LjE4OEwxLjI1MyAyODAuNzMyWiIvPjxwYXRoIGlkPSJsb2dvc0ZpcmViYXNlMyIgZD0ibTEzNC40MTcgMTQ4Ljk3NGwzMi4wMzktMzIuODEybC0zMi4wMzktNjEuMDA3Yy0zLjA0Mi01Ljc5MS0xMC40MzMtNi4zOTgtMTMuNDQzLS41OWwtMTcuNzA1IDM0LjEwOWwtLjUzIDEuNzQ0bDMxLjY3OCA1OC41NTZaIi8+PC9kZWZzPjxwYXRoIGZpbGw9IiNGRkMyNEEiIGQ9Im0wIDI4Mi45OThsMi4xMjMtMi45NzJMMTAyLjUyNyA4OS41MTJsLjIxMi0yLjAxN0w1OC40OCA0LjM1OEM1NC43Ny0yLjYwNiA0NC4zMy0uODQ1IDQzLjExNCA2Ljk1MUwwIDI4Mi45OThaIi8+PHVzZSBmaWxsPSIjRkZBNzEyIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhyZWY9IiNsb2dvc0ZpcmViYXNlMiIvPjx1c2UgZmlsdGVyPSJ1cmwoI2xvZ29zRmlyZWJhc2UwKSIgaHJlZj0iI2xvZ29zRmlyZWJhc2UyIi8+PHBhdGggZmlsbD0iI0Y0QkQ2MiIgZD0ibTEzNS4wMDUgMTUwLjM4bDMyLjk1NS0zMy43NWwtMzIuOTY1LTYyLjkzYy0zLjEyOS01Ljk1Ny0xMS44NjYtNS45NzUtMTQuOTYyIDBMMTAyLjQyIDg3LjI4N3YyLjg2bDMyLjU4NCA2MC4yMzNaIi8+PHVzZSBmaWxsPSIjRkZBNTBFIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhyZWY9IiNsb2dvc0ZpcmViYXNlMyIvPjx1c2UgZmlsdGVyPSJ1cmwoI2xvZ29zRmlyZWJhc2UxKSIgaHJlZj0iI2xvZ29zRmlyZWJhc2UzIi8+PHBhdGggZmlsbD0iI0Y2ODIwQyIgZD0ibTAgMjgyLjk5OGwuOTYyLS45NjhsMy40OTYtMS40MmwxMjguNDc3LTEyOGwxLjYyOC00LjQzMWwtMzIuMDUtNjEuMDc0eiIvPjxwYXRoIGZpbGw9IiNGREUwNjgiIGQ9Im0xMzkuMTIxIDM0Ny41NTFsMTE2LjI3NS02NC44NDdsLTMzLjIwNC0yMDQuNDk1Yy0xLjAzOS02LjM5OC04Ljg4OC04LjkyNy0xMy40NjgtNC4zNEwwIDI4Mi45OThsMTE1LjYwOCA2NC41NDhhMjQuMTI2IDI0LjEyNiAwIDAgMCAyMy41MTMuMDA1Ii8+PHBhdGggZmlsbD0iI0ZDQ0EzRiIgZD0iTTI1NC4zNTQgMjgyLjE2TDIyMS40MDIgNzkuMjE4Yy0xLjAzLTYuMzUtNy41NTgtOC45NzctMTIuMTAzLTQuNDI0TDEuMjkgMjgyLjZsMTE0LjMzOSA2My45MDhhMjMuOTQzIDIzLjk0MyAwIDAgMCAyMy4zMzQuMDA2bDExNS4zOTItNjQuMzU1WiIvPjxwYXRoIGZpbGw9IiNFRUFCMzciIGQ9Ik0xMzkuMTIgMzQ1LjY0YTI0LjEyNiAyNC4xMjYgMCAwIDEtMjMuNTEyLS4wMDVMLjkzMSAyODIuMDE1bC0uOTMuOTgzbDExNS42MDcgNjQuNTQ4YTI0LjEyNiAyNC4xMjYgMCAwIDAgMjMuNTEzLjAwNWwxMTYuMjc1LTY0Ljg0N2wtLjI4NS0xLjc1MmwtMTE1Ljk5IDY0LjY4OVoiLz48L3N2Zz4=",url:"https://firebase.google.com",links:[{label:"Getting started",href:"https://firebase.google.com/docs/web/setup"},{label:"API",href:"https://firebase.google.com/docs/reference"}]},{category:"RPC",label:"Telefunc",flag:"telefunc",image:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDcuMDIiIGhlaWdodD0iNDcuMDIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ3LjAyIDQ3LjAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGNpcmNsZSBjeD0iMjMuNTEiIGN5PSIyMy41MSIgcj0iMjEuOTUiIGZpbGw9IiNmN2UwMTgiIHN0cm9rZT0iIzMxMzQzZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzLjEyIiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTU1MDMgMCAwIC45NTUwMyAuMzQ0MDUgMS4wMTE3KSIgZmlsbD0iIzMxMzQzZCIgc2hhcGUtcmVuZGVyaW5nPSJhdXRvIj4KICA8cGF0aCBkPSJtMjEuODA0IDEzLjkxMyA2LjQzMzMgOS42NDU4LTYuNDMzMyA5LjY0NDFoNS44ODI0bDMuNDkzLTUuMjM1MiAzLjQ5MTMgNS4yMzUyaDUuODgyNGwtMTIuODY3LTE5LjI5eiIgY29sb3I9IiMwMDAwMDAiIGNvbG9yLXJlbmRlcmluZz0iYXV0byIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGltYWdlLXJlbmRlcmluZz0iYXV0byIgc29saWQtY29sb3I9IiMwMDAwMDAiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1hbHRlcm5hdGVzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtdmFyaWFudC1wb3NpdGlvbjpub3JtYWw7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NoYXBlLXBhZGRpbmc6MDt0ZXh0LWRlY29yYXRpb24tY29sb3I6IzAwMDAwMDt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lO3RleHQtZGVjb3JhdGlvbi1zdHlsZTpzb2xpZDt0ZXh0LWluZGVudDowO3RleHQtb3JpZW50YXRpb246bWl4ZWQ7dGV4dC10cmFuc2Zvcm06bm9uZTt3aGl0ZS1zcGFjZTpub3JtYWwiLz4KICA8cGF0aCBkPSJtMTQuODgyIDEzLjkxMyA2LjQzMzMgOS42NDU4LTYuNDMzMyA5LjY0NDFoNS44ODI0YzIuMDg1NS0zLjI5MTEgNC4wNDUyLTYuMjk1OSA2LjIyMjEtOS45NjE4bC02LjIyMjEtOS4zMjgxeiIgY29sb3I9IiMwMDAwMDAiIGNvbG9yLXJlbmRlcmluZz0iYXV0byIgZG9taW5hbnQtYmFzZWxpbmU9ImF1dG8iIGZpbGwtb3BhY2l0eT0iLjU3MzE1IiBpbWFnZS1yZW5kZXJpbmc9ImF1dG8iIHNvbGlkLWNvbG9yPSIjMDAwMDAwIiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtYWx0ZXJuYXRlczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbDtmb250LXZhcmlhbnQtcG9zaXRpb246bm9ybWFsO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzaGFwZS1wYWRkaW5nOjA7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1pbmRlbnQ6MDt0ZXh0LW9yaWVudGF0aW9uOm1peGVkO3RleHQtdHJhbnNmb3JtOm5vbmU7d2hpdGUtc3BhY2U6bm9ybWFsIi8+CiAgPHBhdGggZD0ibTcuOTYwNCAxMy45MTMgNi40MzMzIDkuNjQ1OC02LjQzMzMgOS42NDQxaDUuODgyNGMyLjA4NTUtMy4yOTExIDQuMDQ1Mi02LjI5NTkgNi4yMjIxLTkuOTYxOGwtNi4yMjIxLTkuMzI4MXoiIGNvbG9yPSIjMDAwMDAwIiBjb2xvci1yZW5kZXJpbmc9ImF1dG8iIGRvbWluYW50LWJhc2VsaW5lPSJhdXRvIiBmaWxsLW9wYWNpdHk9Ii4yNzY1NSIgaW1hZ2UtcmVuZGVyaW5nPSJhdXRvIiBzb2xpZC1jb2xvcj0iIzAwMDAwMCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWFsdGVybmF0ZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWw7Zm9udC12YXJpYW50LXBvc2l0aW9uOm5vcm1hbDtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c2hhcGUtcGFkZGluZzowO3RleHQtZGVjb3JhdGlvbi1jb2xvcjojMDAwMDAwO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uLXN0eWxlOnNvbGlkO3RleHQtaW5kZW50OjA7dGV4dC1vcmllbnRhdGlvbjptaXhlZDt0ZXh0LXRyYW5zZm9ybTpub25lO3doaXRlLXNwYWNlOm5vcm1hbCIvPgogPC9nPgo8L3N2Zz4K",url:"https://telefunc.com",tagline:"Remote Functions. Instead of API",repo:"brillout/telefunc"},{category:"RPC",label:"tRPC",flag:"trpc",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjg0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMwNSI+PHBhdGggZmlsbD0iIzM5OENDQiIgZD0iTTI4LjU3IDI0NC40ODRoMjEuOTgydjExLjE1M0gyOC41NzF2MjUuMzA4YTE2Ljg4IDE2Ljg4IDAgMCAwIC43MzggNS4zNjRhOC4xNTIgOC4xNTIgMCAwIDAgMi4wODggMy40YTcuODE1IDcuODE1IDAgMCAwIDMuMyAxLjg1MWMxLjIzNS4zMyAyLjUwNC41MSAzLjc4LjUzNmwuNTQ3LjAwMmMxLjE1IDAgMi4zMzggMCAzLjU2My0uMTYybC43MjctLjA5bDEuNDA5LS4xNmMuNDYxLS4wNTQuOTE1LS4xMTMgMS4zNjYtLjE4OGwuNjYtLjEwNWwxLjI0LS4xODRjLjQwMS0uMDYuNzktLjEyNCAxLjE3NS0uMTk5bC45MTgtLjE4NGwuNDI3LS4wOWwuNzktLjE3NmwuMzY2LS4wODdsMS40NzYgMTAuMzlhMTguNTA1IDE4LjUwNSAwIDAgMS0zLjc1MiAxLjZhMzUuOSAzNS45IDAgMCAxLTQuNTEzIDEuMTEzYy0xLjYuMy0zLjI2NC41MjYtNS4wMDIuNjg4YTU0LjI4IDU0LjI4IDAgMCAxLTUuMDg5LjIzOGEyOC4zOTYgMjguMzk2IDAgMCAxLTguNzUyLTEuMjVhMTYuODMgMTYuODMgMCAwIDEtNi43MjctNC4wMDJhMTcuMzQzIDE3LjM0MyAwIDAgMS00LjMwMi02Ljg1MmEyOS4xOTYgMjkuMTk2IDAgMCAxLTEuNTI1LTEwLjAwM3YtMjYuNzU4SDB2LTExLjE1M2gxMy40NDF2LTE0LjQxN2gxNS4xM3YxNC40MTdabTUzLjg4IDI5LjI3MXYyOS42MDlINjcuMTU2di03OS4yMzZoMjYuNjJhNDIuNTIgNDIuNTIgMCAwIDEgMTEuOTE2IDEuNTVhMjYuNjcgMjYuNjcgMCAwIDEgOS4xNCA0LjU1MmExOS44OCAxOS44OCAwIDAgMSA1Ljc5IDcuNTAyYTI0LjU3IDI0LjU3IDAgMCAxIDIuMDUgMTAuMzRhMjYuNzIgMjYuNzIgMCAwIDEtMS4wMTIgNy42NGEyMC4zMzEgMjAuMzMxIDAgMCAxLTcuNDAzIDEwLjgwNGEzMC4wOTYgMzAuMDk2IDAgMCAxLTUuOTAxIDMuNDg4bDE3LjAzIDMyLjY5N3YuNzEzaC0xNi40NDNMOTQuMDQgMjczLjc1NUg4Mi40NVptLjAxMi0xMi40MjhoMTEuMzE1YTE3Ljg2OCAxNy44NjggMCAwIDAgNi4yNTItMWExMC44NjYgMTAuODY2IDAgMCAwIDQuMzktMi45MTRhMTAuNTI4IDEwLjUyOCAwIDAgMCAyLjExMi0zLjU4OWMuNDQ4LTEuMzU4LjY5Mi0yLjc3NS43MjMtNC4yMDNsLjAwMi0uNTM2YTE1LjEwNCAxNS4xMDQgMCAwIDAtLjk1LTUuNTc2YTkuODY1IDkuODY1IDAgMCAwLTIuODUtNC4wMDFhMTIuMDY2IDEyLjA2NiAwIDAgMC00LjE0LTIuMTc2YTE5LjE0MyAxOS4xNDMgMCAwIDAtNC45Ny0uNzZsLTExLjg4NC0uMDAzdjI0Ljc1OFptNjcuODQ1IDQyLjAzN0gxMzUuMDR2LTc5LjIzNmgyNy4wOTVhMzQuNDEgMzQuNDEgMCAwIDEgMTEuNzAzIDEuODc2YTI2LjYzMyAyNi42MzMgMCAwIDEgOC45MjggNS4yMDFhMjMuMzA3IDIzLjMwNyAwIDAgMSA1LjYyNyA4LjA1M2EyNi4zNTggMjYuMzU4IDAgMCAxIDEuOTg4IDkuNzIzdi42NjdhMjQuMTcgMjQuMTcgMCAwIDEtMS45ODggOS44NTNhMjIuNTA3IDIyLjUwNyAwIDAgMS01LjYyNyA3Ljc3N2EyNi4zNyAyNi4zNyAwIDAgMS04Ljk2NSA1LjE3N2EzNC43MjMgMzQuNzIzIDAgMCAxLTExLjcwNCAxLjg1aC0xMS44MDNsLjAxMyAyOS4wNTlabTAtNDEuNDYyaDExLjgwM2ExNS4wMDQgMTUuMDA0IDAgMCAwIDUuNjY0LS45ODhhMTEuNTUzIDExLjU1MyAwIDAgMCA0LjAyNi0yLjY2M2ExMS4xNzggMTEuMTc4IDAgMCAwIDIuMzY0LTMuODg5Yy41My0xLjQ3Ni44LTMuMDMzLjgtNC42MDFhMTYuMzY3IDE2LjM2NyAwIDAgMC0uOC01LjE2NGExMS45NjYgMTEuOTY2IDAgMCAwLTIuMzY0LTQuMjAyYTExLjU5IDExLjU5IDAgMCAwLTQuMDI2LTIuODI1YTE0LjI2NyAxNC4yNjcgMCAwIDAtNS42NjQtMS4wMzhoLTExLjgwM3YyNS4zN1ptMTAzLjA0MiAyNy40MmEyNS4zMDcgMjUuMzA3IDAgMCAxLTUuOTAyIDguMTY1YTI2LjA0NSAyNi4wNDUgMCAwIDEtOC44MTUgNS4yMDJhMzMuNjQ3IDMzLjY0NyAwIDAgMS0xMC41NTggMS44MTRsLS43Ny0uMDAxYTMwLjc1OSAzMC43NTkgMCAwIDEtOS4wNTMtMS4yNWEyNS4zNDUgMjUuMzQ1IDAgMCAxLTcuNTAyLTMuNjc3YTI1LjcwNyAyNS43MDcgMCAwIDEtNS40MTQtNS4zODlhMzMuNjcyIDMzLjY3MiAwIDAgMS00LjAwMS02Ljk2NGE0MS41NzUgNDEuNTc1IDAgMCAxLTIuNDEzLTguMzc4YTUzLjQwOCA1My40MDggMCAwIDEtLjg1MS05LjY5di0xMC42NjZhNTMuNDMgNTMuNDMgMCAwIDEgLjc2My05LjExNWEzOS40MTEgMzkuNDExIDAgMCAxIDEuOTUtNy4xNjFsLjMzOC0uODY2YTMwLjQwOSAzMC40MDkgMCAwIDEgNC41NzctOC4wNTNhMjkuMjcxIDI5LjI3MSAwIDAgMSA2LjQxNC01Ljk3NmEyNi4xNTggMjYuMTU4IDAgMCAxIDcuMDUyLTMuMTg5YTI5LjEwOCAyOS4xMDggMCAwIDEgNy40OC0xLjExbC43Ni0uMDAzYTMzLjc2IDMzLjc2IDAgMCAxIDExLjYxNiAxLjg1YTIzLjc1NyAyMy43NTcgMCAwIDEgMTQuMzQyIDEzLjY1NWEzNy40MTEgMzcuNDExIDAgMCAxIDIuNjEzIDExLjE1M2gtMTUuMjNjLS4wOS0yLjEyLS40NDItNC4yMi0xLjA1LTYuMjUyYTEyLjM1NCAxMi4zNTQgMCAwIDAtMi40MjUtNC40NjNhMTAuNDE2IDEwLjQxNiAwIDAgMC00LjA1Mi0yLjYzOWExNi43MyAxNi43MyAwIDAgMC01LjgwMS0uOWExNC4yNDIgMTQuMjQyIDAgMCAwLTMuMzUxLjM4OGMtMSAuMjQzLTEuOTU5LjYyNi0yLjg1MSAxLjEzN2ExMS4zMjggMTEuMzI4IDAgMCAwLTMuNzUxIDMuNzUyYTIxLjk2OSAyMS45NjkgMCAwIDAtMi41MDEgNS42MzlhMzQuMDEgMzQuMDEgMCAwIDAtMS4wMjUgNS41MjZhNTguNzY3IDU4Ljc2NyAwIDAgMC0uMzI1IDYuNTAydjEwLjc2NmE2MS4yOCA2MS4yOCAwIDAgMCAuNTEyIDguNDY1YTI4LjkyIDI4LjkyIDAgMCAwIDEuNiA2LjUwMmExNS45OTIgMTUuOTkyIDAgMCAwIDEuODI2IDMuMzc2Yy42NjcuOTYgMS40ODcgMS44MDQgMi40MjYgMi41YTEwLjAwMyAxMC4wMDMgMCAwIDAgMy4yODggMS42YTE0LjU2IDE0LjU2IDAgMCAwIDQuMDUyLjUyNmExNy45MTggMTcuOTE4IDAgMCAwIDUuMzg5LS43NjNhMTAuMzAzIDEwLjMwMyAwIDAgMCA0LjA4OC0yLjRhMTEuMjUzIDExLjI1MyAwIDAgMCAyLjY2NC00LjE5YTIwLjk2OSAyMC45NjkgMCAwIDAgMS4yNS02LjE1SDI1NmEzMC4zOTYgMzAuMzk2IDAgMCAxLTIuNjUgMTAuNzI3Wk0xODYuMzggOTIuNDAybDM4LjQ4NiAyMi4yMnY0NC40NjJsLTM4LjQ4NiAyMi4yMmwtMTcuMDg1LTkuODgxbC00MS41NDUgMjMuOTg0bC00MS4yOTYtMjMuODQ3bC0xNi44NDYgOS43NDNsLTM4LjQ4Ni0yMi4yNTZWMTE0LjYybDM4LjQ4Ni0yMi4yMTlsMzguNDg2IDIyLjIydjQ0LjQyNWwtMTEuNjQzIDYuNzMzbDMxLjI5OSAxOC4wNzRsMzEuNTQ4LTE4LjIxMmwtMTEuNDA1LTYuNTk1VjExNC42MmwzOC40ODctMjIuMjE5Wk0xNTcuODk2IDEyNi4ydjI3LjEybDIzLjQ4MiAxMy41NTV2LTI3LjEyTDE1Ny44OTYgMTI2LjJabTU2Ljk2Ny0uMDM3bC0yMy40ODIgMTMuNTU0djI3LjE1OGwyMy40ODItMTMuNTkydi0yNy4xMlptLTE3My43MzggMHYyNy4xMmwyMy40ODEgMTMuNTU0di0yNy4xMmwtMjMuNDgxLTEzLjU1NFptNTYuOTY2IDBMNzQuNjEgMTM5LjcxNnYyNy4xMmwyMy40ODItMTMuNTU0di0yNy4xMlptODguMjg5LTIyLjE4MmwtMjMuNDgyIDEzLjU1NGwyMy40ODIgMTMuNTY3bDIzLjQ4MS0xMy41NjdsLTIzLjQ4MS0xMy41NTRabS0xMTYuNzcyLS4wMzdsLTIzLjQ4MiAxMy41OTFsMjMuNDgyIDEzLjUzbDIzLjQ4Mi0xMy41M2wtMjMuNDgyLTEzLjU5MVptMTkuMTQzLTY4LjkydjExLjU0bC0zNS42MSAyMC41N3YzNC43NzJsLTEwLjAwMyA1Ljc3N1Y2MS4zNTVMODguNzUgMzUuMDIzWk0xMjcuMjM3IDBsMzguNTEyIDIyLjIxOXYxMi4yMTlsNDYuNjEzIDI2LjkxN3Y0Ni4wMzlsLTEwLjAwMy01Ljc3N1Y2Ny4xMzJsLTM2LjYxLTIxLjE0MXYyMC42NjZsLTM4LjQ4NyAyMi4yMTlsLTM4LjQ4Ni0yMi4yMTlWMjIuMjE5TDEyNy4yMzcgMFpNOTguNzggMzMuNzZ2MjcuMTJsMjMuNDU3IDEzLjU1NFY0Ny4zMjZMOTguNzc5IDMzLjc2Wm01Ni45NDIgMGwtMjMuNDU3IDEzLjU2NnYyNy4wOTZMMTU1LjcyIDYwLjg4VjMzLjc2Wm0tMjguNDg0LTIyLjIwN0wxMDMuNzggMjUuMTA3bDIzLjQ1NyAxMy41NTRsMjMuNDgyLTEzLjU1NGwtMjMuNDgyLTEzLjU1NFoiLz48L3N2Zz4=",url:"https://trpc.io",spectrum:"beaten_path",tagline:"End-to-end typesafe APIs made easy",repo:"trpc/trpc",links:[{label:"Getting started",href:"https://trpc.io/docs/getting-started"},{label:"Docs",href:"https://trpc.io/docs"}]},{category:"Server",label:"h3",flag:"h3",url:"https://github.com/unjs/h3",tagline:"Minimal H(TTP) framework built for high performance and portability",repo:"unjs/h3"},{category:"Server",label:"Express",flag:"express",url:"https://expressjs.com",spectrum:"beaten_path",tagline:"Fast, unopinionated, minimalist web framework for Node.js",repo:"expressjs/express",links:[{label:"Getting started",href:"https://expressjs.com/en/starter/installing.html"},{label:"API",href:"https://expressjs.com/en/4x/api.html"}]},{category:"Server",label:"HatTip",flag:"hattip",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMjYzIDIyOCIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBpZD0iSGF0VGlwTG9nbyIgdHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgMSwgMC43MTcxMDUsIDcuODg4MTU4KSI+CiAgICA8cGF0aCBkPSJNMzQuNjMsMTYyLjMxMWMtMCwwIC0xMi4xNjEsLTYxLjc4IC0xMi42NzksLTgxLjAxOGMwLC0wIDEuODkyLC01My4zNDIgNzUuMDU3LC02OC41OGMwLDAgNzkuMTcxLC0zMC4wNzYgMTA1LjUzOCwyNC4zMzZjMCwtMCAyMy4wNDMsNTcuMzIzIDI1LjM0LDc2Ljg5Yy0wLC0wIC01NC40NywzOS4wNzMgLTE5MS44MjEsNTQuMzY3bC0xLjQzNSwtNS45OTVaIiBzdHlsZT0iZmlsbDojMjMzNjNmO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPHBhdGggZD0iTTM5LjI3NywxODEuNjkybC0zLjIxMiwtMTMuMzg2YzAsMCAxMjEuOTM0LC0xMS4yMzUgMTkxLjgyMSwtNTQuMzY3bDMuODg3LDE2LjIwNGMtMCwwIC04OS4xLDU5LjYzNyAtMTkyLjQ5Niw1MS41NDlaIiBzdHlsZT0iZmlsbDojMDRiNTc4O2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgPHBhdGggZD0iTTMzLjg1MiwxNTguMDI0bDUuNDI1LDIzLjY2OGMtMCwtMCA4OS4wNTksMTEuMTM3IDE5Mi40OTYsLTUxLjU0OWwtMy44ODcsLTE2LjIwNGwyNC44ODksLTEyLjAwNmMwLDAgNy4yMzEsLTMuOTczIDQuNTI0LDcuNDgxYy0wLC0wIDEuNjM5LDU3Ljk1MyAtMTMwLjI1MSw4Ny4zMTRjLTEyNi43NTQsMjguMjE4IC0xMzEuMzg1LC0zMi41NzUgLTExNy4wOTQsLTM1LjYxM2wyMy44OTgsLTMuMDkxWiIgc3R5bGU9ImZpbGw6IzIzMzY0MDtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICA8L2c+Cjwvc3ZnPg==",url:"https://github.com/hattipjs/hattip",spectrum:"bleeding_edge",tagline:"Like Express, but for the future",repo:"hattipjs/hattip"},{category:"Database",label:"Prisma",flag:"prisma",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjgzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMxMCI+PHBhdGggZD0iTTI1NC4zMTMgMjM1LjUxOUwxNDggOS43NDlBMTcuMDYzIDE3LjA2MyAwIDAgMCAxMzMuNDczLjAzN2ExNi44NyAxNi44NyAwIDAgMC0xNS41MzMgOC4wNTJMMi42MzMgMTk0Ljg0OGExNy40NjUgMTcuNDY1IDAgMCAwIC4xOTMgMTguNzQ3TDU5LjIgMzAwLjg5NmExOC4xMyAxOC4xMyAwIDAgMCAyMC4zNjMgNy40ODlsMTYzLjU5OS00OC4zOTJhMTcuOTI5IDE3LjkyOSAwIDAgMCAxMS4yNi05LjcyMmExNy41NDIgMTcuNTQyIDAgMCAwLS4xMDEtMTQuNzZsLS4wMDguMDA4Wm0tMjMuODAyIDkuNjgzbC0xMzguODIzIDQxLjA1Yy00LjIzNSAxLjI2LTguMy0yLjQxMS03LjQxOS02LjY4NWw0OS41OTgtMjM3LjQ4NGMuOTI3LTQuNDQzIDcuMDYzLTUuMTQ3IDkuMDAzLTEuMDM1bDkxLjgxNCAxOTQuOTczYTYuNjMgNi42MyAwIDAgMS00LjE4IDkuMThoLjAwN1oiLz48L3N2Zz4=",url:"https://www.prisma.io",spectrum:"beaten_path",tagline:"Next-generation Node.js and TypeScript ORM",repo:"prisma/prisma",links:[{label:"Getting started",href:"https://www.prisma.io/docs/getting-started"},{label:"Docs",href:"https://www.prisma.io/docs"}]},{category:"Database",label:"EdgeDB",flag:"edgedb",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyLjIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgNTEyIDIzMi43MjciPjxwYXRoIGZpbGw9IiM0RDRENEQiIGQ9Ik00MzMuNjY3IDExNS4yMzhjMCAzNS4zMzMtMTQuMTY3IDQxLjY2Ni0zMC4wMDIgNDEuNjY2SDM3MFY3My41NzFoMzMuNjY2YzE1LjgzNSAwIDMwLjAwMiA2LjMzNCAzMC4wMDIgNDEuNjY3Wm0tMTcuMTY3LjAwNGMwLTI0LjY2Ny03LjUtMjUuODMzLTE4LjMzMy0yNS44MzNoLTEwLjQ5OXY1MS42NjZoMTAuNWMxMC44MzMgMCAxOC4zMzItMS4xNjcgMTguMzMyLTI1LjgzM1ptLTE3OC4zMzYgNDEuNjYyVjczLjU3MWg1My4wMDF2MTUuODM0aC0zNS4zMzR2MTdoMjYuNjY2djE1LjY2NmgtMjYuNjY2djE5aDM1LjMzNHYxNS44MzNoLTUzWk0zMjAgMjMyLjcyN2gxNy40NTVWMEgzMjB2MjMyLjcyN1pNNDY4Ljk5NSAxMTkuOTF2MjEuMTY2aDE0LjY2OGM5LjE2NiAwIDExLjUtNiAxMS41LTEwLjVjMC0zLjUtMS42NjgtMTAuNjY2LTE0LjE2OC0xMC42NjZoLTEyWm0wLTMwLjUwMnYxNS44MzNoMTJjNi44MzMgMCAxMC44MzMtMyAxMC44MzMtOHMtNC03LjgzMy0xMC44MzMtNy44MzNoLTEyWk00NTEuMzM0IDczLjU3aDMzLjk5OGMxNy44MzYgMCAyMy4xNjggMTIuNSAyMy4xNjggMjEuNWMwIDguMzM0LTUuMzMyIDE0LjMzNC05IDE2YzEwLjY2NyA1LjE2NyAxMi41IDE1LjY2NyAxMi41IDIxYzAgNy0zLjUgMjQuODMzLTI2LjY2OCAyNC44MzNoLTMzLjk5OFY3My41NzFabS0zMTQuNjY1IDQxLjY2N2MwIDM1LjMzMy0xNC4xNjcgNDEuNjY2LTMwIDQxLjY2Nkg3My4wMDJWNzMuNTcxaDMzLjY2N2MxNS44MzMgMCAzMCA2LjMzNCAzMCA0MS42NjdabTUxLjk5NyAyNi41MDdjOSAwIDEzLjY2Ni0zIDE1LjMzMy01di05LjE2NmgtMTQuMzM0di0xNC4zMzRoMjguNXYzMy4xNjdjLTIuNSAzLjgzMy0xNi4xNjYgMTEuMzMzLTI4LjY2NiAxMS4zMzNjLTIwLjUgMC0zNy44MzMtOC0zNy44MzMtNDMuMzMzczE3LjUtNDEuNjY2IDMzLjMzMy00MS42NjZjMjQuODMzIDAgMzEgMTMgMzMgMjQuNWwtMTQuNjY3IDMuMzMzYy0uODMzLTUuMzM0LTUuNS0xMi0xNi4xNjYtMTJjLTEwLjgzNCAwLTE4LjMzNCAxLjE2Ni0xOC4zMzQgMjUuODMzYzAgMjQuNjY3IDcuODM0IDI3LjMzMyAxOS44MzQgMjcuMzMzWk0xMTkuNSAxMTUuMjQyYzAtMjQuNjY3LTcuNS0yNS44MzMtMTguMzMzLTI1LjgzM2gtMTAuNXY1MS42NjZoMTAuNWMxMC44MzMgMCAxOC4zMzMtMS4xNjcgMTguMzMzLTI1LjgzM1pNMCAxNTYuOTA0VjczLjU3MWg1M3YxNS44MzRIMTcuNjY3djE3aDI2LjY2NnYxNS42NjZIMTcuNjY3djE5SDUzdjE1LjgzM0gwWiIvPjwvc3ZnPg==",url:"https://www.edgedb.com",spectrum:"bleeding_edge",tagline:"A graph-like schema with a relational core",repo:"edgedb/edgedb",links:[{label:"Getting started",href:"https://www.edgedb.com/docs/intro/quickstart"},{label:"Docs",href:"https://www.edgedb.com/docs"}]},{category:"Analytics",label:"Plausible.io",flag:"plausible.io",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+bG9nbzwvdGl0bGU+CiAgICA8ZGVmcz4KICAgICAgICA8cmFkaWFsR3JhZGllbnQgY3g9Ijc5LjEzMDUyNjMlIiBjeT0iODcuNjQ0ODE1OCUiIGZ4PSI3OS4xMzA1MjYzJSIgZnk9Ijg3LjY0NDgxNTglIiByPSI5Ni45ODk3NzYzJSIgaWQ9InJhZGlhbEdyYWRpZW50LTEiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjMjQ0MEU2IiBvZmZzZXQ9IjAlIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiM1NjYxQjMiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgICAgIDwvcmFkaWFsR3JhZGllbnQ+CiAgICAgICAgPHJhZGlhbEdyYWRpZW50IGN4PSIxLjUwNjEwNDU3ZS0wNSUiIGN5PSIzMC4yMTk4OTQxJSIgZng9IjEuNTA2MTA0NTdlLTA1JSIgZnk9IjMwLjIxOTg5NDElIiByPSI2Mi4yNjg4NzczJSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwwLjMwMjE5OSksc2NhbGUoMS4wMDAwMDAsMC43MjI1MTkpLHJvdGF0ZSg2MS43MzQ1MjIpLHRyYW5zbGF0ZSgtMC4wMDAwMDAsLTAuMzAyMTk5KSIgaWQ9InJhZGlhbEdyYWRpZW50LTIiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNjU3NENEIiBzdG9wLW9wYWNpdHk9IjAuNSIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNjU3NENEIiBvZmZzZXQ9IjEwMCUiPjwvc3RvcD4KICAgICAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImxvZ28iPgogICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPjwvcmVjdD4KICAgICAgICAgICAgPGcgaWQ9IkJpdG1hcCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi41MzEwMTcsIDAuMDQ5NjI4KSIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNy40Njg5ODMsIDkuOTY3NTIzKSBzY2FsZSgtMSwgMSkgcm90YXRlKC0xODAuMDAwMDAwKSB0cmFuc2xhdGUoLTcuNDY4OTgzLCAtOS45Njc1MjMpIHRyYW5zbGF0ZSgwLjAwMDAwMCwgMC4wMDAwMDApIj4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsPSJ1cmwoI3JhZGlhbEdyYWRpZW50LTEpIiBjeD0iNy40Njg5ODI2NCIgY3k9IjEyLjQ2NjA2MjciIHI9IjcuNDY4OTgyNjQiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjE4ODU4NTYyLDE5Ljg1MTExNjYgQzQuNjQ1MTYxMywxOS41ODMxMjY2IDMuMzQ0OTEzMTgsMTguOTI4MDM5NyAyLjI2Nzk5MDEsMTcuODc1OTMwNSBDMS4xNjEyOTAzNCwxNi43OTQwNDQ3IDAuNDc2NDI2ODE4LDE1LjUzMzQ5ODggMC4xNDM5MjA2MTUsMTMuOTYwMjk3OCBMMC4wMjk3NzY2OTQsMTMuNDI0MzE3NiBMMC4wMTQ4ODgzNTY2LDYuNzE0NjQwMTkgTDEuOTE2MDAwMDNlLTA4LC00LjkyOTM5MDIzZS0xNiBMMC4xMzg5NTc4MzYsLTQuOTI5MzkwMjNlLTE2IEMwLjIxODM2MjMwMiwtNC45MjkzOTAyM2UtMTYgMC40NzE0NjQwNCwwLjAyNDgxMzg5NTggMC42OTk3NTE4OCwwLjA0OTYyNzc5MTYgQzIuNjUwMTI0MDgsMC4yODc4NDExOTEgNC4zMDc2OTIzMiwxLjQ2ODk4MjYzIDUuMjEwOTE4MTQsMy4yNjA1NDU5MSBDNS40MzkyMDU5OCwzLjcxNzEyMTU5IDUuNjAyOTc3NjgsNC4yNDMxNzYxNyA1LjcxNzEyMTYsNC44OTgyNjMwMyBDNS44MTE0MTQ0Miw1LjQ1NDA5NDI5IDUuODE2Mzc3Miw1LjYzNzcxNzEzIDUuODAxNDg4ODYsOC41MzU5ODAxNSBMNS43ODY2MDA1MiwxMS41ODgwODkzIEw1LjkwNTcwNzIyLDExLjg4NTg1NjEgQzYuMDY5NDc4OTIsMTIuMjkyODA0IDYuNTIxMDkxODQsMTIuNzQ0NDE2OSA2LjkyODAzOTcyLDEyLjkwODE4ODYgTDcuMjI1ODA2NDgsMTMuMDI3Mjk1MyBMMTAuMDA0OTYyOCwxMy4wMzIyNTgxIEMxMS41MzM0OTg4LDEzLjAzMjI1ODEgMTIuODczNDQ5MiwxMy4wNTIxMDkyIDEyLjk3NzY2NzUsMTMuMDcxOTYwMyBDMTMuNDY0MDE5OSwxMy4xNjYyNTMxIDEzLjk4NTExMTcsMTMuNTczMjAxIDE0LjE5MzU0ODQsMTQuMDI0ODEzOSBDMTQuMjUzMTAxOCwxNC4xNDg4ODM0IDE0LjMzMjUwNjIsMTQuMzkyMDU5NiAxNC4zNjcyNDU3LDE0LjU1NTgzMTMgQzE0LjQyMTgzNjIsMTQuODI4Nzg0MSAxNC40MTY4NzM1LDE0LjkwMzIyNTggMTQuMzM3NDY5LDE1LjIxMDkxODEgQzE0LjA4OTMzLDE2LjEyNDA2OTUgMTMuMjE1ODgwOSwxNy4zODk1NzgyIDEyLjMyMjU4MDcsMTguMTI5MDMyMyBDMTEuMzEwMTczNywxOC45Njc3NDE5IDEwLjE5MzU0ODQsMTkuNTI4NTM2IDguOTg3NTkzMDgsMTkuODExNDE0NCBDOC4zNTIzNTczNCwxOS45NTUzMzUgNi45MTMxNTEzOCwxOS45ODAxNDg5IDYuMTg4NTg1NjIsMTkuODUxMTE2NiBaIiBpZD0iUGF0aCIgZmlsbD0idXJsKCNyYWRpYWxHcmFkaWVudC0yKSI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=",url:"https://plausible.io",tagline:"Easy to use and privacy-friendly Google Analytics alternative",repo:"plausible/analytics"},{category:"Analytics",label:"Google Analytics",flag:"google-analytics",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjkxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI4NCI+PHBhdGggZmlsbD0iI0Y5QUIwMCIgZD0iTTI1Ni4wMDMgMjQ3LjkzM2EzNS4yMjQgMzUuMjI0IDAgMCAxLTM5LjM3NiAzNS4xNjFjLTE4LjA0NC0yLjY3LTMxLjI2Ni0xOC4zNzEtMzAuODI2LTM2LjYwNlYzNi44NDVDMTg1LjM2NSAxOC41OTEgMTk4LjYyIDIuODgxIDIxNi42ODcuMjRhMzUuMjIxIDM1LjIyMSAwIDAgMSAzOS4zMTYgMzUuMTZ2MjEyLjUzM1oiLz48cGF0aCBmaWxsPSIjRTM3NDAwIiBkPSJNMzUuMTAxIDIxMy4xOTNjMTkuMzg2IDAgMzUuMTAxIDE1LjcxNiAzNS4xMDEgMzUuMTAxYzAgMTkuMzg2LTE1LjcxNSAzNS4xMDEtMzUuMTAxIDM1LjEwMVMwIDI2Ny42OCAwIDI0OC4yOTVjMC0xOS4zODYgMTUuNzE1LTM1LjEwMiAzNS4xMDEtMzUuMTAyWm05Mi4zNTgtMTA2LjM4N2MtMTkuNDc3IDEuMDY4LTM0LjU5IDE3LjQwNi0zNC4xMzcgMzYuOTA4djk0LjI4NWMwIDI1LjU4OCAxMS4yNTkgNDEuMTIyIDI3Ljc1NSA0NC40MzNhMzUuMTYxIDM1LjE2MSAwIDAgMCA0Mi4xNDYtMzQuNTZWMTQyLjA4OWEzNS4yMjIgMzUuMjIyIDAgMCAwLTM1Ljc2NC0zNS4yODJaIi8+PC9zdmc+",url:"https://analytics.google.com/"},{category:"Analytics",label:"Segment",flag:"segment",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjk3ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI2NSI+PHBhdGggZmlsbD0iIzRGQjU4QiIgZD0ibTIzMy41NiAxNDEuOTI3bC4xNy4wMTNsMTcuODkyIDEuODdhNC45MjcgNC45MjcgMCAwIDEgMy4yMjUgMS43MDdsLjEzMy4xNjNsLS4xNy4wODVhNC45MyA0LjkzIDAgMCAxIDEuMDIgMy43NGExMzMuMjcyIDEzMy4yNzIgMCAwIDEtNDEuNjA0IDgxLjA4M2ExMjguODYgMTI4Ljg2IDAgMCAxLTg3LjYyOSAzNC4zOGExMjcuNDg4IDEyNy40ODggMCAwIDEtNDYuMTU2LTguNTdsLS44MDItLjMxMmE0LjcxNiA0LjcxNiAwIDAgMS0yLjY4Ni0yLjUzM2wtLjA3Ny0uMTg3YTQuODkxIDQuODkxIDAgMCAxLS4wODMtMy42Nmw3LjA2Mi0xNy4yM2E0Ljg0NiA0Ljg0NiAwIDAgMSA2LjExOC0yLjc5OWwuMTYzLjA2YzM2LjA5NyAxMy45MzkgNzYuOTggNi4wODkgMTA1LjM0OS0yMC4yMjdhMTA0LjQ1NSAxMDQuNDU1IDAgMCAwIDMyLjg5MS02My4zMmE0LjkzIDQuOTMgMCAwIDEgNS4wMTMtNC4yN2wuMTcuMDA3Wm0tMTkwLjA4IDY0LjMxbC4yNTEtLjAwMmwuMjUzLjAwMmM4LjEyLjA5MyAxNC42NTggNi42NTkgMTQuNzQ2IDE0Ljc0OXYuMjUzYzAgLjA4NCAwIC4xNjgtLjAwMi4yNTJjLS4xNDEgOC4yODQtNi45NyAxNC44ODYtMTUuMjU0IDE0Ljc0NWMtOC4yODQtLjE0MS0xNC44ODUtNi45Ny0xNC43NDUtMTUuMjU0Yy4xMzktOC4xMTUgNi42OTUtMTQuNjE1IDE0Ljc1LTE0Ljc0NVpNNC45MyAxNDcuMDgyaDE0Ni4zMTZhNC45NzMgNC45NzMgMCAwIDEgNC45MjggNC44NDRsLjAwMi4xNzF2MTguMzE2YTQuOTc0IDQuOTc0IDAgMCAxLTQuNzYgNS4wMWwtLjE3LjAwNUg0LjkzQTQuOTc1IDQuOTc1IDAgMCAxIDAgMTcwLjU4NHYtMTguNjU5YTQuOTc1IDQuOTc1IDAgMCAxIDQuNzU1LTQuODM4bC4xNzUtLjAwNVpNMTY5LjU2IDcuMzExYTQuOTc0IDQuOTc0IDAgMCAxIDIuODQ4IDIuNjM1YTUuMDk2IDUuMDk2IDAgMCAxIDAgMy44NjdsLTYuMzc1IDE2Ljk5OWE0Ljg0NSA0Ljg0NSAwIDAgMS02LjE2MiAyLjk3NEExMDEuMjI4IDEwMS4yMjggMCAwIDAgNjIuMTMgNTEuMjUyYTEwNS4yNjcgMTA1LjI2NyAwIDAgMC0zNC41MDcgNTQuOTlhNC45MyA0LjkzIDAgMCAxLTQuNzYgMy42OThoLTEuMTA1TDQuMjUgMTA1LjczM2E0Ljg4NiA0Ljg4NiAwIDAgMS0zLjEwMy0yLjI5NWgtLjA4NUE0LjkyOSA0LjkyOSAwIDAgMSAuNTEgOTkuNTdhMTMzLjM5MyAxMzMuMzkzIDAgMCAxIDQ0LjQxLTcwLjIwNEM3OS43MzkuNyAxMjcuMDE5LTcuNjY2IDE2OS41NiA3LjMxMVptLTY0LjgwNyA3My40MzRIMjUxLjA3YTQuOTcyIDQuOTcyIDAgMCAxIDQuOTIyIDQuNjdsLjAwOC4xNzR2MTguMzE3YTQuOTczIDQuOTczIDAgMCAxLTQuNzYgNS4wMWwtLjE3LjAwNUgxMDQuNzU0YTQuOTcyIDQuOTcyIDAgMCAxLTQuODg2LTQuODQybC0uMDAyLS4xNzNWODUuNzU5YTQuOTcyIDQuOTcyIDAgMCAxIDQuNzE1LTUuMDA4bC4xNzMtLjAwNlptMTAxLjU3Mi01NS44ODNsLjI1Mi0uMDAybC4yNTMuMDAyYzguMTIuMDkzIDE0LjY1OCA2LjY1OSAxNC43NDYgMTQuNzQ4di4yNTNjMCAuMDg1IDAgLjE3LS4wMDIuMjUzYy0uMTQgOC4yODQtNi45NyAxNC44ODUtMTUuMjU0IDE0Ljc0NGMtOC4yODQtLjE0LTE0Ljg4NS02Ljk3LTE0Ljc0NC0xNS4yNTNjLjEzOC04LjExNiA2LjY5NC0xNC42MTYgMTQuNzQ5LTE0Ljc0NVoiLz48L3N2Zz4=",url:"https://segment.com",disabled:!0},{category:"Hosting",label:"Vercel",flag:"vercel",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE2ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyMiI+PHBhdGggZD0ibTEyOCAwbDEyOCAyMjEuNzA1SDB6Ii8+PC9zdmc+",url:"https://vercel.com",tagline:"Develop with your favorite tools. Launch globally, instantly. Keep pushing",repo:"vercel/vercel",links:[{label:"Guides",href:"https://vercel.com/guides"},{label:"Docs",href:"https://vercel.com/docs"}]},{category:"Hosting",label:"Netlify",flag:"netlify",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNiI+PHBhdGggZmlsbD0iIzA1QkRCQSIgZD0iTTY5LjE4MSAxODguMDg3aC0yLjQxN2wtMTIuMDY1LTEyLjA2NXYtMi40MTdsMTguNDQ0LTE4LjQ0NGgxMi43NzhsMS43MDQgMS43MDR2MTIuNzc4ek01NC42OTkgNTEuNjI4di0yLjQxN2wxMi4wNjUtMTIuMDY1aDIuNDE3TDg3LjYyNSA1NS41OXYxMi43NzhsLTEuNzA0IDEuNzA0SDczLjE0M3oiLz48cGF0aCBmaWxsPSIjMDE0ODQ3IiBkPSJNMTYwLjkwNiAxNDkuMTk4aC0xNy41NTJsLTEuNDY2LTEuNDY2di00MS4wODljMC03LjMxLTIuODczLTEyLjk3Ni0xMS42ODktMTMuMTc0Yy00LjUzNy0uMTE5LTkuNzI3IDAtMTUuMjc0LjIxOGwtLjgzMy44NTJ2NTMuMTczbC0xLjQ2NiAxLjQ2Nkg5NS4wNzRsLTEuNDY2LTEuNDY2di03MC4xOWwxLjQ2Ni0xLjQ2N2gzOS41MDNjMTUuMzU0IDAgMjcuNzk1IDEyLjQ0MSAyNy43OTUgMjcuNzk1djQzLjg4MmwtMS40NjYgMS40NjZaIi8+PHBhdGggZmlsbD0iIzA1QkRCQSIgZD0iTTcxLjY3NyAxMjIuODg5SDEuNDY2TDAgMTIxLjQyM1YxMDMuODNsMS40NjYtMS40NjZoNzAuMjExbDEuNDY2IDEuNDY2djE3LjU5M3ptMTgyLjg1NyAwaC03MC4yMTFsLTEuNDY2LTEuNDY2VjEwMy44M2wxLjQ2Ni0xLjQ2Nmg3MC4yMTFMMjU2IDEwMy44M3YxNy41OTN6TTExNy44NzYgNTQuMTI0VjEuNDY2TDExOS4zNDIgMGgxNy41OTNsMS40NjYgMS40NjZ2NTIuNjU4bC0xLjQ2NiAxLjQ2NmgtMTcuNTkzem0wIDE2OS42NjN2LTUyLjY1OGwxLjQ2Ni0xLjQ2NmgxNy41OTNsMS40NjYgMS40NjZ2NTIuNjU4bC0xLjQ2NiAxLjQ2NWgtMTcuNTkzeiIvPjwvc3ZnPg==",url:"https://www.netlify.com",disabled:!0},{category:"Linter",label:"ESLint",flag:"eslint",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjE0ZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNSI+PHBhdGggZmlsbD0iIzgwODBGMiIgZD0ibTc3Ljk2NSA4MC41NjhsNDguNTctMjguMDQyYTMuOTI5IDMuOTI5IDAgMCAxIDMuOTMgMGw0OC41NyAyOC4wNDJBMy45MzIgMy45MzIgMCAwIDEgMTgxIDgzLjk3MXY1Ni4wODRjMCAxLjQwMy0uNzUgMi43LTEuOTY1IDMuNDAzbC00OC41NyAyOC4wNDJhMy45MjkgMy45MjkgMCAwIDEtMy45MyAwbC00OC41Ny0yOC4wNDJBMy45MzEgMy45MzEgMCAwIDEgNzYgMTQwLjA1NVY4My45N2MuMDAxLTEuNDA0Ljc1LTIuNyAxLjk2NS0zLjQwMyIvPjxwYXRoIGZpbGw9IiM0QjMyQzMiIGQ9Ik0yNTQuNDE3IDEwNy40MTdMMTk2LjMyMyA2LjM1QzE5NC4yMTMgMi42OTYgMTkwLjMxNSAwIDE4Ni4wOTUgMEg2OS45MDZjLTQuMjIgMC04LjEyIDIuNjk2LTEwLjIzIDYuMzVMMS41ODMgMTA3LjE5NGMtMi4xMSAzLjY1NS0yLjExIDguMjY4IDAgMTEuOTIzbDU4LjA5MyAxMDAuMjM5YzIuMTEgMy42NTQgNi4wMSA1LjUyMiAxMC4yMyA1LjUyMmgxMTYuMTg4YzQuMjIgMCA4LjExOS0xLjgxMiAxMC4yMjgtNS40NjdsNTguMDk0LTEwMC40MDJjMi4xMTItMy42NTMgMi4xMTItNy45MzggMC0xMS41OTJabS00OC4xMDUgNDguNmMwIDEuNDg1LS44OTQgMi44Ni0yLjE4MiAzLjYwNGwtNzMuOTk5IDQyLjY5M2E0LjIxIDQuMjEgMCAwIDEtNC4xODYgMGwtNzQuMDU2LTQyLjY5M2MtMS4yODctLjc0NC0yLjE4OC0yLjExOC0yLjE4OC0zLjYwNVY3MC42MjhjMC0xLjQ4Ny44ODgtMi44NiAyLjE3Ni0zLjYwNGw3My45OTUtNDIuNjk0YTQuMjAyIDQuMjAyIDAgMCAxIDQuMTg1IDBsNzQuMDYgNDIuNjk0YzEuMjg5Ljc0NCAyLjE5NSAyLjExNyAyLjE5NSAzLjYwNHY4NS4zODhaIi8+PC9zdmc+",url:"https://eslint.org",tagline:"Find and fix problems in your JavaScript code",repo:"eslint/eslint",links:[{label:"Docs",href:"https://eslint.org/docs/latest/"}]},{category:"Linter",label:"Prettier",flag:"prettier",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMTgyLjg1NyIgeT0iNDguNzYyIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI3My4xNDMiIGhlaWdodD0iMTIuMTkiIHk9IjI0My44MSIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB4PSIxNDYuMjg2IiB5PSIxNDYuMjg2IiBmaWxsPSIjQkY4NUJGIiByeD0iNSIvPjxyZWN0IHdpZHRoPSI2MC45NTIiIGhlaWdodD0iMTIuMTkiIHg9IjczLjE0MyIgeT0iMTQ2LjI4NiIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNjAuOTUyIiBoZWlnaHQ9IjEyLjE5IiB5PSIxNDYuMjg2IiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI3My4xNDMiIGhlaWdodD0iMTIuMTkiIHk9IjE5NS4wNDgiIGZpbGw9IiNCRjg1QkYiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeT0iOTcuNTI0IiBmaWxsPSIjQkY4NUJGIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxMzQuMDk1IiBoZWlnaHQ9IjEyLjE5IiB4PSI2MC45NTIiIHk9IjI0LjM4MSIgZmlsbD0iI0Y3QkEzRSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB5PSIyNC4zODEiIGZpbGw9IiNFQTVFNUUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeD0iNDguNzYyIiB5PSIyMTkuNDI5IiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjQ4Ljc2MiIgeT0iNzMuMTQzIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHk9IjIxOS40MjkiIGZpbGw9IiM1NkIzQjQiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeT0iNzMuMTQzIiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjE1OC40NzYiIHk9IjIxOS40MjkiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI2MC45NTIiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iMjE5LjQyOSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjYwLjk1MiIgaGVpZ2h0PSIxMi4xOSIgeD0iMTk1LjA0OCIgeT0iMjE5LjQyOSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjEwOS43MTQiIGhlaWdodD0iMTIuMTkiIHg9Ijk3LjUyNCIgeT0iMTIxLjkwNSIgZmlsbD0iIzU2QjNCNCIgcng9IjUiLz48cmVjdCB3aWR0aD0iNDguNzYyIiBoZWlnaHQ9IjEyLjE5IiB4PSIzNi41NzEiIHk9IjEyMS45MDUiIGZpbGw9IiNGN0JBM0UiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeT0iMTIxLjkwNSIgZmlsbD0iI0VBNUU1RSIgcng9IjUiLz48cmVjdCB3aWR0aD0iNjAuOTUyIiBoZWlnaHQ9IjEyLjE5IiB4PSIxMDkuNzE0IiB5PSI0OC43NjIiIGZpbGw9IiNCRjg1QkYiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9Ijk3LjUyNCIgaGVpZ2h0PSIxMi4xOSIgeT0iNDguNzYyIiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxMjEuOTA1IiBoZWlnaHQ9IjEyLjE5IiB4PSIzNi41NzEiIHk9IjE3MC42NjciIGZpbGw9IiNGN0JBM0UiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjI0LjM4MSIgaGVpZ2h0PSIxMi4xOSIgeT0iMTcwLjY2NyIgZmlsbD0iI0JGODVCRiIgcng9IjUiLz48cmVjdCB3aWR0aD0iNzMuMTQzIiBoZWlnaHQ9IjEyLjE5IiB4PSIxNDYuMjg2IiB5PSI3My4xNDMiIGZpbGw9IiNFQTVFNUUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeD0iMTQ2LjI4NiIgeT0iOTcuNTI0IiBmaWxsPSIjRjdCQTNFIiByeD0iNSIvPjxyZWN0IHdpZHRoPSIxNTguNDc2IiBoZWlnaHQ9IjEyLjE5IiBmaWxsPSIjNTZCM0I0IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI4NS4zMzMiIGhlaWdodD0iMTIuMTkiIHg9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9IjE3MC42NjciIHk9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9IjIxOS40MjkiIHk9IjE3MC42NjciIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9IjIwNy4yMzgiIHk9IjE0Ni4yODYiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9IjIwNy4yMzgiIHk9IjI0LjM4MSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMjE5LjQyOSIgeT0iMTIxLjkwNSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjM2LjU3MSIgaGVpZ2h0PSIxMi4xOSIgeD0iMjE5LjQyOSIgeT0iNDguNzYyIiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48cmVjdCB3aWR0aD0iMjQuMzgxIiBoZWlnaHQ9IjEyLjE5IiB4PSIyMzEuNjE5IiB5PSI3My4xNDMiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIyNC4zODEiIGhlaWdodD0iMTIuMTkiIHg9IjIzMS42MTkiIHk9Ijk3LjUyNCIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjEyMS45MDUiIGhlaWdodD0iMTIuMTkiIHg9IjEzNC4wOTUiIHk9IjE5NS4wNDgiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSIzNi41NzEiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iMTk1LjA0OCIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjczLjE0MyIgaGVpZ2h0PSIxMi4xOSIgeD0iMTgyLjg1NyIgeT0iMjQzLjgxIiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48cmVjdCB3aWR0aD0iODUuMzMzIiBoZWlnaHQ9IjEyLjE5IiB4PSI4NS4zMzMiIHk9IjI0My44MSIgZmlsbD0iI0QwRDREOCIgb3BhY2l0eT0iLjUiIHJ4PSI1Ii8+PHJlY3Qgd2lkdGg9IjQ4Ljc2MiIgaGVpZ2h0PSIxMi4xOSIgeD0iODUuMzMzIiB5PSI3My4xNDMiIGZpbGw9IiNEMEQ0RDgiIG9wYWNpdHk9Ii41IiByeD0iNSIvPjxyZWN0IHdpZHRoPSI0OC43NjIiIGhlaWdodD0iMTIuMTkiIHg9Ijg1LjMzMyIgeT0iOTcuNTI0IiBmaWxsPSIjRDBENEQ4IiBvcGFjaXR5PSIuNSIgcng9IjUiLz48L3N2Zz4=",url:"https://prettier.io",tagline:"An opinionated code formatter",repo:"prettier/prettier",links:[{label:"Docs",href:"https://prettier.io/docs/en/"}]},{category:"Linter",label:"Biome",flag:"biome",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICdodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQnPjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2ZXJzaW9uPScxLjEnIHdpZHRoPSc0OHB4JyBoZWlnaHQ9JzQ4cHgnIHN0eWxlPSdzaGFwZS1yZW5kZXJpbmc6Z2VvbWV0cmljUHJlY2lzaW9uOyB0ZXh0LXJlbmRlcmluZzpnZW9tZXRyaWNQcmVjaXNpb247IGltYWdlLXJlbmRlcmluZzpvcHRpbWl6ZVF1YWxpdHk7IGZpbGwtcnVsZTpldmVub2RkOyBjbGlwLXJ1bGU6ZXZlbm9kZCcgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnPjxnPjxwYXRoIHN0eWxlPSdvcGFjaXR5OjEnIGZpbGw9JyNlNWIxMWMnIGQ9J00gMzEuNSw0MS41IEMgMjguODMzMyw0MS41IDI2LjE2NjcsNDEuNSAyMy41LDQxLjVDIDIzLjUsMzguODMzMyAyMy41LDM2LjE2NjcgMjMuNSwzMy41QyAyNS4yNjQ2LDMyLjUzODYgMjcuMjY0NiwzMi4yMDUzIDI5LjUsMzIuNUMgMjkuNzczMywzMC41NDkgMjkuMTA2NiwyOS4wNDkgMjcuNSwyOEMgMjMuODQ4NCwyNy41MDE0IDIwLjE4MTcsMjcuMzM0NyAxNi41LDI3LjVDIDE2LjUsMzIuNSAxNi41LDM3LjUgMTYuNSw0Mi41QyAxMy4xNjY3LDQyLjUgOS44MzMzMyw0Mi41IDYuNSw0Mi41QyA2LjUsMzQuNSA2LjUsMjYuNSA2LjUsMTguNUMgMTMuNSwxOC41IDIwLjUsMTguNSAyNy41LDE4LjVDIDI4LjU4NjIsMTguMzggMjkuMjUyOCwxNy43MTMzIDI5LjUsMTYuNUMgMjkuNDU3MywxNS41ODM2IDI5LjEyMzksMTQuOTE2OSAyOC41LDE0LjVDIDIxLjQ5MjEsMTQuNjY2MyAxNC40OTIxLDE0LjQ5OTYgNy41LDE0QyA2LjU0OTQ4LDEwLjk0MzMgNi4yMTYxNCw3Ljc3NjU5IDYuNSw0LjVDIDE0Ljg0LDQuMzMzNiAyMy4xNzMzLDQuNTAwMjcgMzEuNSw1QyAzOS44NjA5LDkuMjUxNDYgNDEuNTI3NSwxNS4yNTE1IDM2LjUsMjNDIDQxLjc1NiwyOC41OTM1IDQxLjc1NiwzNC4yNjAyIDM2LjUsNDBDIDM0Ljk3NTEsNDEuMDA4NiAzMy4zMDg0LDQxLjUwODYgMzEuNSw0MS41IFonLz48L2c+PGc+PHBhdGggc3R5bGU9J29wYWNpdHk6MC42ODInIGZpbGw9JyM5MjhlMzYnIGQ9J00gMjguNSwxNC41IEMgMjkuMTIzOSwxNC45MTY5IDI5LjQ1NzMsMTUuNTgzNiAyOS41LDE2LjVDIDI5LjI1MjgsMTcuNzEzMyAyOC41ODYyLDE4LjM4IDI3LjUsMTguNUMgMjguMjM0MSwxNy4yOTIxIDI4LjU2NzQsMTUuOTU4NyAyOC41LDE0LjUgWicvPjwvZz48Zz48cGF0aCBzdHlsZT0nb3BhY2l0eTowLjc1OCcgZmlsbD0nI2M0YTMyMycgZD0nTSAyMy41LDMzLjUgQyAyMy41LDM2LjE2NjcgMjMuNSwzOC44MzMzIDIzLjUsNDEuNUMgMjYuMTY2Nyw0MS41IDI4LjgzMzMsNDEuNSAzMS41LDQxLjVDIDI4LjcxMzEsNDIuNDc2NyAyNS43MTMxLDQyLjgxIDIyLjUsNDIuNUMgMjIuMTksMzkuMjg2OSAyMi41MjMzLDM2LjI4NjkgMjMuNSwzMy41IFonLz48L2c+PC9zdmc+Cg==",url:"https://biomejs.dev",spectrum:"bleeding_edge",disabled:!0},{category:"Error tracking",label:"Sentry",flag:"sentry",image:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjEzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDIyNyI+PHBhdGggZmlsbD0iIzM2MkQ1OSIgZD0iTTE0OC4zNjggMTIuNDAzYTIzLjkzNSAyMy45MzUgMCAwIDAtNDEuMDAzIDBMNzMuNjQgNzAuMTY1YzUyLjQyNiAyNi4xNzQgODcuMDUgNzguMTc3IDkwLjk3NSAxMzYuNjQyaC0yMy42NzljLTMuOTE4LTUwLjExMy0zNC4wNjEtOTQuNDEtNzkuMjM4LTExNi40NDhsLTMxLjIxMyA1My45N2E4MS41OTUgODEuNTk1IDAgMCAxIDQ3LjMwNyA2Mi4zNzVoLTU0LjM4YTMuODk1IDMuODk1IDAgMCAxLTMuMTc4LTUuNjlsMTUuMDY5LTI1LjYyNmE1NS4wNDYgNTUuMDQ2IDAgMCAwLTE3LjIyMS05LjczOEwzLjE2NyAxOTEuMjc3YTIzLjI2OSAyMy4yNjkgMCAwIDAgOC42NjIgMzEuOTgyYTIzLjg4NCAyMy44ODQgMCAwIDAgMTEuNTgzIDMuMDc1aDc0LjQ3MWE5OS40MzIgOTkuNDMyIDAgMCAwLTQxLjAwMy04OC43MmwxMS44NC0yMC41YzM1LjY3OSAyNC41MDQgNTUuNzU0IDY2LjAzOCA1Mi43OSAxMDkuMjJoNjMuMDk0YzIuOTktNjUuNDMtMjkuMDQ3LTEyNy41MTItODQuMTA3LTE2Mi45ODZsMjMuOTM1LTQxLjAwMmEzLjk0NyAzLjk0NyAwIDAgMSA1LjM4Mi0xLjM4NGMyLjcxNiAxLjQ4NiAxMDMuOTkzIDE3OC4yMDggMTA1Ljg5IDE4MC4yNThhMy44OTUgMy44OTUgMCAwIDEtMy40ODYgNS43OTJoLTI0LjM5NmMuMzA3IDYuNTI2LjMwNyAxMy4wMzUgMCAxOS41MjhoMjQuNDk5QTIzLjUyOCAyMy41MjggMCAwIDAgMjU2IDIwMi45MWEyMy4wMTUgMjMuMDE1IDAgMCAwLTMuMTc4LTExLjY4NUwxNDguMzY4IDEyLjQwM1oiLz48L3N2Zz4=",url:"https://sentry.io",disabled:!0},{category:"Error tracking",label:"Logrocket",flag:"logrocket",image:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAuMDAgMC4wMCAxMTQ2LjAwIDE3ODMuMDAiPgo8cGF0aCBmaWxsPSIjNzE1MmExIiBkPSIKICBNIDM3Mi4yNCAxMjc5Ljc3CiAgUSAzNDYuNTQgMTI5OC44OCAzMjIuMTggMTMxOS42OAogIEMgMjkyLjkwIDEzNDQuNjYgMjYzLjgwIDEzNjkuNzYgMjM0LjEzIDEzOTQuMjkKICBDIDIwMi45MyAxNDIwLjA5IDE3NS40MyAxNDU1LjExIDEzMC4zNCAxNDQ3LjYyCiAgQyAxMDEuNDYgMTQ0Mi44MyA3NS4xMCAxNDIzLjM2IDY4LjE3IDEzOTMuOTYKICBDIDQ3LjM2IDEzMDUuNzggMjYuNDMgMTIxNy42MiA2LjQ0IDExMjkuMjUKICBRIDMuNjAgMTExNi42OCAyLjU1IDExMDkuNjQKICBDIC04Ljg3IDEwMzIuNDMgMjMuMTAgOTU1LjU1IDgzLjQ3IDkwNi44OQogIFEgMTM0Ljk3IDg2NS4zOCAxODcuNTMgODI1LjIxCiAgQyAxOTEuNDkgODIyLjE4IDE5My4yMSA4MTkuMDYgMTkyLjkxIDgxNC4yNQogIEMgMTc5LjY3IDYwMy40MyAyNDguMjYgMzk5LjYwIDM2MS40NiAyMjQuMjAKICBDIDM4My43MiAxODkuNjkgNDA4LjY2IDE1Ni40NyA0MzUuMDcgMTIzLjU3CiAgQyA0NzMuODUgNzUuMjQgNTE3LjU1IDMyLjM2IDU3MC42NiAwLjYwCiAgQSAwLjgxIDAuODAgLTQ1LjMgMCAxIDU3MS41MCAwLjU5CiAgQyA2NDguNjkgNDYuMTcgNzA1LjA0IDExNi4wMCA3NTYuNzcgMTg4LjU0CiAgUSA3NjIuODYgMTk3LjA3IDc2OC4yMSAyMDQuOTUKICBDIDg4OS44MiAzODQuMTEgOTY0LjI0IDYwMC4xNyA5NDkuNTkgODE4LjczCiAgQSAwLjk5IDAuOTggMjEuNSAwIDAgOTQ5Ljk1IDgxOS41NQogIEMgOTkyLjA4IDg1My4zOSAxMDM4LjgyIDg4OC43OSAxMDcyLjIxIDkxNy4wMwogIFEgMTA4OC4xMCA5MzAuNDYgMTEwMy42MyA5NTIuMzQKICBRIDExNDYuNzYgMTAxMy4wOSAxMTQ1LjI5IDEwODcuMjQKICBDIDExNDUuMDIgMTEwMS4wNiAxMTQyLjgyIDExMTQuMTUgMTEzOS42OCAxMTI5LjQ4CiAgQyAxMTIxLjQzIDEyMTguNzMgMTEwMi4yMSAxMzE1LjQ2IDEwODMuOTMgMTM5Ni45MwogIEMgMTA3My41NCAxNDQzLjIwIDEwMTMuNzMgMTQ2My4wMiA5NzQuNjAgMTQ0Mi4xMwogIFEgOTY4LjY2IDE0MzguOTYgOTU4LjcwIDE0MzAuODMKICBDIDg5Ni40OCAxMzc5Ljk2IDgzNC42MiAxMzI4LjcwIDc3Mi40OSAxMjc3Ljg5CiAgQSAwLjg1IDAuODQgNDMuMyAwIDAgNzcxLjM4IDEyNzcuOTIKICBDIDcxOS4xMSAxMzI1LjgyIDY1Mi4zMyAxMzU0Ljg4IDU4MS40NSAxMzU3LjY4CiAgQyA1MDUuMTMgMTM2MC42OSA0MzAuMjkgMTMzMC43MyAzNzMuMTQgMTI3OS44MQogIEEgMC43MSAwLjcxIDAuMCAwIDAgMzcyLjI0IDEyNzkuNzcKICBaCiAgTSA0MDkuOTcgNTkyLjcwCiAgQyA0MjEuNDggNjg1LjIxIDUwNy45OSA3NDIuODggNTk5LjI0IDcyOC40NgogIEMgNjM1LjgyIDcyMi42OCA2NjguMDcgNzA1LjQ4IDY5Mi45NCA2NzguNDQKICBDIDc1MC40OCA2MTUuODUgNzQ2LjQ4IDUyMC4yNiA2ODQuMTkgNDYyLjU1CiAgUSA2MzkuMjEgNDIwLjg5IDU3Ni4wMSA0MTguNjEKICBDIDQ4MC42NyA0MTUuMTggMzk3Ljg4IDQ5NS40NSA0MDkuOTcgNTkyLjcwCiAgWiIKLz4KPGVsbGlwc2UgZmlsbD0iIzcxNTJhMSIgY3g9IjAuMDAiIGN5PSIwLjAwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NjkuODYsNTc2LjU1KSByb3RhdGUoLTAuMSkiIHJ4PSI3OS41MCIgcnk9Ijc2LjQ1Ii8+CjxwYXRoIGZpbGw9IiM3MTUyYTEiIGQ9IgogIE0gNDYyLjgzIDE2MTkuNzkKICBBIDAuNzAgMC43MCAwLjAgMCAwIDQ2MS43MiAxNjE5LjYyCiAgUSA0NDguMTIgMTYzMy4wMCA0MzQuMzYgMTY0Ni4zNgogIFEgNDIwLjc0IDE2NTkuNTcgNDEzLjQ0IDE2NjUuMTkKICBDIDM5NC4yMCAxNjc5Ljk5IDM1OS43NCAxNjY3LjIxIDM1NC43NyAxNjQzLjI1CiAgUSAzNTQuMDYgMTYzOS44MyAzNTQuMDIgMTYzMy4yMQogIFEgMzUzLjUwIDE1NTIuNTQgMzU0LjA4IDE0NzEuODcKICBRIDM1NC4xNCAxNDYyLjk2IDM1NS41NiAxNDU4LjQzCiAgUSAzNTguMzEgMTQ0OS42OSAzNjUuMTYgMTQ0My45MAogIFEgMzg3LjA4IDE0MjUuMzggNDEyLjEyIDE0MzguMDgKICBDIDUwOS4xMSAxNDg3LjI5IDYzMi4zMyAxNDg2LjE0IDcyOS41MyAxNDM4LjUzCiAgUSA3MzYuNjkgMTQzNS4wMiA3NDEuMDEgMTQzNC4xMAogIEMgNzU4Ljk2IDE0MzAuMjcgNzgwLjcyIDE0MzkuNTggNzg2LjY1IDE0NTguMTQKICBRIDc4OC4yMCAxNDYzLjAwIDc4OC4yOCAxNDc0LjUzCiAgUSA3ODkuMDMgMTU5Mi4yMyA3ODguMzAgMTYzOS43NQogIFEgNzg4LjI2IDE2NDIuNjIgNzg2LjQ4IDE2NDcuMzkKICBDIDc3OS4xOCAxNjY3LjA2IDc1Mi4wNSAxNjc3LjQwIDczMy4zNyAxNjY3Ljc4CiAgQyA3MjguMTkgMTY2NS4xMSA3MjEuNTYgMTY1OS4wMCA3MTcuNjkgMTY1NS4zMQogIFEgNjk4Ljg2IDE2MzcuMzkgNjgwLjI4IDE2MTkuMzYKICBBIDAuNTAgMC41MCAwLjAgMCAwIDY3OS40OSAxNjE5LjQ5CiAgQyA2NTUuODUgMTY2NC42MSA2MzIuODkgMTcxMC4yMCA2MDguNzcgMTc1NS4xMwogIFEgNjAyLjU0IDE3NjYuNzQgNjAyLjM3IDE3NjYuOTkKICBDIDU5MC4yNCAxNzg1LjQzIDU1OS41NiAxNzg2LjkyIDU0NC4yNSAxNzcxLjg5CiAgUSA1NDAuODcgMTc2OC41OCA1MzYuNDIgMTc2MC4yNwogIEMgNTExLjQ0IDE3MTMuNjUgNDg3LjU5IDE2NjYuNDQgNDYyLjgzIDE2MTkuNzkKICBaIgovPgo8L3N2Zz4K",url:"https://logrocket.com",disabled:!0}],lI=OM.map(M=>M.flag),yI=[{label:"Framework",group:"Frontend"},{label:"CSS",group:"Frontend"},{label:"Auth",group:"Backend"},{label:"RPC",group:"Backend"},{label:"Server",group:"Backend"},{label:"Database",group:"Backend"},{label:"Hosting",group:"Backend"},{label:"Linter",multiple:!0,group:"Tools"},{label:"Analytics",group:"Tools"},{label:"Error tracking",group:"Tools"}],MM=(M=>(M[M.ERROR_AUTH_R_SERVER=0]="ERROR_AUTH_R_SERVER",M[M.ERROR_COMPILED_R_REACT=1]="ERROR_COMPILED_R_REACT",M[M.INFO_HATTIP=2]="INFO_HATTIP",M))(MM||{});function PM(M,e,I){const i=Array.from(le(I));return N=>N.has(e)&&!i.every(t=>N.has(t))&&M}function sI(M,e){return I=>I.has(e)&&M}function le(M){const e=new Set;for(const I of M)lI.includes(I)&&e.add(OM.find(i=>i.flag===I).category),e.add(I);return e}var LI=[PM(0,"Auth",["Server"]),PM(1,"compiled-css",["react"]),sI(2,"hattip")];function TI(M,e){const I=le(M),i=[];for(const N of LI){const t=N(I);typeof t=="number"&&(t in e?i.push(e[t]):console.warn("No handler defined for rule",t))}return i}var AI=DM('A Server is required when using Auth. Check Vike documentation.
Either pick a server (Express.js / H3 / ...) or unselect '),zI=DM('React is required when using Compiled.
Either pick React or unselect Compiled'),oI=DM("HatTip is an experimental project. Prefer H3 or Express for production use");function vM(M){return{type:"error",value:M}}function aI(M){return{type:"info",value:M}}const rI={[MM.ERROR_AUTH_R_SERVER]:vM(()=>{const{selectedFeatures:M}=JM(ye),e=x(()=>{var I;return(I=M().filter(i=>i.category==="Auth"))==null?void 0:I[0].label});return(()=>{var I=X(AI),i=I.firstChild,N=i.nextSibling,t=N.nextSibling,j=t.nextSibling,g=j.nextSibling,D=g.nextSibling,n=D.nextSibling,u=n.firstChild,c=u.firstChild,y=c.nextSibling;return SM(y,e),I})()}),[MM.ERROR_COMPILED_R_REACT]:vM(()=>X(zI)),[MM.INFO_HATTIP]:aI(()=>X(oI))};function xI(){const M=OM.map(n=>({...n,alt:n.disabled?"Coming soon":void 0,active:!1})),[e,I]=ce(M);function i(n,u,c){var s;((s=yI.find(L=>L.label===n))==null?void 0:s.multiple)||oM(()=>I(L=>L.category===n,"selected",!1)),I(L=>L.flag===u,"selected",c)}const N=x(()=>e.filter(n=>n.selected)),t=x(()=>N().map(n=>n.flag));function j(n){oM(()=>{for(const u of M)if(n.includes(u.category)){const c=M.findIndex(y=>y.category===u.category);I(y=>y.category===u.category,"selected",(y,[s,L])=>L===c)}else n.includes(u.flag)?I(c=>c.flag===u.flag,"selected",!0):I(c=>c.flag===u.flag,"selected",!1)})}const g=x(()=>N().map(n=>n.flag)),D=x(()=>{const n=TI(g(),rI);return{size:n.length,error:n.filter(u=>u.type==="error").map(u=>u.value),warning:n.filter(u=>u.type==="warning").map(u=>u.value),info:n.filter(u=>u.type==="info").map(u=>u.value)}});return{selectedFeaturesFlags:t,selectFeature:i,selectedFeatures:N,currentFeatures:e,selectPreset:j,selectedFlags:g,rules:D}}const ye=HM(void 0);function wI(M){const e=xI();return k(ye.Provider,{value:e,get children(){return M.children}})}var dI=DM('
');function pI(M){return k(wI,{get children(){var e=X(dI);return SM(e,()=>M.children),e}})}export{HM as A,yI as B,mI as C,te as D,bI as E,OI as F,pI as L,YI as M,ye as S,ve as a,R as b,G as c,oe as d,JM as e,x as f,X as g,k as h,ZI as i,QI as j,SM as k,We as l,fI as m,Be as n,kI as o,CI as p,EI as q,UI as r,wM as s,DM as t,je as u,Ae as v,hI as w,He as x,SI as y,fe as z};
diff --git a/pr-preview/pr-232/assets/entries/entry-client-routing.D5eTtgFw.js b/pr-preview/pr-232/assets/entries/entry-client-routing.D5eTtgFw.js
new file mode 100644
index 000000000..e5f7ca92c
--- /dev/null
+++ b/pr-preview/pr-232/assets/entries/entry-client-routing.D5eTtgFw.js
@@ -0,0 +1,10 @@
+function __vite__mapDeps(indexes) {
+ if (!__vite__mapDeps.viteFileDeps) {
+ __vite__mapDeps.viteFileDeps = ["assets/entries/pages_error.BteJLz7l.js","assets/chunks/chunk-DWHPiCBQ.js","assets/static/LayoutDefault.DMsbb18k.css","assets/entries/pages_index.D7zX5IvT.js"]
+ }
+ return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
+}
+function ke(e){return Array.from(new Set(e))}const pn="0.4.168",_e={projectName:"Vike",projectVersion:pn},ze=`_${_e.projectName.toLowerCase()}`;function x(e,t){const n=mn();return n[e]=n[e]||t}function mn(){return globalThis[ze]=globalThis[ze]||{}}const A=x("assertPackageInstances.ts",{instances:[],alreadyLogged:new Set}),yn="The client runtime of Server Routing as well as the client runtime of Client Routing are both being loaded. Make sure they aren't loaded both at the same time for a given page. See https://vike.dev/client-runtimes-conflict",pt="Two vike client runtime instances are being loaded. Make sure your client-side bundles don't include vike twice. (In order to reduce the size of your client-side JavaScript bundles.)";function mt(){{const e=ke(A.instances);Sn(e.length<=1,`Both vike@${e[0]} and vike@${e[1]} loaded. Only one version should be loaded.`)}A.checkSingleInstance&&A.instances.length>1&&be(!1,pt,{onlyOnce:!0,showStackTrace:!0})}function bn(e){be(A.isClientRouting!==!1,yn,{onlyOnce:!0,showStackTrace:!0}),be(A.isClientRouting===void 0,pt,{onlyOnce:!0,showStackTrace:!0}),A.isClientRouting=!0,e&&(A.checkSingleInstance=!0),mt()}function wn(){A.instances.push(_e.projectVersion),mt()}function Sn(e,t){if(e)return;const n=`[vike][Wrong Usage] ${t}`;throw new Error(n)}function be(e,t,{onlyOnce:n,showStackTrace:r}){if(e)return;const i=`[vike][Warning] ${t}`;if(n){const{alreadyLogged:o}=A,a=n===!0?i:n;if(o.has(a))return;o.add(a)}console.warn(r?new Error(i):i)}function vn(){return!(typeof process>"u"||!process.cwd||!process.versions||typeof process.versions.node>"u"||!process.release||process.release.name!=="node")}function $e(e,t){let n;{var r=Error.stackTraceLimit;Error.stackTraceLimit=1/0,n=new Error(e),Error.stackTraceLimit=r}return vn()&&(n.stack=Pn(n.stack,t)),n}function Pn(e,t){if(!e)return e;const n=En(e);let r=0;return n.filter(o=>o.includes(" (internal/")||o.includes(" (node:internal")?!1:re,{get:()=>h}),O=x("utils/assert.ts",{alreadyLogged:new Set,logger(e,t){t==="info"?console.log(e):console.warn(e)},showStackTraceList:new WeakSet});wn();const Cn="[vike]",kn=`[vike@${_e.projectVersion}]`,Oe=2;function s(e,t){var o;if(e)return;const n=(()=>{if(!t)return null;const a=typeof t=="string"?t:JSON.stringify(t);return h.dim(`Debug info (for Vike maintainers; you can ignore this): ${a}`)})();let r=["You stumbled upon a Vike bug.",`Go to ${h.blue("https://github.com/vikejs/vike/issues/new")} and copy-paste this error. A maintainer will fix the bug (usually under 24 hours).`,n].filter(Boolean).join(" ");r=q(r),r=ue(r,"Bug"),r=X(r,!0);const i=$e(r,Oe);throw(o=O.onBeforeLog)==null||o.call(O),i}function g(e,t,{showStackTrace:n}={}){var i;if(e)return;t=q(t),t=ue(t,"Wrong Usage"),t=X(t);const r=$e(t,Oe);throw n&&O.showStackTraceList.add(r),(i=O.onBeforeLog)==null||i.call(O),r}function yt(e){return e=q(e),e=ue(e,"Error"),e=X(e),$e(e,Oe)}function _(e,t,{onlyOnce:n,showStackTrace:r}){var i;if(!e){if(t=q(t),t=ue(t,"Warning"),t=X(t),n){const{alreadyLogged:o}=O,a=n===!0?t:n;if(o.has(a))return;o.add(a)}if((i=O.onBeforeLog)==null||i.call(O),r){const o=new Error(t);O.showStackTraceList.add(o),O.logger(o,"warn")}else O.logger(t,"warn")}}function bt(e,t,{onlyOnce:n}){var r;if(!e){if(t=q(t),t=X(t),n){const{alreadyLogged:i}=O,o=t;if(i.has(o))return;i.add(o)}(r=O.onBeforeLog)==null||r.call(O),O.logger(t,"info")}}function ue(e,t){let n=`[${t}]`;const r=t==="Warning"?"yellow":"red";return n=h.bold(h[r](n)),`${n}${e}`}function q(e){return e.startsWith("[")?e:` ${e}`}function X(e,t=!1){return`${t?kn:Cn}${e}`}function z(){return typeof window<"u"&&typeof window.scrollY=="number"}const wt=x("utils/assertRouterType.ts",{});function Q(){$n(_n()),wt.isClientRouting=!0}function _n(){return wt.isClientRouting!==!1}function $n(e){g(z(),`${h.cyan("import { something } from 'vike/client/router'")} is forbidden on the server-side`,{showStackTrace:!0}),_(e,"You shouldn't `import { something } from 'vike/client/router'` when using Server Routing. The 'vike/client/router' utilities work only with Client Routing. In particular, don't `import { navigate }` nor `import { prefetch }` as they unnecessarily bloat your client-side bundle sizes.",{showStackTrace:!0,onlyOnce:!0})}const St=["js","ts","cjs","cts","mjs","mts"],On=["jsx","tsx","cjsx","ctsx","mjsx","mtsx"],vt=["vue","svelte","marko","md","mdx"],Tn=[...St,...On,...vt];function Pt(e){const t=Tn.some(n=>e.endsWith("."+n));return xn(e)&&s(t),t}function xn(e){const t=/\.(c|m)?(j|t)s$/.test(e),n=St.some(r=>e.endsWith("."+r));return s(t===n),t}function Fn(e){return vt.some(t=>e.endsWith("."+t))}function j(e,t,n){return typeof e=="string"?Ue(e.split(""),t,n).join(""):Ue(e,t,n)}function Ue(e,t,n){const r=[];let i=t>=0?t:e.length+t;s(i>=0&&i<=e.length);let o=n>=0?n:e.length+n;for(s(o>=0&&o<=e.length);!(i===o||(i===e.length&&(i=0),i===o));){const a=e[i];s(a!==void 0),r.push(a),i++}return r}const Rt=["http://","https://","tauri://","file://"];function Te(e){return Rt.some(t=>e.startsWith(t))||e.startsWith("/")||e.startsWith(".")||e.startsWith("?")||e.startsWith("#")||e===""}function In(e,t){s(t.includes(" but ")),g(typeof e=="string",`${t} should be a string`),!Te(e)&&(!e.startsWith("/")&&!e.includes(":")?g(!1,`${t} is ${h.cyan(e)} and it should be /${h.cyan(e)} instead (URL pathnames should start with a leading slash)`):g(!1,`${t} isn't a valid URL`))}function Z(e,t){s(Te(e)),s(t.startsWith("/"));const[n,...r]=e.split("#");s(n!==void 0);const i=["",...r].join("#")||null;s(i===null||i.startsWith("#"));const o=i===null?"":we(i.slice(1)),[a,...l]=n.split("?");s(a!==void 0);const u=["",...l].join("?")||null;s(u===null||u.startsWith("?"));const c={},d={};Array.from(new URLSearchParams(u||"")).forEach(([w,v])=>{c[w]=v,d[w]=[...d.hasOwnProperty(w)?d[w]:[],v]});const{origin:f,pathname:m}=jn(a,t);s(f===null||f===we(f)),s(m.startsWith("/")),s(f===null||e.startsWith(f));const b=a.slice((f||"").length);Hn(e,f,b,u,i);let{pathname:P,hasBaseServer:T}=Wn(m,t);return P=An(P),s(P.startsWith("/")),{origin:f,pathname:P,pathnameOriginal:b,hasBaseServer:T,search:c,searchAll:d,searchOriginal:u,hash:o,hashOriginal:i}}function we(e){try{return decodeURIComponent(e)}catch{}try{return decodeURI(e)}catch{}return e}function An(e){return e=e.replace(/\s+$/,""),e=e.split("/").map(t=>we(t).split("/").join("%2F")).join("/"),e}function jn(e,t){var n;s(!e.includes("?")&&!e.includes("#"));{const{origin:r,pathname:i}=Ge(e);if(r)return{origin:r,pathname:i};s(i===e)}if(e.startsWith("/"))return{origin:null,pathname:e};{const r=typeof window<"u"?(n=window==null?void 0:window.document)==null?void 0:n.baseURI:void 0;let i;return r?i=Ge(r.split("?")[0]).pathname:i=t,{origin:null,pathname:Ln(e,i)}}}function Ge(e){if(Rt.some(t=>e.startsWith(t))){const[t,n,r,...i]=e.split("/"),o=[t,n,r].join("/"),a=["",...i].join("/")||"/";return{origin:o,pathname:a}}else return{pathname:e,origin:null}}function Ln(e,t){const n=t.split("/"),r=e.split("/");let i=t.endsWith("/");e.startsWith(".")&&n.pop();for(const a in r){const l=r[a];l==""&&a==="0"||l!="."&&(l==".."?n.pop():(i=!1,n.push(l)))}let o=n.join("/");return i&&!o.endsWith("/")&&(o+="/"),o.startsWith("/")||(o="/"+o),o}function Nn(e){s(e.startsWith("/")),s(!e.includes("?")),s(!e.includes("#"))}function Wn(e,t){Nn(e),s(xe(t));let n=e;if(s(n.startsWith("/")),s(t.startsWith("/")),t==="/")return{pathname:e,hasBaseServer:!0};let r=t;return t.endsWith("/")&&n===j(t,0,-1)&&(r=j(t,0,-1),s(n===r)),n.startsWith(r)?(s(n.startsWith("/")||n.startsWith("http")),s(n.startsWith(r)),n=n.slice(r.length),n.startsWith("/")||(n="/"+n),s(n.startsWith("/")),{pathname:n,hasBaseServer:!0}):{pathname:e,hasBaseServer:!1}}function xe(e){return e.startsWith("/")}function Hn(e,t,n,r,i){const o=Vn(t,n,r,i);s(e===o)}function Vn(e,t,n,r){return`${e||""}${t}${n||""}${r||""}`}function S(e,t){t&&Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}function U(e){return e instanceof Function||typeof e=="function"}function oe(e){return(t,n)=>{const r=e(t),i=e(n);return r===i?0:r>i?-1:1}}function Bn(e){return(t,n)=>{const r=e(t),i=e(n);return r===i?0:r{const r=e(t),i=e(n);if(s([!0,!1,null].includes(r)),s([!0,!1,null].includes(i)),r===i)return 0;if(r===!0||i===!1)return-1;if(i===!0||r===!1)return 1;s(!1)}}function Dn(e){return V(t=>{const n=e(t);return n===null?null:!n})}function p(e,t,n="unknown"){if(!$(e))return!1;if(!(t in e))return n==="undefined";if(n==="unknown")return!0;const r=e[t];return n==="array"?Array.isArray(r):n==="object"?$(r):n==="string[]"?Array.isArray(r)&&r.every(i=>typeof i=="string"):n==="function"?U(r):Array.isArray(n)?typeof r=="string"&&n.includes(r):n==="null"?r===null:n==="undefined"?r===void 0:n==="true"?r===!0:n==="false"?r===!1:typeof r===n}function W(e){return typeof e!="object"||e===null?!1:Object.getPrototypeOf(e)===null?!0:e.constructor.name==="Object"}function zn(e,t){return e.toLowerCase()t.toLowerCase()?1:0}const Un=e=>e!=null;function Je(e){return"["+e.map(t=>"'"+t+"'").join(", ")+"]"}function Et(e){const t=n=>`Not a posix path: ${n}`;s(e!==null,t("null")),s(typeof e=="string",t(`typeof path === ${JSON.stringify(typeof e)}`)),s(e!=="",t("(empty string)")),s(e),s(!e.includes("\\"),t(e))}function he(e,t){const n=Object.getOwnPropertyDescriptor(e,t);return!!n&&!("value"in n)&&!!n.get}function Gn(e){return typeof e=="object"&&e!==null&&"then"in e&&U(e.then)}function Jn(e){return[null,void 0].includes(e)?String(e):["boolean","number","string"].includes(typeof e)?JSON.stringify(e):null}function Yn(e){return e.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&")}const Mn=["clientRouting"];function Kn(e){Mn.forEach(t=>{if(s(e.fileExports),!(t in e.fileExports))return;const n=`The value of \`${t}\` is only allowed to be \`true\`.`;g(e.fileExports[t]!==!1,`${e.filePath} has \`export { ${t} }\` with the value \`false\` which is prohibited: remove \`export { ${t} }\` instead. (${n})`),g(e.fileExports[t]===!0,`${e.filePath} has \`export { ${t} }\` with a forbidden value. ${n}`)})}const Ct=["render","clientRouting","prerender","doNotPrerender"];function qn(e,t){g(!Ct.includes(e),`${t} has \`export default { ${e} }\` which is prohibited, use \`export { ${e} }\` instead.`)}function Xn(e,t){if(!e)return null;let[n,...r]=e;if(!n||r.length===0&&["*","default",t].includes(n))return null;s(n!=="*");let i="",o="";return n==="default"?i="export default":(i="export",r=[n,...r]),r.forEach(l=>{i=`${i} { ${l}`,o=` }${o}`}),i+o}function Fe(e,t,{definedAt:n}){const r=kt(n,t),i=r==="internally"?r:`at ${r}`;let o=`${t}`;return`${e} ${h.cyan(o)} defined ${i}`}function kt(e,t){if("isComputed"in e)return"internally";let n;return"files"in e?n=e.files:n=[e],s(n.length>=1),n.map(i=>{const{filePathToShowToUser:o,fileExportPathToShowToUser:a}=i;let l=o;const u=Xn(a,t);return u&&(l=`${l} > ${h.cyan(u)}`),l}).join(" / ")}function J(e,t,n){const r=Zn(e,t);if(r===null)return null;const{value:i,definedAt:o}=r;return n&&Qn(i,n,t,o),r}function Qn(e,t,n,r){s(e!==null);const i=typeof e;if(i===t)return;const o=Jn(e),a=o!==null?`value ${h.cyan(o)}`:`type ${h.cyan(i)}`,u=`${Fe("Config",n,{definedAt:r})} has an invalid ${a}: it should be a ${h.cyan(t)} instead`;g(!1,u)}function Zn(e,t){const n=e.configValues[t];return!n||n.value===null?null:n}function _t(e,t){const n=t.find(r=>r.pageId===e);return s(t.length>0),s(n),n}function $t({definedAt:e}){if("isComputed"in e||"files"in e)return null;const{filePathToShowToUser:t}=e;return s(t),t}function er({definedAt:e}){const t=$t({definedAt:e});return s(t),t}function tr(e,t){const n={},r={},i={};e.forEach(l=>{nr(l).forEach(({exportName:c,exportValue:d,isFromDefaultExport:f})=>{s(c!=="default"),i[c]=i[c]??[],i[c].push({exportValue:d,exportSource:`${l.filePath} > ${f?`\`export default { ${c} }\``:`\`export { ${c} }\``}`,filePath:l.filePath,_filePath:l.filePath,_fileType:l.fileType,_isFromDefaultExport:f})})}),t&&Object.entries(t.configValues).forEach(([l,u])=>{const{value:c}=u,d=$t(u),f=Fe("Config",l,u);r[l]=r[l]??c,n[l]=n[l]??[],s(n[l].length===0),n[l].push({configValue:c,configDefinedAt:f,configDefinedByFile:d});const m=l;i[m]=i[m]??[],i[m].push({exportValue:c,exportSource:f,filePath:d,_filePath:d,_fileType:null,_isFromDefaultExport:null})});const o=rr(),a={};return Object.entries(i).forEach(([l,u])=>{u.forEach(({exportValue:c,_fileType:d,_isFromDefaultExport:f})=>{a[l]=a[l]??c,d===".page"&&!f&&(l in o||(o[l]=c))})}),s(!("default"in a)),s(!("default"in i)),{config:r,configEntries:n,exports:a,exportsAll:i,pageExports:o}}function nr(e){const{filePath:t,fileExports:n}=e;s(n),s(Pt(t));const r=[];return Object.entries(n).sort(Dn(([i])=>i==="default")).forEach(([i,o])=>{let a=i==="default";if(a)if(Fn(t))i="Page";else{g($(o),`The ${h.cyan("export default")} of ${t} should be an object.`),Object.entries(o).forEach(([l,u])=>{qn(l,t),r.push({exportName:l,exportValue:u,isFromDefaultExport:a})});return}r.push({exportName:i,exportValue:o,isFromDefaultExport:a})}),r.forEach(({exportName:i,isFromDefaultExport:o})=>{s(!(o&&Ct.includes(i)))}),r}function rr(){return new Proxy({},{get(...e){return z()||_(!1,"`pageContext.pageExports` is outdated. Use `pageContext.exports` instead, see https://vike.dev/exports",{onlyOnce:!0,showStackTrace:!0}),Reflect.get(...e)}})}function ir(e){const t=".page.",n=j(e.split(t),0,-1).join(t);return s(!n.includes("\\")),n}function Y(e){Et(e)}function or(e,t){if(t.length>0){const r=t.filter(i=>i.isErrorPage);return r.length===0?null:(g(r.length===1,"Only one error page can be defined"),r[0].pageId)}const n=ke(e.map(({pageId:r})=>r).filter(r=>ee(r)));if(g(n.length<=1,`Only one _error.page.js is allowed, but found several: ${n.join(" ")}`),n.length>0){const r=n[0];return s(r),r}return null}function ee(e,t){return s(!e.includes("\\")),e.includes("/_error")}function sr(e,t){if(t.length>0){const n=t.find(r=>r.pageId===e);return s(n),!!n.isErrorPage}else return ee(e)}const ar=[".page",".page.server",".page.route",".page.client",".css"];function lr(e){if(Et(e),e.endsWith(".css"))return".css";s(Pt(e),e);const n=e.split("/").slice(-1)[0].split("."),r=n.slice(-3)[0],i=n.slice(-2)[0];if(i==="page")return".page";if(s(r==="page",e),i==="server")return".page.server";if(i==="client")return".page.client";if(i==="route")return".page.route";s(!1,e)}function Ot(e){const t=o=>i.pageId===o||i.isDefaultPageFile&&(Ye(i.filePath)||ur(o,i.filePath)),n=lr(e),i={filePath:e,fileType:n,isEnv:o=>{if(s(n!==".page.route"),o==="CLIENT_ONLY")return n===".page.client"||n===".css";if(o==="SERVER_ONLY")return n===".page.server";if(o==="CLIENT_AND_SERVER")return n===".page";s(!1)},isRelevant:t,isDefaultPageFile:Se(e),isRendererPageFile:n!==".css"&&Se(e)&&Ye(e),isErrorPageFile:ee(e),pageId:ir(e)};return i}function Se(e){return Y(e),ee(e)?!1:e.includes("/_default")}function Ye(e){return Y(e),e.includes("/renderer/")}function ur(e,t){Y(e),Y(t),s(!e.endsWith("/")),s(!t.endsWith("/")),s(Se(t));const n=j(t.split("/"),0,-1).filter(r=>r!=="_default").join("/");return e.startsWith(n)}function cr(e){s(Array.isArray(e)),e.forEach(t=>{s($(t)),s(p(t,"pageId","string")),s(p(t,"routeFilesystem")),s(p(t,"configValuesSerialized")),s(p(t,"configValuesImported"))})}function fr(e){s(p(e,"configValuesImported"))}const dr=["$$registrations","_rerender_only"],gr=[".md",".mdx"];function hr(e,t,n){const r=Object.keys(e).filter(o=>!dr.includes(o)),i=r.filter(o=>o!=="default"&&o!==n);if(i.length===0){if(r.length===1)return;const o=h.cyan("export default"),a=h.cyan(`export { ${n} }`);r.length===0?g(!1,`${t} doesn't export any value, but it should have a ${a} or ${o}`):(s(r.length===2),_(!1,`The exports of ${t} are ambiguous: remove ${o} or ${a}`,{onlyOnce:!0}))}else{if(gr.some(o=>t.endsWith(o)))return;i.forEach(o=>{_(!1,`${t} should have only one export: move ${h.cyan(`export { ${o} }`)} to its own +${i}.js file`,{onlyOnce:!0})})}}function ve(e){const t={};e.filter(r=>r.configName!=="client").forEach(r=>{if(r.isValueFile){const{exportValues:i,importPath:o,configName:a}=r;hr(i,o,a),Object.entries(i).forEach(([l,u])=>{const c=l!=="default",d=c?l:r.configName;t[d]??(t[d]=[]),t[d].push({value:u,importPath:o,exportName:l,isSideExport:c})})}else{const{configName:i,importPath:o,exportValue:a,exportName:l}=r;t[i]??(t[i]=[]),t[i].push({value:a,importPath:o,exportName:l,isSideExport:!1})}});const n={};return Object.entries(t).forEach(([r,i])=>{const o=i.filter(u=>!u.isSideExport),a=o.length>1,l=o.length===i.length;if(a)s(l),s(!1);else{const u=o[0]??i[0];s(u);const{value:c,importPath:d,exportName:f}=u;n[r]={value:c,definedAt:{filePathToShowToUser:d,fileExportPathToShowToUser:[r,"default"].includes(f)?[]:[f]}},pr(c,r,d)}}),n}function pr(e,t,n){s(!n.includes("+config."))}const mr=[{is:e=>e===void 0,match:e=>e==="!undefined",serialize:()=>"!undefined",deserialize:()=>{}},{is:e=>e===1/0,match:e=>e==="!Infinity",serialize:()=>"!Infinity",deserialize:()=>1/0},{is:e=>e===-1/0,match:e=>e==="!-Infinity",serialize:()=>"!-Infinity",deserialize:()=>-1/0},{is:e=>typeof e=="number"&&isNaN(e),match:e=>e==="!NaN",serialize:()=>"!NaN",deserialize:()=>NaN},{is:e=>e instanceof Date,match:e=>e.startsWith("!Date:"),serialize:e=>"!Date:"+e.toISOString(),deserialize:e=>new Date(e.slice(6))},{is:e=>typeof e=="bigint",match:e=>e.startsWith("!BigInt:"),serialize:e=>"!BigInt:"+e.toString(),deserialize:e=>{if(typeof BigInt>"u")throw new Error("Your JavaScript environement does not support BigInt. Consider adding a polyfill.");return BigInt(e.slice(8))}},{is:e=>e instanceof RegExp,match:e=>e.startsWith("!RegExp:"),serialize:e=>"!RegExp:"+e.toString(),deserialize:e=>{e=e.slice(8);const t=e.match(/\/(.*)\/(.*)?/),n=t[1],r=t[2];return new RegExp(n,r)}},{is:e=>e instanceof Map,match:e=>e.startsWith("!Map:"),serialize:(e,t)=>"!Map:"+t(Array.from(e.entries())),deserialize:(e,t)=>new Map(t(e.slice(5)))},{is:e=>e instanceof Set,match:e=>e.startsWith("!Set:"),serialize:(e,t)=>"!Set:"+t(Array.from(e.values())),deserialize:(e,t)=>new Set(t(e.slice(5)))},{is:e=>typeof e=="string"&&e.startsWith("!"),match:e=>e.startsWith("!"),serialize:e=>"!"+e,deserialize:e=>e.slice(1)}];function ce(e){const t=JSON.parse(e);return Tt(t)}function Tt(e){return typeof e=="string"?yr(e):(typeof e=="object"&&e!==null&&Object.entries(e).forEach(([t,n])=>{e[t]=Tt(n)}),e)}function yr(e){for(const{match:t,deserialize:n}of mr)if(t(e))return n(e,ce);return e}function xt(e){const t={};return Object.entries(e).forEach(([n,r])=>{const{valueSerialized:i,definedAt:o}=r;s(i),s(!t[n]),t[n]={value:ce(i),definedAt:o}}),t}function br(e,t){const n=e.map(i=>{const o={};{const{configValuesSerialized:d}=i,f=xt(d);Object.assign(o,f)}{const{configValuesImported:d}=i,f=ve(d);Object.assign(o,f)}const{pageId:a,isErrorPage:l,routeFilesystem:u,loadConfigValuesAll:c}=i;return wr(o),{pageId:a,isErrorPage:l,routeFilesystem:u,configValues:o,loadConfigValuesAll:c}}),r={configValues:{}};{const i=ve(t.configValuesImported);Object.assign(r.configValues,i)}return{pageConfigs:n,pageConfigGlobal:r}}function wr(e){const t="route",n=e[t];if(!n)return;const{value:r}=n,i=typeof r,o=Fe("Config",t,n);g(i==="string"||U(r),`${o} has an invalid type '${i}': it should be a string or a function instead, see https://vike.dev/route`)}function Sr(e){s(p(e,"isGeneratedFile")),s(e.isGeneratedFile!==!1,"vike was re-installed(/re-built). Restart your app."),s(e.isGeneratedFile===!0,`\`isGeneratedFile === ${e.isGeneratedFile}\``),s(p(e,"pageFilesLazy","object")),s(p(e,"pageFilesEager","object")),s(p(e,"pageFilesExportNamesLazy","object")),s(p(e,"pageFilesExportNamesEager","object")),s(p(e.pageFilesLazy,".page")),s(p(e.pageFilesLazy,".page.client")||p(e.pageFilesLazy,".page.server")),s(p(e,"pageFilesList","string[]")),s(p(e,"pageConfigsSerialized")),s(p(e,"pageConfigGlobalSerialized"));const{pageConfigsSerialized:t,pageConfigGlobalSerialized:n}=e;cr(t),fr(n);const{pageConfigs:r,pageConfigGlobal:i}=br(t,n),o={};te(e.pageFilesLazy).forEach(({filePath:l,pageFile:u,globValue:c})=>{u=o[l]=o[l]??u;const d=c;Me(d),u.loadFile=async()=>{"fileExports"in u||(u.fileExports=await d(),Kn(u))}}),te(e.pageFilesExportNamesLazy).forEach(({filePath:l,pageFile:u,globValue:c})=>{u=o[l]=o[l]??u;const d=c;Me(d),u.loadExportNames=async()=>{if(!("exportNames"in u)){const f=await d();g("exportNames"in f,"You seem to be using Vite 2 but the latest vike versions only work with Vite 3"),s(p(f,"exportNames","string[]"),u.filePath),u.exportNames=f.exportNames}}}),te(e.pageFilesEager).forEach(({filePath:l,pageFile:u,globValue:c})=>{u=o[l]=o[l]??u;const d=c;s($(d)),u.fileExports=d}),te(e.pageFilesExportNamesEager).forEach(({filePath:l,pageFile:u,globValue:c})=>{u=o[l]=o[l]??u;const d=c;s($(d)),s(p(d,"exportNames","string[]"),u.filePath),u.exportNames=d.exportNames}),e.pageFilesList.forEach(l=>{o[l]=o[l]??Ot(l)});const a=Object.values(o);return a.forEach(({filePath:l})=>{s(!l.includes("\\"))}),{pageFiles:a,pageConfigs:r,pageConfigGlobal:i}}function te(e){const t=[];return Object.entries(e).forEach(([n,r])=>{s(ar.includes(n)),s($(r)),Object.entries(r).forEach(([i,o])=>{const a=Ot(i);s(a.fileType===n),t.push({filePath:i,pageFile:a,globValue:o})})}),t}function Me(e){s(U(e))}const L=x("setPageFiles.ts",{});function vr(e){const{pageFiles:t,pageConfigs:n,pageConfigGlobal:r}=Sr(e);L.pageFilesAll=t,L.pageConfigs=n,L.pageConfigGlobal=r}async function Pr(e,t){e?(s(!L.pageFilesGetter),s(t===void 0)):(s(L.pageFilesGetter),s(typeof t=="boolean"),(!L.pageFilesAll||!t)&&await L.pageFilesGetter());const{pageFilesAll:n,pageConfigs:r,pageConfigGlobal:i}=L;s(n&&r&&i);const o=Rr(n,r);return{pageFilesAll:n,allPageIds:o,pageConfigs:r,pageConfigGlobal:i}}function Rr(e,t){const n=e.filter(({isDefaultPageFile:o})=>!o).map(({pageId:o})=>o),r=ke(n),i=t.map(o=>o.pageId);return[...r,...i]}function Ie(e,t){return It(e,t,!0)}function Ft(e,t){return It(e,t,!1)}function It(e,t,n){const r=n?"CLIENT_ONLY":"SERVER_ONLY",i=e.filter(b=>b.isRelevant(t)&&b.fileType!==".page.route").sort(Er(n,t)),o=b=>{const P=i.filter(w=>w.pageId===t&&w.isEnv(b?"CLIENT_AND_SERVER":r));g(P.length<=1,`Merge the following files into a single file: ${P.map(w=>w.filePath).join(" ")}`);const T=P[0];return s(T===void 0||!T.isDefaultPageFile),T},a=o(!1),l=o(!0),u=b=>i.filter(P=>P.isRendererPageFile&&P.isEnv(b?"CLIENT_AND_SERVER":r))[0],c=u(!1),d=u(!0),f=i.filter(b=>b.isDefaultPageFile&&!b.isRendererPageFile&&(b.isEnv(r)||b.isEnv("CLIENT_AND_SERVER")));return[a,l,...f,c,d].filter(Un)}function Er(e,t){const n=e?"CLIENT_ONLY":"SERVER_ONLY",r=-1,i=1,o=0;return(a,l)=>{if(!a.isDefaultPageFile&&l.isDefaultPageFile)return r;if(!l.isDefaultPageFile&&a.isDefaultPageFile)return i;{const u=a.isRendererPageFile,c=l.isRendererPageFile;if(!u&&c)return r;if(!c&&u)return i;s(u===c)}{const u=Ke(t,a.filePath),c=Ke(t,l.filePath);if(u0){const o=document.getElementsByTagName("link"),a=document.querySelector("meta[property=csp-nonce]"),l=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));i=Promise.all(n.map(u=>{if(u=kr(u),u in qe)return;qe[u]=!0;const c=u.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!r)for(let b=o.length-1;b>=0;b--){const P=o[b];if(P.href===u&&(!c||P.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${d}`))return;const m=document.createElement("link");if(m.rel=c?"stylesheet":Cr,c||(m.as="script",m.crossOrigin=""),m.href=u,l&&m.setAttribute("nonce",l),document.head.appendChild(m),c)return new Promise((b,P)=>{m.addEventListener("load",b),m.addEventListener("error",()=>P(new Error(`Unable to preload CSS for ${u}`)))})}))}return i.then(()=>t()).catch(o=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o})},Ae={},At={},_r={},fe={},$r=[],jt={},Or=!0,Tr=[{pageId:"/pages/_error",isErrorPage:!0,routeFilesystem:void 0,loadConfigValuesAll:()=>Xe(()=>import("./pages_error.BteJLz7l.js"),__vite__mapDeps([0,1,2])),configValuesSerialized:{isClientSideRenderable:{definedAt:{isComputed:!0},valueSerialized:"true"},clientRouting:{definedAt:{filePathToShowToUser:"/home/runner/work/bati/bati/node_modules/.pnpm/vike-solid@0.4.3_solid-js@1.8.16_vike@0.4.168_vite@5.2.8/node_modules/vike-solid/dist/+config.js",fileExportPathToShowToUser:["default","clientRouting"]},valueSerialized:"true"}},configValuesImported:[]},{pageId:"/pages/index",isErrorPage:void 0,routeFilesystem:{routeString:"/",definedBy:"/pages/index/"},loadConfigValuesAll:()=>Xe(()=>import("./pages_index.D7zX5IvT.js"),__vite__mapDeps([3,1,2])),configValuesSerialized:{isClientSideRenderable:{definedAt:{isComputed:!0},valueSerialized:"true"},clientRouting:{definedAt:{filePathToShowToUser:"/home/runner/work/bati/bati/node_modules/.pnpm/vike-solid@0.4.3_solid-js@1.8.16_vike@0.4.168_vite@5.2.8/node_modules/vike-solid/dist/+config.js",fileExportPathToShowToUser:["default","clientRouting"]},valueSerialized:"true"}},configValuesImported:[]}],xr={configValuesImported:[]},Fr=Object.assign({}),Ir={...Fr};Ae[".page"]=Ir;const Ar=Object.assign({}),jr={...Ar};fe[".page"]=jr;const Lr=Object.assign({}),Nr={...Lr};fe[".page.server"]=Nr;const Wr=Object.assign({}),Hr={...Wr};At[".page.route"]=Hr;const Vr=Object.assign({}),Br={...Vr};Ae[".page.client"]=Br;const Dr=Object.assign({}),zr={...Dr};fe[".page.client"]=zr;const Ur=Object.assign({}),Gr={...Ur};jt[".page.server"]=Gr;const Jr=Object.freeze(Object.defineProperty({__proto__:null,isGeneratedFile:Or,neverLoaded:jt,pageConfigGlobalSerialized:xr,pageConfigsSerialized:Tr,pageFilesEager:At,pageFilesExportNamesEager:fe,pageFilesExportNamesLazy:_r,pageFilesLazy:Ae,pageFilesList:$r},Symbol.toStringTag,{value:"Module"}));vr(Jr);function Lt(){s(z())}function Yr(){Lt(),Q()}function Mr(){Lt()}function Qe(e){const t=e/1e3;if(t<120){const n=Ze(t);return`${n} second${et(n)}`}{const n=t/60,r=Ze(n);return`${r} minute${et(r)}`}}function Ze(e){let t=e.toFixed(1);return t.endsWith(".0")&&(t=t.slice(0,-2)),t}function et(e){return e==="1"?"":"s"}const Nt=x("utils/executeHook.ts",{userHookErrors:new WeakMap});function Kr(e){return $(e)?Nt.userHookErrors.get(e)??!1:!1}function D(e,t){const{hookName:n,hookFilePath:r,hookTimeout:{error:i,warning:o}}=t;let a,l;const u=new Promise((m,b)=>{a=P=>{c(),m(P)},l=P=>{c(),b(P)}}),c=()=>{d&&clearTimeout(d),f&&clearTimeout(f)},d=tt(o)&&setTimeout(()=>{_(!1,`The ${n}() hook defined by ${r} is slow: it's taking more than ${Qe(o)} (https://vike.dev/hooksTimeout)`,{onlyOnce:!1})},o),f=tt(i)&&setTimeout(()=>{const m=yt(`The ${n}() hook defined by ${r} timed out: it didn't finish after ${Qe(i)} (https://vike.dev/hooksTimeout)`);l(m)},i);return(async()=>{try{const m=await e();a(m)}catch(m){$(m)&&Nt.userHookErrors.set(m,{hookName:n,hookFilePath:r}),l(m)}})(),u}function tt(e){return!!e&&e!==1/0}function je(e){const t=window.location.href,{searchOriginal:n,hashOriginal:r,pathname:i}=Z(t,"/");let o;return e!=null&&e.withoutHash?o=`${i}${n||""}`:o=`${i}${n||""}${r||""}`,s(o.startsWith("/")),o}Mr();function qr(){var r,i,o,a;const e=!!((i=(r=window.__REACT_DEVTOOLS_GLOBAL_HOOK__)==null?void 0:r.renderers)!=null&&i.size),t=!!((a=(o=window.__REACT_DEVTOOLS_GLOBAL_HOOK__)==null?void 0:o.rendererInterfaces)!=null&&a.size),n=!!window.__vite_plugin_react_preamble_installed__;return e||t||n}function nt(e,t){return!$(e)||!$(t)?!1:e.message===t.message}function se(e){window.location.href=e}function Xr(e){return new Promise(t=>setTimeout(t,e))}function Qr(e,t){let n=!1;return()=>{n||(n=!0,setTimeout(()=>{n=!1,e()},t))}}function Wt(e){window.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&e()})}function Zr(e){window.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&e()})}function ei(e){return!e.startsWith("/")&&!e.startsWith(".")&&!e.startsWith("?")&&e!==""}Yr();function Ht(){let e=window.history.state;e||(e={_isVikeEnhanced:!0});let t=!1;"timestamp"in e||(t=!0,e.timestamp=We()),"scrollPosition"in e||(t=!0,e.scrollPosition=Ne()),"triggeredBy"in e||(e.triggeredBy="browser"),Vt(e),t&&He(e)}function Le(){const e=window.history.state||{};return Vt(e),e}function Ne(){return{x:window.scrollX,y:window.scrollY}}function We(){return new Date().getTime()}function rt(){const e=Ne(),t=Le();He({...t,scrollPosition:e})}function ti(e,t){if(t)He(Le(),e);else{const n=We();ni({timestamp:n,scrollPosition:null,triggeredBy:"vike",_isVikeEnhanced:!0},e)}}function Vt(e){if(s($(e)),"timestamp"in e){const{timestamp:t}=e;s(typeof t=="number")}if("scrollPosition"in e){const{scrollPosition:t}=e;t!==null&&s(p(t,"x","number")&&p(t,"y","number"))}}function He(e,t){const n=t??null;window.history.replaceState(e,"",n)}function ni(e,t){window.history.pushState(e,"",t)}function ri(){const e=window.history.pushState.bind(window.history);window.history.pushState=(t={},...n)=>{g(t==null||$(t),"history.pushState(state) argument state must be an object");const r=ii(t)?t:{_isVikeEnhanced:!0,scrollPosition:Ne(),timestamp:We(),triggeredBy:"user",...t};return e(r,...n)}}function ii(e){return $(e)&&"_isVikeEnhanced"in e}function oi(){const e="vike_pageContext",t=document.getElementById(e);g(t,`Couldn't find #${e} (which Vike automatically injects in the HTML): make sure it exists (i.e. don't remove it and make sure your HTML isn't malformed)`);const n=t.textContent;s(n);const r=ce(n);return s(p(r,"_pageId","string")),r}async function si(e,t){const r=Ft(e,t).filter(o=>o.fileType===".page.server");return await Promise.all(r.map(async o=>{o.exportNames||(s(o.loadExportNames,t),await o.loadExportNames())})),{hasOnBeforeRenderServerSideOnlyHook:r.some(({exportNames:o})=>(s(o),o.includes("onBeforeRender")))}}const ai=x("getHook.ts",{isPrerendering:!1});function N(e,t){if(!(t in e.exports))return null;const{hooksTimeout:n}=e.config,r=ui(n,t),i=e.exports[t],o=e.exportsAll[t][0];if(s(o.exportValue===i),i===null)return null;const a=o.filePath;return s(a),s(!a.endsWith(" ")),Bt(i,{hookName:t,hookFilePath:a}),{hookFn:i,hookName:t,hookFilePath:a,hookTimeout:r}}function li(e,t){const n=e.configValues[t];if(!n)return null;const r=n.value;if(!r)return null;const i=er(n);s(i),Bt(r,{hookName:t,hookFilePath:i});const o=de(t);return{hookFn:r,hookName:t,hookFilePath:i,hookTimeout:o}}function pe(e,t){N(e,t)}function Bt(e,{hookName:t,hookFilePath:n}){s(t&&n),s(!t.endsWith(")")),g(U(e),`Hook ${t}() defined by ${n} should be a function`)}function ui(e,t){const n=ci(e);if(n===!1)return{error:!1,warning:!1};const r=n[t],i=de(t);return(r==null?void 0:r.error)!==void 0&&(i.error=r.error),(r==null?void 0:r.warning)!==void 0&&(i.warning=r.warning),i}function ci(e){if(e===void 0)return{};if(e===!1)return!1;g($(e),`Setting ${h.cyan("hooksTimeout")} should be ${h.cyan("false")} or an object`);const t={};return Object.entries(e).forEach(([n,r])=>{if(r===!1){t[n]={error:!1,warning:!1};return}g($(r),`Setting ${h.cyan(`hooksTimeout.${n}`)} should be ${h.cyan("false")} or an object`);const[i,o]=["error","warning"].map(a=>{const l=r[a];if(l===void 0||l===!1)return l;const u=`Setting ${h.cyan(`hooksTimeout.${n}.${a}`)} should be`;return g(typeof l=="number",`${u} ${h.cyan("false")} or a number`),g(l>0,`${u} a positive number`),l});t[n]={error:i,warning:o}}),t}function de(e){return e==="onBeforeRoute"?{error:5*1e3,warning:1*1e3}:ai.isPrerendering?{error:2*60*1e3,warning:30*1e3}:(s(!e.toLowerCase().includes("prerender")),{error:30*1e3,warning:4*1e3})}function fi(e){const t=Object.entries(e);for(const n in e)delete e[n];t.sort(([n],[r])=>zn(n,r)).forEach(([n,r])=>{e[n]=r})}function di(e){gi(e),hi(e)}function gi(e){sr(e._pageId,e._pageConfigs)&&s(p(e,"is404","boolean"))}function hi(e){if(e.is404===void 0||e.is404===null)return;const t=e.pageProps||{};if(!$(t)){_(!1,"pageContext.pageProps should be an object",{showStackTrace:!0,onlyOnce:!0});return}t.is404=t.is404||e.is404,e.pageProps=t}const pi="not-serializable",ae=x("getPageContextProxyForUser.ts",{});function mi(e){return s([!0,!1].includes(e._hasPageContextFromServer)),s([!0,!1].includes(e._hasPageContextFromClient)),new Proxy(e,{get(t,n){const r=e[n],i=JSON.stringify(n);return g(r!==pi,`pageContext[${i}] couldn't be serialized and, therefore, is missing on the client-side. Check the server logs for more information.`),yi(e,n),r}})}function yi(e,t){if(ae.prev===t||ae.prev==="__v_raw"||(Si(t),t in e)||wi(t)||!e._hasPageContextFromServer)return;const n=JSON.stringify(t);e._hasPageContextFromClient?_(!1,[`pageContext[${n}] isn't defined on the client-side:`,`1. if it's defined by the server-side then add ${n} to passToClient (https://vike.dev/passToClient), or`,"2. if it's expected that it may not be defined:"," ```js"," // ❌ Replace code like this:",` const val = pageContext[${n}] ?? someDefaultValue`," // ✅ With that:",` const val = ${n} in pageContext ? pageContext[${n}] : someDefaultValue`," ```",`See stack track below to find where pageContext[${n}] is being accessed.`].join(`
+`),{showStackTrace:!0,onlyOnce:!1}):g(!1,`pageContext[${n}] isn't available on the client-side because ${n} is missing in passToClient, see https://vike.dev/passToClient`)}const bi=["then","toJSON"];function wi(e){return!!(bi.includes(e)||typeof e=="symbol"||typeof e!="string"||e.startsWith("__v_"))}function Si(e){ae.prev=e,window.setTimeout(()=>{ae.prev=void 0},0)}function Ve(e,t){if(t){const i=e;s([!0,!1].includes(i.isHydration)),s([!0,!1,null].includes(i.isBackwardNavigation))}else{const i=e;s(i.isHydration===!0),s(i.isBackwardNavigation===null)}s("config"in e),s("configEntries"in e),s("exports"in e),s("exportsAll"in e),s("pageExports"in e),s($(e.pageExports));const n=e.exports.Page;S(e,{Page:n}),vi(e),fi(e);const r=mi(e);return di(e),r}function vi(e){Object.entries(e).forEach(([t,n])=>{delete e[t],e[t]=n})}const it=["urlPathname","urlParsed"],Pi=["Page","pageExports","exports"];function Ri(e){[...Pi,...it].forEach(n=>{n in e&&(it.includes(n)?(s(n.startsWith("url")),_(!1,`pageContext.${n} is already available in the browser when using Client Routing; adding '${n}' to passToClient has no effect`,{onlyOnce:!0})):_(!1,`pageContext.${n} is a built-in that cannot be overriden; adding '${n}' to passToClient has no effect`,{onlyOnce:!0}),delete e[n])})}const Ei="/";function Ci(e,t,n){const{pathnameOriginal:r,searchOriginal:i,hashOriginal:o}=Z(e,Ei);e.startsWith("/")&&s(e===`${r}${i||""}${o||""}`,{url:e});const a=r.endsWith("/");let l;return n&&r!=="/"?(a?l=j(r,0,-1):l=r,s(!l.endsWith("/"),{url:e}),s(l!=="")):l=r+(a?"":"/")+"index",s(l),l=l+t,`${l}${i||""}${o||""}`}const ki=".pageContext.json",_i=!1;function $i(e){return Ci(e,ki,_i)}function Dt(e,{hookName:t,hookFilePath:n}){if(e==null)return;s(!t.endsWith(")"));const r=`The ${h.cyan("pageContext")} object provided by the ${t}() hook defined by ${n}`;g($(e),`${r} should be an object (but it's ${h.cyan(`typeof pageContext === ${JSON.stringify(typeof e)}`)} instead)`),g(!("_objectCreatedByVike"in e),`${r} shouldn't be the whole ${h.cyan("pageContext")} object, see https://vike.dev/pageContext-manipulation#do-not-return-entire-pagecontext`),_(!("_pageId"in e),`${r} sets ${h.cyan("pageContext._pageId")} which means that Vike's routing is overriden. This is an experimental feature: make sure to contact a vike maintainer before using this.`,{onlyOnce:!0}),g(!("is404"in e),`${r} sets ${h.cyan("pageContext.is404")} which is forbidden, use ${h.cyan("throw render()")} instead, see https://vike.dev/render`)}function Oi(e,t,n){s(!n.endsWith(" "));const r=[],i=Object.keys(e);for(const o of i)t.includes(o)||r.push(o);g(r.length===0,[n,"returned an object with following unknown keys:",Je(r)+".","Only following keys are allowed:",Je(t)+"."].join(" "))}function Ti(e,t){if(e==null)return;const n=`The onBeforeRender() hook defined by ${t}`;g(W(e),`${n} should return a plain JavaScript object, ${h.cyan("undefined")}, or ${h.cyan("null")}`),Oi(e,["pageContext"],n),e.pageContext&&Dt(e.pageContext,{hookName:"onBeforeRender",hookFilePath:t})}function xi(e,t){if(!W(e))return!1;for(const n of Object.keys(e))if(!t.includes(n))return!1;return!0}function Fi(e){return typeof e=="object"&&e!==null&&Object.values(e).every(t=>typeof t=="string")}function Ii(e,t,n=r=>r){if(s(e.length>0),e.length===1)return n(e[0]);const r=e.slice(0,e.length-1),i=e[e.length-1];return r.map(n).join(", ")+` ${t} `+n(i)}z()&&Q();const zt="The guard() hook defined by";async function Ai(e,t){let n;if(e._pageFilesAll.length>0?(s(e._pageConfigs.length===0),n=ji(e._pageId,e._pageFilesAll)):n=N(e,"guard"),!n)return;const r=n.hookFn;let i=e;const o=t(e);o&&(i=o);const a=await D(()=>r(i),n);g(a===void 0,`${zt} ${n.hookFilePath} returns a value, but guard() shouldn't return any value`)}function ji(e,t){const n=t.find(u=>u.pageId===e&&u.fileType===".page.route");if(!n)return null;const{filePath:r,fileExports:i}=n;s(i);const o=i.guard;if(!o)return null;const a=r,l=de("guard");return g(U(o),`${zt} ${a} should be a function`),{hookFn:o,hookName:"guard",hookFilePath:a,hookTimeout:l}}function Li(e){const t=new Error("AbortRender");return S(t,{_pageContextAbort:e,[Ut]:!0}),t}const Ut="_isAbortError";function ot(e){return typeof e=="object"&&e!==null&&Ut in e}function Ni(e){return e._urlRewrite||e._urlRedirect||e.abortStatusCode?(s(p(e,"_abortCall","string")),!0):!1}function Wi(e,t,n){if(t)return;const r=n._urlRewrite??n.urlOriginal;s(r);const i=e._pageContextAbort._abortCall;s(i);const o=Kr(e);let a="";o&&(a=` by ${h.cyan(`${o.hookName}()`)} hook defined at ${o.hookFilePath}`),bt(!1,`${h.cyan(i)} thrown${a} while rendering ${h.cyan(r)}`,{onlyOnce:!1})}function Hi(e){Vi(e);const t={_urlRewrite:null};return e.forEach(n=>{Object.assign(t,n)}),t}function Vi(e){const t=[];e.forEach(n=>{const r=n._urlRewrite;{const i=t.indexOf(r);if(i!==-1){const o=[...t.slice(i),r].map(a=>`render('${a}')`).join(" => ");g(!1,`Infinite loop of render() calls: ${o}`)}}t.push(r)})}function Bi(e,t){const n=[e>0&&h.cyan("throw render('/some-url')"),t>0&&h.cyan("throw redirect('/some-url')")].filter(Boolean).join(" and ");g(e+t<=7,`Maximum chain length of 7 ${n} exceeded. Did you define an infinite loop of ${n}?`)}const Di="_pageContextInitIsPassedToClient",Gt="_isServerSideError",Jt=x("router/getPageContext.ts",{});function zi(){const e=oi();return Kt(e),S(e,{_hasPageContextFromServer:!0}),e}async function Ui(e){const t={isHydration:!0,_hasPageContextFromClient:!1,_hasPageContextFromServer:!0};for(const n of["data","onBeforeRender"]){const r={...e,...t};if(Mt(n,r)){const i=await Yt(n,r);Object.assign(t,i)}}return t}async function st(e,t){const n={isHydration:!1,_hasPageContextFromClient:!1};let r=!1;if(!t&&await Ji({...e,...n})){const i=await Yi(e);if("is404ServerSideRouted"in i)return{is404ServerSideRouted:!0};const{pageContextFromServer:o}=i;r=!0,s(!(Gt in o)),s(!("serverSideError"in o)),S(n,o)}for(const i of["guard","data","onBeforeRender"]){const o={_hasPageContextFromServer:r,...e,...n};if(i==="guard")!t&&!r&&await Ai(o,a=>Ve(a,!0));else if(s(i==="data"||i==="onBeforeRender"),Mt(i,o)||!r){const a=await Yt(i,o);S(n,a)}else s(r)}return S(n,{_hasPageContextFromServer:r}),{pageContextFromHooks:n}}async function Yt(e,t){const n=N(t,e);if(!n)return null;const r=Ve(t,!0),i=await D(()=>n.hookFn(r),n),o={};if(e==="onBeforeRender"){Ti(i,n.hookFilePath);const a=i==null?void 0:i.pageContext;a&&(S(o,{_hasPageContextFromClient:!0}),S(o,a))}else{s(e==="data");const a={data:i};i&&S(o,{_hasPageContextFromClient:!0}),S(o,a)}return o}function Gi(e){e[Di]&&(Jt.pageContextInitIsPassedToClient=!0)}async function Ji(e){return!!Jt.pageContextInitIsPassedToClient||await at("data",e)||await at("onBeforeRender",e)}async function at(e,t){var n;if(t._pageConfigs.length>0){const r=_t(t._pageId,t._pageConfigs),i=((n=J(r,`${e}Env`))==null?void 0:n.value)??{};return s($(i)),!!i.server&&!i.client}else{if(e==="data")return!1;s(e==="onBeforeRender");const{hasOnBeforeRenderServerSideOnlyHook:r}=await si(t._pageFilesAll,t._pageId);return r}}function Mt(e,t){var n;if(t._pageConfigs.length>0){const r=_t(t._pageId,t._pageConfigs),i=((n=J(r,`${e}Env`))==null?void 0:n.value)??{};return s($(i)),!!i.client&&!i.server}else return!1}async function Yi(e){const t=$i(e._urlRewrite??e.urlOriginal),n=await fetch(t);{const o=n.headers.get("content-type"),a="application/json",l=o&&o.includes(a);if(!l&&n.status===404)return se(e.urlOriginal),{is404ServerSideRouted:!0};g(l,`Wrong Content-Type for ${t}: it should be ${a} but it's ${o} instead. Make sure to properly use pageContext.httpResponse.headers, see https://vike.dev/renderPage`)}const r=await n.text(),i=ce(r);if(s($(i)),Ni(i))throw Li(i);if("serverSideError"in i||Gt in i)throw yt("The pageContext object couldn't be fetched from the server as an error occurred on the server-side. Check your server logs.");return s(p(i,"_pageId","string")),Kt(i),{pageContextFromServer:i}}function Kt(e){Gi(e),Ri(e)}function qt(e,t=!0){s(e.urlOriginal),"urlPathname"in e&&(s(typeof e.urlPathname=="string"),s(he(e,"urlPathname"))),"urlParsed"in e&&s(he(e,"urlParsed")),"url"in e&&s(he(e,"url")),Object.defineProperty(e,"urlPathname",{get:Qt,enumerable:t,configurable:!0}),Object.defineProperty(e,"url",{get:Mi,enumerable:!1,configurable:!0}),Object.defineProperty(e,"urlParsed",{get:Ki,enumerable:t,configurable:!0})}function Xt(e){let t=e._urlHandler;t||(t=i=>i);let n=e.urlLogical??e._urlRewrite??e.urlOriginal;n=t(n);const r=e._baseServer;return s(n&&typeof n=="string"),s(r.startsWith("/")),Z(n,r)}function Qt(){const{pathname:e}=Xt(this),t=e;return s(t.startsWith("/")),t}function Mi(){return _(!1,"`pageContext.url` is outdated. Use `pageContext.urlPathname`, `pageContext.urlParsed`, or `pageContext.urlOriginal` instead. (See https://vike.dev/migration/0.4.23 for more information.)",{onlyOnce:!0,showStackTrace:!0}),Qt.call(this)}function Ki(){const e=Xt(this),{origin:t,pathname:n,pathnameOriginal:r,search:i,searchAll:o,searchOriginal:a,hash:l,hashOriginal:u}=e,c=z(),d=m=>{_(c,`pageContext.urlParsed.${m} isn't available on the server-side (HTTP requests don't include the URL hash by design)`,{onlyOnce:!0,showStackTrace:!0})},f={origin:t,pathname:n,pathnameOriginal:r,search:i,searchAll:o,searchOriginal:a,get hash(){return d("hash"),l},get hashOriginal(){return d("hashOriginal"),u},get hashString(){return _(!1,"pageContext.urlParsed.hashString has been renamed to pageContext.urlParsed.hashOriginal",{onlyOnce:!0,showStackTrace:!0}),d("hashString"),u},get searchString(){return _(!1,"pageContext.urlParsed.searchString has been renamed to pageContext.urlParsed.searchOriginal",{onlyOnce:!0,showStackTrace:!0}),a}};return ne(f,"hashString"),ne(f,"searchString"),c||(ne(f,"hash"),ne(f,"hashOriginal")),f}function ne(e,t){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(e,t,{...n,enumerable:!1})}function qi(e){s(typeof e.urlOriginal=="string"),s(typeof e.urlPathname=="string"),s(W(e.urlParsed)),s(e.urlPathname===e.urlParsed.pathname)}function Xi(e,t){const r=t.filter(({filesystemRoot:o})=>e.startsWith(o)).sort(oe(({filesystemRoot:o})=>o.length))[0];let i;if(r){const{filesystemRoot:o,urlRoot:a}=r,l={pageId:e,filesystemRoot:o,urlRoot:a};s(a.startsWith("/")&&e.startsWith("/")&&o.startsWith("/"),l),s(e.startsWith(o),l),o!=="/"?(s(!o.endsWith("/"),l),i=j(e,o.length,0)):i=e,s(i.startsWith("/"),l),i=a+(a.endsWith("/")?"":"/")+j(i,1,0)}else i=e;return s(i.startsWith("/")),i=i.split("/").filter(o=>o!=="pages"&&o!=="src"&&o!=="index").join("/"),s(!i.includes(".page.")),s(!i.endsWith(".")),i.endsWith("/index")&&(i=j(i,0,-6)),i===""&&(i="/"),s(i.startsWith("/")),s(!i.endsWith("/")||i==="/"),i}async function Qi(e,t,n){qi(t);let r=e(t);if(Zt(r,`The Route Function ${n}`),r=await r,r===!1)return null;if(r===!0&&(r={}),g(W(r),`The Route Function ${n} should return a boolean or a plain JavaScript object (but it's ${h.cyan(`typeof result === ${JSON.stringify(typeof r)}`)} instead)`),"match"in r){const{match:a}=r;if(g(typeof a=="boolean",`The ${h.cyan("match")} value returned by the Route Function ${n} should be a boolean.`),!a)return null}let i=null;"precedence"in r&&(i=r.precedence,g(typeof i=="number",`The ${h.cyan("precedence")} value returned by the Route Function ${n} should be a number.`)),en(r,`The ${h.cyan("routeParams")} object returned by the Route Function ${n} should`);const o=r.routeParams||{};return g(!("pageContext"in r),`Providing ${h.cyan("pageContext")} in Route Functions is prohibited, see https://vike.dev/route-function#cannot-provide-pagecontext`),s(W(o)),Object.keys(r).forEach(a=>{g(a==="match"||a==="routeParams"||a==="precedence",`The Route Function ${n} returned an object with an unknown property ${h.cyan(a)} (the known properties are ${h.cyan("match")}, ${h.cyan("routeParams")}, and ${h.cyan("precedence")})`)}),{precedence:i,routeParams:o}}function Zt(e,t){_(!Gn(e),`${t} returned a promise, but asynchronous routing is deprecated and will be removed in the next major release, see https://vike.dev/route-function#async`,{onlyOnce:!0})}function lt(){const e=h.cyan("iKnowThePerformanceRisksOfAsyncRouteFunctions");_(!1,`${e} is deprecated and will be removed in the next major release`,{onlyOnce:!0})}function en(e,t){s(t.endsWith(" should")),p(e,"routeParams")&&(s(t.endsWith(" should")),g(W(e.routeParams),`${t} be a plain JavaScript object.`),g(Fi(e.routeParams),`${t} only hold string values.`))}async function Zi(e,t,n,r){await Promise.all(e.filter(l=>l.fileType===".page.route").map(l=>{var u;return(u=l.loadFile)==null?void 0:u.call(l)}));const{onBeforeRouteHook:i,filesystemRoots:o}=to(e,t,n);return{pageRoutes:eo(o,e,t,r),onBeforeRouteHook:i}}function eo(e,t,n,r){const i=[];if(n.length>0){s(e===null);const o=!0;n.filter(a=>!a.isErrorPage).forEach(a=>{const l=a.pageId;let u=null;{const c="route",d=J(a,c);if(d){const f=d.value,m=kt(d.definedAt,c);typeof f=="string"?u={pageId:l,comesFromV1PageConfig:o,routeString:f,routeDefinedAt:m,routeType:"STRING"}:(s(U(f)),J(a,"iKnowThePerformanceRisksOfAsyncRouteFunctions","boolean")&<(),u={pageId:l,comesFromV1PageConfig:o,routeFunction:f,routeDefinedAt:m,routeType:"FUNCTION"})}}if(!u){const{routeFilesystem:c}=a;s(c);const{routeString:d,definedBy:f}=c;s(c.routeString.startsWith("/")),u={pageId:l,routeFilesystemDefinedBy:f,comesFromV1PageConfig:o,routeString:d,routeDefinedAt:null,routeType:"FILESYSTEM"}}s(u),i.push(u)})}if(n.length===0){s(e);const o=!1;r.filter(a=>!ee(a)).forEach(a=>{const l=t.find(u=>u.pageId===a&&u.fileType===".page.route");if(!l||!("default"in l.fileExports)){const u=Xi(a,e);s(u.startsWith("/")),s(!u.endsWith("/")||u==="/"),i.push({pageId:a,comesFromV1PageConfig:o,routeString:u,routeDefinedAt:null,routeFilesystemDefinedBy:`${a}.page.*`,routeType:"FILESYSTEM"})}else{const{filePath:u,fileExports:c}=l;if(s(c.default),p(c,"default","string")){const d=c.default;g(d.startsWith("/"),`A Route String should start with a leading slash '/' but ${u} has \`export default '${d}'\`. Make sure to \`export default '/${d}'\` instead.`),i.push({pageId:a,comesFromV1PageConfig:o,routeString:d,routeDefinedAt:u,routeType:"STRING"});return}if(p(c,"default","function")){const d=c.default;"iKnowThePerformanceRisksOfAsyncRouteFunctions"in c&<(),i.push({pageId:a,comesFromV1PageConfig:o,routeFunction:d,routeDefinedAt:u,routeType:"FUNCTION"});return}g(!1,`The default export of ${u} should be a string or a function.`)}})}return i}function to(e,t,n){if(t.length>0)return{onBeforeRouteHook:li(n,"onBeforeRoute"),filesystemRoots:null};let r=null;const i=[];return e.filter(o=>o.fileType===".page.route"&&o.isDefaultPageFile).forEach(({filePath:o,fileExports:a})=>{if(s(a),"onBeforeRoute"in a){g(p(a,"onBeforeRoute","function"),`\`export { onBeforeRoute }\` of ${o} should be a function.`);const{onBeforeRoute:l}=a,u="onBeforeRoute";r={hookFilePath:o,hookFn:l,hookName:u,hookTimeout:de(u)}}"filesystemRoutingRoot"in a&&(g(p(a,"filesystemRoutingRoot","string"),`\`export { filesystemRoutingRoot }\` of ${o} should be a string.`),g(p(a,"filesystemRoutingRoot","string"),`\`export { filesystemRoutingRoot }\` of ${o} is \`'${a.filesystemRoutingRoot}'\` but it should start with a leading slash \`/\`.`),i.push({filesystemRoot:no(o),urlRoot:a.filesystemRoutingRoot}))}),{onBeforeRouteHook:r,filesystemRoots:i}}function no(e){s(e.startsWith("/")),s(!e.endsWith("/"));const t=e.split("/"),n=j(t,0,-1).join("/")||"/";return s(n.startsWith("/")),s(!n.endsWith("/")||n==="/"),n}function tn(){const e="/";return s(ro(e)),e}function ro(e){return e.startsWith("/")}const me=x("createPageContext.ts",{});async function nn(e){me.pageFilesData||(me.pageFilesData=await Pr(!0));const{pageFilesAll:t,allPageIds:n,pageConfigs:r,pageConfigGlobal:i}=me.pageFilesData,{pageRoutes:o,onBeforeRouteHook:a}=await Zi(t,r,i,n),l=tn();s(xe(l));const u={urlOriginal:e,_objectCreatedByVike:!0,_urlHandler:null,_urlRewrite:null,_baseServer:l,_pageFilesAll:t,_pageConfigs:r,_pageConfigGlobal:i,_allPageIds:n,_pageRoutes:o,_onBeforeRouteHook:a};return qt(u),u}function rn(e,t){const n=e.filter(i=>i.pageId===t);return s(n.length<=1),n[0]??null}async function io(e,t){if("isAllLoaded"in e&&!t)return e;const n=await e.loadConfigValuesAll();{const{configValuesImported:r}=n,i=ve(r);Object.assign(e.configValues,i)}{const{configValuesSerialized:r}=n,i=xt(r);Object.assign(e.configValues,i)}return S(e,{isAllLoaded:!0}),e}const on="__whileFetchingAssets";async function Pe(e,t,n){const r=Ie(t,e),i=rn(n,e);let o;const a=!1;try{o=(await Promise.all([i&&io(i,a),...r.map(P=>{var T;return(T=P.loadFile)==null?void 0:T.call(P)})]))[0]}catch(b){throw oo(b)&&Object.assign(b,{[on]:!0}),b}const{config:l,configEntries:u,exports:c,exportsAll:d,pageExports:f}=tr(r,o);return{config:l,configEntries:u,exports:c,exportsAll:d,pageExports:f,_pageFilesLoaded:r}}function Be(e){return e?e[on]===!0:!1}function oo(e){return e instanceof Error?["Failed to fetch dynamically imported module","error loading dynamically imported module","Importing a module script failed","error resolving module specifier","failed to resolve module"].some(n=>e.message.toLowerCase().includes(n.toLowerCase())):!1}function sn(e){const t=e.getAttribute("href");return!!(t===null||t===""||ei(t)||ao(e)||lo(t)||!uo(t)||!Te(t)||!so(e))}function so(e){if(co()){const n=e.getAttribute("data-vike-link");return n!==null&&n!=="false"}else return!0}function ao(e){const t=e.getAttribute("target"),n=e.getAttribute("rel");return t==="_blank"||t==="_external"||n==="external"||e.hasAttribute("download")}function lo(e){if(e.startsWith("#"))return!0;const t=n=>n.split("#")[0];return!!(e.includes("#")&&t(e)===t(window.location.href))}function uo(e){const t=tn();s(xe(t));const{hasBaseServer:n}=Z(e,t);return n}function co(){return!!window._disableAutomaticLinkInterception}function fo(e,t){let n=go(e,t);return{prefetchStaticAssets:n}}function go(e,t){{const n=ho(t);if(n!==null)return n}if("prefetchLinks"in e.exports&&g(!1,"`export { prefetchLinks }` is deprecated, use `export { prefetchStaticAssets }` instead."),"prefetchStaticAssets"in e.exports){const{prefetchStaticAssets:n}=e.exports;if(n===!1)return!1;if(n==="hover")return"hover";if(n==="viewport")return"viewport";const r="prefetchStaticAssets value should be false, 'hover', or 'viewport'";g(W(n),r);const i=Object.keys(n);g(i.length===1&&i[0]==="when",r);const{when:o}=n;if(o==="HOVER"||o==="VIEWPORT"){const a=o.toLowerCase();return _(!1,`prefetchStaticAssets value \`{ when: '${o}' }\` is outdated: set prefetchStaticAssets to '${a}' instead`,{onlyOnce:!0}),a}g(!1,r)}return"hover"}function ho(e){const t=e.getAttribute("data-prefetch-static-assets"),n=e.getAttribute("data-prefetch");if(t===null&&n===null)return null;const r="The attribute data-prefetch is outdated, use data-prefetch-static-assets instead.";if(t){if(g(n===null,r),t==="hover"||t==="viewport")return t;if(t==="false")return!1;g(!1,`data-prefetch-static-assets has value "${t}" but it should instead be "false", "hover", or "viewport"`)}if(n){if(s(!t),_(!1,r,{onlyOnce:!0}),n==="true")return"viewport";if(n==="false")return"hover";g(!1,`data-prefetch has value "${n}" but it should instead be "true" or "false"`)}s(!1)}const an=new Map;function po(e){const t=ln(e);return an.has(t)}function mo(e){const t=ln(e);an.set(t,!0)}function ln(e){return Z(e,"/").pathname}function M(e){return e.fileType===".css"?[]:e.exportNames?e.exportNames:(s(e.fileExports,e.filePath),Object.keys(e.fileExports))}function yo({pageFilesClientSide:e,pageFilesServerSide:t,pageId:n}){return{isHtmlOnly:r(),isClientRouting:o()};function r(){return t.some(l=>l.pageId===n&&l.fileType===".page")?(i(),!1):!(!t.some(l=>l.pageId===n&&l.fileType===".page.server")||e.some(l=>l.pageId===n&&l.fileType===".page.client"&&M(l).includes("render")))}function i(){const a=e.some(l=>M(l).includes("render"));g(a,["No client-side `render()` hook found.","See https://vike.dev/render-modes for more information.",["Loaded client-side page files (none of them `export { render }`):",...e.map((l,u)=>` (${u+1}): ${l.filePath}`)].join(`
+`)].join(" "))}function o(){return e.some(l=>M(l).includes("clientRouting"))}}function bo({pageFilesClientSide:e,pageFilesServerSide:t,isHtmlOnly:n,isClientRouting:r}){let i=[];const o=t.filter(l=>!e.includes(l)),a=[];if(a.push(...e.map(l=>({id:l.filePath,onlyAssets:!1,eagerlyImported:!1}))),a.push(...o.map(l=>({id:l.filePath,onlyAssets:!0,eagerlyImported:!1}))),n)i=e.map(l=>l.filePath);else{const l=wo(r);a.push({id:l,onlyAssets:!1,eagerlyImported:!1}),i=[l]}return{clientEntries:i,clientDependencies:a}}function wo(e){return e?"@@vike/dist/esm/client/client-routing-runtime/entry.js":"@@vike/dist/esm/client/server-routing-runtime/entry.js"}function So(e,t){let n=Ie(e,t);const r=Ft(e,t),{isHtmlOnly:i,isClientRouting:o}=yo({pageFilesClientSide:n,pageFilesServerSide:r,pageId:t});i&&(n=n.filter(u=>u.isEnv("CLIENT_ONLY")&&!M(u).includes("render")),n=Po(n));const{clientEntries:a,clientDependencies:l}=bo({pageFilesClientSide:n,pageFilesServerSide:r,isHtmlOnly:i,isClientRouting:o});return{isHtmlOnly:i,isClientRouting:o,clientEntries:a,clientDependencies:l,pageFilesClientSide:n,pageFilesServerSide:r}}async function vo(e,t,{sharedPageFilesAlreadyLoaded:n}){const r=Ie(e,t);await Promise.all(r.map(async i=>{var o;s(i.isEnv("CLIENT_ONLY")||i.isEnv("CLIENT_AND_SERVER")),!(n&&i.isEnv("CLIENT_AND_SERVER"))&&await((o=i.loadExportNames)==null?void 0:o.call(i))}))}function Po(e){const t=[];for(const n of e)if(t.push(n),M(n).includes("overrideDefaultPages"))break;return t}function Ro(e,t,n){var r,i;if(e){const o=((r=J(e,"clientRouting","boolean"))==null?void 0:r.value)??!1;return{isClientSideRenderable:((i=J(e,"isClientSideRenderable","boolean"))==null?void 0:i.value)??!1,isClientRouting:o}}else{const{isHtmlOnly:o,isClientRouting:a}=So(t,n);return{isClientSideRenderable:!o,isClientRouting:a}}}async function un(e,t){await vo(t._pageFilesAll,e,{sharedPageFilesAlreadyLoaded:!1});const n=rn(t._pageConfigs,e),{isClientSideRenderable:r,isClientRouting:i}=Ro(n,t._pageFilesAll,e);return r&&i}const cn="@",Re=":";function Eo(e,t="Invalid"){let n=`${t} Route String ${B(e)}`;g(e!=="",`${n} (empty string): set it to ${B("/")} instead`),g(["/","*"].includes(e[0]),`${n}: it should start with ${B("/")} or ${B("*")}`),g(!e.includes("**"),`${n}: set it to ${B(e.split("**").join("*"))} instead`)}function Ee(e,t){Eo(e);const n=fn(e),r=n.map(f=>f.param?"[^/]+":f.glob?f.isLastDir?"|/.*":".*":Yn(f.static)).map(f=>`(${f})`).join(""),i=new RegExp(`^${r}/?$`),o=t.match(i);if(!o)return null;const a={},[l,...u]=o;let c=0;const d=n.filter(f=>f.glob).length>1;return n.forEach((f,m)=>{let b=u[m];if(f.param&&(a[f.param]=b),f.glob){const P=`*${d?++c:""}`;f.isLastDir&&(b=b.slice(1)),a[P]=b}}),{routeParams:a}}function fn(e){const t=[],n=i=>{const o=t[t.length-1];o!=null&&o.static?o.static+=i:t.push({static:i})},r=e.split("/");return r.forEach((i,o)=>{const a=o===0,l=o===r.length-1;Co(i)?(_(!i.startsWith(Re),`Outdated Route String ${B(e)}, use ${B(e.split(Re).join(cn))} instead`,{onlyOnce:!0}),a||n("/"),t.push({param:i.slice(1)})):i==="*"&&l&&e!=="*"&&e!=="/*"?t.push({glob:!0,isLastDir:!0}):(a||n("/"),i.split("*").forEach((u,c)=>{c!==0&&t.push({glob:!0}),u!==""&&n(u)}))}),t}function re(e){const t=fn(e),n=l=>(l==null?void 0:l.split("/").filter(Boolean).length)||0;let r=0;for(const l of t){if(!l.static)break;r+=n(l.static)}const i=t.map(l=>n(l.static)).reduce((l,u)=>l+u,0),o=t.filter(l=>l.param).length,a=t.filter(l=>l.glob).length;return{numberOfStaticPartsBeginning:r,numberOfStaticParts:i,numberOfParams:o,numberOfGlobs:a}}function Co(e){return e.startsWith(cn)||e.startsWith(Re)}function ut(e){const n=Ee(e,e);return s(n),Object.keys(n.routeParams).length===0}function B(e){return z()?`'${e}'`:(e===""&&(e="''"),h.cyan(e))}function ko(e){e.sort(_o).sort(V(t=>t.routeType==="FUNCTION"&&!!t.precedence&&t.precedence<0)).sort(V(t=>t.routeType==="STRING"&&ut(t.routeString)===!1)).sort(V(t=>t.routeType==="FUNCTION"&&!t.precedence)).sort(V(t=>t.routeType==="STRING"&&ut(t.routeString)===!0)).sort(V(t=>t.routeType==="FILESYSTEM")).sort(V(t=>t.routeType==="FUNCTION"&&!!t.precedence&&t.precedence>0))}function _o(e,t){{const n=e.precedence??0,r=t.precedence??0;if(n!==r)return n>r?-1:1}if(!t.routeString||!e.routeString)return 0;{const r=oe(i=>re(i).numberOfStaticPartsBeginning)(e.routeString,t.routeString);if(r!==0)return r}{const r=oe(i=>re(i).numberOfStaticParts)(e.routeString,t.routeString);if(r!==0)return r}{const r=Bn(i=>re(i).numberOfGlobs)(e.routeString,t.routeString);if(r!==0)return r}{const r=oe(i=>re(i).numberOfParams)(e.routeString,t.routeString);if(r!==0)return r}return 0}async function $o(e){const t={};if(!e._onBeforeRouteHook)return null;const n=await Oo(e._onBeforeRouteHook,e);return n&&(S(t,n),p(t,"_pageId","string")||p(t,"_pageId","null"))?(p(t,"routeParams")?s(p(t,"routeParams","object")):S(t,{routeParams:{}}),S(t,{_routingProvidedByOnBeforeRouteHook:!0,_debugRouteMatches:"CUSTOM_ROUTING"}),t):(S(t,{_routingProvidedByOnBeforeRouteHook:!1}),t)}async function Oo(e,t){let n=e.hookFn(t);Zt(n,`The onBeforeRoute() hook ${e.hookFilePath}`),n=await D(()=>n,e);const r=`The onBeforeRoute() hook defined by ${e.hookFilePath}`;if(g(n==null||xi(n,["pageContext"])&&p(n,"pageContext"),`${r} should return ${h.cyan("null")}, ${h.cyan("undefined")}, or a plain JavaScript object ${h.cyan("{ pageContext: { /* ... */ } }")}`),n==null)return null;if(g(p(n,"pageContext","object"),`${r} returned ${h.cyan("{ pageContext }")} but pageContext should be a plain JavaScript object.`),p(n.pageContext,"_pageId")&&!p(n.pageContext,"_pageId","null")){const a=`${r} returned ${h.cyan("{ pageContext: { _pageId } }")} but ${h.cyan("_pageId")} should be`;g(p(n.pageContext,"_pageId","string"),`${a} a string or null`),g(t._allPageIds.includes(n.pageContext._pageId),`${a} ${Ii(t._allPageIds.map(l=>h.cyan(l)),"or")}`)}p(n.pageContext,"routeParams")&&en(n.pageContext,`${r} returned ${h.cyan("{ pageContext: { routeParams } }")} but routeParams should`);const i=a=>`${r} returned ${h.cyan(`{ pageContext: { ${a} } }`)} which is deprecated. Return ${h.cyan("{ pageContext: { urlLogical } }")} instead.`;p(n.pageContext,"url")&&(_(!1,i("url"),{onlyOnce:!0}),n.pageContext.urlLogical=n.pageContext.url,delete n.pageContext.url),p(n.pageContext,"urlOriginal")&&(_(!1,i("urlOriginal"),{onlyOnce:!0}),n.pageContext.urlLogical=n.pageContext.urlOriginal,delete n.pageContext.urlOriginal),p(n.pageContext,"urlLogical")&&In(n.pageContext.urlLogical,`${r} returned ${h.cyan("{ pageContext: { urlLogical } }")} but ${h.cyan("urlLogical")}`),Dt(n.pageContext,{hookFilePath:e.hookFilePath,hookName:"onBeforeRoute"});const o={};return S(o,n.pageContext),o}var ie;function ct(...e){var t;ie||(ie=(t=globalThis.__brillout_debug_createDebugger)==null?void 0:t.call(globalThis,"vike:routing")),ie&&ie(...e)}z()&&Q();async function dn(e){ct("Pages routes:",e._pageRoutes),qt(e);const t={},n=await $o(e);if(n){if(n._routingProvidedByOnBeforeRouteHook)return s(n._pageId),n;S(t,n)}const r={};S(r,e),S(r,n);const i=r._allPageIds;g(i.length>0,"No page found. You must create at least one page."),s(r._pageFilesAll.length>0||r._pageConfigs.length>0);const{urlPathname:o}=r;s(o.startsWith("/"));const a=[];await Promise.all(r._pageRoutes.map(async u=>{const{pageId:c,routeType:d}=u;if(u.routeType==="FILESYSTEM"){const{routeString:f}=u,m=Ee(f,o);if(m){const{routeParams:b}=m;a.push({pageId:c,routeParams:b,routeString:f,routeType:d})}return}if(u.routeType==="STRING"){const{routeString:f}=u,m=Ee(f,o);if(m){const{routeParams:b}=m;s(d==="STRING"),a.push({pageId:c,routeString:f,routeParams:b,routeType:d})}return}if(u.routeType==="FUNCTION"){const{routeFunction:f,routeDefinedAt:m}=u,b=await Qi(f,r,m);if(b){const{routeParams:P,precedence:T}=b;a.push({pageId:c,precedence:T,routeParams:P,routeType:d})}return}s(!1)})),ko(a);const l=a[0]??null;if(ct(`Route matches for URL ${h.cyan(o)} (in precedence order):`,a),S(t,{_debugRouteMatches:a}),S(t,{_routeMatch:l}),!l)return S(t,{_pageId:null,routeParams:{}}),t;{const{routeParams:u}=l;s(W(u)),S(t,{_pageId:l.pageId,routeParams:l.routeParams})}return t}Q();const ft=x("prefetch.ts",{linkPrefetchHandlerAdded:new WeakMap});async function To(e,t){try{await Pe(e,t._pageFilesAll,t._pageConfigs)}catch(n){if(Be(n))Ce(n,!0);else throw n}}function xo(e){mo(e.urlPathname),[...document.getElementsByTagName("A")].forEach(n=>{if(ft.linkPrefetchHandlerAdded.has(n))return;ft.linkPrefetchHandlerAdded.set(n,!0);const r=n.getAttribute("href");if(sn(n)||(s(r),po(r)))return;const{prefetchStaticAssets:i}=fo(e,n);if(i&&(i==="hover"&&(n.addEventListener("mouseover",()=>{ye(r)}),n.addEventListener("touchstart",()=>{ye(r)},{passive:!0})),i==="viewport")){const o=new IntersectionObserver(a=>{a.forEach(l=>{l.isIntersecting&&(ye(r),o.disconnect())})});o.observe(n)}})}async function ye(e){const t=await nn(e);let n;try{n=await dn(t)}catch{return}n!=null&&n._pageId&&await un(n._pageId,t)&&await To(n._pageId,t)}async function Fo(e,t){const n=Ve(e,t);let r=null,i;r=N(e,"render"),i="render";{const l=N(e,"onRenderClient");l&&(r=l,i="onRenderClient")}if(!r){const l=Io(e);if(s(l),e._pageConfigs.length>0)g(!1,`No onRenderClient() hook defined for URL '${l}', but it's needed, see https://vike.dev/onRenderClient`);else{const u=e._pageFilesLoaded.filter(d=>d.fileType===".page.client");let c;u.length===0?c="No file `*.page.client.*` found for URL "+l:c="One of the following files should export a render() hook: "+u.map(d=>d.filePath).join(" "),g(!1,c)}}s(r);const o=r.hookFn;s(i);const a=await D(()=>o(n),r);g(a===void 0,`The ${i}() hook defined by ${r.hookFilePath} isn't allowed to return a value`)}function Io(e){let t;try{t=e.urlPathname??e.urlOriginal}catch{}return t=t??window.location.href,t}function gn(e){if(e==="preserve-scroll")return;let t;if(e==="scroll-to-top-or-hash"){const n=jo();if(n&&n!=="top"){const r=document.getElementById(n)||document.getElementsByName(n)[0];if(r){r.scrollIntoView();return}}t={x:0,y:0}}else s("x"in e&&"y"in e),t=e;Ao(t)}function Ao(e){const t=()=>window.scrollTo(e.x,e.y),n=()=>window.scrollX===e.x&&window.scrollY===e.y;n()||(t(),!n()&&requestAnimationFrame(()=>{t(),!n()&&setTimeout(async()=>{if(t(),n())return;const r=new Date().getTime();for(;;)if(await Xr(10),t(),n()||new Date().getTime()-r>100)return},0)}))}function jo(){let{hash:e}=window.location;return e===""?null:(s(e.startsWith("#")),e=e.slice(1),e)}function Lo(){window.addEventListener("scroll",Qr(rt,Math.ceil(1e3/3)),{passive:!0}),Wt(rt)}const G=x("onBrowserHistoryNavigation.ts",{previousState:le()});function No(){window.addEventListener("popstate",async()=>{const e=le(),t=e.historyState.scrollPosition||"scroll-to-top-or-hash",n=e.historyState.triggeredBy==="user",r=e.urlWithoutHash===G.previousState.urlWithoutHash,i=!e.historyState.timestamp||!G.previousState.historyState.timestamp?null:e.historyState.timestamphn.initialRenderIsDone&&De())}function Vo(){hn.initialRenderIsDone=!0}function De(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual")}function dt(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="auto")}const C=x("renderPageClientSide.ts",{renderCounter:0});async function K(e){const{scrollTarget:t,urlOriginal:n=je(),overwriteLastHistoryEntry:r=!1,isBackwardNavigation:i,pageContextsFromRewrite:o=[],redirectCount:a=0,isUserLandPushStateNavigation:l,isClientSideNavigation:u=!0}=e,{isRenderOutdated:c,setHydrationCanBeAborted:d,isHydrationRender:f}=Do();if(s(u===!f),Bi(o.length,a),C.clientRoutingIsDisabled){se(n);return}await m();return;async function m(){var I;const w=async y=>{await P({err:y})},v=await b();if(c())return;if(C.isFirstRenderDone){const{previousPageContext:y}=C;if(s(y),pe(y,"onPageTransitionStart"),!C.isTransitioning){C.isTransitioning=!0;const k=N(y,"onPageTransitionStart");if(k){const E=k,{hookFn:H}=E;try{await D(()=>H(v),E)}catch(F){await w(F);return}if(c())return}}}let R;if(f)R=zi();else{let y;try{y=await dn(v)}catch(H){await w(H);return}if(c())return;let k;if(!y._pageId)k=!1;else if(k=await un(y._pageId,v),c())return;if(!k){se(n);return}s(p(y,"_pageId","string"));const E=y._pageId&&((I=C.previousPageContext)==null?void 0:I._pageId)&&y._pageId===C.previousPageContext._pageId;if(l&&E)return;R=y}s(!("urlOriginal"in R)),S(v,R);try{S(v,await Pe(v._pageId,v._pageFilesAll,v._pageConfigs))}catch(y){if(gt(y,v,f))return;await w(y);return}if(!c()&&(v.exports.hydrationCanBeAborted?d():_(!qr(),"You seem to be using React; we recommend setting hydrationCanBeAborted to true, see https://vike.dev/hydrationCanBeAborted",{onlyOnce:!0}),!c()))if(f){s(p(v,"_hasPageContextFromServer","true"));let y;try{y=await Ui(v)}catch(k){await w(k);return}if(c())return;s(!("urlOriginal"in y)),S(v,y),await T(v)}else{let y;try{y=await st(v,!1)}catch(E){await w(E);return}if(c()||"is404ServerSideRouted"in y)return;const k=y.pageContextFromHooks;s(!("urlOriginal"in k)),S(v,k),await T(v)}}async function b(){const w=await nn(n);S(w,{isBackwardNavigation:i,isClientSideNavigation:u});{const v=Hi(o);s(!("urlOriginal"in v)),S(w,v)}return w}async function P(w){const v=E=>{nt(E,w.err)||console.error(E)};if("err"in w){const{err:E}=w;s(E),ot(E)||console.error(E)}const R=await b();if(c())return;if(w.pageContextError&&S(R,w.pageContextError),"err"in w){const{err:E}=w;if(s(!("errorWhileRendering"in R)),R.errorWhileRendering=E,ot(E)){const H=E;Wi(E,!0,R);const F=H._pageContextAbort;if(F._urlRewrite){await K({...e,scrollTarget:"scroll-to-top-or-hash",pageContextsFromRewrite:[...o,F]});return}if(F._urlRedirect){const ge=F._urlRedirect.url;if(ge.startsWith("http")){window.location.href=ge;return}else await K({...e,scrollTarget:"scroll-to-top-or-hash",urlOriginal:ge,overwriteLastHistoryEntry:!1,isBackwardNavigation:!1,redirectCount:a+1});return}s(F.abortStatusCode),s(!("urlOriginal"in F)),S(R,F),F.abortStatusCode===404&&S(R,{is404:!0})}else S(R,{is404:!1})}const I=or(R._pageFilesAll,R._pageConfigs);if(!I)throw new Error("No error page defined.");S(R,{_pageId:I});try{S(R,await Pe(R._pageId,R._pageFilesAll,R._pageConfigs))}catch(E){if(gt(E,R,f))return;v(E);return}if(c())return;let y;try{y=await st(R,!0)}catch(E){v(E);return}if(c()||"is404ServerSideRouted"in y)return;const k=y.pageContextFromHooks;s(k),s(!("urlOriginal"in k)),S(R,k),await T(R,w)}async function T(w,v){const R=async y=>{v?nt(y,v.err)||console.error(y):await P({err:y})};if(C.onRenderClientPromise&&(await C.onRenderClientPromise,s(C.onRenderClientPromise===void 0),c()))return;Bo(n,r),C.previousPageContext=w,s(C.onRenderClientPromise===void 0),C.onRenderClientPromise=(async()=>{let y;try{await Fo(w,!0)}catch(k){y=k}return C.onRenderClientPromise=void 0,C.isFirstRenderDone=!0,y})();const I=await C.onRenderClientPromise;if(s(C.onRenderClientPromise===void 0),!(I&&(await R(I),!v))){if(xo(w),f&&!I){pe(w,"onHydrationEnd");const y=N(w,"onHydrationEnd");if(y){const{hookFn:k}=y;try{await D(()=>k(w),y)}catch(E){if(await R(E),!v)return}if(c(!0))return}}if(!c(!0)){if(C.isTransitioning){C.isTransitioning=void 0;const{previousPageContext:y}=C;s(y),pe(y,"onPageTransitionEnd");const k=N(y,"onPageTransitionEnd");if(k){const{hookFn:E}=k;try{await D(()=>E(w),k)}catch(H){if(await R(H),!v)return}if(c(!0))return}}gn(t),De(),Vo()}}}}function Bo(e,t){je()!==e&&(De(),ti(e,t),Wo())}function gt(e,t,n){if(!Be(e))return!1;if(n)throw Ce(e,!1),e;return Ce(e,!0),se(t.urlOriginal),!0}function Ce(e,t){s(Be(e)),C.clientRoutingIsDisabled=!0,t&&console.log(e),bt(!1,["Failed to fetch static asset.","This usually happens when a new frontend is deployed.","Falling back to Server Routing.","(The next page navigation will use Server Routing instead of Client Routing.)"].filter(Boolean).join(" "),{onlyOnce:!0})}function Do(){const e=++C.renderCounter;s(e>=1);let t=!1;return{isRenderOutdated:i=>e===1&&!t&&!i?!1:e!==C.renderCounter,setHydrationCanBeAborted:()=>{t=!0},isHydrationRender:e===1}}function ht(){return C.renderCounter}function zo(){document.addEventListener("click",Uo)}async function Uo(e){if(!Go(e))return;const t=Jo(e.target);if(!t)return;const n=t.getAttribute("href");if(sn(t))return;s(n),e.preventDefault();const i=![null,"false"].includes(t.getAttribute("keep-scroll-position"))?"preserve-scroll":"scroll-to-top-or-hash";await K({scrollTarget:i,urlOriginal:n,isBackwardNavigation:!1})}function Go(e){return e.button===0&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey}function Jo(e){for(;e.tagName!=="A";){const{parentNode:t}=e;if(!t)return null;e=t}return e}async function Yo(){Ho(),Ht(),Lo(),ri(),s(ht()===0);const e=K({scrollTarget:"preserve-scroll",isBackwardNavigation:null,isClientSideNavigation:!1});s(ht()===1),zo(),No(),await e}Q();const Mo=!0;bn(Mo);Yo();
diff --git a/pr-preview/pr-232/assets/entries/pages_error.BteJLz7l.js b/pr-preview/pr-232/assets/entries/pages_error.BteJLz7l.js
new file mode 100644
index 000000000..d992de5f1
--- /dev/null
+++ b/pr-preview/pr-232/assets/entries/pages_error.BteJLz7l.js
@@ -0,0 +1 @@
+import{u as a,g as e,t,o as i,i as r,L as l}from"../chunks/chunk-DWHPiCBQ.js";var n=t("
404 Page Not Found"),s=t("
This page could not be found."),u=t("
500 Internal Server Error"),d=t("
Something went wrong.");function p(){const{is404:o}=a();return o?[e(n),e(s)]:[e(u),e(d)]}const m=Object.freeze(Object.defineProperty({__proto__:null,default:p},Symbol.toStringTag,{value:"Module"})),g=[{configName:"onRenderClient",importPath:"vike-solid/renderer/onRenderClient",isValueFile:!1,exportValue:i,exportName:"onRenderClient"},{configName:"favicon",importPath:"/assets/logo.svg",isValueFile:!1,exportValue:r,exportName:"default"},{configName:"Layout",importPath:"/layouts/LayoutDefault.tsx",isValueFile:!1,exportValue:l,exportName:"default"},{configName:"Page",importPath:"/pages/_error/+Page.tsx",isValueFile:!0,exportValues:m}],c={onBeforeRenderEnv:{definedAt:{isComputed:!0},valueSerialized:"null"},dataEnv:{definedAt:{isComputed:!0},valueSerialized:"null"},hydrationCanBeAborted:{definedAt:{filePathToShowToUser:"/home/runner/work/bati/bati/node_modules/.pnpm/vike-solid@0.4.3_solid-js@1.8.16_vike@0.4.168_vite@5.2.8/node_modules/vike-solid/dist/+config.js",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:"true"}};export{g as configValuesImported,c as configValuesSerialized};
diff --git a/pr-preview/pr-232/assets/entries/pages_index.D7zX5IvT.js b/pr-preview/pr-232/assets/entries/pages_index.D7zX5IvT.js
new file mode 100644
index 000000000..9ccab7dd3
--- /dev/null
+++ b/pr-preview/pr-232/assets/entries/pages_index.D7zX5IvT.js
@@ -0,0 +1,15 @@
+import{g as E,s as I,c as j,a as K,t as C,i as Ve,b as rt,d as te,e as dt,S as jt,f as V,h as v,j as O,k as b,l as _t,m as W,F as bt,n as ee,r as St,p as xn,q as Ne,v as Lt,w as qt,x as $n,y as Be,z as _n,D as ze,A as He,B as Sn,C as Kt,E as En,M as ge,o as Cn,L as Tn}from"../chunks/chunk-DWHPiCBQ.js";var An=C('');function Ln(t){return(()=>{var e=E(An);return I(e,"src",Ve),j(n=>{var i=t.size,r=t.size,s=t.class;return i!==n.e&&I(e,"height",n.e=i),r!==n.t&&I(e,"width",n.t=r),s!==n.a&&K(e,n.a=s),n},{e:void 0,t:void 0,a:void 0}),e})()}function On(t){let e;const[n,i]=rt(!1);async function r(){clearTimeout(e),i(!0);const l=window.getSelection();if(l){const u=l.toString().replaceAll(`
+`," ");await navigator.clipboard.writeText(u),t.classList.remove("tooltip-primary"),t.classList.add("tooltip","tooltip-open","tooltip-success"),e=setTimeout(()=>{t.classList.remove("tooltip","tooltip-open","tooltip-success"),i(!1)},3e3)}}function s(){t.classList.remove("tooltip-success"),t.classList.add("tooltip","tooltip-open","tooltip-primary"),i(!1)}function o(){n()||t.classList.remove("tooltip","tooltip-open","tooltip-primary")}t.addEventListener("click",r),t.addEventListener("mouseenter",s),t.addEventListener("mouseleave",o),te(()=>t.removeEventListener("click",r))}function Ue(t){var e,n,i="";if(typeof t=="string"||typeof t=="number")i+=t;else if(typeof t=="object")if(Array.isArray(t)){var r=t.length;for(e=0;e"),kn=C(""),Rn=C("Scaffolds a web app using .");const jn=new Intl.ListFormat("en"),Dn={label:"Vike",url:"https://vike.dev"};function Fn(t){return t.feature.url?(()=>{var e=E(Pn),n=e.firstChild;return b(n,()=>t.feature.label),j(i=>{var r=t.feature.url,s=H("text-primary link link-hover",t.feature.label==="Vike"&&"font-semibold");return r!==i.e&&I(e,"href",i.e=r),s!==i.t&&K(n,i.t=s),i},{e:void 0,t:void 0}),e})():(()=>{var e=E(kn);return b(e,()=>t.feature.label),j(()=>K(e,H("text-primary",t.feature.label==="Vike"&&"font-semibold"))),e})()}function Mn(){const{selectedFeatures:t}=dt(jt),e=V(()=>[Dn,...t()]),n=V(()=>jn.formatToParts(e().map(i=>i.label)).map(i=>i.type==="literal"?i.value:v(Fn,{get feature(){return e().find(r=>r.label===i.value)}})));return(()=>{var i=E(Rn),r=i.firstChild,s=r.nextSibling,[o,l]=O(s.nextSibling);return o.nextSibling,b(i,n,o,l),i})()}var In=C('