1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Download-9zF-0hgt.js","assets/react-vendor-CdbEkvHB.js","assets/Go-Dq2u0wd7.js","assets/card-heWL1pcs.js","assets/FirstReviewWalkthrough-CBXfDMZH.js","assets/icons-D5q0hyss.js","assets/radix-ui-CSxGpBRr.js","assets/supabase-CxM-nLeM.js","assets/Docs-BVoJE2Hk.js","assets/tabs-BnaPPXWd.js","assets/Support-YgEdk8Kc.js","assets/input-CgvMgJmt.js","assets/Privacy-CdDxuksI.js","assets/Terms-CX6Ve5TM.js","assets/AffiliateTerms-4FfVhul-.js","assets/Partners-Bv84kN5O.js","assets/Auth-DI-UcNnC.js","assets/label-BDZC01Zc.js","assets/checkbox-BekCOBCt.js","assets/authDestination-Dn0rvoAS.js","assets/types-Cgk4TLxz.js","assets/ResetPassword-CRgYMgA4.js","assets/UpdatePassword-rs_GQg0o.js","assets/Account-dtnC-2d-.js","assets/select-D6CUkacY.js","assets/textarea-B3bO-cSJ.js","assets/dialog-CyIoA-hH.js","assets/AccountSectionNav-CnMIIukY.js","assets/badge-CrK0__Ya.js","assets/progress-CeGmVUpb.js","assets/table-DvEYLw_y.js","assets/Billing-DM7Uhukb.js","assets/radio-group-WKaS2sN7.js","assets/AccountWorkspaceShell-cQPI0key.js","assets/Settings-X4npZ95Q.js","assets/deleteUser-DBSomy6X.js","assets/switch-ftUvet5y.js","assets/Admin-Di2B-pR9.js","assets/Disclaimer-CpxAyla9.js","assets/TradingViewSetup-BWJTXW8Z.js","assets/SeoPage-znjffNFb.js","assets/PaidTradeReviewLanding-DeL2Q--0.js","assets/ChurnFeedback-WeC7v56S.js","assets/NotFound-CtloCUXO.js"])))=>i.map(i=>d[i]); 2import{r as g,j as a,R as w,v as Fa,k as We,m as Br,L as Y,n as La,B as Va,p as Ua,q as T,N as Ne,t as $a}from"./react-vendor-CdbEkvHB.js";import{V as Kr,R as Gr,A as Hr,C as Wr,T as Qr,D as Yr,P as qa,a as Jr,b as za,S as Ba,c as Zr,d as Xr,e as Ka,f as en,I as tn,g as rn,h as nn,i as an,L as on,j as sn,k as Ga,l as Ha,O as ln,m as Wa,n as cn,o as dn,p as un,q as hn,r as pn,s as Qa,t as Ya,u as Ja,H as Za,v as fn,w as mn,x as Xa}from"./radix-ui-CSxGpBRr.js";import{X as gn,C as eo,a as yn,b as to,c as wn,D as ar,S as or,U as ir,L as sr,d as lr,M as ro,A as no,T as ao,Y as oo}from"./icons-D5q0hyss.js";import{c as io}from"./supabase-CxM-nLeM.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&n(l)}).observe(document,{childList:!0,subtree:!0});function r(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(o){if(o.ep)return;o.ep=!0;const i=r(o);fetch(o.href,i)}})();const so="modulepreload",lo=function(e){return"/"+e},cr={},W=function(t,r,n){let o=Promise.resolve();if(r&&r.length>0){let d=function(u){return Promise.all(u.map(h=>Promise.resolve(h).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),c=l?.nonce||l?.getAttribute("nonce");o=d(r.map(u=>{if(u=lo(u),u in cr)return;cr[u]=!0;const h=u.endsWith(".css"),b=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${b}`))return;const f=document.createElement("link");if(f.rel=h?"stylesheet":so,h||(f.as="script"),f.crossOrigin="",f.href=u,c&&f.setAttribute("nonce",c),document.head.appendChild(f),h)return new Promise((s,v)=>{f.addEventListener("load",s),f.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${u}`)))})}))}function i(l){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=l,window.dispatchEvent(c),!c.defaultPrevented)throw l}return o.then(l=>{for(const c of l||[])c.status==="rejected"&&i(c.reason);return t().catch(i)})},Ut="__lovable_chunk_reload__",co="__cmr",uo=["Failed to fetch dynamically imported module","Importing a module script failed","error loading dynamically imported module","ChunkLoadError"];function ct(e){if(!e)return!1;const t=typeof e=="string"?e:String(e?.message||e);return t?uo.some(r=>t.includes(r)):!1}function vn(){if(typeof window>"u")return!1;try{return!!window.sessionStorage.getItem(Ut)}catch{return!1}}function ho(){if(!(typeof window>"u"))try{window.sessionStorage.removeItem(Ut)}catch{}}function Et(){if(typeof window>"u")return;const{pathname:e,search:t,hash:r}=window.location,n=new URLSearchParams(t);n.set(co,String(Date.now()));const o=`?${n.toString()}`;window.location.replace(`${e}${o}${r}`)}function ot(e){if(!ct(e)||typeof window>"u"||vn())return!1;try{window.sessionStorage.setItem(Ut,String(Date.now()))}catch{}return Et(),!0}let dr=!1;function po(){dr||typeof window>"u"||(dr=!0,window.addEventListener("error",e=>{const t=e.error??e.message;ot(t)&&e.preventDefault?.()}),window.addEventListener("unhandledrejection",e=>{ot(e.reason)&&e.preventDefault?.()}),window.addEventListener("vite:preloadError",e=>{ot(e.payload)&&e.preventDefault?.()}))}function Q(e,t=3,r=400){return g.lazy(async()=>{let n;for(let o=0;o<=t;o++)try{return await e()}catch(i){if(n=i,!ct(i)||o===t)break;await new Promise(l=>setTimeout(l,r*(o+1)))}if(ot(n))return new Promise(()=>{});throw n})}class fo extends g.Component{state={chunkError:!1,otherError:null};static getDerivedStateFromError(t){return ct(t)?{chunkError:!0,otherError:null}:{chunkError:!1,otherError:t}}componentDidCatch(t){ct(t)&&!vn()&&Et()}handleReload=()=>{ho(),Et()};
vendor: 10,132 bytes, line 2
2render(){if(this.state.chunkError)return a.jsx("div",{className:"min-h-screen bg-background flex items-center justify-center px-6",children:a.jsxs("div",{className:"max-w-md text-center space-y-4",children:[a.jsx("h1",{className:"text-xl font-semibold text-foreground",children:"A new version is available"}),a.jsx("p",{className:"text-sm text-muted-foreground",children:"We updated the app while you were away. Reload to load the latest version."}),a.jsx("button",{type:"button",onClick:this.handleReload,className:"inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors",children:"Reload"})]})});if(this.state.otherError)throw this.state.otherError;return this.props.children}}function bn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(r=bn(e[t]))&&(n&&(n+=" "),n+=r)}else for(r in e)e[r]&&(n&&(n+=" "),n+=r);return n}function xn(){for(var e,t,r=0,n="",o=arguments.length;r<o;r++)(e=arguments[r])&&(t=bn(e))&&(n&&(n+=" "),n+=t);return n}const $t="-",mo=e=>{const t=yo(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:n}=e;return{getClassGroupId:l=>{const c=l.split($t);return c[0]===""&&c.length!==1&&c.shift(),kn(c,t)||go(l)},getConflictingClassGroupIds:(l,c)=>{const d=r[l]||[];return c&&n[l]?[...d,...n[l]]:d}}},kn=(e,t)=>{if(e.length===0)return t.classGroupId;const r=e[0],n=t.nextPart.get(r),o=n?kn(e.slice(1),n):void 0;if(o)return o;if(t.validators.length===0)return;const i=e.join($t);return t.validators.find(({validator:l})=>l(i))?.classGroupId},ur=/^\[(.+)\]$/,go=e=>{if(ur.test(e)){const t=ur.exec(e)[1],r=t?.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},yo=e=>{const{theme:t,prefix:r}=e,n={nextPart:new Map,validators:[]};return vo(Object.entries(e.classGroups),r).forEach(([i,l])=>{jt(l,n,i,t)}),n},jt=(e,t,r,n)=>{e.forEach(o=>{if(typeof o=="string"){const i=o===""?t:hr(t,o);i.classGroupId=r;return}if(typeof o=="function"){if(wo(o)){jt(o(n),t,r,n);return}t.validators.push({validator:o,classGroupId:r});return}Object.entries(o).forEach(([i,l])=>{jt(l,hr(t,i),r,n)})})},hr=(e,t)=>{let r=e;return t.split($t).forEach(n=>{r.nextPart.has(n)||r.nextPart.set(n,{nextPart:new Map,validators:[]}),r=r.nextPart.get(n)}),r},wo=e=>e.isThemeGetter,vo=(e,t)=>t?e.map(([r,n])=>{const o=n.map(i=>typeof i=="string"?t+i:typeof i=="object"?Object.fromEntries(Object.entries(i).map(([l,c])=>[t+l,c])):i);return[r,o]}):e,bo=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,n=new Map;const o=(i,l)=>{r.set(i,l),t++,t>e&&(t=0,n=r,r=new Map)};return{get(i){let l=r.get(i);if(l!==void 0)return l;if((l=n.get(i))!==void 0)return o(i,l),l},set(i,l){r.has(i)?r.set(i,l):o(i,l)}}},Cn="!",xo=e=>{const{separator:t,experimentalParseClassName:r}=e,n=t.length===1,o=t[0],i=t.length,l=c=>{const d=[];let u=0,h=0,b;for(let y=0;y<c.length;y++){let m=c[y];if(u===0){if(m===o&&(n||c.slice(y,y+i)===t)){d.push(c.slice(h,y)),h=y+i;continue}if(m==="/"){b=y;continue}}m==="["?u++:m==="]"&&u--}const f=d.length===0?c:c.substring(h),s=f.startsWith(Cn),v=s?f.substring(1):f,p=b&&b>h?b-h:void 0;return{modifiers:d,hasImportantModifier:s,baseClassName:v,maybePostfixModifierPosition:p}};return r?c=>r({className:c,parseClassName:l}):l},ko=e=>{if(e.length<=1)return e;const t=[];let r=[];return e.forEach(n=>{n[0]==="["?(t.push(...r.sort(),n),r=[]):r.push(n)}),t.push(...r.sort()),t},Co=e=>({cache:bo(e.cacheSize),parseClassName:xo(e),...mo(e)}),To=/\s+/,So=(e,t)=>{const{parseClassName:r,getClassGroupId:n,getConflictingClassGroupIds:o}=t,i=[],l=e.trim().split(To);let c="";for(let d=l.length-1;d>=0;d-=1){const u=l[d],{modifiers:h,hasImportantModifier:b,baseClassName:f,maybePostfixModifierPosition:s}=r(u);let v=!!s,p=n(v?f.substring(0,s):f);if(!p){if(!v){c=u+(c.length>0?" "+c:c);continue}if(p=n(f),!p){c=u+(c.length>0?" "+c:c);continue}v=!1}const y=ko(h).join(":"),m=b?y+Cn:y,x=m+p;if(i.includes(x))continue;i.push(x);const S=o(p,v);for(let C=0;C<S.length;++C){const N=S[C];i.push(m+N)}c=u+(c.length>0?" "+c:c)}return c};function Eo(){let e=0,t,r,n="";for(;e<arguments.length;)(t=arguments[e++])&&(r=Tn(t))&&(n&&(n+=" "),n+=r);return n}const Tn=e=>{if(typeof e=="string")return e;let t,r="";for(let n=0;n<e.length;n++)e[n]&&(t=Tn(e[n]))&&(r&&(r+=" "),r+=t);return r};function jo(e,...t){let r,n,o,i=l;function l(d){const u=t.reduce((h,b)=>b(h),e());return r=Co(u),n=r.cache.get,o=r.cache.set,i=c,c(d)}function c(d){const u=n(d);if(u)return u;const h=So(d,r);return o(d,h),h}return function(){return i(Eo.apply(null,arguments))}}const U=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},Sn=/^\[(?:([a-z-]+):)?(.+)\]$/i,Ao=/^\d+\/\d+$/,_o=new Set(["px","full","screen"]),Ro=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Io=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Po=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,No=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Mo=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ye=e=>Oe(e)||_o.has(e)||Ao.test(e),Ce=e=>De(e,"length",qo),Oe=e=>!!e&&!Number.isNaN(Number(e)),bt=e=>De(e,"number",Oe),$e=e=>!!e&&Number.isInteger(Number(e)),Oo=e=>e.endsWith("%")&&Oe(e.slice(0,-1)),_=e=>Sn.test(e),Te=e=>Ro.test(e),Do=new Set(["length","size","percentage"]),Fo=e=>De(e,Do,En),Lo=e=>De(e,"position",En),Vo=new Set(["image","url"]),Uo=e=>De(e,Vo,Bo),$o=e=>De(e,"",zo),qe=()=>!0,De=(e,t,r)=>{const n=Sn.exec(e);return n?n[1]?typeof t=="string"?n[1]===t:t.has(n[1]):r(n[2]):!1},qo=e=>Io.test(e)&&!Po.test(e),En=()=>!1,zo=e=>No.test(e),Bo=e=>Mo.test(e),Ko=()=>{const e=U("colors"),t=U("spacing"),r=U("blur"),n=U("brightness"),o=U("borderColor"),i=U("borderRadius"),l=U("borderSpacing"),c=U("borderWidth"),d=U("contrast"),u=U("grayscale"),h=U("hueRotate"),b=U("invert"),f=U("gap"),s=U("gradientColorStops"),v=U("gradientColorStopPositions"),p=U("inset"),y=U("margin"),m=U("opacity"),x=U("padding"),S=U("saturate"),C=U("scale"),N=U("sepia"),M=U("skew"),F=U("space"),P=U("translate"),X=()=>["auto","contain","none"],J=()=>["auto","hidden","clip","visible","scroll"],ee=()=>["auto",_,t],R=()=>[_,t],me=()=>["",ye,Ce],te=()=>["auto",Oe,_],ge=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],re=()=>["solid","dashed","dotted","double","none"],j=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],q=()=>["start","end","center","between","around","evenly","stretch"],k=()=>["","0",_],z=()=>["auto","avoid","all","avoid-page","page","left","right","column"],V=()=>[Oe,_];return{cacheSize:500,separator:":",theme:{colors:[qe],spacing:[ye,Ce],blur:["none","",Te,_],brightness:V(),borderColor:[e],borderRadius:["none","","full",Te,_],borderSpacing:R(),borderWidth:me(),contrast:V(),grayscale:k(),hueRotate:V(),invert:k(),gap:R(),gradientColorStops:[e],gradientColorStopPositions:[Oo,Ce],inset:ee(),margin:ee(),opacity:V(),padding:R(),saturate:V(),scale:V(),sepia:k(),skew:V(),space:R(),translate:R()},classGroups:{aspect:[{aspect:["auto","square","video",_]}],container:["container"],columns:[{columns:[Te]}],"break-after":[{"break-after":z()}],"break-before":[{"break-before":z()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...ge(),_]}],overflow:[{overflow:J()}],"overflow-x":[{"overflow-x":J()}],"overflow-y":[{"overflow-y":J()}],overscroll:[{overscroll:X()}],"overscroll-x":[{"overscroll-x":X()}],"overscroll-y":[{"overscroll-y":X()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[p]}],"inset-x":[{"inset-x":[p]}],"inset-y":[{"inset-y":[p]}],start:[{start:[p]}],end:[{end:[p]}],top:[{top:[p]}],right:[{right:[p]}],bottom:[{bottom:[p]}],left:[{left:[p]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",$e,_]}],basis:[{basis:ee()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",_]}],grow:[{grow:k()}],shrink:[{shrink:k()}],order:[{order:["first","last","none",$e,_]}],"grid-cols":[{"grid-cols":[qe]}],"col-start-end":[{col:["auto",{span:["full",$e,_]},_]}],"col-start":[{"col-start":te()}],"col-end":[{"col-end":te()}],"grid-rows":[{"grid-rows":[qe]}],"row-start-end":[{row:["auto",{span:[$e,_]},_]}],"row-start":[{"row-start":te()}],"row-end":[{"row-end":te()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",_]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",_]}],gap:[{gap:[f]}],"gap-x":[{"gap-x":[f]}],"gap-y":[{"gap-y":[f]}],"justify-content":[{justify:["normal",...q()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...q(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...q(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[x]}],px:[{px:[x]}],py:[{py:[x]}],ps:[{ps:[x]}
vendor: 8,323 bytes, line 2
2],pe:[{pe:[x]}],pt:[{pt:[x]}],pr:[{pr:[x]}],pb:[{pb:[x]}],pl:[{pl:[x]}],m:[{m:[y]}],mx:[{mx:[y]}],my:[{my:[y]}],ms:[{ms:[y]}],me:[{me:[y]}],mt:[{mt:[y]}],mr:[{mr:[y]}],mb:[{mb:[y]}],ml:[{ml:[y]}],"space-x":[{"space-x":[F]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[F]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",_,t]}],"min-w":[{"min-w":[_,t,"min","max","fit"]}],"max-w":[{"max-w":[_,t,"none","full","min","max","fit","prose",{screen:[Te]},Te]}],h:[{h:[_,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[_,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[_,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[_,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Te,Ce]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",bt]}],"font-family":[{font:[qe]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",_]}],"line-clamp":[{"line-clamp":["none",Oe,bt]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",ye,_]}],"list-image":[{"list-image":["none",_]}],"list-style-type":[{list:["none","disc","decimal",_]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[m]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[m]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...re(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",ye,Ce]}],"underline-offset":[{"underline-offset":["auto",ye,_]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:R()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",_]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",_]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[m]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...ge(),Lo]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Fo]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Uo]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[v]}],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[s]}],"gradient-via":[{via:[s]}],"gradient-to":[{to:[s]}],rounded:[{rounded:[i]}],"rounded-s":[{"rounded-s":[i]}],"rounded-e":[{"rounded-e":[i]}],"rounded-t":[{"rounded-t":[i]}],"rounded-r":[{"rounded-r":[i]}],"rounded-b":[{"rounded-b":[i]}],"rounded-l":[{"rounded-l":[i]}],"rounded-ss":[{"rounded-ss":[i]}],"rounded-se":[{"rounded-se":[i]}],"rounded-ee":[{"rounded-ee":[i]}],"rounded-es":[{"rounded-es":[i]}],"rounded-tl":[{"rounded-tl":[i]}],"rounded-tr":[{"rounded-tr":[i]}],"rounded-br":[{"rounded-br":[i]}],"rounded-bl":[{"rounded-bl":[i]}],"border-w":[{border:[c]}],"border-w-x":[{"border-x":[c]}],"border-w-y":[{"border-y":[c]}],"border-w-s":[{"border-s":[c]}],"border-w-e":[{"border-e":[c]}],"border-w-t":[{"border-t":[c]}],"border-w-r":[{"border-r":[c]}],"border-w-b":[{"border-b":[c]}],"border-w-l":[{"border-l":[c]}],"border-opacity":[{"border-opacity":[m]}],"border-style":[{border:[...re(),"hidden"]}],"divide-x":[{"divide-x":[c]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[c]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[m]}],"divide-style":[{divide:re()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-s":[{"border-s":[o]}],"border-color-e":[{"border-e":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:["",...re()]}],"outline-offset":[{"outline-offset":[ye,_]}],"outline-w":[{outline:[ye,Ce]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:me()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[m]}],"ring-offset-w":[{"ring-offset":[ye,Ce]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Te,$o]}],"shadow-color":[{shadow:[qe]}],opacity:[{opacity:[m]}],"mix-blend":[{"mix-blend":[...j(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":j()}],filter:[{filter:["","none"]}],blur:[{blur:[r]}],brightness:[{brightness:[n]}],contrast:[{contrast:[d]}],"drop-shadow":[{"drop-shadow":["","none",Te,_]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[h]}],invert:[{invert:[b]}],saturate:[{saturate:[S]}],sepia:[{sepia:[N]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[r]}],"backdrop-brightness":[{"backdrop-brightness":[n]}],"backdrop-contrast":[{"backdrop-contrast":[d]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[h]}],"backdrop-invert":[{"backdrop-invert":[b]}],"backdrop-opacity":[{"backdrop-opacity":[m]}],"backdrop-saturate":[{"backdrop-saturate":[S]}],"backdrop-sepia":[{"backdrop-sepia":[N]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[l]}],"border-spacing-x":[{"border-spacing-x":[l]}],"border-spacing-y":[{"border-spacing-y":[l]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",_]}],duration:[{duration:V()}],ease:[{ease:["linear","in","out","in-out",_]}],delay:[{delay:V()}],animate:[{animate:["none","spin","ping","pulse","bounce",_]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[C]}],"scale-x":[{"scale-x":[C]}],"scale-y":[{"scale-y":[C]}],rotate:[{rotate:[$e,_]}],"translate-x":[{"translate-x":[P]}],"translate-y":[{"translate-y":[P]}],"skew-x":[{"skew-x":[M]}],"skew-y":[{"skew-y":[M]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",_]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",_]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":R()}],"scroll-mx":[{"scroll-mx":R()}],"scroll-my":[{"scroll-my":R()}],"scroll-ms":[{"scroll-ms":R()}],"scroll-me":[{"scroll-me":R()}],"scroll-mt":[{"scroll-mt":R()}],"scroll-mr":[{"scroll-mr":R()}],"scroll-mb":[{"scroll-mb":R()}],"scroll-ml":[{"scroll-ml":R()}],"scroll-p":[{"scroll-p":R()}],"scroll-px":[{"scroll-px":R()}],"scroll-py":[{"scroll-py":R()}],"scroll-ps":[{"scroll-ps":R()}],"scroll-pe":[{"scroll-pe":R()}],"scroll-pt":[{"scroll-pt":R()}],"scroll-pr":[{"scroll-pr":R()}],"scroll-pb":[{"scroll-pb":R()}],"scroll-pl":[{"scroll-pl":R()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}
2],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",_]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[ye,Ce,bt]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},Go=jo(Ko);function D(...e){return Go(xn(e))}function Ho({className:e,...t}){return a.jsx("span",{role:"status","aria-label":"Loading",className:D("inline-block h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent",e),...t})}const Wo=1,Qo=1e6;let xt=0;function Yo(){return xt=(xt+1)%Number.MAX_SAFE_INTEGER,xt.toString()}const kt=new Map,pr=e=>{if(kt.has(e))return;const t=setTimeout(()=>{kt.delete(e),ze({type:"REMOVE_TOAST",toastId:e})},Qo);kt.set(e,t)},Jo=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,Wo)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(r=>r.id===t.toast.id?{...r,...t.toast}:r)};case"DISMISS_TOAST":{const{toastId:r}=t;return r?pr(r):e.toasts.forEach(n=>{pr(n.id)}),{...e,toasts:e.toasts.map(n=>
2n.id===r||r===void 0?{...n,open:!1}:n)}}case"REMOVE_TOAST":return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(r=>r.id!==t.toastId)}}},it=[];let st={toasts:[]};function ze(e){st=Jo(st,e),it.forEach(t=>{t(st)})}function Zo({...e}){const t=Yo(),r=o=>ze({type:"UPDATE_TOAST",toast:{...o,id:t}}),n=()=>ze({type:"DISMISS_TOAST",toastId:t});return ze({type:"ADD_TOAST",toast:{...e,id:t,open:!0,onOpenChange:o=>{o||n()}}}),{id:t,dismiss:n,update:r}}function jn(){const[e,t]=g.useState(st);return g.useEffect(()=>(it.push(t),()=>{const r=it.indexOf(t);r>-1&&it.splice(r,1)}),[e]),{...e,toast:Zo,dismiss:r=>ze({type:"DISMISS_TOAST",toastId:r})}}const fr=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,mr=xn,An=(e,t)=>r=>{var n;if(t?.variants==null)return mr(e,r?.class,r?.className);const{variants:o,defaultVariants:i}=t,l=Object.keys(o).map(u=>{const h=r?.[u],b=i?.[u];if(h===null)return null;const f=fr(h)||fr(b);return o[u][f]}),c=r&&Object.entries(r).reduce((u,h)=>{let[b,f]=h;return f===void 0||(u[b]=f),u},{}),d=t==null||(n=t.compoundVariants)===null||n===void 0?void 0:n.reduce((u,h)=>{let{class:b,className:f,...s}=h;return Object.entries(s).every(v=>{let[p,y]=v;return Array.isArray(y)?y.includes({...i,...c}[p]):{...i,...c}[p]===y})?[...u,b,f]:u},[]);return mr(e,l,d,r?.class,r?.className)},Xo=qa,_n=g.forwardRef(({className:e,...t},r)=>a.jsx(Kr,{ref:r,className:D("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",e),...t}));_n.displayName=Kr.displayName;const ei=An("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),Rn=g.forwardRef(({className:e,variant:t,...r},n)=>a.jsx(Gr,{ref:n,className:D(ei({variant:t}),e),...r}));Rn.displayName=Gr.displayName;const ti=g.forwardRef(({className:e,...t},r)=>a.jsx(Hr,{ref:r,className:D("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50",e),...t}));ti.displayName=Hr.displayName;const In=g.forwardRef(({className:e,...t},r)=>a.jsx(Wr,{ref:r,className:D("absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",e),"toast-close":"",...t,children:a.jsx(gn,{className:"h-4 w-4"})}));In.displayName=Wr.displayName;const Pn=g.forwardRef(({className:e,...t},r)=>a.jsx(Qr,{ref:r,className:D("text-sm font-semibold",e),...t}));Pn.displayName=Qr.displayName;const Nn=g.forwardRef(({className:e,...t},r)=>a.jsx(Yr,{ref:r,className:D("text-sm opacity-90",e),...t}));Nn.displayName=Yr.displayName;function ri(){const{toasts:e}=jn();return a.jsxs(Xo,{children:[e.map(function({id:t,title:r,description:n,action:o,...i}){return a.jsxs(Rn,{...i,children:[a.jsxs("div",{className:"grid gap-1",children:[r&&a.jsx(Pn,{children:r}),n&&a.jsx(Nn,{children:n})]}),o,a.jsx(In,{})]},t)}),a.jsx(_n,{})]})}var gr=["light","dark"],ni="(prefers-color-scheme: dark)",ai=g.createContext(void 0),oi={setTheme:e=>{},themes:[]},ii=()=>{var e;return(e=g.useContext(ai))!=null?e:oi}
2;g.memo(({forcedTheme:e,storageKey:t,attribute:r,enableSystem:n,enableColorScheme:o,defaultTheme:i,value:l,attrs:c,nonce:d})=>{let u=i==="system",h=r==="class"?`var d=document.documentElement,c=d.classList;${`c.remove(${c.map(v=>`'${v}'`).join(",")})`};`:`var d=document.documentElement,n='${r}',s='setAttribute';`,b=o?gr.includes(i)&&i?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${i}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",f=(v,p=!1,y=!0)=>{let m=l?l[v]:v,x=p?v+"|| ''":`'${m}'`,S="";return o&&y&&!p&&gr.includes(v)&&(S+=`d.style.colorScheme = '${v}';`),r==="class"?p||m?S+=`c.add(${x})`:S+="null":m&&(S+=`d[s](n,${x})`),S},s=e?`!function(){${h}${f(e)}}()`:n?`!function(){try{${h}var e=localStorage.getItem('${t}');if('system'===e||(!e&&${u})){var t='${ni}',m=window.matchMedia(t);if(m.media!==t||m.matches){${f("dark")}}else{${f("light")}}}else if(e){${l?`var x=${JSON.stringify(l)};`:""}${f(l?"x[e]":"e",!0)}}${u?"":"else{"+f(i,!1,!1)+"}"}${b}}catch(e){}}()`:`!function(){try{${h}var e=localStorage.getItem('${t}');if(e){${l?`var x=${JSON.stringify(l)};`:""}${f(l?"x[e]":"e",!0)}}else{${f(i,!1,!1)};}${b}}catch(t){}}();`;return g.createElement("script",{nonce:d,dangerouslySetInnerHTML:{__html:s}})});var si=e=>{switch(e){case"success":return di;case"info":return hi;case"warning":return ui;case"error":return pi;default:return null}},li=Array(12).fill(0),ci=({visible:e,className:t})=>w.createElement("div",{className:["sonner-loading-wrapper",t].filter(Boolean).join(" "),"data-visible":e},w.createElement("div",{className:"sonner-spinner"},li.map((r,n)=>w.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${n}`})))),di=w.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},w.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),ui=w.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},w.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),hi=w.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},w.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),pi=w.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},w.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),fi=w.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},w.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),w.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),mi=()=>{let[e,t]=w.useState(document.hidden);return w.useEffect(()=>{let r=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",r),()=>window.removeEventListener("visibilitychange",r)},[]),e},At=1,gi=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{var t;let{message:r,...n}=e,o=typeof e?.id=="number"||((t=e.id)==null?void 0:t.length)>0?e.id:At++,i=this.toasts.find(c=>c.id===o),l=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(o)&&this.dismissedToasts.delete(o),i?this.toasts=this.toasts.map(c=>c.id===o?(this.publish({...c,...e,id:o,title:r}
2),{...c,...e,id:o,dismissible:l,title:r}):c):this.addToast({title:r,...n,dismissible:l,id:o}),o},this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(t=>{this.subscribers.forEach(r=>r({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:"error"}),this.success=(e,t)=>this.create({...t,type:"success",message:e}),this.info=(e,t)=>this.create({...t,type:"info",message:e}),this.warning=(e,t)=>this.create({...t,type:"warning",message:e}),this.loading=(e,t)=>this.create({...t,type:"loading",message:e}),this.promise=(e,t)=>{if(!t)return;let r;t.loading!==void 0&&(r=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let n=e instanceof Promise?e:e(),o=r!==void 0,i,l=n.then(async d=>{if(i=["resolve",d],w.isValidElement(d))o=!1,this.create({id:r,type:"default",message:d});else if(wi(d)&&!d.ok){o=!1;let u=typeof t.error=="function"?await t.error(`HTTP error! status: ${d.status}`):t.error,h=typeof t.description=="function"?await t.description(`HTTP error! status: ${d.status}`):t.description;this.create({id:r,type:"error",message:u,description:h})}else if(t.success!==void 0){o=!1;let u=typeof t.success=="function"?await t.success(d):t.success,h=typeof t.description=="function"?await t.description(d):t.description;this.create({id:r,type:"success",message:u,description:h})}}).catch(async d=>{if(i=["reject",d],t.error!==void 0){o=!1;let u=typeof t.error=="function"?await t.error(d):t.error,h=typeof t.description=="function"?await t.description(d):t.description;this.create({id:r,type:"error",message:u,description:h})}}).finally(()=>{var d;o&&(this.dismiss(r),r=void 0),(d=t.finally)==null||d.call(t)}),c=()=>new Promise((d,u)=>l.then(()=>i[0]==="reject"?u(i[1]):d(i[1])).catch(u));return typeof r!="string"&&typeof r!="number"?{unwrap:c}:Object.assign(r,{unwrap:c})},this.custom=(e,t)=>{let r=t?.id||At++;return this.create({jsx:e(r),id:r,...t}),r},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},ae=new gi,yi=(e,t)=>{let r=t?.id||At++;return ae.addToast({title:e,...t,id:r}),r},wi=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",vi=yi,bi=()=>ae.toasts,xi=()=>ae.getActiveToasts();Object.assign(vi,{success:ae.success,info:ae.info,warning:ae.warning,error:ae.error,custom:ae.custom,message:ae.message,promise:ae.promise,dismiss:ae.dismiss,loading:ae.loading},{getHistory:bi,getToasts:xi});function ki(e,{insertAt:t}={}){if(typeof document>"u")return;let r=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t==="top"&&r.firstChild?r.insertBefore(n,r.firstChild):r.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}ki(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;
2left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}
2:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);
2--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} 3`);function tt(e){return e.label!==void 0}var Ci=3,Ti="32px",Si="16px",yr=4e3,Ei=356,ji=14,Ai=20,_i=200;function fe(...e){return e.filter(Boolean).join(" ")}function Ri(e){let[t,r]=e.split("-"),n=[];return t&&n.push(t),r&&n.push(r),n}var Ii=e=>{var t,r,n,o,i,l,c,d,u,h,b;let{invert:f,toast:s,unstyled:v,interacting:p,setHeights:y,visibleToasts:m,heights:x,index:S,toasts:C,expanded:N,removeToast:M,defaultRichColors:F,closeButton:P,style:X,cancelButtonStyle:J,actionButtonStyle:ee,className:R="",descriptionClassName:me="",duration:te,position:ge,gap:re,loadingIcon:j,expandByDefault:q,classNames:k,icons:z,closeButtonAriaLabel:V="Close toast",pauseWhenPageIsHidden:I}=e,[L,B]=w.useState(null),[ne,_e]=w.useState(null),[K,mt]=w.useState(!1),[Le,Xe]=w.useState(!1),[Ve,gt]=w.useState(!1),[Yt,Ta]=w.useState(!1),[Sa,Jt]=w.useState(!1),[Ea,yt]=w.useState(0),[ja,Zt]=w.useState(0),Ue=w.useRef(s.duration||te||yr),Xt=w.useRef(null),Ee=w.useRef(null),Aa=S===0,_a=S+1<=m,le=s.type,Re=s.dismissible!==!1,Ra=s.className||"",Ia=s.descriptionClassName||"",et=w.useMemo(()=>x.findIndex(E=>E.toastId===s.id)||0,[x,s.id]),Pa=w.useMemo(()=>{var E;return(E=s.closeButton)!=null?E:P},[s.closeButton,P]),er=w.useMemo(()=>s.duration||te||yr,[s.duration,te]),wt=w.useRef(0),Ie=w.useRef(0),tr=w.useRef(0),Pe=w.useRef(null),[Na,Ma]=ge.split("-"),rr=w.useMemo(()=>x.reduce((E,O,$)=>$>=et?E:E+O.height,0),[x,et]),nr=mi(),Oa=s.invert||f,vt=le==="loading";Ie.current=w.useMemo(()=>et*re+rr,[et,rr]),w.useEffect(()=>{Ue.current=er},[er]),w.useEffect(()=>{mt(!0)},[]),w.useEffect(()=>{let E=Ee.current;if(E){let O=E.getBoundingClientRect().height;return Zt(O),y($=>[{toastId:s.id,height:O,position:s.position},...$]),()=>y($=>$.filter(ue=>
3ue.toastId!==s.id))}},[y,s.id]),w.useLayoutEffect(()=>{if(!K)return;let E=Ee.current,O=E.style.height;E.style.height="auto";let $=E.getBoundingClientRect().height;E.style.height=O,Zt($),y(ue=>ue.find(he=>he.toastId===s.id)?ue.map(he=>he.toastId===s.id?{...he,height:$}:he):[{toastId:s.id,height:$,position:s.position},...ue])},[K,s.title,s.description,y,s.id]);let be=w.useCallback(()=>{Xe(!0),yt(Ie.current),y(E=>E.filter(O=>O.toastId!==s.id)),setTimeout(()=>{M(s)},_i)},[s,M,y,Ie]);w.useEffect(()=>{if(s.promise&&le==="loading"||s.duration===1/0||s.type==="loading")return;let E;return N||p||I&&nr?(()=>{if(tr.current<wt.current){let O=new Date().getTime()-wt.current;Ue.current=Ue.current-O}tr.current=new Date().getTime()})():Ue.current!==1/0&&(wt.current=new Date().getTime(),E=setTimeout(()=>{var O;(O=s.onAutoClose)==null||O.call(s,s),be()},Ue.current)),()=>clearTimeout(E)},[N,p,s,le,I,nr,be]),w.useEffect(()=>{s.delete&&be()},[be,s.delete]);function Da(){var E,O,$;return z!=null&&z.loading?w.createElement("div",{className:fe(k?.loader,(E=s?.classNames)==null?void 0:E.loader,"sonner-loader"),"data-visible":le==="loading"},z.loading):j?w.createElement("div",{className:fe(k?.loader,(O=s?.classNames)==null?void 0:O.loader,"sonner-loader"),"data-visible":le==="loading"},j):w.createElement(ci,{className:fe(k?.loader,($=s?.classNames)==null?void 0:$.loader),visible:le==="loading"})}return w.createElement("li",{tabIndex:0,ref:Ee,className:fe(R,Ra,k?.toast,(t=s?.classNames)==null?void 0:t.toast,k?.default,k?.[le],(r=s?.classNames)==null?void 0:r[le]),"data-sonner-toast":"","data-rich-colors":(n=s.richColors)!=null?n:F,"data-styled":!(s.jsx||s.unstyled||v),"data-mounted":K,"data-promise":!!s.promise,"data-swiped":Sa,"data-removed":Le,"data-visible":_a,"data-y-position":Na,"data-x-position":Ma,"data-index":S,"data-front":Aa,"data-swiping":Ve,"data-dismissible":Re,"data-type":le,"data-invert":Oa,"data-swipe-out":Yt,"data-swipe-direction":ne,"data-expanded":!!(N||q&&K),style:{"--index":S,"--toasts-before":S,"--z-index":C.length-S,"--offset":`${Le?Ea:Ie.current}px`,"--initial-height":q?"auto":`${ja}px`,...X,...s.style},onDragEnd:()=>{gt(!1),B(null),Pe.current=null},onPointerDown:E=>{vt||!Re||(Xt.current=new Date,yt(Ie.current),E.target.setPointerCapture(E.pointerId),E.target.tagName!=="BUTTON"&&(gt(!0),Pe.current={x:E.clientX,y:E.clientY}))},onPointerUp:()=>{var E,O,$,ue;if(Yt||!Re)return;Pe.current=null;let he=Number(((E=Ee.current)==null?void 0:E.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),xe=Number(((O=Ee.current)==null?void 0:O.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),je=new Date().getTime()-(($=Xt.current)==null?void 0:$.getTime()),pe=L==="x"?he:xe,ke=Math.abs(pe)/je;if(Math.abs(pe)>=Ai||ke>.11){yt(Ie.current),(ue=s.onDismiss)==null||ue.call(s,s),_e(L==="x"?he>0?"right":"left":xe>0?"down":"up"),be(),Ta(!0),Jt(!1);return}gt(!1),B(null)},onPointerMove:E=>{var O,$,ue,he;if(!Pe.current||!Re||((O=window.getSelection())==null?void 0:O.toString().length)>0)return;let xe=E.clientY-Pe.current.y,je=E.clientX-Pe.current.x,pe=($=e.swipeDirections)!=null?$:Ri(ge);!L&&(Math.abs(je)>1||Math.abs(xe)>1)&&B(Math.abs(je)>Math.abs(xe)?"x":"y");let ke={x:0,y:0};L==="y"?(pe.includes("top")||pe.includes("bottom"))&&(pe.includes("top")&&xe<0||pe.includes("bottom")&&xe>0)&&(ke.y=xe):L==="x"&&(pe.includes("left")||pe.includes("right"))&&(pe.includes("left")&&je<0||pe.includes("right")&&je>0)&&(ke.x=je),(Math.abs(ke.x)>0||Math.abs(ke.y)>0)&&Jt(!0),(ue=Ee.current)==null||ue.style.setProperty("--swipe-amount-x",`${ke.x}px`),(he=Ee.current)==null||he.style.setProperty("--swipe-amount-y",`${ke.y}px`)}},Pa&&!s.jsx?w.createElement("button",{"aria-label":V,"data-disabled":vt,"data-close-button":!0,onClick:vt||!Re?()=>{}:()=>{var E;be(),(E=s.onDismiss)==null||E.call(s,s)},className:fe(k?.closeButton,(o=s?.classNames)==null?void 0:o.closeButton)},(i=z?.close)!=null?i:fi):null,s.jsx||g.isValidElement(s.title)?s.jsx?s.jsx:typeof s.title=="function"?s.title():s.title:w.createElement(w.Fragment,null,le||s.icon||s.promise?w.createElement("div",{"data-icon":"",className:fe(k?.icon,(l=s?.classNames)==null?void 0:l.icon)},s.promise||s.type==="loading"&&!s.icon?s.icon||Da():null,s.type!=="loading"?s.icon||z?.[le]||si(le):null):null,w.createElement("div",{"data-content":"",className:fe(k?.content,(c=s?.classNames)==null?void 0:c.content)},w.createElement("div",{"data-title":"",className:fe(k?.title,(d=s?.classNames)==null?void 0:d.title)},typeof s.title=="function"?s.title():s.title),s.description?w.createElement("div",{"data-description":"",className:fe(me,Ia,k?.description,(u=s?.classNames)==null?void 0:u.description)},typeof s.description=="function"?s.description():s.description):null),g.isValidElement(s.cancel)?s.cancel:s.cancel&&tt(s.cancel)?w.createElement("button",{"data-button":!0,"data-cancel":!0,style:s.cancelButtonStyle||J,onClick:E=>{var O,$;tt(s.cancel)&&Re&&(($=(O=s.cancel).onClick)==null||$.call(O,E),be())},className:fe(k?.cancelButton,(h=s?.classNames)==null?void 0:h.cancelButton)},s.cancel.label):null,g.isValidElement(s.action)?s.action:s.action&&tt(s.action)?w.createElement("button",{"data-button":!0,"data-action":!0,style:s.actionButtonStyle||ee,onClick:E=>{var O,$;tt(s.action)&&(($=(O=s.action).onClick)==null||$.call(O,E),!E.defaultPrevented&&be())},className:fe(k?.actionButton,(b=s?.classNames)==null?void 0:b.actionButton)},s.action.label):null))};function wr(){if(typeof window>"u"||typeof document>"u")return"ltr";let e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function Pi(e,t){let r={};return[e,t].forEach((n,o)=>{let i=o===1,l=i?"--mobile-offset":"--offset",c=i?Si:Ti;function d(u){["top","right","bottom","left"].forEach(h=>{r[`${l}-${h}`]=typeof u=="number"?`${u}px`:u})}typeof n=="number"||typeof n=="string"?d(n):typeof n=="object"?["top","right","bottom","left"].forEach(u=>{n[u]===void 0?r[`${l}-${u}`]=c:r[`${l}-${u}`]=typeof n[u]=="number"?`${n[u]}px`:n[u]}):d(c)}),r}var Ni=g.forwardRef(function(e,t){let{invert:r,position:n="bottom-right",hotkey:o=["altKey","KeyT"],expand:i,closeButton:l,className:c,offset:d,mobileOffset:u,theme:h="light",richColors:b,duration:f,style:s,visibleToasts:v=Ci,toastOptions:p,dir:y=wr(),gap:m=ji,loadingIcon:x,icons:S,containerAriaLabel:C="Notifications",pauseWhenPageIsHidden:N}=e,[M,F]=w.useState([]),P=w.useMemo(()=>Array.from(new Set([n].concat(M.filter(I=>I.position).map(I=>I.position)))),[M,n]),[X,J]=w.useState([]),[ee,R]=w.useState(!1),[me,te]=w.useState(!1),[ge,re]=w.useState(h!=="system"?h:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dar
3k":"light"),j=w.useRef(null),q=o.join("+").replace(/Key/g,"").replace(/Digit/g,""),k=w.useRef(null),z=w.useRef(!1),V=w.useCallback(I=>{F(L=>{var B;return(B=L.find(ne=>ne.id===I.id))!=null&&B.delete||ae.dismiss(I.id),L.filter(({id:ne})=>ne!==I.id)})},[]);return w.useEffect(()=>ae.subscribe(I=>{if(I.dismiss){F(L=>L.map(B=>B.id===I.id?{...B,delete:!0}:B));return}setTimeout(()=>{Fa.flushSync(()=>{F(L=>{let B=L.findIndex(ne=>ne.id===I.id);return B!==-1?[...L.slice(0,B),{...L[B],...I},...L.slice(B+1)]:[I,...L]})})})}),[]),w.useEffect(()=>{if(h!=="system"){re(h);return}if(h==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?re("dark"):re("light")),typeof window>"u")return;let I=window.matchMedia("(prefers-color-scheme: dark)");try{I.addEventListener("change",({matches:L})=>{re(L?"dark":"light")})}catch{I.addListener(({matches:B})=>{try{re(B?"dark":"light")}catch(ne){console.error(ne)}})}},[h]),w.useEffect(()=>{M.length<=1&&R(!1)},[M]),w.useEffect(()=>{let I=L=>{var B,ne;o.every(_e=>L[_e]||L.code===_e)&&(R(!0),(B=j.current)==null||B.focus()),L.code==="Escape"&&(document.activeElement===j.current||(ne=j.current)!=null&&ne.contains(document.activeElement))&&R(!1)};return document.addEventListener("keydown",I),()=>document.removeEventListener("keydown",I)},[o]),w.useEffect(()=>{if(j.current)return()=>{k.current&&(k.current.focus({preventScroll:!0}),k.current=null,z.current=!1)}},[j.current]),w.createElement("section",{ref:t,"aria-label":`${C} ${q}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},P.map((I,L)=>{var B;let[ne,_e]=I.split("-");return M.length?w.createElement("ol",{key:I,dir:y==="auto"?wr():y,tabIndex:-1,ref:j,className:c,"data-sonner-toaster":!0,"data-theme":ge,"data-y-position":ne,"data-lifted":ee&&M.length>1&&!i,"data-x-position":_e,style:{"--front-toast-height":`${((B=X[0])==null?void 0:B.height)||0}px`,"--width":`${Ei}px`,"--gap":`${m}px`,...s,...Pi(d,u)},onBlur:K=>{z.current&&!K.currentTarget.contains(K.relatedTarget)&&(z.current=!1,k.current&&(k.current.focus({preventScroll:!0}),k.current=null))},onFocus:K=>{K.target instanceof HTMLElement&&K.target.dataset.dismissible==="false"||z.current||(z.current=!0,k.current=K.relatedTarget)},onMouseEnter:()=>R(!0),onMouseMove:()=>R(!0),onMouseLeave:()=>{me||R(!1)},onDragEnd:()=>R(!1),onPointerDown:K=>{K.target instanceof HTMLElement&&K.target.dataset.dismissible==="false"||te(!0)},onPointerUp:()=>te(!1)},M.filter(K=>!K.position&&L===0||K.position===I).map((K,mt)=>{var Le,Xe;return w.createElement(Ii,{key:K.id,icons:S,index:mt,toast:K,defaultRichColors:b,duration:(Le=p?.duration)!=null?Le:f,className:p?.className,descriptionClassName:p?.descriptionClassName,invert:r,visibleToasts:v,closeButton:(Xe=p?.closeButton)!=null?Xe:l,interacting:me,position:I,style:p?.style,unstyled:p?.unstyled,classNames:p?.classNames,cancelButtonStyle:p?.cancelButtonStyle,actionButtonStyle:p?.actionButtonStyle,removeToast:V,toasts:M.filter(Ve=>Ve.position==K.position),heights:X.filter(Ve=>Ve.position==K.position),setHeights:J,expandByDefault:i,gap:m,loadingIcon:x,expanded:ee,pauseWhenPageIsHidden:N,swipeDirections:e.swipeDirections})})):null}))});const Mi=({...e})=>{const{theme:t="system"}=ii();return a.jsx(Ni,{theme:t,className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...e})},Oi=za,Di=g.forwardRef(({className:e,sideOffset:t=4,...r},n)=>a.jsx(Jr,{ref:n,sideOffset:t,className:D("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:sli
3de-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...r}));Di.displayName=Jr.displayName;var Qe=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Ae=typeof window>"u"||"Deno"in globalThis;function oe(){}function Fi(e,t){return typeof e=="function"?e(t):e}function _t(e){return typeof e=="number"&&e>=0&&e!==1/0}function Mn(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Se(e,t){return typeof e=="function"?e(t):e}function de(e,t){return typeof e=="function"?e(t):e}function vr(e,t){const{type:r="all",exact:n,fetchStatus:o,predicate:i,queryKey:l,stale:c}=e;if(l){if(n){if(t.queryHash!==qt(l,t.options))return!1}else if(!He(t.queryKey,l))return!1}if(r!=="all"){const d=t.isActive();if(r==="active"&&!d||r==="inactive"&&d)return!1}return!(typeof c=="boolean"&&t.isStale()!==c||o&&o!==t.state.fetchStatus||i&&!i(t))}function br(e,t){const{exact:r,status:n,predicate:o,mutationKey:i}=e;if(i){if(!t.options.mutationKey)return!1;if(r){if(Ge(t.options.mutationKey)!==Ge(i))return!1}else if(!He(t.options.mutationKey,i))return!1}return!(n&&t.state.status!==n||o&&!o(t))}function qt(e,t){return(t?.queryKeyHashFn||Ge)(e)}function Ge(e){return JSON.stringify(e,(t,r)=>It(r)?Object.keys(r).sort().reduce((n,o)=>(n[o]=r[o],n),{}):r)}function He(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(r=>He(e[r],t[r])):!1}function On(e,t){if(e===t)return e;const r=xr(e)&&xr(t);if(r||It(e)&&It(t)){const n=r?e:Object.keys(e),o=n.length,i=r?t:Object.keys(t),l=i.length,c=r?[]:{},d=new Set(n);let u=0;for(let h=0;h<l;h++){const b=r?h:i[h];(!r&&d.has(b)||r)&&e[b]===void 0&&t[b]===void 0?(c[b]=void 0,u++):(c[b]=On(e[b],t[b]),c[b]===e[b]&&e[b]!==void 0&&u++)}return o===l&&u===o?e:c}return t}function Rt(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(const r in e)if(e[r]!==t[r])return!1;return!0}function xr(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function It(e){if(!kr(e))return!1;const t=e.constructor;if(t===void 0)return!0;const r=t.prototype;return!(!kr(r)||!r.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function kr(e){return Object.prototype.toString.call(e)==="[object Object]"}function Li(e){return new Promise(t=>{setTimeout(t,e)})}function Pt(e,t,r){return typeof r.structuralSharing=="function"?r.structuralSharing(e,t):r.structuralSharing!==!1?On(e,t):t}function Vi(e,t,r=0){const n=[...e,t];return r&&n.length>r?n.slice(1):n}function Ui(e,t,r=0){const n=[t,...e];return r&&n.length>r?n.slice(0,-1):n}var zt=Symbol();function Dn(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===zt?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function $i(e,t){return typeof e=="function"?e(...t):!!e}var qi=class extends Qe{#t;#e;#r;constructor(){super(),this.#r=e=>{if(!Ae&&window.addEventListener){const t=()=>e();return window.addEventListener("visibilitychange",t,!1),()=>{window.removeEventListener("visibilitychange",t)}}}}onSubscribe(){this.#e||this.setEventListener(this.#r)}onUnsubscribe(){this.hasListeners()||(this.#e?.(),this.#e=void 0)}setEventListener(e){this.#r=e,this.#e?.(),this.#e=e(t=>{typeof t=="boolean"?this.setFocused(t):this.onFocus()})}setFocused(e){this.#t!==e&&(this.#t=e,this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#t=="boolean"?this.#t:globalThis.document?.visibilityState!=="hidden"}},Bt=new qi,zi=class extends Qe{#t=!0;#e;#r;constructor(){super(),this.#r=e=>{if(!Ae&&window.addEventListener){const t=()=>e(!0),r=()=>e(!1);return window.addEventListener("online",t,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",r)}}}}onSubscribe(){this.#e||this.setEventListener(this.#r)}onUnsubscribe(){this.hasListeners()||(this.#e?.(),this.#e=void 0)}setEventListener(e){this.#r=e,this.#e?.(),this.#e=e(this.setOnline.bind(this))}
vendor: 11,362 bytes, line 3
3setOnline(e){this.#t!==e&&(this.#t=e,this.listeners.forEach(r=>{r(e)}))}isOnline(){return this.#t}},dt=new zi;function Nt(){let e,t;const r=new Promise((o,i)=>{e=o,t=i});r.status="pending",r.catch(()=>{});function n(o){Object.assign(r,o),delete r.resolve,delete r.reject}return r.resolve=o=>{n({status:"fulfilled",value:o}),e(o)},r.reject=o=>{n({status:"rejected",reason:o}),t(o)},r}function Bi(e){return Math.min(1e3*2**e,3e4)}function Fn(e){return(e??"online")==="online"?dt.isOnline():!0}var Ln=class extends Error{constructor(e){super("CancelledError"),this.revert=e?.revert,this.silent=e?.silent}};function Ct(e){return e instanceof Ln}function Vn(e){let t=!1,r=0,n=!1,o;const i=Nt(),l=p=>{n||(f(new Ln(p)),e.abort?.())},c=()=>{t=!0},d=()=>{t=!1},u=()=>Bt.isFocused()&&(e.networkMode==="always"||dt.isOnline())&&e.canRun(),h=()=>Fn(e.networkMode)&&e.canRun(),b=p=>{n||(n=!0,e.onSuccess?.(p),o?.(),i.resolve(p))},f=p=>{n||(n=!0,e.onError?.(p),o?.(),i.reject(p))},s=()=>new Promise(p=>{o=y=>{(n||u())&&p(y)},e.onPause?.()}).then(()=>{o=void 0,n||e.onContinue?.()}),v=()=>{if(n)return;let p;const y=r===0?e.initialPromise:void 0;try{p=y??e.fn()}catch(m){p=Promise.reject(m)}Promise.resolve(p).then(b).catch(m=>{if(n)return;const x=e.retry??(Ae?0:3),S=e.retryDelay??Bi,C=typeof S=="function"?S(r,m):S,N=x===!0||typeof x=="number"&&r<x||typeof x=="function"&&x(r,m);if(t||!N){f(m);return}r++,e.onFail?.(r,m),Li(C).then(()=>u()?void 0:s()).then(()=>{t?f(m):v()})})};return{promise:i,cancel:l,continue:()=>(o?.(),i),cancelRetry:c,continueRetry:d,canStart:h,start:()=>(h()?v():s().then(v),i)}}var Ki=e=>setTimeout(e,0);function Gi(){let e=[],t=0,r=c=>{c()},n=c=>{c()},o=Ki;const i=c=>{t?e.push(c):o(()=>{r(c)})},l=()=>{const c=e;e=[],c.length&&o(()=>{n(()=>{c.forEach(d=>{r(d)})})})};return{batch:c=>{let d;t++;try{d=c()}finally{t--,t||l()}return d},batchCalls:c=>(...d)=>{i(()=>{c(...d)})},schedule:i,setNotifyFunction:c=>{r=c},setBatchNotifyFunction:c=>{n=c},setScheduler:c=>{o=c}}}var Z=Gi(),Un=class{#t;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),_t(this.gcTime)&&(this.#t=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Ae?1/0:300*1e3))}clearGcTimeout(){this.#t&&(clearTimeout(this.#t),this.#t=void 0)}},Hi=class extends Un{#t;#e;#r;#n;#a;#s;#i;constructor(e){super(),this.#i=!1,this.#s=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#n=e.client,this.#r=this.#n.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Wi(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#a?.promise}setOptions(e){this.options={...this.#s,...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.#r.remove(this)}setData(e,t){const r=Pt(this.state.data,e,this.options);return this.#o({data:r,type:"success",dataUpdatedAt:t?.updatedAt,manual:t?.manual}),r}setState(e,t){this.#o({type:"setState",state:e,setStateOptions:t})}cancel(e){const t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(oe).catch(oe):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#t)}isActive(){return this.observers.some(e=>de(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===zt||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>Se(e.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e==="static"?!1:this.state.isInvalidated?!0:!Mn(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(t=>t.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(t=>t.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#i?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#o({type:"invalidate"})}fetch(e,t){if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){const d=this.observers.find(u=>u.options.queryFn);d&&this.setOptions(d.options)}const r=new AbortController,n=d=>{Object.defineProperty(d,"signal",{enumerable:!0,get:()=>(this.#i=!0,r.signal)})},o=()=>{const d=Dn(this.options,t),h=(()=>{const b={client:this.#n,queryKey:this.queryKey,meta:this.meta};return n(b),b})();return this.#i=!1,this.options.persister?this.options.persister(d,h,this):d(h)},l=(()=>{const d={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#n,state:this.state,fetchFn:o};return n(d),d})();this.options.behavior?.onFetch(l,this),this.#e=this.state,(this.state.fetchStatus==="idle"||this.state.fetchMeta!==l.fetchOptions?.meta)&&this.#o({type:"fetch",meta:l.fetchOptions?.meta});const c=d=>{Ct(d)&&d.silent||this.#o({type:"error",error:d}),Ct(d)||(this.#r.config.onError?.(d,this),this.#r.config.onSettled?.(this.state.data,d,this)),this.scheduleGc()};return this.#a=Vn({initialPromise:t?.initialPromise,fn:l.fetchFn,abort:r.abort.bind(r),onSuccess:d=>{if(d===void 0){c(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(d)}catch(u){c(u);return}this.#r.config.onSuccess?.(d,this),this.#r.config.onSettled?.(d,this.state.error,this),this.scheduleGc()},onError:c,onFail:(d,u)=>{this.#o({type:"failed",failureCount:d,error:u})},onPause:()=>{this.#o({type:"pause"})},onContinue:()=>{this.#o({type:"continue"})},retry:l.options.retry,retryDelay:l.options.retryDelay,networkMode:l.options.networkMode,canRun:()=>!0}),this.#a.start()}#o(e){const t=r=>{switch(e.type){case"failed":return{...r,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...$n(r.data,this.options),fetchMeta:e.meta??null};case"success":return this.#e=void 0,{...r,data:e.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const n=e.error;return Ct(n)&&n.revert&&this.#e?{...this.#e,fetchStatus:"idle"}:{...r,error:n,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:n,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...e.state}}};this.state=t(this.state),Z.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),this.#r.notify({query:this,type:"updated",action:e})})}};function $n(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Fn(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function Wi(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,r=t!==void 0,n=r?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:r?n??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}var Qi=class extends Qe{constructor(e={}){super(),this.config=e,this.#t=new Map}#t;build(e,t,r){const n=t.queryKey,o=t.queryHash??qt(n,t);let i=this.get(o);return i||(i=new Hi({client:e,queryKey:n,queryHash:o,options:e.defaultQueryOptions(t),state:r,defaultOptions:e.getQueryDefaults(n)}),this.add(i)),i}add(e){this.#t.has(e.queryHash)||(this.#t.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const t=this.#t.get(e.queryHash);t&&(e.destroy(),t===e&&this.#t.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){Z.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#t.get(e)}getAll(){return[...this.#t.values()]}find(e){const t={exact:!0,...e};return this.getAll().find(r=>vr(t,r))}findAll(e={}){const t=this.getAll();return Object.keys(e).length>0?t.filter(r=>vr(e,r)):t}notify(e){Z.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){Z.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){Z.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Yi=class extends Un{#t;#e;#r;constructor(e){super(),this.mutationId=e.mutationId,this.#e=e.mutationCache,this.#t=[],this.state=e.state||Ji(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#e.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#e.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status==="pending"?this.scheduleGc():this.#e.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){const t=()=>{this.#n({type:"continue"})};this.#r=Vn({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(new Error("No mutationFn found")),onFail:(o,i)=>{this.#n({type:"failed",failureCount:o,error:i})},onPause:()=>{this.#n({type:"pause"})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#e.canRun(this)});const r=this.state.status==="pending",n=!this.#r.canStart();try{if(r)t();else{this.#n({type:"pending",variables:e,isPaused:n}),await this.#e.config.onMutate?.(e,this);const i=await this.options.onMutate?.(e);i!==this.state.context&&this.#n({type:"pending",context:i,variables:e,isPaused:n})}const o=await this.#r.start();return await this.#e.config.onSuccess?.(o,e,this.state.context,this),await this.options.onSuccess?.(o,e,this.state.context),await this.#e.config.onSettled?.(o,null,this.state.variables,this.state.context,this),await this.options.onSettled?.(o,null,e,this.state.context),this.#n({type:"success",data:o}),o}catch(o){try{throw await this.#e.config.onError?.(o,e,this.state.context,this),await this.options.onError?.(o,e,this.state.context),await this.#e.config.onSettled?.(void 0,o,this.state.variables,this.state.context,this),await this.options.onSettled?.(void 0,o,e,this.state.context),o}finally{this.#n({type:"error",error:o})}}finally{this.#e.runNext(this)}}#n(e){const t=r=>{switch(e.type){case"failed":return{...r,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};
vendor: 14,715 bytes, line 3
3case"pending":return{...r,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...r,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:e.error,failureCount:r.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=t(this.state),Z.batch(()=>{this.#t.forEach(r=>{r.onMutationUpdate(e)}),this.#e.notify({mutation:this,type:"updated",action:e})})}};function Ji(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Zi=class extends Qe{constructor(e={}){super(),this.config=e,this.#t=new Set,this.#e=new Map,this.#r=0}#t;#e;#r;build(e,t,r){const n=new Yi({mutationCache:this,mutationId:++this.#r,options:e.defaultMutationOptions(t),state:r});return this.add(n),n}add(e){this.#t.add(e);const t=rt(e);if(typeof t=="string"){const r=this.#e.get(t);r?r.push(e):this.#e.set(t,[e])}this.notify({type:"added",mutation:e})}remove(e){if(this.#t.delete(e)){const t=rt(e);if(typeof t=="string"){const r=this.#e.get(t);if(r)if(r.length>1){const n=r.indexOf(e);n!==-1&&r.splice(n,1)}else r[0]===e&&this.#e.delete(t)}}this.notify({type:"removed",mutation:e})}canRun(e){const t=rt(e);if(typeof t=="string"){const n=this.#e.get(t)?.find(o=>o.state.status==="pending");return!n||n===e}else return!0}runNext(e){const t=rt(e);return typeof t=="string"?this.#e.get(t)?.find(n=>n!==e&&n.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){Z.batch(()=>{this.#t.forEach(e=>{this.notify({type:"removed",mutation:e})}),this.#t.clear(),this.#e.clear()})}getAll(){return Array.from(this.#t)}find(e){const t={exact:!0,...e};return this.getAll().find(r=>br(t,r))}findAll(e={}){return this.getAll().filter(t=>br(e,t))}notify(e){Z.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){const e=this.getAll().filter(t=>t.state.isPaused);return Z.batch(()=>Promise.all(e.map(t=>t.continue().catch(oe))))}};function rt(e){return e.options.scope?.id}function Cr(e){return{onFetch:(t,r)=>{const n=t.options,o=t.fetchOptions?.meta?.fetchMore?.direction,i=t.state.data?.pages||[],l=t.state.data?.pageParams||[];let c={pages:[],pageParams:[]},d=0;const u=async()=>{let h=!1;const b=v=>{Object.defineProperty(v,"signal",{enumerable:!0,get:()=>(t.signal.aborted?h=!0:t.signal.addEventListener("abort",()=>{h=!0}),t.signal)})},f=Dn(t.options,t.fetchOptions),s=async(v,p,y)=>{if(h)return Promise.reject();if(p==null&&v.pages.length)return Promise.resolve(v);const x=(()=>{const M={client:t.client,queryKey:t.queryKey,pageParam:p,direction:y?"backward":"forward",meta:t.options.meta};return b(M),M})(),S=await f(x),{maxPages:C}=t.options,N=y?Ui:Vi;return{pages:N(v.pages,S,C),pageParams:N(v.pageParams,p,C)}};if(o&&i.length){const v=o==="backward",p=v?Xi:Tr,y={pages:i,pageParams:l},m=p(n,y);c=await s(y,m,v)}else{const v=e??i.length;do{const p=d===0?l[0]??n.initialPageParam:Tr(n,c);if(d>0&&p==null)break;c=await s(c,p),d++}while(d<v)}return c};t.options.persister?t.fetchFn=()=>t.options.persister?.(u,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},r):t.fetchFn=u}}}function Tr(e,{pages:t,pageParams:r}){const n=t.length-1;return t.length>0?e.getNextPageParam(t[n],t,r[n],r):void 0}function Xi(e,{pages:t,pageParams:r}){return t.length>0?e.getPreviousPageParam?.(t[0],t,r[0],r):void 0}var es=class{#t;#e;#r;#n;#a;#s;#i;#o;constructor(e={}){this.#t=e.queryCache||new Qi,this.#e=e.mutationCache||new Zi,this.#r=e.defaultOptions||{},this.#n=new Map,this.#a=new Map,this.#s=0}mount(){this.#s++,this.#s===1&&(this.#i=Bt.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#t.onFocus())}),this.#o=dt.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#t.onOnline())}))}unmount(){this.#s--,this.#s===0&&(this.#i?.(),this.#i=void 0,this.#o?.(),this.#o=void 0)}isFetching(e){return this.#t.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#e.findAll({...e,status:"pending"}).length}getQueryData(e){const t=this.defaultQueryOptions({queryKey:e});return this.#t.get(t.queryHash)?.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),r=this.#t.build(this,t),n=r.state.data;return n===void 0?this.fetchQuery(e):(e.revalidateIfStale&&r.isStaleByTime(Se(t.staleTime,r))&&this.prefetchQuery(t),Promise.resolve(n))}getQueriesData(e){return this.#t.findAll(e).map(({queryKey:t,state:r})=>{const n=r.data;return[t,n]})}setQueryData(e,t,r){const n=this.defaultQueryOptions({queryKey:e}),i=this.#t.get(n.queryHash)?.state.data,l=Fi(t,i);if(l!==void 0)return this.#t.build(this,n).setData(l,{...r,manual:!0})}setQueriesData(e,t,r){return Z.batch(()=>this.#t.findAll(e).map(({queryKey:n})=>[n,this.setQueryData(n,t,r)]))}getQueryState(e){const t=this.defaultQueryOptions({queryKey:e});return this.#t.get(t.queryHash)?.state}removeQueries(e){const t=this.#t;Z.batch(()=>{t.findAll(e).forEach(r=>{t.remove(r)})})}resetQueries(e,t){const r=this.#t;return Z.batch(()=>(r.findAll(e).forEach(n=>{n.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const r={revert:!0,...t},n=Z.batch(()=>this.#t.findAll(e).map(o=>o.cancel(r)));return Promise.all(n).then(oe).catch(oe)}invalidateQueries(e,t={}){return Z.batch(()=>(this.#t.findAll(e).forEach(r=>{r.invalidate()}),e?.refetchType==="none"?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??"active"},t)))}refetchQueries(e,t={}){const r={...t,cancelRefetch:t.cancelRefetch??!0},n=Z.batch(()=>this.#t.findAll(e).filter(o=>!o.isDisabled()&&!o.isStatic()).map(o=>{let i=o.fetch(void 0,r);return r.throwOnError||(i=i.catch(oe)),o.state.fetchStatus==="paused"?Promise.resolve():i}));return Promise.all(n).then(oe)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const r=this.#t.build(this,t);return r.isStaleByTime(Se(t.staleTime,r))?r.fetch(t):Promise.resolve(r.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(oe).catch(oe)}fetchInfiniteQuery(e){return e.behavior=Cr(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(oe).catch(oe)}ensureInfiniteQueryData(e){return e.behavior=Cr(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return dt.isOnline()?this.#e.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#t}getMutationCache(){return this.#e}getDefaultOptions(){return this.#r}setDefaultOptions(e){this.#r=e}setQueryDefaults(e,t){this.#n.set(Ge(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...this.#n.values()],r={};return t.forEach(n=>{He(e,n.queryKey)&&Object.assign(r,n.defaultOptions)}),r}setMutationDefaults(e,t){this.#a.set(Ge(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...this.#a.values()],r={};return t.forEach(n=>{He(e,n.mutationKey)&&Object.assign(r,n.defaultOptions)}),r}defaultQueryOptions(e){if(e._defaulted)return e;const t={...this.#r.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=qt(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===zt&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#r.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#t.clear(),this.#e.clear()}},ts=class extends Qe{constructor(e,t){super(),this.options=t,this.#t=e,this.#o=null,this.#i=Nt(),this.options.experimental_prefetchInRender||this.#i.reject(new Error("experimental_prefetchInRender feature flag is not enabled")),this.bindMethods(),this.setOptions(t)}#t;#e=void 0;#r=void 0;#n=void 0;#a;#s;#i;#o;#m;#h;#p;#c;#d;#l;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#e.addObserver(this),Sr(this.#e,this.options)?this.#u():this.updateResult(),this.#v())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Mt(this.#e,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Mt(this.#e,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#e.removeObserver(this)}setOptions(e){const t=this.options,r=this.#e;if(this.options=this.#t.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof de(this.options.enabled,this.#e)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#k(),this.#e.setOptions(this.options),t._defaulted&&!Rt(this.options,t)&&this.#t.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#e,observer:this});const n=this.hasListeners();n&&Er(this.#e,r,this.options,t)&&this.#u(),this.updateResult(),n&&(this.#e!==r||de(this.options.enabled,this.#e)!==de(t.enabled,this.#e)||Se(this.options.staleTime,this.#e)!==Se(t.staleTime,this.#e))&&this.#g();const o=this.#y();n&&(this.#e!==r||de(this.options.enabled,this.#e)!==de(t.enabled,this.#e)||o!==this.#l)&&this.#w(o)}getOptimisticResult(e){const t=this.#t.getQueryCache().build(this.#t,e),r=this.createResult(t,e);return ns(this,r)&&(this.#n=r,this.#s=this.options,this.#a=this.#e.state),r}getCurrentResult(){return this.#n}trackResult(e,t){return new Proxy(e,{get:(r,n)=>(this.trackProp(n),t?.(n),Reflect.get(r,n))})}trackProp(e){this.#f.add(e)}getCurrentQuery(){return this.#e}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const t=this.#t.defaultQueryOptions(e),r=this.#t.getQueryCache().build(this.#t,t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){return this.#u({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#n))}#u(e){this.#k();let t=this.#e.fetch(this.options,e);return e?.throwOnError||(t=t.catch(oe)),t}#g(){this.#b();const e=Se(this.options.staleTime,this.#e);if(Ae||this.#n.isStale||!_t(e))return;const r=Mn(this.#n.dataUpdatedAt,e)+1;this.#c=setTimeout(()=>{this.#n.isStale||this.updateResult()},r)}#y(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#e):this.options.refetchInterval)??!1}#w(e){this.#x(),this.#l=e,!(Ae||de(this.options.enabled,this.#e)===!1||!_t(this.#l)||this.#l===0)&&(this.#d=setInterval(()=>{(this.options.refetchIntervalInBackground||Bt.isFocused())&&this.#u()},this.#l))}#v(){this.#g(),this.#w(this.#y())}#b(){this.#c&&(clearTimeout(this.#c),this.#c=void 0)}#x(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}createResult(e,t){const r=this.#e,n=this.options,o=this.#n,i=this.#a,l=this.#s,d=e!==r?e.state:this.#r,{state:u}=e;let h={...u},b=!1,f;if(t._optimisticResults){const P=this.hasListeners(),X=!P&&Sr(e,t),J=P&&Er(e,r,t,n);(X||J)&&(h={...h,...$n(u.data,e.options)}),t._optimisticResults==="isRestoring"&&(h.fetchStatus="idle")}let{error:s,errorUpdatedAt:v,status:p}=h;f=h.data;let y=!1;if(t.placeholderData!==void 0&&f===void 0&&p==="pending"){let P;o?.isPlaceholderData&&t.placeholderData===l?.placeholderData?(P=o.data,y=!0):P=typeof t.placeholderData=="function"?t.placeholderData(this.#p?.state.data,this.#p):t.placeholderData,P!==void 0&&(p="success",f=Pt(o?.data,P,t),b=!0)}if(t.select&&f!==void 0&&!y)if(o&&f===i?.data&&t.select===this.#m)f=this.#h;else try{this.#m=t.select,f=t.select(f),f=Pt(o?.data,f,t),this.#h=f,this.#o=null}catch(P){this.#o=P}this.#o&&(s=this.#o,f=this.#h,v=Date.now(),p="error");const m=h.fetchStatus==="fetching",x=p==="pending",S=p==="error",C=x&&m,N=f!==void 0,F={status:p,fetchStatus:h.fetchStatus,isPending:x,isSuccess:p==="success",isError:S,isInitialLoading:C,isLoading:C,data:f,dataUpdatedAt:h.dataUpdatedAt,error:s,errorUpdatedAt:v,failureCount:h.fetchFailureCount,failureReason:h.fetchFailureReason,errorUpdateCount:h.errorUpdateCount,isFetched:h.dataUpdateCount>0||h.errorUpdateCount>0,isFetchedAfterMount:h.dataUpdateCount>d.dataUpdateCount||h.errorUpdateCount>d.errorUpdateCount,isFetching:m,isRefetching:m&&!x,isLoadingError:S&&!N,isPaused:h.fetchStatus==="paused",isPlaceholderData:b,isRefetchError:S&&N,isStale:Kt(e,t),refetch:this.refetch,promise:this.#i,isEnabled:de(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const P=ee=>{F.status==="error"?ee.reject(F.error):F.data!==void 0&&ee.resolve(F.data)},X=()=>{const ee=this.#i=F.promise=Nt();P(ee)},J=this.#i;switch(J.status){case"pending":e.queryHash===r.queryHash&&P(J);break;case"fulfilled":(F.status==="error"||F.data!==J.value)&&X();break;case"rejected":(F.status!=="error"||F.error!==J.reason)&&X();break}}return F}updateResult(){const e=this.#n,t=this.createResult(this.#e,this.options);if(this.#a=this.#e.state,this.#s=this.options,this.#a.data!==void 0&&(this.#p=this.#e),Rt(t,e))return;this.#n=t;const r=()=>{if(!e)return!0;const{notifyOnChangeProps:n}=this.options,o=typeof n=="function"?n():n;if(o==="all"||!o&&!this.#f.size)return!0;const i=new Set(o??this.#f);return this.options.throwOnError&&i.add("error"),Object.keys(this.#n).some(l=>{const c=l;return this.#n[c]!==e[c]&&i.has(c)})};this.#C({listeners:r()})}#k(){const e=this.#t.getQueryCache().build(this.#t,this.options);if(e===this.#e)return;const t=this.#e;this.#e=e,this.#r=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#v()}#C(e){Z.batch(()=>{e.listeners&&this.listeners.forEach(t=>{t(this.#n)}),this.#t.getQueryCache().notify({query:this.#e,type:"observerResultsUpdated"})})}};function rs(e,t){return de(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&t.retryOnMount===!1)}function Sr(e,t){return rs(e,t)||e.state.data!==void 0&&Mt(e,t,t.refetchOnMount)}function Mt(e,t,r){if(de(t.enabled,e)!==!1&&Se(t.staleTime,e)!=="static"){const n=typeof r=="function"?r(e):r;return n==="always"||n!==!1&&Kt(e,t)}return!1}function Er(e,t,r,n){return(e!==t||de(n.enabled,e)===!1)&&(!r.suspense||e.state.status!=="error")&&Kt(e,r)}function Kt(e,t){return de(t.enabled,e)!==!1&&e.isStaleByTime(Se(t.staleTime,e))}function ns(e,t){return!Rt(e.getCurrentResult(),t)}var qn=g.createContext(void 0),as=e=>{const t=g.useContext(qn);if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},os=({client:e,children:t})=>(g.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),a.jsx(qn.Provider,{value:e,children:t})),zn=g.createContext(!1),is=()=>g.useContext(zn);zn.Provider;function ss(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}
3var ls=g.createContext(ss()),cs=()=>g.useContext(ls),ds=(e,t)=>{(e.suspense||e.throwOnError||e.experimental_prefetchInRender)&&(t.isReset()||(e.retryOnMount=!1))},us=e=>{g.useEffect(()=>{e.clearReset()},[e])},hs=({result:e,errorResetBoundary:t,throwOnError:r,query:n,suspense:o})=>e.isError&&!t.isReset()&&!e.isFetching&&n&&(o&&e.data===void 0||$i(r,[e.error,n])),ps=e=>{if(e.suspense){const t=n=>n==="static"?n:Math.max(n??1e3,1e3),r=e.staleTime;e.staleTime=typeof r=="function"?(...n)=>t(r(...n)):t(r),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},fs=(e,t)=>e.isLoading&&e.isFetching&&!t,ms=(e,t)=>e?.suspense&&t.isPending,jr=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function gs(e,t,r){const n=is(),o=cs(),i=as(),l=i.defaultQueryOptions(e);i.getDefaultOptions().queries?._experimental_beforeQuery?.(l),l._optimisticResults=n?"isRestoring":"optimistic",ps(l),ds(l,o),us(o);const c=!i.getQueryCache().get(l.queryHash),[d]=g.useState(()=>new t(i,l)),u=d.getOptimisticResult(l),h=!n&&e.subscribed!==!1;if(g.useSyncExternalStore(g.useCallback(b=>{const f=h?d.subscribe(Z.batchCalls(b)):oe;return d.updateResult(),f},[d,h]),()=>d.getCurrentResult(),()=>d.getCurrentResult()),g.useEffect(()=>{d.setOptions(l)},[l,d]),ms(l,u))throw jr(l,d,o);if(hs({result:u,errorResetBoundary:o,throwOnError:l.throwOnError,query:i.getQueryCache().get(l.queryHash),suspense:l.suspense}))throw u.error;return i.getDefaultOptions().queries?._experimental_afterQuery?.(l,u),l.experimental_prefetchInRender&&!Ae&&fs(u,n)&&(c?jr(l,d,o):i.getQueryCache().get(l.queryHash)?.promise)?.catch(oe).finally(()=>{d.updateResult()}),l.notifyOnChangeProps?u:d.trackResult(u)}function ys(e,t){return gs(e,ts)}const ws="https://fjepmkoonpzmlddpeufe.supabase.co",vs="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZqZXBta29vbnB6bWxkZHBldWZlIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA5MjU3OTIsImV4cCI6MjA4NjUwMTc5Mn0.Y5V3ssCBz-RQQxUlZJJdZCZAR7DbbCDsOo5aYLr1O3o",bs=()=>{if(typeof window<"u")return localStorage},Ot={auth:{persistSession:!0,autoRefreshToken:!0}},Ar=bs();Ar&&Ot.auth&&(Ot.auth.storage=Ar);const se=io(ws,vs,Ot);var xs="authorization_response",ks="/~oauth/initiate",Cs=["https://oauth.lovable.app","https://lovable.dev"],Ts="lovable://oauth-callback",Ss="http://127.0.0.1/iframe-oauth/callback",Es=500,js=12e4;function As(e){let t;const r=new Promise(i=>{t=i}),n=i=>{if(!e.some(d=>i.origin===d))return;const c=i.data;!c||typeof c!="object"||c.type===xs&&t(c.response)},o=()=>{window.removeEventListener("message",n)};return window.addEventListener("message",n),{cleanup:o,messagePromise:r}}function _s(e){const t=window.screenX!==0||window.screenY!==0||!e,r=t?window.outerWidth*.5:window.screen.width*.5,n=t?window.outerHeight*.5:window.screen.height*.5,o=t?window.screenX+(window.outerWidth-r)/2:(window.screen.width-r)/2,i=t?window.screenY+(window.outerHeight-n)/2:(window.screen.height-n)/2;return{width:r,height:n,left:o,top:i}}function _r(e,t){return e.state!==t?{error:new Error("State is invalid")}:e.error?e.error==="legacy_flow"?{error:new Error("This flow is not supported in Preview mode. Please open the app in a new tab to sign in.")}:{error:new Error(e.error_description??"Sign in failed")}:!e.access_token||!e.refresh_token?{error:new Error("No tokens received")}:{tokens:{access_token:e.access_token,refresh_token:e.refresh_token},error:null}}function Rs(){const e=navigator.userAgent;return!!(/iPhone|iPad|iPod|Android/i.test(e)||/Macintosh/i.test(e)&&navigator.maxTouchPoints>1)}function Is(){return typeof crypto<"u"&&crypto.getRandomValues?[...crypto.getRandomValues(new Uint8Array(16))].map(e=>e.toString(16).padStart(2,"0")).join(""):Math.random().toString(36).substring(2)+Date.now().toString(36)}function Ps(e={}){const t=e.oauthBrokerUrl??ks,r=e.supportedOAuthOrigins??Cs;async function n(o,i={}){let l=!1;try{l=window.self!==window.top}catch{l=!0}const c=navigator.userAgent,d=/LovableApp\//.test(c),u=!d&&/lovable/i.test(c),h=Is();let b=i.redirect_uri??window.location.origin;d&&l?b=Ts:u&&l&&(b=Ss);const f=new URLSearchParams({...i.extraParams,provider:o,redirect_uri:b,state:h});if(!l)return window.location.href=`${t}?${f.toString()}`,{error:null,redirected:!0};!d&&!u&&f.set("response_mode","web_message");const s=`${t}?${f.toString()}`,v=u?[...r,window.location.origin]:r,{messagePromise:p,cleanup:y}=As(v);let m;if(Rs())m=window.open(s,"_blank");else{const{width:C,height:N,left:M,top:F}=_s(l);m=window.open(s,"oauth",`width=${C},height=${N},left=${M},top=${F}`)}if(!m&&(d||u)){let C;const N=new Promise((M,F)=>{C=setTimeout(()=>{F(new Error("OAuth timed out waiting for response"))},js)});try{const M=await Promise.race([p,N]);return _r(M,h)}catch(M){return{error:M instanceof Error?M:new Error(String(M))}}finally{C&&clearTimeout(C),y()}}if(!m)return y(),{error:new Error("Popup was blocked")};let x;const S=new Promise((C,N)=>{x=setInterval(()=>{m.closed&&(clearInterval(x),N(new Error("Sign in was cancelled")))},Es)});try{const C=await Promise.race([p,S]);return _r(C,h)}catch(C){return{error:C instanceof Error?C:new Error(String(C))}}finally{clearInterval(x),y(),m?.close()}}return{signInWithOAuth:n}}var Ns={version:"1.1.1"};typeof window<"u"&&(window.__lovable_cloud_auth_js_version=Ns.version);function Ms(e={}){return Ps(e)}const Os=Ms(),Ds={auth:{signInWithOAuth:async(e,t)=>{const r=await Os.signInWithOAuth(e,{redirect_uri:t?.redirect_uri,extraParams:{...t?.extraParams}});if(r.redirected||r.error)return r;try{await se.auth.setSession(r.tokens)}catch(n){return{error:n instanceof Error?n:new Error(String(n))}}return r}}},nd="https://chromewebstore.google.com/detail/chartmentor-ai-trading-me/neeoehhmfaeoegkhddlbhjnojiabgman",ad="https://www.tradingview.com/chart/?aff_id=165916",Dt="cm_entry_source",lt="cm_attribution",Fs="cm_extension_present",Rr="chartmentor:extension-present",Ls=["ref","gclid","gbraid","wbraid","fbclid","source","utm_source","utm_medium","utm_campaign","utm_content","utm_term","cm_email_id","cm_email_template","signup_context"],Vs=new Set(["extension","chrome_extension","chrome-extension","tradingview_extension","tradingview-extension"]),Ye=()=>typeof window<"u"&&typeof document<"u",pt=e=>{if(!Ye())return null;try{return window.localStorage.getItem(e)}catch{return null}},ut=(e,t)=>{if(Ye())try{window.localStorage.setItem(e,t)}catch{}},Bn=e=>e==="extension"||e==="website_direct"||e==="website_referral"||e==="unknown",Us=e=>e?Vs.has(e.toLowerCase()):!1;function $s(e){const t=pt(lt);if(t){const n=e.get("ref");if(!n)return;try{const o=JSON.parse(t);o&&typeof o=="object"&&!Array.isArray(o)&&!o.ref&&ut(lt,JSON.stringify({...o,ref:n,referral_captured_at:new Date().toISOString()}))}catch{}return}const r={};Ls.forEach(n=>{const o=e.get(n);o&&(r[n]=o)}),r.landing_path=`${window.location.pathname}${window.location.search}`,r.referrer=document.referrer||"",r.captured_at=new Date().toISOString(),ut(lt,JSON.stringify(r))}function Kn(){const e=pt(lt);if(!e)return null;try{const t=JSON.parse(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function od(){const t=Kn()?.ref;if(!t)return null;const r=t.trim().toLowerCase().replace(/[^a-z0-9_-]/g,"").slice(0,32);return r.length>=3?r:null}function Gn(){ut(Fs,String(Date.now()))}function Hn(){return Ye()?document.documentElement.dataset.chartmentorExtension==="installed"||document.body?.dataset.chartmentorExtension==="installed":!1}function qs(){const e=pt(Dt);return Bn(e)?e:"unknown"}function zs(){if(!Ye())return"unknown";Hn()&&Gn();const e=new URLSearchParams(window.location.search);$s(e);const t=pt(Dt);if(Bn(t))return t;const r=e.get("source")||e.get("utm_source")||e.get("ref")||e.get("from"),n=e.get("ref"),o=document.referrer||"";let i="website_direct";if(Us(r)||o.startsWith("chrome-extension://"))i="extension";else if(n)i="website_referral";else if(o)try{i=new URL(o).host===window.location.host?"website_direct":"website_referral"}catch{i="website_referral"}return ut(Dt,i),i}function id(e){if(!Ye())return()=>{};const t=()=>{Gn(),e()};return window.addEventListener(Rr,t),Hn()&&t(),()=>window.removeEventListener(Rr,t)}const Wn="4402689006641093".trim(),Bs=2160*60*60;let Ir=!1;const Fe=()=>typeof window<"u"&&typeof document<"u";function Ks(){return Fe()?["localhost","127.0.0.1","::1"].includes(window.location.hostname):!1}function Qn(){return Fe()&&!!Wn&&!Ks()}function Gs(){if(Fe()&&window.crypto?.getRandomValues){const e=new Uint32Array(2);return window.crypto.getRandomValues(e),Array.from(e).map(t=>t.toString(36)).join("")}return Math.random().toString(36).slice(2)}function Hs(e){return e.replace(/[^a-zA-Z0-9_.:-]/g,"_").slice(0,80)}function Ft(e){if(!Fe())return null;const t=`${e}=`,r=document.cookie.split("; ").find(n=>n.startsWith(t));if(!r)return null;try{return decodeURIComponent(r.slice(t.length))}catch{return r.slice(t.length)}}function Ws(e,t,r){Fe()&&(document.cookie=`${e}=${encodeURIComponent(t)}; path=/; max-age=${r}; SameSite=Lax`)}function Qs(){if(!Fe())return null;try{return new URLSearchParams(window.location.search).get("fbclid")}catch{return null}}function Pr(){const e=Ft("_fbc");if(e)return e;const t=Qs();if(!t)return null;const r=`fb.1.${Date.now()}.${t}`;return Ws("_fbc",r,Bs),r}function Ys(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==null&&typeof t<"u"))}function Yn(e,t){const r=t?Hs(t):`${Date.now()}_${Gs()}`;return`cm_${e}_${r}`.slice(0,120)}function Jn(e,t){if(!Qn())return null;const r=window.location.href;return{consentGranted:!0,eventName:e,eventId:t,eventSourceUrl:r,...document.referrer?{referrerUrl:document.referrer}:{},...navigator.userAgent?{userAgent:navigator.userAgent}:{},...Ft("_fbp")?{fbp:Ft("_fbp")}:{},...Pr()?{fbc:Pr()}:{}}}function Js(e,t){const r=Yn(e,t);return Jn(e,r)}function Zn(){if(!Qn())return!1;if(!window.fbq){const e=(...r)=>{if(e.callMethod){e.callMethod(...r);return}e.queue?.push(r)};e.push=e,e.loaded=!0,e.version="2.0",e.queue=[],window.fbq=e,window._fbq=e;const t=document.createElement("script");t.async=!0,t.src="https://connect.facebook.net/en_US/fbevents.js",document.head.appendChild(t)}return Ir||(window.fbq("init",Wn),Ir=!0),!0}function Je(e,t={},r={}){const n=r.eventId||Yn(e,r.stableKey),o=Jn(e,n);return!o||!Zn()||!window.fbq?null:e==="PageView"?(window.fbq("track","PageView"),o):(window.fbq("track",e,Ys(t),{eventID:n}),o)}function Zs(e){return Je("CompleteRegistration",{content_name:"ChartMentor signup",status:"completed"},{stableKey:e})}function Xs(e,t,r,n){return Je("InitiateCheckout",{content_name:`ChartMentor ${e}`,content_category:"subscription",content_ids:e,value:r,currency:"USD",billing_cycle:t},{eventId:n})}function sd(e,t){const r=t.eventId||`stripe_checkout_${e}`;return Je("Purchase",{content_name:t.plan?`ChartMentor ${t.plan}`:"ChartMentor subscription",content_category:"subscription",content_ids:t.plan||"subscription",value:t.value??0,currency:t.currency,billing_cycle:t.billing||null},{eventId:r})}function ld(e,t){const r=t.eventId||`stripe_checkout_${e}`;return Je("StartTrial",{content_name:t.plan?`ChartMentor ${t.plan} trial`:"ChartMentor Unlimited trial",content_category:"subscription_trial",content_ids:t.plan||"pro",value:t.value,currency:t.currency,predicted_ltv:39.99},{eventId:r})}function el(e){return e==="/"||e==="/download"||e==="/auth"||e==="/pricing"||e.startsWith("/compare/")||e.startsWith("/checklists/")||e.startsWith("/docs/")||e.startsWith("/lp/")||e.startsWith("/ai-")||e.startsWith("/tradingview-")||e.startsWith("/pre-trade-")}function tl(e,t=""){if(!Zn()||!window.fbq)return!1;if(window.fbq("track","PageView"),el(e)){const r=`${e}${t}`;Je("ViewContent",{content_name:r||"/",content_category:"website_page"},{stableKey:r||"/"})}return!0}let Lt;function rl(e){Lt={...e}}async function ie(e,t){try{const{data:{user:r}}=await se.auth.getUser();if(!r)return;const n=Kn(),o={...t||{},entrySource:qs(),...n?{attribution:n}:{}},{error:i}=await se.functions.invoke("emit-event",{body:{event_name:e,event_data:o}});if(!i)return;console.debug("[Analytics] emit-event failed (no fallback):",i.message)}catch(r){console.debug("[Analytics] trackEventAuthenticated exception:",r)}}async function cd(e){const t=Zs(e);await ie("signup_completed",{userId:e,...t?{metaTracking:t}:{}})}async function dd(e){await ie("review_prompt_shown",{userId:e})}async function ud(e){await ie("review_prompt_clicked",{userId:e})}async function nl(e,t){await ie("pricing_viewed",{source:e,...t})}async function al(e){await ie("dollar_trial_offer_shown",{surface:e})}async function ol(e,t){const r=Lt;Lt=void 0,await ie("plan_selected",{plan:e,billing:t,...r})}const Xn=g.createContext(void 0),Nr=e=>e.trim().toLowerCase(),il=({children:e})=>{const[t,r]=g.useState(null),[n,o]=g.useState(null),[i,l]=g.useState(!0),c=g.useRef(new Set);g.useEffect(()=>{const f=(v,p)=>
3{if(v!=="SIGNED_IN")return;const y=`${v}:${p}`;if(c.current.has(y))return;c.current.add(y);const m="login";setTimeout(()=>{ie(m,{userId:p}).catch(()=>{})},0)},{data:{subscription:s}}=se.auth.onAuthStateChange((v,p)=>{o(p),r(p?.user??null),l(!1),p?.user&&v==="SIGNED_IN"&&f(v,p.user.id)});return se.auth.getSession().then(({data:{session:v}})=>{o(v),r(v?.user??null),l(!1)}),()=>s.unsubscribe()},[]);const d=async(f,s,v,p="/account")=>{const y=p.startsWith("/")?p:"/account",m=`${window.location.origin}${y}`,{data:x,error:S}=await se.auth.signUp({email:Nr(f),password:s,options:{emailRedirectTo:m,data:{full_name:v||""}}});return{error:S,session:x.session,user:x.user}},u=async(f,s)=>{const{error:v}=await se.auth.signInWithPassword({email:Nr(f),password:s});return{error:v}},h=async(f,s="/")=>{const v=s.startsWith("/")?s:"/",p=`${window.location.origin}${v}`,y=await Ds.auth.signInWithOAuth(f,{redirect_uri:p});return y.error?{error:y.error}:y.redirected?{error:null}:{error:null}},b=async()=>{await se.auth.signOut()};return a.jsx(Xn.Provider,{value:{user:t,session:n,loading:i,signUp:d,signIn:u,signInWithOAuth:h,signOut:b},children:e})},ft=()=>{const e=g.useContext(Xn);if(e===void 0)throw new Error("useAuth must be used within an AuthProvider");return e},sl=[{path:"/ai-tradingview-extension",title:"AI TradingView Extension for Plan Reviews",metaTitle:"AI TradingView Extension for Plan Reviews | ChartMentor",description:"Use ChartMentor inside TradingView to review declared entries, stops, targets, and trade theses before risking money.",primaryKeyword:"ai tradingview extension"},{path:"/tradingview-ai-trade-review",title:"TradingView AI Plan Review Before You Enter",metaTitle:"TradingView AI Plan Review Before Entry | ChartMentor",description:"Review TradingView plans with AI before entry. ChartMentor checks the chart, trade box, thesis, playbook, and patterns supported by repeated reviews.",primaryKeyword:"tradingview ai chart scan"},{path:"/ai-trade-analysis",title:"AI Trade Analysis Focused on Execution Quality",metaTitle:"AI Trade Analysis for TradingView Setups | ChartMentor",description:"AI trade analysis for entries, stops, targets, market structure, and avoidable execution mistakes on TradingView charts.",primaryKeyword:"ai trade analysis"},{path:"/tradingview-trade-checklist",title:"TradingView Trade Checklist With AI Scan",metaTitle:"TradingView Trade Checklist With AI Scan | ChartMentor",description:"Use an AI-assisted TradingView trade checklist to verify entry, stop, target, structure, and no-trade conditions.",primaryKeyword:"tradingview trade checklist"},{path:"/pre-trade-checklist",title:"Pre-Trade Checklist for Better Entries",metaTitle:"Pre-Trade Checklist for Better Entries | ChartMentor",description:"A practical pre-trade checklist for checking setup quality, entry timing, stop placement, target logic, and emotional risk.",primaryKeyword:"pre trade checklist"},{path:"/ai-trading-mentor",title:"AI Trading Mentor for Execution Discipline",metaTitle:"AI Trading Mentor for TradingView Execution | ChartMentor",description:"ChartMentor acts as an AI trading mentor that reviews declared TradingView plans, flags weak assumptions, and reinforces disciplined execution.",primaryKeyword:"ai trading mentor"},{path:"/tradingview-chart-analysis-ai",title:"TradingView Chart Analysis With AI",metaTitle:"TradingView Chart Analysis AI for Chart Scans",description:"AI chart analysis for TradingView traders who want setup critique, indicator context, and entry risk checks before taking a trade.",primaryKeyword:"tradingview chart analysis ai"},{path:"/compare/chartmentor-vs-chatgpt",title:"ChartMentor vs ChatGPT for TradingView Plan Reviews",metaTitle:"ChartMentor vs ChatGPT for TradingView Plan Reviews",description:"Compare ChartMentor and ChatGPT for reviewing declared TradingView plans, including workflow, chart context, memory, and execution discipline.",primaryKeyword:"ChartMentor vs ChatGPT trading"},{path:"/compare/ai-trade-review-vs-ai-signals",title:"AI Plan Review vs AI Signals",metaTitle:"AI Plan Review vs AI Signals | ChartMentor",description:"Understand the difference between AI plan review and AI signals, and why keeping direction with the trader avoids alert dependency.",primaryKeyword:"AI chart scan vs AI signals"},{path:"/compare/chartmentor-vs-trading-journal",title:"ChartMentor vs Trading Journ
3al",metaTitle:"ChartMentor vs Trading Journal for Chart Scan",description:"Compare pre-trade AI plan review with post-trade journaling, and learn where ChartMentor fits in a trader's workflow.",primaryKeyword:"ChartMentor vs trading journal"},{path:"/compare/chartmentor-vs-tradezella",title:"ChartMentor vs TradeZella",metaTitle:"ChartMentor vs TradeZella for Chart Scan",description:"Compare ChartMentor and TradeZella for TradingView traders who want pre-chart scan, journaling, analytics, and execution discipline.",primaryKeyword:"ChartMentor vs TradeZella"},{path:"/compare/chartmentor-vs-tradersync",title:"ChartMentor vs TraderSync",metaTitle:"ChartMentor vs TraderSync for Chart Scan",description:"Compare ChartMentor and TraderSync for traders choosing between pre-entry TradingView scan and post-trade journal analytics.",primaryKeyword:"ChartMentor vs TraderSync"},{path:"/compare/chartmentor-vs-edgewonk",title:"ChartMentor vs Edgewonk",metaTitle:"ChartMentor vs Edgewonk for Trading Discipline",description:"Compare ChartMentor and Edgewonk for traders who want execution discipline, scan checkpoints, and trading improvement workflows.",primaryKeyword:"ChartMentor vs Edgewonk"},{path:"/compare/chartmentor-vs-tradervue",title:"ChartMentor vs Tradervue",metaTitle:"ChartMentor vs Tradervue for Chart Scan",description:"Compare ChartMentor and Tradervue for traders choosing between pre-trade AI scan and traditional trading journal workflows.",primaryKeyword:"ChartMentor vs Tradervue"},{path:"/checklists/day-trading-pre-trade-checklist",title:"Day Trading Pre-Trade Checklist",metaTitle:"Day Trading Pre-Trade Checklist | ChartMentor",description:"A focused day trading pre-trade checklist for entry timing, structure, reward-to-risk, invalidation, and emotional discipline.",primaryKeyword:"day trading pre trade checklist"},{path:"/checklists/forex-pre-trade-checklist",title:"Forex Pre-Trade Checklist",metaTitle:"Forex Pre-Trade Checklist for TradingView | ChartMentor",description:"A forex pre-trade checklist for trend, liquidity, session timing, news risk, stop placement, and reward-to-risk.",primaryKeyword:"forex pre trade checklist"},{path:"/checklists/crypto-trade-review-checklist",title:"Crypto Chart Scan Checklist",metaTitle:"Crypto Chart Scan Checklist | ChartMentor",description:"A crypto chart scan checklist for volatility, trend, liquidity, invalidation, risk sizing, and TradingView chart clarity.",primaryKeyword:"crypto chart scan checklist"},{path:"/checklists/prop-firm-trade-checklist",title:"Prop Firm Trade Checklist",metaTitle:"Prop Firm Trade Checklist for Discipline | ChartMentor",description:"A prop firm trade checklist for avoiding rule violations, poor reward-to-risk, revenge trades, and low-quality setups.",primaryKeyword:"prop firm trade checklist"},{path:"/docs/how-to-review-a-trade-on-tradingview",title:"How to Review a Trade Plan on TradingView",metaTitle:"How to Review a TradingView Plan With AI | ChartMentor",description:"Learn how to review a TradingView trade before entry by declaring direction, entry, stop, target, thesis, and invalidation.",primaryKeyword:"how to scan a trade on TradingView"},{path:"/docs/best-tradingview-chart-setup-for-ai-analysis",title:"Best TradingView Chart Setup for AI Analysis",metaTitle:"Best TradingView Chart Setup for AI Analysis | ChartMentor",description:"Set up TradingView charts for better AI analysis by keeping price structure, indicators, drawings, and key levels visible.",primaryKeyword:"best TradingView chart setup for AI analysis"},{path:"/docs/how-to-write-a-trading-review-prompt",title:"How Your Strategy Lens Works",metaTitle:"How ChartMentor's Strategy Lens Works | ChartMentor",description:"ChartMentor selects a review framework for your chart and plan. Discuss your approach with the mentor and confirm preferences in conversation.",primaryKeyword:"chartmentor strategy lens"},{path:"/docs/trade-review-verdicts-good-setup-weak-setup-no-trade",title:"Plan Review Outcomes: Hold, Revise, or Reject",metaTitle:"Plan Review Outcomes: Facts, Questions, and Conflicts",description:"Understand ChartMentor plan-review outcomes and how to interpret observed facts, mentor questions, and playbook conflicts.",primaryKeyword:"plan review outcomes"}],ll=e=>{const t=e.path.startsWith("/compare/"),r=t?`How should I compare ${e.title}?`:`Is ChartMentor useful for ${e.primaryKeyword}?`,n=t?"Use the comparison by workflow. ChartMentor is strongest before entry inside TradingView, while broader journal platforms are usually stronger after trades are logged and analyzed over time.":`Yes. ChartMentor is built for traders who want ${e.primaryKeyword} support inside a TradingView workflow, with emphasis on declared plans, setup quality, and disciplined execution.`;return[{question:r,answer:n},{question:"Does ChartMentor give financial advice or guaranteed signals?",answer:"No. ChartMentor is not a financial advisor and does not guarantee outcomes. It reviews visible chart context and the user's declared plan so traders can spot weak execution before risking money."},{question:"What do I need before running a review?",answer:"Open a TradingView chart, make the relevant price structure visible, and declare direction, entry, stop loss, target, and thesis. Cleaner plans produce more useful reviews."},{question:"Can I start without paying?",answer:"Yes. The free plan includes a generous first mentor session with no card required. Eligible users can also start seven days of Unlimited for $1 today; it renews at $39.99/month unless canceled."}]},cl=[{path:"/tradingview-trade-checklist",kind:"checklist",title:"TradingView Trade Checklist With AI Scan",eyebrow:"TradingView Checklist",intro:"Use this checklist while the entry, stop, and target are visible on TradingView. If one item cannot be answered, the setup is not ready for an order.",primaryKeyword:"tradingview trade checklist",relatedKeywords:["TradingView checklist","trade box","no-trade condition"],cta:"Check the marked trade before you enter.",checklist:[{item:"Name the entry trigger",action:"Write the exact price behavior or level that permits entry; 'it looks ready' is not a trigger."},{item:"Put the stop beyond invalidation",action:"Identify what proves the thesis wrong, then place the stop beyond that point."},{item:"Check target room",action:"Compare the target with the nearest opposing level, not only a preferred reward-to-risk number."},{item:"Make the chart readable",action:"Keep the relevant swings, levels, indicator pane, and trade box on screen for review."},{item:"State the no-trade condition",action:"Decide what would make you wait or skip before price starts moving."}],skipRule:"Skip the trade when the entry, invalidation, or reason to wait cannot be stated in one sentence.",sections:[{heading:"Use it before the click",body:"A checklist is most useful when it stops a vague plan. Run it before the order ticket is open, not as a post-entry explanation."},{heading:"Turn completed checks into a review",body:"Once the chart is prepared, use ChartMentor to challenge the visible plan through your saved Strategy Lens."}]},{path:"/pre-trade-checklist",kind:"checklist",title:"Pre-Trade Checklist for Better Entries",eyebrow:"Pre-Trade Checklist",intro:"A practical routine for deciding whether a setup de
3serves risk. It focuses on the plan, the location, and the reason to stand aside.",primaryKeyword:"pre trade checklist",relatedKeywords:["trade entry checklist","risk plan","execution routine"],cta:"Use the checklist before committing risk.",checklist:[{item:"Define the trade idea",action:"State the directional thesis and the condition that confirms it."},{item:"Confirm location",action:"Check where price sits relative to the relevant range, swing, support, or resistance."},{item:"Set invalidation first",action:"Choose the level where the idea is wrong before calculating position size."},{item:"Test the target",action:"Ask whether there is sufficient room before the next opposing structure."},{item:"Check your state",action:"Do not enter to recover a loss, avoid boredom, or chase the move you missed."}],skipRule:"Skip when the trade needs a wider stop, a different target, or a new rule after you have decided to enter.",sections:[{heading:"Short enough for live use",body:"The goal is not a long ritual. It is to make the decision rules visible at the moment emotion is most likely to hide them."},{heading:"A checklist cannot decide size for you",body:"Keep account limits and position sizing under your own control. A chart review is not financial advice or a substitute for risk management."}]},{path:"/checklists/day-trading-pre-trade-checklist",kind:"checklist",title:"Day Trading Pre-Trade Checklist",eyebrow:"Day Trading Checklist",intro:"A day-trading review built around session context and a defined triggerâso speed does not become a reason to abandon the plan.",primaryKeyword:"day trading pre trade checklist",relatedKeywords:["intraday routine","session context","day trade trigger"],cta:"Review the intraday plan before the order.",checklist:[{item:"Identify the active session",action:"Note whether liquidity and volatility fit the instrument and setup you trade."},{item:"Mark the session range",action:"Show the relevant opening, high, low, or intraday swing levels on the chart."},{item:"Require a trigger",action:"Define the break, reclaim, rejection, or confirmation you need instead of entering in the middle of a move."},{item:"Protect the stop",action:"Place it where the intraday thesis fails; do not move it to accommodate noise after entry."},{item:"Set a stop-trading rule",action:"Know the loss, time, or emotional condition that ends the session before it begins."}],skipRule:"Skip a day trade when price is between meaningful levels and the only reason to enter is that the session is moving.",sections:[{heading:"Speed requires fewer, clearer rules",body:"Intraday trading creates more decisions, not more permission to trade. A visible session map and defined trigger keep the review tied to location."},{heading:"Use alerts for watch conditions",body:"If the review exposes missing confirmation, define the evidence you need and step away instead of negotiating with a chart that is not ready."}]},{path:"/checklists/forex-pre-trade-checklist",kind:"checklist",title:"Forex Pre-Trade Checklist",eyebrow:"Forex Checklist",intro:"Review the pair, session, technical location, and scheduled-event risk together. A clean pattern can still be poor timing for an FX trade.",primaryKeyword:"forex pre trade checklist",relatedKeywords:["FX session","pair context","event risk"],cta:"Check the pair and timing before entry.",checklist:[{item:"Name the pair and session",action:"Confirm that the setup is being evaluated in the session whose liquidity you expect to trade."},{item:"Align timeframes",action:"Mark the higher-timeframe level and the lower-timeframe trigger rather than treating them as separate charts."},{item:"Check scheduled events",action:"Review the economic calendar yourself and decide whether the plan permits event exposure."},{item:"Define liquidity logic",action:"State whether the setup needs a sweep, break, reclaim, or rejection and what would invali
3date it."},{item:"Measure the stop in market terms",action:"Confirm the stop has room for the setup without making the planned position size irresponsible for your account."}],skipRule:"Skip when a scheduled event, unclear session context, or an undefined liquidity condition is doing the work of the trade thesis.",sections:[{heading:"Forex context is more than the pattern",body:"Session handoffs and scheduled events can alter liquidity and pace. Treat them as part of the decision, not a disclaimer after the chart is reviewed."},{heading:"ChartMentor reviews the visible plan",body:"Make the technical plan readable on TradingView. The tool is a chart-review checkpoint, not an economic-calendar service or a prediction engine."}]},{path:"/checklists/crypto-trade-review-checklist",kind:"checklist",title:"Crypto Chart Scan Checklist",eyebrow:"Crypto Checklist",intro:"A crypto-specific chart review for separating a defined setup from a fast move that merely feels urgent.",primaryKeyword:"crypto chart scan checklist",relatedKeywords:["crypto volatility","range context","position sizing"],cta:"Make the crypto plan survive a volatility check.",checklist:[{item:"Classify the market state",action:"Mark whether price is trending, ranging, breaking out, or retracing before selecting an entry style."},{item:"Measure recent movement",action:"Check whether the planned stop can survive normal recent movement without changing the thesis."},{item:"Avoid vertical entries",action:"If price has already expanded sharply, require a new trigger instead of assuming continuation."},{item:"Map opposing levels",action:"Keep nearby range edges, prior highs/lows, and target obstacles visible on the chart."},{item:"Size from the stop",action:"Set position size from your defined invalidation and account riskânot from conviction about the move."}],skipRule:"Skip when the plan only works if volatility immediately slows down or the stop is moved after entry.",sections:[{heading:"Volatility is not confirmation",body:"Fast movement may create an opportunity, but it does not create a valid entry by itself. The chart still needs a trigger, invalidation, and room to target."},{heading:"Review the exact instrument",body:"Make the symbol, timeframe, levels, and marked trade clear. Different crypto instruments can have very different liquidity and price behavior."}]},{path:"/checklists/prop-firm-trade-checklist",kind:"checklist",title:"Prop Firm Trade Checklist",eyebrow:"Prop Firm Checklist",intro:"Put the account rules ahead of the opportunity. This checklist forces the trade to fit your remaining risk before it earns a chart review.",primaryKeyword:"prop firm trade checklist",relatedKeywords:["evaluation rules","daily loss limit","funded trader discipline"],cta:"Protect the account rules before reviewing the setup.",checklist:[{item:"Read your actual program rules",action:"Check the firm's current daily loss, drawdown, news, consistency, and holding rules yourself before trading."},{item:"Calculate remaining room",action:"Use current account equity and your own rule interpretation to decide the maximum acceptable risk for this attempt."},{item:"Make the stop rule-compliant",action:"Place invalidation first, then size the position so the possible loss fits the account limit."},{item:"Reject recovery trades",action:"If the purpose is to win back a prior loss or pass an evaluation quickly, stand down."},{item:"Review only a valid plan",action:"Run the visible chart through ChartMentor after rules, size, entry, stop, and target are already defined."}],skipRule:"Skip if you cannot verify that the trade fits the current firm rules and your remaining risk budget without stretching either one.",sections:[{heading:"Firm policies changeâverify them",body:"This is a planning checklist, not a substitute for the terms of any funded program. Confirm the rules from your own provider before every evaluation decision."},{heading:"A clean chart setup can still be the wrong trade",body:"ChartMentor can challenge execution quality, but it does not know your account balance, rule status, or permitted risk. Those checks stay with you."}]}],Mr="Journal platforms are designed to record completed trades, inspect history, and study patterns over time. ChartMentor addresses the earlier choice: whether the marked TradingView setup should be taken as planned.",dl=[{path:"/compare/chartmentor-vs-chatgpt",kind:"comparison",title:"ChartMentor vs ChatGPT for TradingView Plan Reviews",eyebrow:"Workflow Comparison",intro:"Choose based on the job. ChatGPT is general-purpose conversation; ChartMentor is a focused pre-entry review of a visible TradingView chart and marked plan.",primaryKeyword:"ChartMentor vs ChatGPT trading",relatedKeywords:["general AI","TradingView review","chart context"],cta:"Use the narrow tool when the job is a pre-entry chart decision.",alternativeName:"ChatGPT",decisionCriteria:[{criterion:"Starting context",chartmentorFit:"You begin with the visible TradingView chart, trade box, and saved Strategy Lens.",alternativeFit:"You assemble the chart context and ask for the kind of response you need."},{criterion:"Best job",chartmentorFit:"Challenge one marked setup before entry with a constrained verdict.",alternativeFit:"Explore concepts, study terms, draft notes, or discuss a strategy at a broader level."},{criterion:"Decision discipline",chartmentorFit:"The workflow separates facts, questions, rule conflicts, and the trader's final decision.",alternativeFit:"The quality and format depend on the prompt and the context you provide."}],useTogether:"Use ChatGPT for learning or drafting rules, then use ChartMentor when a specific TradingView setup needs a pre-entry checkpoint.",sections:[{heading:"Do not confuse a good explanation with a review workflow",body:"A general chat can be useful for thinking through ideas. At entry time, the value comes from having the chart, plan, and response format ready without rebuilding the context."},{heading:"Neither tool removes trading risk",body:"Both can be wrong or incomplete. Keep order decisions, sizing, and risk limits under your own control."}]},{path:"/compare/ai-trade-review-vs-ai-signals",kind:"comparison",title:"AI Plan Review vs AI Signals",eyebrow:"Method Comparison",intro:"AI signals attempt to prompt action. A plan review checks the thesis you already declared without manufacturing a directional call.",primaryKeyword:"AI chart scan vs AI signals",relatedKeywords:["signal service","plan review","trade discipline"],cta:"Choose a review if you need to challenge the setup before acting.",alternativeName:"AI signal services",decisionCriteria:[{criterion:"Primary output",chartmentorFit:"A review of the trader's marked chart with a condition-based verdict.",alternativeFit:"An alert, idea, or directional call intended to prompt a trade decision."},{criterion:"Best fit",chartmentorFit:"You already have a setup and want it tested for timing, invalidation, and clarity.",alternativeFit:"You specifically want externally generated ideas to evaluate under your own process."},{criterion:"Trader responsibility",chartmentorFit:"The trader supplies the plan and remains responsible for whether to take it.",alternativeFit:"The trader still must validate any alert, size it safely, and decide whether it fits their rules."}],sections:[{heading:"A mentor question is not a weak signal",body:"Clarifying missing evidence or invalidation can be more useful than an immediate call because it keeps the trader responsible for the thesis."},{heading:"Avoid signal dependency",body:"If a service provides ideas, test whether you can explain the trigger, invalidation, and reason to skip without relying on the alert's authority."}]},{path:"/compare/chartmentor-vs-trading-journal",kind:"comparison",title:"ChartMentor vs Trading Journ
3al",eyebrow:"Workflow Comparison",intro:"A trading journal studies trades after execution. ChartMentor reviews a TradingView setup before execution. The choice depends on which part of the decision loop is missing.",primaryKeyword:"ChartMentor vs trading journal",relatedKeywords:["pre-trade review","post-trade journal","execution loop"],cta:"Add a checkpoint before a journal has another trade to explain.",alternativeName:"trading journals",decisionCriteria:[{criterion:"Timing",chartmentorFit:"Before an order, when the entry, stop, and target can still be changed or rejected.",alternativeFit:"After execution, when notes, outcomes, and recurring patterns can be examined."},{criterion:"Best job",chartmentorFit:"Interrupt a weak or unclear planned entry.",alternativeFit:"Track performance, review behavior, and identify patterns across a history of trades."},{criterion:"Core artifact",chartmentorFit:"A verdict on the visible current chart and marked plan.",alternativeFit:"A record of completed trades, notes, tags, and historical analysis."}],useTogether:"Review the setup before entry, then journal the execution and outcome afterwards. The tools address different moments, so they can form one feedback loop.",sections:[{heading:"Prevent and learn are separate jobs",body:"Journaling can reveal recurring late entries. A pre-entry review creates a chance to avoid the next one before it exists in the data."},{heading:"A journal is not a substitute for a pre-trade plan",body:"If the entry and invalidation are undefined at the moment of execution, a detailed post-trade note cannot make that decision reversible."}]},{path:"/compare/chartmentor-vs-tradezella",kind:"comparison",title:"ChartMentor vs TradeZella",eyebrow:"Workflow Comparison",intro:"TradeZella is journal and analytics software for reviewing trading history. ChartMentor is a narrower TradingView-first checkpoint for the plan before it becomes a trade.",primaryKeyword:"ChartMentor vs TradeZella",relatedKeywords:["TradeZella alternative","trade analytics","pre-entry scan"],cta:"Choose the tool that matches the moment you need help.",alternativeName:"TradeZella",decisionCriteria:[{criterion:"When you use it",chartmentorFit:"Immediately before entry, while the current trade is optional.",alternativeFit:"After trades are recorded, when you want to inspect performance, tags, replay, and reports."},{criterion:"Best job",chartmentorFit:"Review the visible setup, trade box, and execution conditions in TradingView.",alternativeFit:"Organize history and examine KPIs, filters, calendar views, profitability, and replay."},{criterion:"Decision artifact",chartmentorFit:"A structured review of facts, playbook conflicts, and the trader's decision.",alternativeFit:"Historical analytics and journal records that help identify longer-term patterns."}],useTogether:"Use ChartMentor to make the pre-entry decision more deliberate, then log the trade in TradeZella if trade history and analytics are part of your process.",sections:[{heading:"Not a replacement claim",body:Mr},{heading:"Choose by bottleneck",body:"If you lack a record of executed trades, journal software may be the first need. If the recurring failure is taking unclear setups, a pre-entry review targets that earlier moment."}]},{path:"/compare/chartmentor-vs-tradersync",kind:"comparison",title:"ChartMentor vs TraderSync",eyebrow:"Workflow Comparison",intro:"TraderSync centers on trade history, screenshots, charts, and analytics.
3ChartMentor centers on a review of the current TradingView setup before the order is placed.",primaryKeyword:"ChartMentor vs TraderSync",relatedKeywords:["TraderSync alternative","trade history","entry review"],cta:"Use a pre-entry review when the decision is still reversible.",alternativeName:"TraderSync",decisionCriteria:[{criterion:"Primary input",chartmentorFit:"A live-visible TradingView chart with marked entry, stop, target, and Strategy Lens.",alternativeFit:"Recorded or imported trade history, charts, screenshots, and trade-specific information."},{criterion:"Best job",chartmentorFit:"Challenge current entry quality and invalidation before taking the risk.",alternativeFit:"Analyze completed trades, their execution details, and patterns across a journal."},{criterion:"When it helps most",chartmentorFit:"When you want to slow down a live decision without leaving the chart context.",alternativeFit:"When you need historical record keeping, review, and detailed analysis of past trades."}],useTogether:"Use ChartMentor before a trade and TraderSync after it if your process needs both a live checkpoint and a historical record.",sections:[{heading:"Different data, different question",body:"A current chart asks 'does this setup meet my conditions now?' A journal asks 'what did I do over many trades?' Both questions matter, but they are not interchangeable."},{heading:"Avoid switching tools to avoid a decision",body:"If the current plan lacks a defined trigger or stop, more history will not repair it. Clarify the plan first."}]},{path:"/compare/chartmentor-vs-edgewonk",kind:"comparison",title:"ChartMentor vs Edgewonk for Trading Discipline",eyebrow:"Workflow Comparison",intro:"Edgewonk is journal-led software for studying mistakes, psychology, reporting, and improvement over time. ChartMentor introduces discipline earlier, at the visible pre-entry chart.",primaryKeyword:"ChartMentor vs Edgewonk",relatedKeywords:["Edgewonk alternative","trading psychology","pre-entry discipline"],cta:"Put a rule-based checkpoint before the trade exists.",alternativeName:"Edgewonk",decisionCriteria:[{criterion:"Timing",chartmentorFit:"Before entry, when a setup can still be skipped.",alternativeFit:"After and between trades, when behavior and results can be reviewed over time."},{criterion:"Best job",chartmentorFit:"Challenge the marked chart for a trigger, invalidation, and no-trade condition.",alternativeFit:"Study mistakes, mental notes, reports, screenshots, and an improvement process."},{criterion:"Discipline mechanism",chartmentorFit:"A repeated, constrained review of the actual planned trade.",alternativeFit:"Journal-led reflection and structured learning from completed activity."}],useTogether:"A pre-entry ChartMentor review can feed a broader Edgewonk reflection habit: prevent what you can now, then study the outcomes and behavior later.",sections:[{heading:"Discipline needs both prevention and reflection",body:"Reflection teaches from past behavior. A pre-entry checkpoint can make the relevant rule visible before the same behavior becomes another entry."},{heading:"Use the right level of depth",body:"Choose a journal when the need is long-term analysis and improvement planning; choose ChartMentor when the immediate question is whether this chart deserves risk."}]},{path:"/compare/chartmentor-vs-tradervue",kind:"comparison",title:"ChartMentor vs Tradervue",eyebrow:"Workflow Comparison",intro:"Tradervue is a trade journal for recording past activity, notes, charts, and reports. ChartMentor is a focused review workflow for the chart before the trade is recorded.",primaryKeyword:"ChartMentor vs Tradervue",relatedKeywords:["Tradervue alternative","trade diary","chart checkpoint"],cta:"Review the plan before it becomes a journal entry.",alternativeName:"Tradervue",decisionCriteria:[{criterion:"When you use it",chartmentorFit:"Before placing a trade, with the live-visible TradingView plan.",alternativeFit:"After trades occur, when you want a diary, notes, chart history, dashboards, and reports."},{criterion:"Best job",chartmentorFit:"Make a direct trade-or-wait decision based on visible context and rules.",alternativeFit:"Record, filter, review, and report on completed trades over time."},{criterion:"Core value",chartmentorFit:"A consistent gate for entry timing, invalidation, and no-trade conditions.",alternativeFit:"A durable historical record for reflection and performance analysis."}],useTogether:"ChartMentor can be the pre-entry gate and Tradervue the post-trade record. Keep the live decision and historical analysis as separate steps in the workflow.",sections:[{heading:"A journal begins after execution",body:Mr}
3,{heading:"Choose based on the unanswered question",body:"If the question is 'what should I learn from my trade history?', use a journal. If it is 'is this specific entry defined well enough to take?', use a pre-entry review."}]}],nt=[{question:"Does ChartMentor give financial advice or guaranteed signals?",answer:"No. ChartMentor is not a financial advisor and does not guarantee outcomes. It reviews visible chart context and the marked trade plan to help traders identify weak execution before risking money."},{question:"What should be visible before running a review?",answer:"Show the relevant price structure and, for a specific trade, mark entry, stop loss, and target. A cleaner chart gives the review a clearer plan to assess."},{question:"Can I start without paying?",answer:"Yes. The free plan includes a generous first mentor session with no card required. Eligible users can also start seven days of Unlimited for $1 today; it renews at $39.99/month unless canceled."}],ul=e=>e.kind==="comparison"?[{question:`How should I choose between ChartMentor and ${e.alternativeName}?`,answer:"Choose by timing and job. ChartMentor is built for a pre-entry TradingView review; the alternative may be better when its broader workflow is the actual bottleneck."},...e.useTogether?[{question:`Can I use ChartMentor and ${e.alternativeName} together?`,answer:e.useTogether}]:[],...nt]:e.kind==="checklist"?[{question:"What should make me skip the checklist trade?",answer:e.skipRule},{question:"Should I complete every item before running ChartMentor?",answer:"Yes. The checklist defines the plan first; the chart review then challenges the visible plan rather than inventing missing rules."},...nt]:e.kind==="guide"?[{question:`What is the first useful step in ${e.primaryKeyword}?`,answer:e.procedure[0].instruction},{question:"What should I do when the chart is not ready?",answer:"Do not force a review into a trade. Make the missing condition visible, set an alert if appropriate, or leave the setup until the chart changes."},...nt]:[{question:`Is ChartMentor useful for ${e.primaryKeyword}?`,answer:"It is built for traders who want a repeatable pre-entry TradingView checkpoint, with emphasis on the visible setup, risk plan, and disciplined execution."},{question:"What does the review help me decide?",answer:"It makes the reasoning explicit: inspect observed facts, answer the mentor question, resolve playbook conflicts, and make your own final decision."},...nt],hl="ChartMentor is a pre-entry TradingView mentor. It reads the visible chart and your declared plan, then separates facts, questions, playbook conflicts, and your decision.",pl=[{path:"/ai-tradingview-extension",kind:"product",title:"AI TradingView Extension for Plan Reviews",eyebrow:"TradingView AI Extension",intro:"Use a plan review at the point of decision: mark the trade on TradingView, state the thesis, and make the missing condition explicit before placing an order.",primaryKeyword:"ai tradingview extension",relatedKeywords:["TradingView workflow","marked trade plan","plan review"],cta:"Open your next marked TradingView setup and run the review.",workflow:[{title:"Prepare the chart",detail:"Keep price, your working timeframe, key levels, and the planned entry, stop, and target visible."},{title:"Run the review",detail:"Review the visible context instead of rewriting the setup in a generic chat prompt."},{title:"Make your decision",detail:"Use the facts and mentor question to keep, revise, or reject the plan yourself."}],reviewFocus:[{label:"Chart readability",reason:"A review can only assess the levels and structure that are visible."},{label:"Trade-box logic",reason:"Entry, stop, and target make the proposed risk explicit before entry."},{label:"Strategy fit",reason:"Your saved Strategy Lens gives the review a repeatable definition of a valid setup."}],sections:[{heading:"A review tool, not another signal feed",body:"The useful job is to challenge a trade you already see, not to manufacture an alert to follow. That keeps the trader responsible for the plan while adding a consistent checkpoint."},{heading:"What to do when the review is unclear",body:"Do not fill gaps with confidence. Make the missing level, confirmation, or invalidation visible, then review again only when the plan can be stated clearly."}]},{path:"/tradingview-ai-trade-review",kind:"product",title:"TradingView AI Plan Review Before You Enter",eyebrow:"Pre-Entry Plan Review",intro:"Turn a tempting chart into a declared thesis: what is the entry, what invalidates it, what is the target, and which rule makes the plan valid?",primaryKeyword:"tradingview ai chart scan",relatedKeywords:["pre-entry review","trade thesis","trade invalidation"],cta:"Review the setup while it is still optional.",workflow:[{title:"State the plan on chart",detail:"Mark the proposed entry, invalidation, and target area before requesting a verdict."}
3,{title:"Check the declared thesis",detail:"The mentor evaluates visible structure and the marked plan through your Strategy Lens."},{title:"Own the final decision",detail:"Review the observed facts, answer the clarifying question, and decide whether to keep, revise, or reject the plan."}],reviewFocus:[{label:"Entry timing",reason:"A technically valid idea can still be late at the proposed entry."},{label:"Invalidation",reason:"A stop should represent where the trade idea is wrong, not a convenient amount of room."},{label:"Nearby opposing structure",reason:"A target needs room before the next obvious decision area."}],sections:[{heading:"The review is a decision checkpoint",body:hl},{heading:"A useful answer challenges the weakest assumption",body:"Not every plan needs approval. A specific question about missing evidence or invalidation is more useful than a vague confidence score because it forces the thesis to become testable."}]},{path:"/ai-trade-analysis",kind:"product",title:"AI Trade Analysis Focused on Execution Quality",eyebrow:"Execution Analysis",intro:"Use analysis to pressure-test the trade you markedânot to generate a long market narrative that leaves the entry decision unresolved.",primaryKeyword:"ai trade analysis",relatedKeywords:["execution quality","entry review","risk plan"],cta:"Challenge the marked plan before you risk money.",workflow:[{title:"Separate the idea from the execution",detail:"First decide what the chart idea is; then inspect whether the actual entry and stop still express it."},{title:"Find the dominant flaw",detail:"Prioritize the one issue that would invali
3date the trade or make its risk unclear."},{title:"Choose a constrained next move",detail:"Take the stated trigger, wait for a defined condition, or skip rather than inventing a fourth option."}],reviewFocus:[{label:"Structure",reason:"The thesis needs a visible relationship between current price and the relevant swing or range."},{label:"Confirmation",reason:"The planned entry should meet the conditions in the trader's own lens."},{label:"Risk definition",reason:"A review is weak if it cannot explain where the trade is proven wrong."}],sections:[{heading:"Analysis should reduce ambiguity",body:"The point is not more commentary. It is a shorter path from chart context to a documented trade-or-wait decision."},{heading:"Do not use analysis to negotiate with a weak setup",body:"If the entry is late or the invalidation is undefined, redrawing the explanation does not repair the plan. Rebuild the setup or leave it."}]},{path:"/ai-trading-mentor",kind:"product",title:"AI Trading Mentor for Execution Discipline",eyebrow:"Execution Mentor",intro:"Build a repeatable pre-trade habit: make your rules visible, submit the same kind of chart review, and treat a no-trade result as a valid outcome.",primaryKeyword:"ai trading mentor",relatedKeywords:["execution discipline","Strategy Lens","trading routine"],cta:"Make the next decision follow your rules, not the rush.",workflow:[{title:"Write the rules once",detail:"Use a Strategy Lens to state the setup, confirmations, invalidation, and no-trade filters you expect."},{title:"Apply the same checkpoint",detail:"Review each candidate using the same visible-chart preparation instead of changing the standard after a move begins."},{title:"Record the lesson",detail:"If a setup is rejected, note which rule failed so the next chart gets a faster, cleaner decision."}],reviewFocus:[{label:"Rule consistency",reason:"A repeated review process exposes when a trade needs a new exception to work."},{label:"Emotional pressure",reason:"A defined checkpoint creates a pause before boredom, revenge, or FOMO becomes an order."},{label:"No-trade conditions",reason:"Learning when not to enter is part of execution discipline, not a failed signal."}],sections:[{heading:"Mentoring means confronting exceptions",body:"A useful mentor does not validate every idea. It asks whether the trade still meets the trader's stated conditions and makes the missing condition concrete."},{heading:"Keep responsibility with the trader",body:"ChartMentor is not financial advice, a broker, or a promise of outcome. The trader remains responsible for sizing, risk limits, and every order."}]},{path:"/tradingview-chart-analysis-ai",kind:"product",title:"TradingView Chart Analysis With AI",eyebrow:"Chart Context Review",intro:"Review the visible relationship between price, levels, indicators, and the planned trade so the chart changes the next action instead of merely looking analysable.",primaryKeyword:"tradingview chart analysis ai",relatedKeywords:["price structure","indicator context","chart clarity"],cta:"Make the chart context explicit before entering.",workflow:[{title:"Show the relevant context",detail:"Frame recent price action, the working level, and the planned trade without hiding key swings or targets."},{title:"Review confluence and conflict",detail:"Look for whether levels and readable indicators support the idea or contradict the timing."},{title:"Act only on a defined condition",detail:"If the context is mixed, wait for the stated trigger rather than calling uncertainty a setup."}],reviewFocus:[{label:"Visible levels",reason:"Support, resistance, and range edges only help if their relevance to the entry is clear."},{label:"Indicator purpose",reason:"An indicator should confirm or challenge a decision, not decorate the chart."},{label:"Chart framing",reason:"A target or invalidation off-screen makes risk review incomplete."}],sections:[{heading:"Analysis begins with a readable chart",body:"A clean chart does not guarantee a good setup, but an obstructed chart makes an honest review impossible. Remove panels and noise before judging the trade."},{heading:"Context is not a prediction",body:"Chart context explains why a trigger may be stronger or weaker. It does not remove uncertainty or guarantee what price will do next."}]}],fl=[{path:"/docs/how-to-review-a-trade-on-tradingview",kind:"guide",title:"How to Review a Trade Plan on TradingView",eyebrow:"TradingView Guide",intro:"A repeatable procedure for reviewing a marked TradingView trade before entry. The output should be a trigger, a wait condition, or a reason to walk away.",primaryKeyword:"how to review a trade plan on TradingView",relatedKeywords:["chart review procedure","marked trade","TradingView setup"],cta:"Prepare one chart and review the actual plan.",procedure:[{title:"Frame the decision area",instruction:"Set the chart view so recent structure, the proposed entry, stop, target, and nearby opposing level are visible together.",check:"Can another trader identify the working level without scrolling?"},{title:"Mark the plan",instruction:"Draw the entry, stop, and target. Write the condition that validates entry and the condition that invalidates the idea.",check:"Could you state why the stop belongs there in one sentence?"},{title:"Run the ChartMentor review",instruction:"Use the visible chart and your Strategy Lens to request a pre-entry verdict.",check:"Does the output give a specific action, wait condition, or no-trade reason?"},{title:"Handle the outcome",instruction:"Take only the defined trigger, set an alert for a watch condition, or close the idea when there is no clean trigger.",check:"Have you avoided inventing a new entry after a rejection?"}],troubleshooting:[{symptom:"The review lacks context",fix:"Zoom or pan until the relevant swings, level, and trade box are visible in the same view."},{symptom:"The output cannot judge the trade plan",fix:"Mark the entry, invalidation, and target before requesting a review; do not ask the chart to supply an unstated plan."}],sections:[{heading:"Review the plan, not a prediction",body:"The procedure is designed to test whether the marked setup makes sense now. It does not predict prices or replace the trader's responsibility for risk."},{heading:"A no-trade is useful output",body:"When a chart has no defensible trigger, keeping capital and attention available is a legitimate result of the review."}]},{path:"/docs/best-tradingview-chart-setup-for-ai-analysis",kind:"guide",title:"Best TradingView Chart Setup for AI Analysis",eyebrow:"Chart Preparation Guide",intro:"A readable chart gives a review enough context to challenge the trade. Prepare the view before scanning rather than expecting a tool to infer what is hidden.",primaryKeyword:"best TradingView chart setup for AI analysis",relatedKeywords:["chart readability","TradingView layout","visible context"],cta:"Clean the chart, mark the plan, then review it.",procedure:[{title:"Cho
3ose one decision timeframe",instruction:"Use the timeframe on which you plan to act, while leaving enough price history visible to show the current structure.",check:"Are the relevant swing points and the planned trade on the same screen?"},{title:"Keep only purposeful drawings",instruction:"Leave the levels, trend lines, zones, and trade box that matter to this setup; remove obsolete marks that compete for attention.",check:"Can you explain why every visible drawing is relevant now?"},{title:"Make indicators legible",instruction:"Use only the indicator panes you rely on and make their current readings visible without covering price.",check:"Would removing an indicator change the entry decision?"},{title:"Remove obstructions",instruction:"Close popups, order panels, chats, and settings that cover the chart before starting the review.",check:"Is the entry, stop, target, and invalidation area unobstructed?"}],troubleshooting:[{symptom:"The chart is crowded",fix:"Start a clean layout for review time and keep only the tools your Strategy Lens actually uses."},{symptom:"The target or stop is off-screen",fix:"Zoom out or pan until the full risk plan is visible; otherwise the review cannot assess room to the target."}],sections:[{heading:"More indicators do not mean more evidence",body:"A chart is stronger when its visible information answers a decision question. Extra overlays can hide the exact price structure the review needs."},{heading:"Use a consistent layout",body:"The same preparation routine makes it easier to compare one review with the next and notice when an exception is being made for a weak setup."}]},{path:"/docs/how-to-write-a-trading-review-prompt",kind:"guide",title:"How Your Strategy Lens Works",eyebrow:"Strategy Lens Guide",intro:"ChartMentor selects a review framework for your chart and declared plan. Discuss your approach with the mentor and confirm preferences in conversation; no extra setup is required.",primaryKeyword:"chartmentor strategy lens",relatedKeywords:["auto-selected strategy","trade review framework"],cta:"Open TradingView, declare your plan, and discuss your approach with the mentor.",procedure:[{title:"Open the chart you plan to trade",instruction:"ChartMentor uses your chart context and declared setup to choose a review framework.",check:"Is the chart timeframe the one you intend to trade?"},{title:"Explain your approach in conversation",instruction:"Tell your mentor how you approach the setup and confirm details that should be remembered.",check:"Does the mentor's summary match what you told it?"},{title:"Declare the plan",instruction:"Mark a Long or Short Position on TradingView, or enter direction, entry, stop, and target manually.",check:"Are entry, stop, and target all visible or stated?"},{title:"Correct a mismatch",instruction:"If a review misses your approach, clarify it in chat. Confirmed preferences can carry into future mentor sessions.",check:"Does the mentor reflect the correction in a later conversation?"}],troubleshooting:[{symptom:"The review does not match how I actually trade",fix:"Clarify your setup and approach in the mentor conversation, then check that the mentor's summary is accurate."},{symptom:"I want a different lens than the one selected",fix:"Check the chart timeframe and declared setup, and tell the mentor which strategy you intend to use."}],sections:[{heading:"Why auto-selection instead of a custom prompt",body:"A consistent framework keeps reviews focused on chart evidence and the plan you declared. Saved playbook rules and confirmed preferences provide additional context without requiring a profile form before each review."},{heading:"The lens does not replace your judgment",body:"The framework helps ChartMentor ask consistent questions about your plan. It does not turn a subjective or untested idea into a guaranteed strategy."}]},{path:"/docs/trade-review-verdicts-good-setup-weak-setup-no-trade",kind:"guide",title:"Plan Review Outcomes: Hold, Revise, or Reject the Thesis",eyebrow:"Decision Guide",intro:"Interpret the mentor review as evidence for your own decision. The structure is designed to expose weak assumptions without outsourcing the trade direction.",primaryKeyword:"plan review outcomes",relatedKeywords:["plan review","mentor question","playbook conflict"],cta:"Use the review to make the thesis more explicit.",procedure:[{title:"Start with observed facts",instruction:"Check which claims come directly from the visible chart and which still depend on your explanation. Do not turn an observation into permission to trade.",check:"Do the visible facts actually support the thesis you declared?"},{title:"Answer the mentor question",instruction:"Answer the single clarifying question in concrete terms. If you cannot explain why the entry or stop belongs there, revise the plan before deciding.",check:"Can you answer without relying on a vague feeling or prediction?"},{title:"Resolve playbook conflicts",instruction:"Compare the declared plan with the saved rule that conflicts. Keep the exception only if you can state why it is legitimate before risk is committed.",check:"Are you following a real exception or negotiating with your own rules?"}],troubleshooting:[{symptom:"A review feels too general",fix:"Make the chart plan and Strategy Lens more specific, especially the entry trigger and invalidation rule."},{symptom:"You keep resubmitting until the answer changes",fix:"State what materially changed in the chart or plan. Repeated reviews should follow new evidence, not discomfort with the challenge."}],sections:[{heading:"The assessment is not a trade instruction",body:"It summarizes how the visible chart and declared plan relate. It is not a guarantee, instruction to buy or sell, or replacement for risk controls."},{heading:"A clear question preserves agency",body:"A concrete question is useful because it turns uncertainty into something the trader must resolve instead of an invitation to follow the model blindly."}]}],ml=[...pl,...cl,...fl,...dl],gl=new Map(ml.map(e=>[e.path,e])),H="https://chartmentor.io",Or=`${H}/og-image.jpg`,Dr="https://chromewebstore.google.com/detail/chartmentor-ai-trading-me/neeoehhmfaeoegkhddlbhjnojiabgman",Tt="ChartMentor | AI TradingView Mentor & Trade Review",Be="Your AI mentor for TradingView. Review your chart, trade plan and risk before entry. Try Unlimited for $1 for 7 days, then $39.99/month.",ce=(e,t,r)=>{const n=document.querySelector(r?`meta[property="${e}"]`:`meta[name="${e}"]`);if(n)n.setAttribute("content",t);else{const o=document.createElement("meta");r?o.setAttribute("property",e):o.setAttribute("name",e),o.setAttribute("content",t),document.head.appendChild(o)}},yl=(e,t)=>{const r=document.querySelector(`link[rel="${e}"]`);if(r)r.setAttribute("href",t);else{const n=document.createElement("link");n.setAttribute("rel",e),n.setAttribute("href",t),document.head.appendChild(n)}},wl=e=>{document.querySelectorAll("script[data-seo-schema]").forEach(t=>{t.remove()}),e?.length&&e.forEach(t=>{const r=document.createElement("script");r.type="application/ld+json",r.setAttribute("data-seo-schema","true"),r.textContent=JSON.stringify(t),document.head.appendChild(r)})},Fr=(e,t)=>
3{const r=e.canonical??`${H}${t}`;document.title=e.title,yl("canonical",r),ce("description",e.description);const n=e.robots??"index, follow";ce("robots",n);const o=e.og?.image??Or,i=e.twitter?.image??Or;ce("og:title",e.og?.title??e.title,!0),ce("og:description",e.og?.description??e.description,!0),ce("og:image",o,!0),ce("og:type",e.og?.type??"website",!0),ce("og:url",r,!0),ce("og:site_name","ChartMentor",!0),ce("twitter:card",e.twitter?.card??"summary_large_image"),ce("twitter:title",e.twitter?.title??e.title),ce("twitter:description",e.twitter?.description??e.description),ce("twitter:image",i),wl(e.schema)},vl="noindex, nofollow",bl={"@context":"https://schema.org","@type":"Organization","@id":`${H}/#organization`,name:"ChartMentor",url:"https://chartmentor.io",logo:"https://chartmentor.io/favicon.ico",description:Be,sameAs:["https://twitter.com/chartmentor","https://youtube.com/@chartmentor"]},xl={"@context":"https://schema.org","@type":["SoftwareApplication","BrowserApplication"],name:"ChartMentor",description:Be,applicationCategory:"FinanceApplication",operatingSystem:"Chrome Browser",browserRequirements:"Google Chrome",url:H,downloadUrl:Dr,installUrl:Dr,screenshot:`${H}/images/chartmentor-current-review.webp`,offers:[{"@type":"Offer",name:"Unlimited introductory week",price:1,priceCurrency:"USD",url:`${H}/#pricing`,description:"7 days of Unlimited, then $39.99/month unless canceled. Available once per eligible account."},{"@type":"Offer",name:"Free mentor session",price:0,priceCurrency:"USD",description:"Generous first mentor session. No card required."}]},kl={"@context":"https://schema.org","@type":"WebSite","@id":`${H}/#website`,name:"ChartMentor",url:`${H}/`,publisher:{"@id":`${H}/#organization`}},we=e=>({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"ChartMentor",item:"https://chartmentor.io"},...e.map((t,r)=>({"@type":"ListItem",position:r+2,name:t.name,item:`https://chartmentor.io${t.url}`}))]}),ea=e=>({"@context":"https://schema.org","@type":"WebPage",name:e.title,description:e.description,url:`${H}${e.path}`,isPartOf:{"@type":"WebSite",name:"ChartMentor",url:H}}),Cl=e=>{const t=gl.get(e.path);return{"@context":"https://schema.org","@type":"FAQPage",mainEntity:(t?ul(t):ll(e)).map(n=>({"@type":"Question",name:n.question,acceptedAnswer:{"@type":"Answer",text:n.answer}}))}},Tl=Object.fromEntries(sl.map(e=>[e.path,{title:e.metaTitle,description:e.description,canonical:`${H}${e.path}`,robots:"index, follow",og:{title:e.metaTitle,description:e.description,type:"article"},twitter:{card:"summary_large_image",title:e.metaTitle,description:e.description},schema:[we([{name:e.title,url:e.path}]),ea(e),Cl(e)]}])),ta={"/":{title:Tt,description:Be,canonical:`${H}/`,robots:"index, follow",og:{title:Tt,description:Be,type:"website"},twitter:{card:"summary_large_image",title:Tt,description:Be},schema:[bl,kl,xl]},"/docs":{title:"TradingView Plan Review Documentation - ChartMentor",description:"Learn how to declare and pressure-test TradingView trade plans through your Strategy Lens, including setup, mentor memory, outcomes, and troubleshooting.",canonical:`${H}/docs`,robots:"index, follow",og:{title:"TradingView Plan Review Documentation - ChartMentor",description:"Everything you need to declare and pressure-test TradingView trade plans through your Strategy Lens.",type:"website"},twitter:{card:"summary",title:"TradingView Plan Review Documentation - ChartMentor",description:"Everything you need to declare and pressure-test TradingView trade plans through your Strategy Lens."},schema:[we([{name:"Documentation",url:"/docs"}
3])]},"/support":{title:"ChartMentor Support and Plan Review FAQ",description:"Find answers about ChartMentor plan reviews, mentor memory, TradingView setup, pricing, privacy, and account support.",canonical:`${H}/support`,robots:"index, follow",og:{title:"Support - ChartMentor",description:"Find answers to common questions about ChartMentor.",type:"website"},twitter:{card:"summary",title:"Support - ChartMentor",description:"Find answers to common questions about ChartMentor."},schema:[we([{name:"Support",url:"/support"}])]},"/privacy":{title:"Privacy Policy - ChartMentor",description:"ChartMentor Privacy Policy. Learn how we collect, use, and protect your personal information. We do not sell your data.",canonical:`${H}/privacy`,robots:"index, follow",og:{title:"Privacy Policy - ChartMentor",description:"ChartMentor Privacy Policy. Learn how we collect, use, and protect your personal information.",type:"website"},twitter:{card:"summary",title:"Privacy Policy - ChartMentor",description:"ChartMentor Privacy Policy. Learn how we collect, use, and protect your personal information."},schema:[we([{name:"Privacy Policy",url:"/privacy"}])]},"/terms":{title:"Terms of Service - ChartMentor",description:"ChartMentor Terms of Service. By using ChartMentor you agree to these terms. AI-generated analyses are for educational purposes only.",canonical:`${H}/terms`,robots:"index, follow",og:{title:"Terms of Service - ChartMentor",description:"ChartMentor Terms of Service.",type:"website"},twitter:{card:"summary",title:"Terms of Service - ChartMentor",description:"ChartMentor Terms of Service."},schema:[we([{name:"Terms of Service",url:"/terms"}])]},"/disclaimer":{title:"Trading Disclaimer - ChartMentor",description:"ChartMentor is NOT a financial advisor. All AI-generated analyses are for educational and informational purposes only. See our full disclaimer.",canonical:`${H}/disclaimer`,robots:"index, follow",og:{title:"Disclaimer - ChartMentor",description:"ChartMentor is NOT a financial advisor. All AI-generated analyses are for educational purposes only.",type:"website"},twitter:{card:"summary",title:"Disclaimer - ChartMentor",description:"ChartMentor is NOT a financial advisor."},schema:[we([{name:"Disclaimer",url:"/disclaimer"}])]},"/partners":{title:"Affiliate Program - Earn 30% Recurring | ChartMentor",description:"Earn 30% recurring commission for 12 months on every trader you refer to ChartMentor. No approval queue, PayPal payouts, $50 minimum.",canonical:`${H}/partners`,robots:"index, follow",og:{title:"ChartMentor Affiliate Program",description:"30% re
3curring commission for 12 months on every referral. Get your affiliate link.",type:"website"},twitter:{card:"summary",title:"ChartMentor Affiliate Program",description:"30% recurring commission for 12 months on every referral."},schema:[we([{name:"Partners",url:"/partners"}])]},"/tradingview-setup":{title:"TradingView Setup for ChartMentor AI Plan Reviews",description:"Configure TradingView for reliable AI plan reviews. Learn how to show your Position box, context, indicators, and invalidation clearly.",canonical:`${H}/tradingview-setup`,robots:"index, follow",og:{title:"TradingView Setup for ChartMentor",description:"Configure your TradingView charts for optimal AI-powered chart scans.",type:"website"},twitter:{card:"summary",title:"TradingView Setup for ChartMentor",description:"Configure your TradingView charts for optimal AI-powered chart scans."},schema:[we([{name:"TradingView Setup",url:"/tradingview-setup"}])]},"/lp/trade-review":{title:"Review Any TradingView Plan Before Entry | ChartMentor",description:"Use ChartMentor to pressure-test a declared TradingView plan through your Strategy Lens before entry. Start free, no credit card required.",canonical:`${H}/lp/trade-review`,robots:"noindex, follow",og:{title:"Review Any TradingView Plan Before Entry | ChartMentor",description:"A focused pre-entry plan-review page for traders who want a structured checkpoint before committing risk.",type:"website"},twitter:{card:"summary_large_image",title:"Review Any TradingView Plan Before Entry | ChartMentor",description:"Run an AI mentor review on a declared TradingView plan before entry. Generous first session free with no card required."},schema:[we([{name:"Plan Review Landing Page",url:"/lp/trade-review"}]),ea({title:"Review Any TradingView Plan Before Entry",description:"A focused pre-entry plan-review page for traders who want a structured checkpoint before committing risk.",path:"/lp/trade-review"})]},...Tl},Sl=new Set(Object.keys(ta)),El=()=>{const t=We().pathname;return g.useEffect(()=>{Sl.has(t)?Fr(ta[t],t):Fr({title:"ChartMentor",description:"AI-powered trading mentor for TradingView.",robots:vl},t)},[t]),null},jl=()=>{const e=We(),t=g.useRef(null),r=g.useCallback(()=>{const n=`${e.pathname}${e.search}`;t.current!==n&&tl(e.pathname,e.search)&&(t.current=n)},[e.pathname,e.search]);return g.useEffect(()=>{r()},[r]),null},Vt="AW-18123380216",Al=null,ra={signup:Al,purchase:"YoNzCITG3aMcEPir88FD"},_l="cm_google_ads_conv_",Ze=()=>typeof window<"u";function Rl(e,t){return`${_l}${e}_${t}`}function Il(e){if(!Ze())return!1;try{return window.localStorage.getItem(e)==="true"}catch{return!1}}function Pl(e){if(Ze())try{window.localStorage.setItem(e,"true")}catch{}}async function Nl(e){if(!Ze()||!window.crypto?.subtle)return null;try{const t=new TextEncoder().encode(e.trim().toLowerCase()),r=await window.crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(r)).map(n=>n.toString(16).padStart(2,"0")).join("")}catch{return null}}async function Ml(e){if(!Ze()||typeof window.gtag!="function"||!e)return;const t=await Nl(e);t&&window.gtag("set","user_data",{sha256_email_address:t})}async function na(e,t,r,n){if(!Ze())return!1;if(!e)return console.debug("[GoogleAds] Skipping conversion â label not configured",{transactionId:t,...r}),!1;if(typeof window.gtag!="function")return console.debug("[GoogleAds] gtag not available"),!1;const o=Rl(e,t);return Il(o)?!1:(await Ml(n),window.gtag("event","conversion",{send_to:`${Vt}/${e}`,transaction_id:t,value:r.value??0,currency:r.currency??"USD"}),Pl(o),!0)}function hd(e,t){return na(ra.signup,e,{value:0,currency:"USD"},t)}function pd(e,t){return na(ra.purchase,e,{value:t?.value??1,currency:t?.currency},t?.email??null)}const Lr="cm-google-gtag",Ol=()=>typeof window<"u"&&typeof document<"u";function Dl(){window.dataLayer=window.dataLayer||[],window.gtag=window.gtag||((...e)=>{window.dataLayer?.push(e)})}function Vr(){if(Ol()){if(Dl(),!document.getElementById(Lr)){const e=document.createElement("script");e.id=Lr,e.async=!0,e.src=`https://www.googletagmanager.com/gtag/js?id=${Vt}`,document.head.appendChild(e)}window.__cmGoogleTagConfigured||(window.__cmGoogleTagConfigured=!0,window.gtag("js",new Date),window.gtag("config",Vt))}}function Fl(e){return!1}const Ll=()=>
3{const e=We(),t=g.useRef(null);return g.useEffect(()=>{Vr()},[]),g.useEffect(()=>{const r=`${e.pathname}${e.search}`;t.current!==r&&(Vr(),Fl()&&(t.current=r))},[e.pathname,e.search]),null},Gt=An("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-bold ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-border bg-transparent hover:bg-secondary",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-secondary",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 px-4 py-2",sm:"h-7 px-3",lg:"h-9 px-6",icon:"h-8 w-8"}},defaultVariants:{variant:"default",size:"default"}}),ve=g.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},i)=>{const l=n?Ba:"button";return a.jsx(l,{className:D(Gt({variant:t,size:r,className:e})),ref:i,...o})});ve.displayName="Button";const aa=({className:e="h-6 w-6"})=>a.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("path",{d:"M3 17l6-6 4 4 8-8",stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),a.jsx("path",{d:"M14 7h7v7",stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})]});function Vl(){const{user:e}=ft(),[t,r]=g.useState(!1),[n,o]=g.useState(!0);return g.useEffect(()=>{(async()=>{if(!e){r(!1),o(!1);return}try{const{data:l,error:c}=await se.from("user_roles").select("role").eq("user_id",e.id).eq("role","admin").maybeSingle();c?(console.error("Error checking admin role:",c),r(!1)):r(!!l)}catch(l){console.error("Error:",l),r(!1)}finally{o(!1)}})()},[e]),{isAdmin:t,loading:n}}const Ul=Ga,$l=Ha,ql=g.forwardRef(({className:e,inset:t,children:r,...n},o)=>a.jsxs(Zr,{ref:o,className:D("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent",t&&"pl-8",e),...n,children:[r,a.jsx(eo,{className:"ml-auto h-4 w-4"})]}));ql.displayName=Zr.displayName;const zl=g.forwardRef(({className:e,...t},r)=>a.jsx(Xr,{ref:r,className:D("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...t}));zl.displayName=Xr.displayName;const oa=g.forwardRef(({className:e,sideOffset:t=4,...r},n)=>a.jsx(Ka,{children:a.jsx(en,{ref:n,sideOffset:t,className:D("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...r})}));oa.displayName=en.displayName;const ia=g.forwardRef(({className:e,inset:t,...r},n)=>a.jsx(tn,{ref:n,className:D("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",t&&"pl-8",e),...r}));ia.displayName=tn.displayName;const Bl=g.forwardRef(({className:e,children:t,checked:r,...n},o)=>a.jsxs(rn,{ref:o,className:D("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",e),checked:r,...n,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(nn,{children:a.jsx(yn,{className:"h-4 w-4"})})}),t]}));Bl.displayName=rn.displayName;const Kl=g.forwardRef(({className:e,children:t,...r},n)=>
3a.jsxs(an,{ref:n,className:D("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",e),...r,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(nn,{children:a.jsx(to,{className:"h-2 w-2 fill-current"})})}),t]}));Kl.displayName=an.displayName;const Gl=g.forwardRef(({className:e,inset:t,...r},n)=>a.jsx(on,{ref:n,className:D("px-2 py-1.5 text-sm font-semibold",t&&"pl-8",e),...r}));Gl.displayName=on.displayName;const Hl=g.forwardRef(({className:e,...t},r)=>a.jsx(sn,{ref:r,className:D("-mx-1 my-1 h-px bg-muted",e),...t}));Hl.displayName=sn.displayName;const St=[{name:"How It Works",path:"/#how-it-works",kind:"scroll"},{name:"Pricing",path:"/#pricing",kind:"scroll"}],Wl=[{name:"Getting started",path:"/docs",kind:"route"},{name:"TradingView setup",path:"/tradingview-setup",kind:"route"},{name:"Help Center",path:"/support",kind:"route"},{name:"AI Plan Review",path:"/tradingview-ai-trade-review",kind:"route"},{name:"Pre-Trade Checklist",path:"/pre-trade-checklist",kind:"route"}],Ql=()=>{const e=We(),t=Br(),[r,n]=g.useState(!1),[o,i]=g.useState(null),{user:l,loading:c,signOut:d}=ft(),{isAdmin:u}=Vl(),h=Wl,b="https://chromewebstore.google.com/detail/chartmentor-ai-trading-me/neeoehhmfaeoegkhddlbhjnojiabgman";g.useEffect(()=>{if(e.pathname!=="/"){i(null);return}const x=St.map(C=>C.path.replace("/#","")).map(C=>document.getElementById(C)).filter(C=>!!C);if(x.length===0)return;const S=new IntersectionObserver(C=>{const N=C.filter(M=>M.isIntersecting).sort((M,F)=>F.intersectionRatio-M.intersectionRatio);N[0]&&i(N[0].target.id)},{rootMargin:"-56px 0px -55% 0px",threshold:[0,.25,.5,.75,1]});return x.forEach(C=>S.observe(C)),()=>S.disconnect()},[e.pathname]),g.useEffect(()=>{if(e.pathname!=="/"||!e.hash)return;const m=e.hash.replace("#","");requestAnimationFrame(()=>{document.getElementById(m)?.scrollIntoView({behavior:"smooth"})})},[e.pathname,e.hash]);const f=m=>e.pathname===m,s=m=>e.pathname==="/"&&o===m.replace("/#",""),v=(m,x)=>{n(!1);const S=x.replace("/#","");e.pathname==="/"?(m.preventDefault(),document.getElementById(S)?.scrollIntoView({behavior:"smooth"})):(m.preventDefault(),t(`/#${S}`))},p=async()=>{await d(),n(!1)},y=m=>`px-3 py-2 rounded-lg text-sm font-medium transition-colors ${m?"bg-secondary text-foreground border border-transparent":"text-muted-foreground hover:text-foreground hover:bg-secondary border border-transparent"}`;return a.jsxs("nav",{className:"sticky top-0 z-50 bg-background border-b border-border",children:[a.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:fixed focus:left-4 focus:top-4 focus:z-[100] focus:rounded-lg focus:bg-primary focus:px-4 focus:py-3 focus:text-primary-foreground",children:"Skip to content"}),a.jsxs("div",{className:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8",children:[a.jsxs("div",{className:"flex items-center justify-between h-16",children:[a.jsxs(Y,{to:"/",className:"flex items-center space-x-2 group",children:[a.jsx("div",{className:"p-1 rounded bg-[#2962FF]",children:a.jsx(aa,{className:"h-4 w-4 text-white"})}),a.jsx("span",{className:"text-sm font-bold tracking-tight uppercase",children:"ChartMentor"})]}),a.jsxs("div",{className:"hidden lg:flex items-center space-x-1",children:[a.jsx(Y,{to:"/",className:y(e.pathname==="/"&&!o),children:"Home"}),St.map(m=>a.jsx("a",{href:m.path,onClick:x=>v(x,m.path),className:y(s(m.path)),children:m.name},m.path)),a.jsx("span",{className:"mx-1 h-4 w-px bg-border","aria-hidden":"true"}),a.jsxs(Ul,{children:[a.jsxs($l,{className:`${y(h.some(m=>f(m.path)))} inline-flex items-center gap-1 outline-none`,children:["Resources",a.jsx(wn,{className:"h-3 w-3"})]}),a.jsx(oa,{align:"start",children:h.map(m=>a.jsx(ia,{asChild:!0,children:a.jsx(Y,{to:m.path,children:m.name})},m.path))})]}),a.jsxs("a",{href:b,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-1.5 rounded text-sm font-medium transition-colors text-muted-foreground hover:text-foreground hover:bg-secondary flex items-center gap-1.5",children:[a.jsx(ar,{className:"h-3.5 w-3.5"}
3),"Install Extension"]})]}),a.jsx("div",{className:"hidden lg:flex items-center space-x-2",children:!c&&(l?a.jsxs(a.Fragment,{children:[u&&a.jsx(ve,{variant:"ghost",size:"sm",asChild:!0,className:"h-8 text-sm font-medium",children:a.jsxs(Y,{to:"/admin",children:[a.jsx(or,{className:"h-3.5 w-3.5 mr-1.5"}),"Admin"]})}),a.jsx(ve,{variant:"ghost",size:"sm",asChild:!0,className:"h-8 text-sm font-medium",children:a.jsxs(Y,{to:"/account",children:[a.jsx(ir,{className:"h-3.5 w-3.5 mr-1.5"}),"Account"]})}),a.jsxs(ve,{variant:"outline",size:"sm",onClick:p,className:"h-8 text-sm font-medium border-border",children:[a.jsx(sr,{className:"h-3.5 w-3.5 mr-1.5"}),"Logout"]})]}):a.jsxs(a.Fragment,{children:[a.jsx(ve,{variant:"ghost",size:"sm",asChild:!0,className:"h-8 text-sm font-medium",children:a.jsxs(Y,{to:"/auth?mode=login",children:[a.jsx(lr,{className:"h-3.5 w-3.5 mr-1.5"}),"Login"]})}),a.jsx(ve,{asChild:!0,className:"bg-primary hover:bg-primary/90 text-primary-foreground rounded h-8 text-sm font-medium px-4",children:a.jsx(Y,{to:"/auth?plan=free&mode=signup&source=website_homepage&signup_context=homepage_free",children:"Review your first chart free"})})]}))}),a.jsx("button",{className:"lg:hidden p-2 rounded-lg hover:bg-secondary transition-colors",onClick:()=>n(!r),"aria-label":"Toggle menu","aria-expanded":r,children:r?a.jsx(gn,{className:"h-6 w-6"}):a.jsx(ro,{className:"h-6 w-6"})})]}),r&&a.jsx("div",{className:"lg:hidden py-4 border-t border-border animate-fade-in",children:a.jsxs("div",{className:"flex flex-col space-y-2",children:[a.jsx(Y,{to:"/",onClick:()=>n(!1),className:"px-4 py-3 rounded-lg text-sm font-medium text-muted-foreground hover:text-foreground hover:bg-secondary/50",children:"Home"}),St.map(m=>a.jsx("a",{href:m.path,onClick:x=>v(x,m.path),className:`px-4 py-3 rounded-lg text-sm font-medium transition-colors ${s(m.path)?"bg-secondary text-foreground":"text-muted-foreground hover:text-foreground hover:bg-secondary/50"}`,children:m.name},m.path)),a.jsx("div",{className:"border-t border-border my-2"}),h.map(m=>a.jsx(Y,{to:m.path,onClick:()=>n(!1),className:`px-4 py-3 rounded-lg text-sm font-medium transition-colors ${f(m.path)?"bg-secondary text-foreground":"text-muted-foreground hover:text-foreground hover:bg-secondary/50"}`,children:m.name},m.path)),a.jsxs("a",{href:b,target:"_blank",rel:"noopener noreferrer",onClick:()=>n(!1),className:"px-4 py-3 rounded-lg text-sm font-medium transition-colors text-muted-foreground hover:text-foreground hover:bg-secondary/50 flex items-center",children:[a.jsx(ar,{className:"h-4 w-4 mr-2"}
3),"Install Extension"]}),a.jsx("div",{className:"border-t border-border my-2 pt-2",children:!c&&(l?a.jsxs(a.Fragment,{children:[u&&a.jsxs(Y,{to:"/admin",onClick:()=>n(!1),className:"px-4 py-3 rounded-lg text-sm font-medium text-muted-foreground hover:text-foreground hover:bg-secondary/50 flex items-center",children:[a.jsx(or,{className:"h-4 w-4 mr-2"}),"Admin Dashboard"]}),a.jsxs(Y,{to:"/account",onClick:()=>n(!1),className:"px-4 py-3 rounded-lg text-sm font-medium text-muted-foreground hover:text-foreground hover:bg-secondary/50 flex items-center",children:[a.jsx(ir,{className:"h-4 w-4 mr-2"}),"Account"]}),a.jsxs("button",{onClick:p,className:"w-full px-4 py-3 rounded-lg text-sm font-medium text-muted-foreground hover:text-foreground hover:bg-secondary/50 flex items-center",children:[a.jsx(sr,{className:"h-4 w-4 mr-2"}),"Logout"]})]}):a.jsxs(a.Fragment,{children:[a.jsxs(Y,{to:"/auth?mode=login",onClick:()=>n(!1),className:"px-4 py-3 rounded-lg text-sm font-medium text-muted-foreground hover:text-foreground hover:bg-secondary/50 flex items-center",children:[a.jsx(lr,{className:"h-4 w-4 mr-2"}),"Login"]}),a.jsx(ve,{asChild:!0,className:"mt-2 w-full bg-primary hover:bg-primary/90 text-primary-foreground rounded",children:a.jsx(Y,{to:"/auth?plan=free&mode=signup&source=website_homepage&signup_context=homepage_free",onClick:()=>n(!1),children:"Review your first chart free"})})]}))})]})})]})]})},Yl="/auth?plan=free&mode=signup&source=website_homepage&signup_context=homepage_free",Jl=()=>{const{user:e}=ft();return a.jsx("section",{className:"px-4 py-12 sm:px-6 sm:py-16 lg:px-8",children:a.jsxs("div",{className:"mx-auto grid max-w-7xl items-center gap-10 lg:grid-cols-[0.9fr_1.1fr] lg:gap-14",children:[a.jsxs("div",{className:"max-w-xl",children:[a.jsx("p",{className:"mb-5 text-sm font-medium text-muted-foreground",children:"Your AI mentor on TradingView"}),a.jsxs("h1",{className:"text-4xl font-semibold leading-[1.08] tracking-tight sm:text-5xl lg:text-[2.8rem] xl:text-[3.4rem]",children:["A second look.",a.jsx("br",{}),"Before you trade."]}),a.jsx("p",{className:"mt-6 max-w-md text-lg leading-relaxed text-muted-foreground",children:"Check your next trade before you enter. Review the chart, your plan and your own rules."}),a.jsxs("div",{className:"mt-8",children:[a.jsxs("div",{className:"flex flex-wrap items-center gap-5",children:[a.jsx(ve,{asChild:!0,className:"h-12 rounded-lg px-6 text-base font-semibold",children:a.jsxs(Y,{to:e?"/account":Yl,children:[e?"Open account":"Review your first chart free",a.jsx(no,{className:"ml-2 h-4 w-4"})]})}),a.jsx("a",{href:"#how-it-works",className:"text-sm font-medium underline-offset-4 hover:underline",children:"How It Works"})]}),!e&&a.jsx("p",{className:"mt-4 max-w-sm text-sm leading-relaxed text-muted-foreground",children:"Generous first session with chart reviews, plus daily mentor chat. No card required."})]})]}),a.jsxs("figure",{className:"min-w-0",children:[a.jsx("a",{href:"/images/chartmentor-current-review.webp",target:"_blank",rel:"noopener noreferrer","aria-label":"Enlarge the example ChartMentor review",children:a.jsx("img",{src:"/images/chartmentor-current-review.webp",alt:"Example ChartMentor review beside a TradingView gold chart, showing plan conflicts, entry, stop, target and follow-up question",width:1616,height:973,loading:"eager",fetchPriority:"high",className:"w-full rounded-xl border border-border"})}),a.jsx("figcaption",{className:"mt-3 text-sm text-muted-foreground",children:"Example review in the current interface. Select to enlarge."})]})]})})},Zl=[{title:"Bring your plan",description:"Mark your entry, stop and target on TradingView, or enter the levels yourself."},{title:"Talk it through",description:"Review the evidence, the risks and any conflicts with your trading rules."},{title:"Make your decision",description:"Take it, change it or skip it. Keep the review and outcome to learn from later."}],Xl=()=>a.jsx("section",{id:"how-it-works",className:"border-t border-border px-4 py-12 sm:px-6 sm:py-16 lg:px-8",children:a.jsxs("div",{className:"mx-auto max-w-7xl",children:[a.jsx("h2",{className:"text-3xl font-semibold tracking-tight",children:"Built around the way you trade."}),a.jsx("ol",{className:"mt-8 grid gap-8 md:grid-cols-3 md:gap-12",children:Zl.map(e=>a.jsxs("li",{children:[a.jsx("h3",{className:"text-lg font-semibold",children:e.title}),a.jsx("p",{className:"mt-3 text-base leading-relaxed text-muted-foreground",children:e.description})]},e.title))}),a.jsx(Y,{to:"/tradingview-setup",className:"mt-7 inline-block text-sm font-medium underline underline-offset-4",children:"TradingView setup guide"})]})}),ec=Qa,fd=Ya,tc=Wa,sa=g.forwardRef(({className:e,...t},r)=>a.jsx(ln,{className:D("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t,ref:r}));sa.displayName=ln.displayName;const la=g.forwardRef(({className:e,...t},r)=>a.jsxs(tc,{children:[a.jsx(sa,{}),a.jsx(cn,{ref:r,className:D("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rou
3nded-lg",e),...t})]}));la.displayName=cn.displayName;const ca=({className:e,...t})=>a.jsx("div",{className:D("flex flex-col space-y-2 text-center sm:text-left",e),...t});ca.displayName="AlertDialogHeader";const da=({className:e,...t})=>a.jsx("div",{className:D("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});da.displayName="AlertDialogFooter";const ua=g.forwardRef(({className:e,...t},r)=>a.jsx(dn,{ref:r,className:D("text-lg font-semibold",e),...t}));ua.displayName=dn.displayName;const ha=g.forwardRef(({className:e,...t},r)=>a.jsx(un,{ref:r,className:D("text-sm text-muted-foreground",e),...t}));ha.displayName=un.displayName;const pa=g.forwardRef(({className:e,...t},r)=>a.jsx(hn,{ref:r,className:D(Gt(),e),...t}));pa.displayName=hn.displayName;const fa=g.forwardRef(({className:e,...t},r)=>a.jsx(pn,{ref:r,className:D(Gt({variant:"outline"}),"mt-2 sm:mt-0",e),...t}));fa.displayName=pn.displayName;const ma="price_1TdFVnC6OX54x5D6IvGR7RnF",ga="price_1TdFWDC6OX54x5D62J29IUBv",Ur=39.99,$r=399,rc={starter:9.99,pro:Ur,elite:Ur},nc={starter:99,pro:$r,elite:$r},ya=rc,wa=nc,md={free:"Free",starter:"Starter",pro:"Unlimited",elite:"Elite"},at={free:0,starter:1,pro:2,elite:3},ac=[{name:"Free",tier:"free",monthlyPrice:0,annualPrice:0,subtext:"Generous first session to test your trade ideas",features:["Generous first mentor session on your live chart","Observed facts, questions, and playbook conflicts","Strategy Lens calibrated to your trading style","Daily mentor chat to test setups","No credit card required"],cta:"Start Free â No Card Needed",popular:!1,priceIdMonthly:null,priceIdAnnual:null},{name:"Unlimited",tier:"pro",monthlyPrice:ya.pro,annualPrice:wa.pro,subtext:"For active traders who review decisions every day",features:["Unlimited mentor chat and chart reviews","Current price, macro drivers, catalysts, and cited research","Follow-up chat and personal review history","Your saved playbook rules and patterns surfaced from repeated reviews","Outcome tracking and priority support"],cta:"Get Unlimited",popular:!0,badge:"RECOMMENDED",priceIdMonthly:ma,priceIdAnnual:ga}];function Ke(e){return e==="starter"||e==="pro"||e==="elite"}function Ht(e){return e==="annual"||e==="yearly"?"annual":"monthly"}function oc(e,t){return e!=="pro"?null:Ht(t)==="annual"?ga:ma}function ic(e,t){if(!e)return 0;const r=e;return t==="annual"||t==="yearly"?wa[r]??0:ya[r]??0}const gd="/account/billing?checkout=resume",Me="dollar_trial_1",Wt="cm_pending_checkout",sc=1800*1e3,va=new Set(["recovery30",Me]),Qt=()=>typeof window<"u";function lc(e){if(!Qt())return null;try{return window.localStorage.getItem(e)}catch{return null}}function cc(e,t){if(Qt())try{window.localStorage.setItem(e,t)}catch{}}function dc(e){if(Qt())try{window.localStorage.removeItem(e)}catch{}}function yd(e,t,r,n){const o=e?.toLowerCase();if(!Ke(o))return null;const i=o==="pro"?void 0:o;return{tier:"pro",billingCycle:Ht(t),createdAt:Date.now(),...r&&va.has(r)?{offer:r}:{},checkoutSource:n.slice(0,100),...i?{substitutedFromTier:i}:{}}}function uc(e,t,r,n){const o={tier:e,billingCycle:t,createdAt:Date.now(),...r?{offer:r}:{},...n?{checkoutSource:n.slice(0,100)}:{}};return cc(Wt,JSON.stringify(o)),o}function wd(){const e=lc(Wt);if(!e)return null;try{const t=JSON.parse(e);if(!Ke(t.tier))return null;const r=Number(t.createdAt);return!Number.isFinite(r)||Date.now()-r>sc?(qr(),null):{tier:"pro",billingCycle:Ht(t.billingCycle),createdAt:r,offer:typeof t.offer=="string"&&va.has(t.offer)?t.offer:void 0,checkoutSource:typeof t.checkoutSource=="string"?t.checkoutSource.slice(0,100):void 0,...t.tier!=="pro"?{substitutedFromTier:t.tier}:{}}}catch{return qr(),null}}function qr(){dc(Wt)}async function hc(e,t,r,n="website_pricing"){const o=oc(e,t);if(!o)throw ie("checkout_error",{plan:e,billing:t,reason:"missing_price_id"}),new Error("Invalid plan selected.");const i=Js("InitiateCheckout");ie("checkout_requested",{plan:e,billing:t,...r?{offer:r}:{},checkoutSource:n});const{data:l,error:c}=await se.functions.invoke("create-checkout-session",{body:{priceId:o,planTier:e,billingCycle:t,checkoutSource:n,...r?{offer:r}:{},...i?{metaTracking:i}:{}}});if(c)throw ie("checkout_error",{plan:e,billing:t,reason:"checkout_function_invoke_failed"}),c;const d=l||{},u=d.offer||r,h=u===Me?1:ic(e,t);return d.planChanged?ie("plan_changed",{plan:e,direction:d.direction,billing:t,...r?{offer:r}:{},checkoutSource:n}):d.url?(Xs(e,t,h,i?.eventId),ie("checkout_started",{plan:e,billing:t,...u?{offer:u}:{},checkoutSource:n,...i?{metaTracking:i}:{}})):d.redirectTo||ie("checkout_error",{plan:e,billing:t,reason:"no_checkout_url_returned"}),{priceId:o,data:d}}const zr={free:{monthly:5,daily:5},starter:{monthly:2e3,daily:2e3},pro:{monthly:2e3,daily:2e3},elite:{monthly:2e3,daily:2e3}};function pc(e){return zr[e||"free"]||zr.free}function fc(e){return pc(e).monthly}const ba=fc("free");function mc(e){const t=typeof e=="number"?Math.floor(e):NaN;return Number.isFinite(t)&&t>0?t:ba}const ht={experimentId:"dollar_trial_v1",assignedVariant:"dollar_trial",variant:"dollar_trial",enabled:!1,rolloutPercent:100,freeScanLimit:ba,proofReviewComplete:!1,eligible:!1,showOffer:!1,priceN
3ow:1,trialDays:7,recurringMonthlyPrice:39.99},gc={...ht,enabled:!0,eligible:!0,showOffer:!0};function yc(e){if(!e||typeof e!="object")return ht;const t=e,r=t.enabled===!0,n=t.eligible===!0&&t.showOffer===!0;return{experimentId:"dollar_trial_v1",assignedVariant:"dollar_trial",variant:"dollar_trial",enabled:r,rolloutPercent:100,freeScanLimit:mc(t.freeScanLimit),proofReviewComplete:t.proofReviewComplete===!0,eligible:r&&n,showOffer:r&&n,priceNow:1,trialDays:7,recurringMonthlyPrice:39.99}}function wc(e){const t=ys({queryKey:["dollar-trial-offer",e?.id],enabled:!!e,staleTime:3e4,retry:1,queryFn:async()=>{const{data:r,error:n}=await se.functions.invoke("get-profile");if(n)throw n;return yc(r?.monetizationOffer)}});return{offer:e?t.isError?ht:t.data??ht:gc,loading:!!e&&t.isPending,error:e?t.error:null,retry:t.refetch}}function vc({isAnnual:e,isDollarTrialTreatment:t,isExtensionPricingSource:r,onAnnualChange:n}){return a.jsxs("div",{className:"mx-auto mb-8 max-w-3xl text-center",children:[a.jsx("h2",{className:"text-3xl font-semibold tracking-tight sm:text-4xl",children:t?"Seven days. Your own charts.":"Choose your plan."}),a.jsx("p",{className:"mt-4 text-base text-muted-foreground",children:t?"Full Unlimited access for $1. See how it fits your trading routine.":r?"Continue reviewing your plans with ChartMentor.":"A plan for your trading routine."}),!t&&a.jsx("div",{className:"mt-6 inline-flex rounded-lg border border-border p-1",children:[!1,!0].map(o=>a.jsx("button",{type:"button","aria-pressed":e===o,onClick:()=>n(o),className:`rounded-md px-5 py-2 text-sm font-medium ${e===o?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"}`,children:o?"Annual":"Monthly"},String(o)))})]})}const bc=e=>Number.isInteger(e)?e.toLocaleString("en-US"):e.toFixed(2);function xc({plans:e,isAnnual:t,isDollarTrialTreatment:r,dollarTrialPriceNow:n,userPresent:o,profileLoaded:i,currentTier:l,subscriptionStatus:c,isSubscribed:d,loadingPriceId:u,getCtaForPlan:h,onCheckout:b}){const f=[...e].sort((s,v)=>+(v.tier==="pro")-+(s.tier==="pro"));return a.jsx("div",{className:"mx-auto grid max-w-4xl gap-5 md:grid-cols-2",children:f.map(s=>{const v=r&&s.tier==="pro",p=v?n:t?s.annualPrice:s.monthlyPrice,y=v?s.priceIdMonthly:t?s.priceIdAnnual:s.priceIdMonthly,m=i&&o&&(s.tier==="free"&&l==="free"&&c==="free"||d&&s.tier===l),x=u!==null&&u===y;return a.jsxs("div",{className:`flex flex-col rounded-xl border bg-card p-6 sm:p-8 ${s.tier==="pro"?"border-primary":"border-border"}`,children:[a.jsxs("div",{className:"flex items-center justify-between gap-3",children:[a.jsx("h3",{className:"text-xl font-semibold",children:s.name}),v&&!m&&a.jsx("span",{className:"text-xs text-muted-foreground",children:"One-time intro price"}),m&&a.jsx("span",{className:"text-sm text-muted-foreground",children:"Current plan"})]}),a.jsxs("div",{className:"mt-5 flex items-baseline gap-2",children:[a.jsxs("span",{className:"text-5xl font-semibold tracking-tight",children:["$",bc(p)]}),a.jsx("span",{className:"text-sm text-muted-foreground",children:v?"for 7 days":s.tier==="free"?"no card required":t?"/ year":"/ month"})]}),a.jsx("p",{className:"mt-4 text-sm leading-relaxed text-muted-foreground",children:s.tier==="free"?"Generous first session, with guided follow-up.":"Unlimited mentor chat and chart reviews."}),a.jsx("ul",{className:"my-6 space-y-3",children:s.features.map(S=>a.jsxs("li",{className:"flex items-start gap-3 text-sm leading-relaxed text-muted-foreground",children:[a.jsx(yn,{className:"mt-0.5 h-4 w-4 shrink-0 text-foreground"}),S]},S))}),a.jsxs("div",{className:"mt-auto",children:[a.jsx(ve,{onClick:()=>b(y,s.name,s.tier),disabled:x||m||u!==null,variant:s.tier==="pro"?"default":"outline",className:"h-12 w-full rounded-lg text-base font-semibold",children:x?"Opening checkout...":h(s,y)}),v&&a.jsx("p",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:"Then $39.99/month unless canceled. Introductory price available once per eligible account."})]})]},s.tier)})})}const kc=()=>{const[e,t]=g.useState(!1),[r,n]=g.useState(null),[o,i]=g.useState("free"),[l,c]=g.useState("free"),[d,u]=g.useState(!1),[h,b]=g.useState(null),{user:f}=ft(),{toast:s}=jn(),v=Br(),[p]=La(),y=p.get("offer")||void 0,m=p.get("source")?.trim(),x=m?m.slice(0,100):y?"recovery_offer":"direct",S=x==="extension"||x.startsWith("extension_"),{offer:C,loading:N,error:M,retry:F}=wc(f),P=C.showOffer,X=g.useRef(null),J=g.useRef(!1),ee=g.useRef(!1);g.useEffect(()=>{if(!f){i("free"),c("free"),u(!0);return}u(!1);let j=!1;return(async()=>{try{const{data:q}=await se.from("profiles").select("plan_tier, subscription_status").eq("id",f.id).maybeSingle();if(j)return;i(q?.plan_tier??"free"),c(q?.subscription_status??"free")}finally{j||u(!0)}})(),()=>{j=!0}},[f]),g.useEffect(()=>{if(!f||N||J.current)return;const j=X.current;if(!j)return;const q=new IntersectionObserver(([k])=>{!k?.isIntersecting||J.current||(J.current=!0,nl(x,{experiment:C.experimentId,variant:C.variant,assignedVariant:C.assignedVariant,freeScanLimit:C.freeScanLimit}),q.disconnect())},{threshold:.35});return q.observe(j),()=>q.disconnect()},[N,C,x,f]),g.useEffect(()=>{!f||N||!P||ee.current||(ee.current=!0,al(x))}
3,[N,P,x,f]),g.useEffect(()=>{P&&e&&t(!1)},[e,P]);const R=!!f&&["active","trialing","past_due"].includes(l)&&o!=="free",me=async()=>{if(!f)return;const{data:j}=await se.from("profiles").select("plan_tier, subscription_status").eq("id",f.id).maybeSingle();i(j?.plan_tier??"free"),c(j?.subscription_status??"free")},te=async(j,q,k)=>{if(!Ke(k)){s({title:"Invalid plan",description:"Please choose a paid plan.",variant:"destructive"});return}const z=P?"monthly":e?"annual":"monthly";n(j);try{const V=!R&&z==="monthly"&&P?Me:!R&&z==="monthly"&&y==="recovery30"?y:void 0,{data:I}=await hc(k,z,V,x);if(I?.alreadyOnPlan){s({title:"You're already on this plan",description:"No changes were made."});return}if(I?.planChanged){s({title:I.direction==="upgrade"?"Upgraded!":I.direction==="downgrade"?"Downgrade scheduled":"Plan updated",description:`You're now on ${q}. Prorated charges will appear on your next invoice.`}),await me();return}if(I?.url){window.location.href=I.url;return}I?.redirectTo&&(window.location.href=I.redirectTo)}catch(V){console.error("Checkout error:",V),s({title:"Checkout failed",description:V instanceof Error?V.message:"Something went wrong. Please try again.",variant:"destructive"})}finally{n(null)}},ge=async(j,q,k)=>{if(!j){if(!f){window.location.href=`/auth?plan=free&source=${encodeURIComponent(x)}&signup_context=pricing_free`;return}s({title:"You're already on the free plan",description:"Open your account to review your usage and settings."}),v("/account");return}const z=P?"monthly":e?"annual":"monthly";if(Ke(k)&&(rl({source:x,experiment:C.experimentId,variant:C.variant,assignedVariant:C.assignedVariant,offer:P?Me:void 0}),ol(k,z),ie("upgrade_cta_clicked",{surface:x,plan:k,billing:z,...P?{offer:Me}:{}})),!f){if(Ke(k)){const V=e?"annual":"monthly",I=V==="monthly"&&P?Me:V==="monthly"&&y==="recovery30"?y:void 0;uc(k,V,I,x);const L=I?`&offer=${I}`:"";window.location.href=`/auth?plan=${k}&billing=${V}${L}&source=${encodeURIComponent(x)}&signup_context=pricing_paid`}return}if(R){if(k===o){s({title:"You're already on this plan"});return}const V=(at[k]??0)>(at[o]??0)?"upgrade":"downgrade";b({priceId:j,planName:q,tier:k,direction:V});return}await te(j,q,k)},re=(j,q)=>f?d&&j.tier==="free"&&o==="free"&&l==="free"?"Current plan":R?j.tier===o?"Current plan":(at[j.tier]??0)>(at[o]??0)?"Upgrade":"Downgrade":P&&j.tier==="pro"?"Start for $1":j.tier==="free"?"Start free":j.cta:P&&j.tier==="pro"?"Start for $1":j.tier==="free"?"Start free":j.cta;return a.jsxs("section",{ref:X,id:"pricing",className:"border-t border-border bg-background px-4 py-12 sm:px-6 sm:py-16 lg:px-8",children:[a.jsx("div",{className:"mx-auto max-w-7xl",children:f&&(N||!d)?a.jsx("div",{role:"status",className:"mx-auto h-80 max-w-4xl rounded-xl border border-border bg-card p-8",children:a.jsx("p",{className:"text-muted-foreground",children:"Checking your plan..."})}):a.jsxs(a.Fragment,{children:[M?a.jsxs("div",{role:"alert",className:"mx-auto mb-6 max-w-xl rounded-xl border border-border p-4 text-center text-sm",children:[a.jsx("span",{className:"text-muted-foreground",children:"We couldn't check your introductory price eligibility, so standard pricing is shown."}),a.jsx("button",{type:"button",onClick:()=>{F()},className:"ml-2 font-medium text-primary underline",children:"Try again"})]}):null,a.jsx(vc,{isAnnual:e,isDollarTrialTreatment:P,isExtensionPricingSource:S,onAnnualChange:t}),a.jsx(xc,{plans:ac,isAnnual:e,isDollarTrialTreatment:P,dollarTrialPriceNow:C.priceNow,userPresent:!!f,profileLoaded:d,currentTier:o,subscriptionStatus:l,isSubscribed:R,loadingPriceId:r,getCtaForPlan:re,onCheckout:(j,q,k)=>{ge(j,q,k)}})]})}),a.jsx(ec,{open:h!==null,onOpenChange:j=>{j||b(null)},children:a.jsxs(la,{className:"bg-card border-border",children:[a.jsxs(ca,{children:[a.jsxs(ua,{className:"text-foreground",children:["Confirm"," ",h?.direction==="upgrade"?"Upgrade":"Downgrade"]}),a.jsxs(ha,{className:"text-muted-foreground font-medium",children:["You are currently on the"," ",a.jsx("strong",{className:"text-foreground",children:o.charAt(0).toUpperCase()+o.slice(1)})," ","plan. Do you want to"," ",h?.direction==="upgrade"?"upgrade":"downgrade"," ","to"," ",a.jsx("strong",{className:"text-foreground",children:h?.planName}),"?"]})]}),a.jsxs(da,{children:[a.jsx(fa,{className:"bg-transparent border-border text-foreground hover:bg-secondary",children:"Cancel"}),a.jsx(pa,{className:"bg-primary text-primary-foreground hover:bg-primary/90 font-bold uppercase tracking-wider",onClick:()=>{h&&te(h.priceId,h.planName,h.tier)},children:"Confirm"})]})]})})]})},Cc=Xa,xa=g.forwardRef(({className:e,...t},r)=>a.jsx(Ja,{ref:r,className:D("border-b",e),...t}));xa.displayName="AccordionItem";const ka=g.forwardRef(({className:e,children:t,...r},n)=>
3a.jsx(Za,{className:"flex",children:a.jsxs(fn,{ref:n,className:D("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",e),...r,children:[t,a.jsx(wn,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})}));ka.displayName=fn.displayName;const Ca=g.forwardRef(({className:e,children:t,...r},n)=>a.jsx(mn,{ref:n,className:"overflow-hidden text-sm data-[state=closed]:hidden data-[state=open]:animate-accordion-down motion-reduce:animate-none",...r,children:a.jsx("div",{className:D("pb-4 pt-0",e),children:t})}));Ca.displayName=mn.displayName;const Tc=[{question:"What happens after the seven days?",answer:"$1 covers your first seven days of Unlimited. Then $39.99/month unless canceled. Cancel from your account billing page before renewal to avoid the next charge. The introductory price is available once per eligible account."},{question:"Can I try a review without a card?",answer:"Yes. The Free plan includes a generous first mentor session with no expiry, plus guided follow-up questions. You can choose Unlimited whenever you are ready."},{question:"Does ChartMentor place trades for me?",answer:"No. You provide the direction, entry, stop and target. ChartMentor questions the plan and explains the evidence. AI can miss details, so the final decision stays with you."},{question:"Which charts can I use?",answer:"Visible TradingView charts for crypto, forex, stocks and futures. Keep the symbol, timeframe and marked levels clear. Install the Chrome extension to start reviewing."}],Sc=()=>a.jsx("section",{id:"faq",className:"border-t border-border px-4 py-12 sm:px-6 sm:py-16 lg:px-8",children:a.jsxs("div",{className:"mx-auto max-w-3xl",children:[a.jsx("h2",{className:"mb-6 text-3xl font-semibold tracking-tight",children:"A few things to know."}),a.jsx(Cc,{type:"single",collapsible:!0,children:Tc.map((e,t)=>a.jsxs(xa,{value:`faq-${t}`,children:[a.jsx(ka,{className:"py-5 text-left text-base font-medium",children:e.question}),a.jsx(Ca,{forceMount:!0,className:"pb-5 text-base leading-relaxed text-muted-foreground",children:e.answer})]},e.question))}),a.jsxs("p",{className:"mt-6 text-sm text-muted-foreground",children:["More questions?"," ",a.jsx(Y,{to:"/support",className:"text-foreground underline underline-offset-4",children:"Visit the Help Center"})]})]})}),Ec=()=>{const e=new Date().getFullYear(),t={product:[{name:"How It Works",path:"/#how-it-works"},{name:"Pricing",path:"/#pricing"},{name:"AI Plan Review",path:"/tradingview-ai-trade-review"},{name:"AI TradingView Extension",path:"/ai-tradingview-extension"},{name:"Download",path:"https://chromewebstore.google.com/detail/chartmentor-ai-trading-me/neeoehhmfaeoegkhddlbhjnojiabgman",external:!0}],resources:[{name:"Documentation",path:"/docs"},{name:"Help Center",path:"/support"},{name:"FAQ",path:"/support#faq"},{name:"TradingView Setup",path:"/tradingview-setup"},{name:"Pre-Trade Checklist",path:"/pre-trade-checklist"},{name:"Plan Review Outcomes",path:"/docs/trade-review-verdicts-good-setup-weak-setup-no-trade"}],comparisons:[{name:"ChartMentor vs ChatGPT",path:"/compare/chartmentor-vs-chatgpt"},{name:"Plan Review vs Signals",path:"/compare/ai-trade-review-vs-ai-signals"},{name:"Plan Review vs Journal",path:"/compare/chartmentor-vs-trading-journal"},{name:"vs TradeZella",path:"/compare/chartmentor-vs-tradezella"},{name:"vs TraderSync",path:"/compare/chartmentor-vs-tradersync"},{name:"vs Edgewonk",path:"/compare/chartmentor-vs-edgewonk"},{name:"vs Tradervue",path:"/compare/chartmentor-vs-tradervue"}],legal:[{name:"Privacy Policy",path:"/privacy"},{name:"Terms of Service",path:"/terms"},{name:"Disclaimer",path:"/disclaimer"},{name:"Refund Policy",path:"/terms#refunds"}],company:[{name:"Partners",path:"/partners"},{name:"Contact",path:"/support"}]},r=[{icon:ao,href:"https://twitter.com/chartmentor",label:"Twitter"},{icon:oo,href:"https://youtube.com/@chartmentor",label:"YouTube"}];return a.jsx("footer",{className:"border-t border-border bg-background px-4 py-8 sm:px-6 lg:px-8",children:a.jsxs("div",{className:"mx-auto max-w-7xl",children:[a.jsxs("div",{className:"flex flex-col justify-between gap-6 sm:flex-row sm:items-center",children:[a.jsxs(Y,{to:"/",className:"flex items-center gap-2 text-sm font-semibold",children:[a.jsx("span",{className:"rounded bg-[#2962FF] p-1",children:a.jsx(aa,{className:"h-4 w-4 text-white"})}),"ChartMentor"]}),a.jsxs("div",{className:"flex flex-wrap gap-x-5 gap-y-3 text-sm text-muted-foreground",children:[t.legal.map(n=>a.jsx(Y,{to:n.path,className:"hover:text-foreground",children:n.name},n.path)),a.jsx(Y,{to:"/support",className:"hover:text-foreground",children:"Contact"})]})]}),a.jsxs("details",{className:"mt-6 text-sm text-muted-foreground",children:[a.jsx("summary",{className:"w-fit cursor-pointer py-2 hover:text-foreground",children:"Resources and guides"}),a.jsx("div",{className:"mt-4 grid gap-6 sm:grid-cols-2 lg:grid-cols-4",children:[t.product,t.resources,t.comparisons,t.company].map((n,o)=>a.jsx("ul",{className:"space-y-3",children:n.map(i=>a.jsx("li",{children:i.path.startsWith("https:")?a.jsx("a",{href:i.path,target:"_blank",rel:"noopener noreferrer",className:"hover:text-foreground",children:i.name}):a.jsx(Y,{to:i.path,className:"hover:text-foreground",children:i.name})},i.path))},o))})]}),a.jsxs("div",{className:"mt-6 flex flex-wrap justify-between gap-4 text-sm text-muted-foreground",children:[a.jsxs("p",{children:["© ",e," ChartMentor"]}),a.jsx("div",{className:"flex gap-5",children:r.map(n=>a.jsx("a",{href:n.href,target:"_blank",rel:"noopener noreferrer",className:"hover:text-foreground",children:n.label},n.href))})]})]})})},jc=()=>a.jsxs("div",{className:"homepage min-h-screen bg-background text-foreground",children:[a.jsx(Ql,{}
3),a.jsxs("main",{id:"main-content",tabIndex:-1,children:[a.jsx(Jl,{}),a.jsx(Xl,{}),a.jsx(kc,{}),a.jsx(Sc,{})]}),a.jsx(Ec,{})]}),Ac=Q(()=>W(()=>import("./Download-9zF-0hgt.js"),__vite__mapDeps([0,1]))),_c=Q(()=>W(()=>import("./Go-Dq2u0wd7.js"),__vite__mapDeps([2,1,3,4,5,6,7]))),Rc=Q(()=>W(()=>import("./Docs-BVoJE2Hk.js"),__vite__mapDeps([8,1,3,9,6,7,5]))),Ic=Q(()=>W(()=>import("./Support-YgEdk8Kc.js"),__vite__mapDeps([10,1,3,11,5,6,7]))),Pc=Q(()=>W(()=>import("./Privacy-CdDxuksI.js"),__vite__mapDeps([12,1,6,7,5]))),Nc=Q(()=>W(()=>import("./Terms-CX6Ve5TM.js"),__vite__mapDeps([13,1,6,7,5]))),Mc=Q(()=>W(()=>import("./AffiliateTerms-4FfVhul-.js"),__vite__mapDeps([14,1,6,7,5]))),Oc=Q(()=>W(()=>import("./Partners-Bv84kN5O.js"),__vite__mapDeps([15,1,5,6,7]))),Dc=Q(()=>W(()=>import("./Auth-DI-UcNnC.js"),__vite__mapDeps([16,1,11,3,17,6,7,18,5,19,4,20]))),Fc=Q(()=>W(()=>import("./ResetPassword-CRgYMgA4.js"),__vite__mapDeps([21,1,3,11,17,6,7,5]))),Lc=Q(()=>W(()=>import("./UpdatePassword-rs_GQg0o.js"),__vite__mapDeps([22,1,3,11,17,6,7,5]))),Vc=Q(()=>W(()=>import("./Account-dtnC-2d-.js"),__vite__mapDeps([23,1,18,6,7,5,3,17,24,25,9,4,26,27,11,28,29,30,19]))),Uc=Q(()=>W(()=>import("./Billing-DM7Uhukb.js"),__vite__mapDeps([31,1,3,28,26,6,7,5,32,17,25,29,33,27,9]))),$c=Q(()=>W(()=>import("./Settings-X4npZ95Q.js"),__vite__mapDeps([34,1,33,27,9,6,7,5,11,17,3,35,36,20]))),qc=Q(()=>W(()=>import("./Admin-Di2B-pR9.js"),__vite__mapDeps([37,1,9,6,7,5]))),zc=Q(()=>W(()=>import("./Disclaimer-CpxAyla9.js"),__vite__mapDeps([38,1,6,7,5]))),Bc=Q(()=>W(()=>import("./TradingViewSetup-BWJTXW8Z.js"),__vite__mapDeps([39,1,3,6,7,5]))),G=Q(()=>W(()=>import("./SeoPage-znjffNFb.js"),__vite__mapDeps([40,1,3,5,6,7]))),Kc=Q(()=>W(()=>import("./PaidTradeReviewLanding-DeL2Q--0.js"),__vite__mapDeps([41,1,5,6,7]))),Gc=Q(()=>W(()=>import("./ChurnFeedback-WeC7v56S.js"),__vite__mapDeps([42,1,17,6,7,32,5,25]))),Hc=Q(()=>W(()=>import("./NotFound-CtloCUXO.js"),__vite__mapDeps([43,1]))),Wc=new es,Qc=()=>a.jsx("div",{className:"min-h-screen bg-background flex items-center justify-center",children:a.jsx(Ho,{className:"h-8 w-8 text-primary"})}),A=e=>a.jsx(fo,{children:a.jsx(g.Suspense,{fallback:a.jsx(Qc,{}),children:e})}),Yc=()=>(g.useEffect(()=>{zs()},[]),null),Jc=()=>{const{hash:e}=We();return g.useEffect(()=>{if(!e)return;const t=decodeURIComponent(e.slice(1));let r=0;const n=window.setInterval(()=>{const o=document.getElementById(t);r+=1,o?(o.scrollIntoView({behavior:"auto",block:"start"}),window.clearInterval(n)):r>=10&&window.clearInterval(n)},100);return()=>window.clearInterval(n)},[e]),null},Zc=()=>a.jsx(os,{client:Wc,children:a.jsx(Oi,{children:a.jsx(Va,{children:a.jsxs(il,{children:[a.jsx(Yc,{}),a.jsx(Jc,{}),a.jsx(El,{}),a.jsx(Ll,{}),a.jsx(jl,{}),a.jsx(ri,{}),a.jsx(Mi,{}),a.jsxs(Ua,{children:[a.jsx(T,{path:"/",element:a.jsx(jc,{})}),a.jsx(T,{path:"/download",element:A(a.jsx(Ac,{}))}),a.jsx(T,{path:"/go",element:A(a.jsx(_c,{}))}),a.jsx(T,{path:"/features",element:a.jsx(Ne,{to:"/#how-it-works",replace:!0})}),a.jsx(T,{path:"/pricing",element:a.jsx(Ne,{to:"/#pricing",replace:!0})}),a.jsx(T,{path:"/signals",element:a.jsx(Ne,{to:"/",replace:!0})}),a.jsx(T,{path:"/signals/leaderboard",element:a.jsx(Ne,{to:"/",replace:!0})}),a.jsx(T,{path:"/docs",element:A(a.jsx(Rc,{}))}),a.jsx(T,{path:"/support",element:A(a.jsx(Ic,{}))}),a.jsx(T,{path:"/privacy",element:A(a.jsx(Pc,{}))}),a.jsx(T,{path:"/terms",element:A(a.jsx(Nc,{}))}),a.jsx(T,{path:"/affiliate-terms",element:A(a.jsx(Mc,{}))}),a.jsx(T,{path:"/disclaimer",element:A(a.jsx(zc,{}))}),a.jsx(T,{path:"/partners",element:A(a.jsx(Oc,{}))}),a.jsx(T,{path:"/tradingview-setup",element:A(a.jsx(Bc,{}))}),a.jsx(T,{path:"/churn-feedback",element:A(a.jsx(Gc,{}))}),a.jsx(T,{path:"/ai-tradingview-extension",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/tradingview-ai-trade-review",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/ai-trade-analysis",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/tradingview-trade-checklist",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/pre-trade-checklist",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/ai-trading-mentor",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/tradingview-chart-analysis-ai",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/lp/trade-review",element:A(a.jsx(Kc,{}))}),a.jsx(T,{path:"/compare/chartmentor-vs-chatgpt",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/compare/ai-trade-review-vs-ai-signals",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/compare/chartmentor-vs-trading-journal",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/compare/chartmentor-vs-tradezella",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/compare/chartmentor-vs-tradersync",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/compare/chartmentor-vs-edgewonk",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/compare/chartmentor-vs-tradervue",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/checklists/day-trading-pre-trade-checklist",element:A(a.jsx(G,{}))}
3),a.jsx(T,{path:"/checklists/forex-pre-trade-checklist",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/checklists/crypto-trade-review-checklist",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/checklists/prop-firm-trade-checklist",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/docs/how-to-review-a-trade-on-tradingview",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/docs/best-tradingview-chart-setup-for-ai-analysis",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/docs/how-to-write-a-trading-review-prompt",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/docs/trade-review-verdicts-good-setup-weak-setup-no-trade",element:A(a.jsx(G,{}))}),a.jsx(T,{path:"/auth",element:A(a.jsx(Dc,{}))}),a.jsx(T,{path:"/reset-password",element:A(a.jsx(Fc,{}))}),a.jsx(T,{path:"/update-password",element:A(a.jsx(Lc,{}))}),a.jsx(T,{path:"/account",element:A(a.jsx(Vc,{}))}),a.jsx(T,{path:"/account/billing",element:A(a.jsx(Uc,{}))}),a.jsx(T,{path:"/onboarding",element:a.jsx(Ne,{to:"/go",replace:!0})}),a.jsx(T,{path:"/history",element:a.jsx(Ne,{to:"/account",replace:!0})}),a.jsx(T,{path:"/settings",element:A(a.jsx($c,{}))}),a.jsx(T,{path:"/admin",element:A(a.jsx(qc,{}))}),a.jsx(T,{path:"*",element:A(a.jsx(Hc,{}))})]})]})})})});po();$a.createRoot(document.getElementById("root")).render(a.jsx(w.StrictMode,{children:a.jsx(Zc,{})}));export{wc as $,Cc as A,ve as B,nd as C,Me as D,fa as E,Ec as F,pa as G,fc as H,od as I,ud as J,dd as K,Ho as L,md as M,Ql as N,ld as O,sd as P,pd as Q,wd as R,Ke as S,ad as T,ic as U,fd as V,Vl as W,Q as X,gl as Y,ul as Z,W as _,aa as a,zr as a0,An as a1,xa as b,ka as c,Ca as d,ya as e,jn as f,yd as g,Hn as h,qr as i,uc as j,al as k,hc as l,gd as m,se as n,cd as o,hd as p,D as q,ec as r,id as s,ie as t,ft as u,la as v,ca as w,ua as x,ha as y,da as z};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.