=0&&g;--i){var _=s[i].s;p[_]==e&&(--p[_],++g)}h=e}return[new ut(p),h]},ka=function(t,e,n){return t.s==-1?Math.max(ka(t.l,e,n+1),ka(t.r,e,n+1)):e[t.s]=n},iu=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new Ye(++e),i=0,r=t[0],s=1,o=function(l){n[i++]=l},a=1;e>=a;++a)if(t[a]==r&&a!=e)++s;else{if(!r&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(r),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(r);s=1,r=t[a]}return[n.subarray(0,i),e]},Ii=function(t,e){for(var n=0,i=0;e.length>i;++i)n+=t[i]*e[i];return n},Ca=function(t,e,n){var i=n.length,r=Uf(e+2);t[r]=255&i,t[r+1]=i>>>8,t[r+2]=255^t[r],t[r+3]=255^t[r+1];for(var s=0;i>s;++s)t[r+s+4]=n[s];return 8*(r+4+i)},ru=function(t,e,n,i,r,s,o,a,l,u,c){Ot(e,c++,n),++r[256];for(var d=$o(r,15),f=d[0],p=d[1],h=$o(s,15),g=h[0],m=h[1],v=iu(f),E=v[0],S=v[1],_=iu(g),b=_[0],k=_[1],T=new Ye(19),x=0;E.length>x;++x)T[31&E[x]]++;for(x=0;b.length>x;++x)T[31&b[x]]++;for(var F=$o(T,7),$=F[0],O=F[1],L=19;L>4&&!$[tu[L-1]];--L);var N,K,V,M,R=u+5<<3,Z=Ii(r,Mn)+Ii(s,gs)+o,Ce=Ii(r,f)+Ii(s,g)+o+14+3*L+Ii(T,$)+(2*T[16]+3*T[17]+7*T[18]);if(Z>=R&&Ce>=R)return Ca(e,c,t.subarray(l,l+u));if(Ot(e,c,1+(Z>Ce)),c+=2,Z>Ce){N=zi(f,p),K=f,V=zi(g,m),M=g;var oe=zi($,O);for(Ot(e,c,S-257),Ot(e,c+5,k-1),Ot(e,c+10,L-4),c+=14,x=0;L>x;++x)Ot(e,c+3*x,$[tu[x]]);c+=3*L;for(var ye=[E,b],$e=0;2>$e;++$e){var ae=ye[$e];for(x=0;ae.length>x;++x)Ot(e,c,oe[Ie=31&ae[x]]),c+=$[Ie],Ie>15&&(Ot(e,c,ae[x]>>>5&127),c+=ae[x]>>>12)}}else N=Sm,K=Mn,V=xm,M=gs;for(x=0;a>x;++x)if(i[x]>255){var Ie;xi(e,c,N[257+(Ie=i[x]>>>18&31)]),c+=K[Ie+257],Ie>7&&(Ot(e,c,i[x]>>>23&31),c+=_l[Ie]);var Se=31&i[x];xi(e,c,V[Se]),c+=M[Se],Se>3&&(xi(e,c,i[x]>>>5&8191),c+=yl[Se])}else xi(e,c,N[i[x]]),c+=K[i[x]];return xi(e,c,N[256]),c+K[256]},Im=new li([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),km=(function(){for(var t=new li(256),e=0;256>e;++e){for(var n=e,i=9;--i;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),Mo=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function Cm(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(f){for(var p=d,h=0;f.length>h;++h)p=km[255&p^f[h]]^p>>>8;d=p},d(){return 4294967295^d}}})(),i=t.length;n.p(t);var r,s,o,a,l,u=(a=10+((r=e).filename&&r.filename.length+1||0),l=8,(function(d,f,p,h,g,m){var v=d.length,E=new ut(h+v+5*(1+Math.floor(v/7e3))+g),S=E.subarray(h,E.length-g),_=0;if(!f||8>v)for(var b=0;v>=b;b+=65535){var k=b+65535;v>k?_=Ca(S,_,d.subarray(b,k)):(S[b]=!0,_=Ca(S,_,d.subarray(b,v)))}else{for(var T=Im[f-1],x=T>>>13,F=8191&T,$=(1<b;++b){var Ie=V(b),Se=32767&b,De=L[Ie];if(O[Se]=De,L[Ie]=Se,b>=$e){var wt=v-b;if((Ce>7e3||ye>24576)&&wt>423){_=ru(d,S,0,M,R,Z,oe,ye,ae,b-ae,_),ye=Ce=oe=0,ae=b;for(var ge=0;286>ge;++ge)R[ge]=0;for(ge=0;30>ge;++ge)Z[ge]=0}var Ze=2,bt=0,vn=F,Te=Se-De&32767;if(wt>2&&Ie==V(b-Te))for(var Pe=Math.min(x,wt)-1,$t=Math.min(32767,b),Dn=Math.min(258,wt);$t>=Te&&--vn&&Se!=De;){if(d[b+Ze]==d[b+Ze-Te]){for(var ze=0;Dn>ze&&d[b+ze]==d[b+ze-Te];++ze);if(ze>Ze){if(Ze=ze,bt=Te,ze>Pe)break;var jn=Math.min(Te,ze-2),Mt=0;for(ge=0;jn>ge;++ge){var Lt=b-Te+ge+32768&32767,dt=Lt-O[Lt]+32768&32767;dt>Mt&&(Mt=dt,De=Lt)}}}Te+=(Se=De)-(De=O[Se])+32768&32767}if(bt){M[ye++]=268435456|Ia[Ze]<<18|nu[bt];var sn=31&Ia[Ze],_i=31&nu[bt];oe+=_l[sn]+yl[_i],++R[257+sn],++Z[_i],$e=b+Ze,++Ce}else M[ye++]=d[b],++R[d[b]]}}_=ru(d,S,!0,M,R,Z,oe,ye,ae,b-ae,_)}return Hf(E,0,h+Uf(_)+g)})(s=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):12+o.mem,a,l)),c=u.length;return(function(d,f){var p=f.filename;if(d[0]=31,d[1]=139,d[2]=8,d[8]=2>f.level?4:f.level==9?2:0,d[9]=3,f.mtime!=0&&Mo(d,4,Math.floor(new Date(f.mtime||Date.now())/1e3)),p){d[3]=8;for(var h=0;p.length>=h;++h)d[h+10]=p.charCodeAt(h)}})(u,e),Mo(u,c-8,n.d()),Mo(u,c-4,i),u}var Am=!!Jo||!!il,Wf="text/plain",jr=!1,qf=(t,e)=>{var n=t.split("#"),i=n[1],r=n[0].split("?"),s=r[0],o=r[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return s+(a?"?"+a:"")+(i?"#"+i:"")},Ms=function(t,e,n){var i;n===void 0&&(n=!0);var r=t.split("?"),s=r[0],o=r[1],a=I({},e),l=(i=o?.split("&").map((c=>{var d,f=c.split("="),p=f[0],h=n&&(d=a[p])!==null&&d!==void 0?d:f[1];return delete a[p],p+"="+h})))!==null&&i!==void 0?i:[],u=(function(c,d){var f,p;d===void 0&&(d="&");var h=[];return ie(c,(function(g,m){C(g)||C(m)||m==="undefined"||(f=encodeURIComponent((v=>v instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),h[h.length]=p+"="+f)})),h.join(d)})(a);return u&&l.push(u),l.length>0?s+"?"+l.join("&"):s},Lo=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===Ue.GZipJS){var i=Cm((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new ut(a.length+(a.length>>>1)),d=0,f=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var h=new ut(d+8+(u-p<<1));h.set(c),c=h}var g=a.charCodeAt(p);128>g?f(g):2048>g?(f(192|g>>>6),f(128|63&g)):g>55295&&57344>g?(f(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),f(128|g>>>12&63),f(128|g>>>6&63),f(128|63&g)):(f(224|g>>>12),f(128|g>>>6&63),f(128|63&g))}return Hf(c,0,d)})(Jn(e)),{mtime:0});return{contentType:Wf,body:i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength),estimatedSize:i.byteLength}}if(n===Ue.Base64){var r=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(Jn(e)),s=(a=>"data="+encodeURIComponent(typeof a=="string"?a:Jn(a)))(r);return{contentType:"application/x-www-form-urlencoded",body:s,estimatedSize:new Blob([s]).size}}var o=Jn(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},zf=t=>{var e,n,i=()=>t.transport==="sendBeacon"?{url:Ms(t.url,{compression:Ue.Base64}),encodedBody:Lo(I({},t,{compression:Ue.Base64,Ji:void 0}))}:{url:qf(t.url,"compression"),encodedBody:Lo(I({},t,{compression:void 0,Ji:void 0}))};try{e=Lo(t)}catch(r){if(xc(t.compression,oi(t.url,"compression")))return A.error("Failed to gzip request body, sending uncompressed payload",r),i();throw r}return e&&xc(t.compression,oi(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?Zo(new Uint8Array(n)):ArrayBuffer.isView(n)&&Zo(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(jr=!0,i()):{url:t.url,encodedBody:e}},Vf=t=>{try{return zf(t)}catch(e){return A.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Pm=(function(){var t=se((function*(e){var n=Jn(e.data),i=yield(function(s,o,a){return Xo.apply(this,arguments)})(n,ne.DEBUG,{rethrow:!0});if(!i)return e;var r=yield i.arrayBuffer();return I({},e,{Ji:{contentType:Wf,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Fm=/Failed to fetch|NetworkError|Load failed/i,Gf=t=>t?.name==="TypeError"&&Fm.test(t?.message||""),Kf=t=>{var e=Vf(t);if(e){var n=e.url,i=e.encodedBody,r=i??{},s=r.contentType,o=r.body,a=r.estimatedSize,l=new Headers;ie(t.headers,(function(h,g){l.append(g,h)})),s&&l.append("Content-Type",s);var u=null,c=!1;if(_c){var d=new _c;u={signal:d.signal,timeout:setTimeout((()=>{var h,g;c=!0,d.abort((h=t.timeout,(g=new Error("PostHog request timed out"+(h?" after "+h+"ms":""))).name="AbortError",g))}),t.timeout)}}var f=h=>{c&&h?.name==="AbortError"||Gf(h)?A.warn(h):A.error(h),t.callback==null||t.callback({statusCode:0,error:h})};try{var p;il(n,I({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((h=>h.text().then((g=>{var m={statusCode:h.status,text:g};if(h.status===200)try{m.json=JSON.parse(g)}catch(v){A.error(v)}t.callback==null||t.callback(m)})))).catch(f).finally((()=>u?clearTimeout(u.timeout):null))}catch(h){u&&clearTimeout(u.timeout),f(h)}}},Aa=t=>{try{var e,n=zf(t),i=n.url,r=n.encodedBody,s=r??{},o=s.body,a=s.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:s.contentType});if(He.sendBeacon(i,l))return;var u=U(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(U(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=f=>U(t.data)?f:I({},t.data,{batch:f});return Aa(I({},t,{data:d(u.slice(0,c))})),void Aa(I({},t,{data:d(u.slice(c))}))}A.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Kf(I({},t,{Yi:!0}))}catch(f){A.warn("Beacon send failed",f)}},su=(t,e,n,i)=>{var r=i==="query"?e==="POST"?"sent_at":"_":void 0;return Ms(n===Ue.GZipJS?qf(t,"compression"):t,I({},r?{[r]:Date.now().toString()}:{},n===Ue.GZipJS?{}:{compression:n}))},Ur=[];il&&Ur.push({transport:"fetch",method:Kf}),Jo&&Ur.push({transport:"XHR",method(t){var e=Vf(t);if(e){var n=new Jo,i=e.encodedBody;n.open(t.method||"GET",e.url,!0);var r=i??{},s=r.contentType,o=r.body;ie(t.headers,(function(a,l){n.setRequestHeader(l,a)})),s&&n.setRequestHeader("Content-Type",s),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),He!=null&&He.sendBeacon&&Ur.push({transport:"sendBeacon",method:Aa});var Pa=3e3;class Rm{constructor(e,n){this.Xi=!0,this.tr=[],this.er=At(n?.flush_interval_ms||Pa,250,5e3,A.createLogger("flush interval"),Pa),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},n=Object.values(e);[...n.filter((i=>i.url.indexOf("/e")===0)),...n.filter((i=>i.url.indexOf("/e")!==0))].map((i=>{this.lr(I({},i,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var n=this.ar(),i=function(){var s=n[r],o=new Date().getTime();s.data&&U(s.data)&&ie(s.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(s)};for(var r in n)i()}}),this.er))}lr(e){try{this.ir(e)}catch(n){A.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return ie(this.tr,(n=>{var i,r=n,s=(r?r.batchKey:null)||r.url;C(e[s])&&(e[s]=I({},r,{data:[]})),(i=e[s].data)==null||i.push(r.data)})),this.tr=[],e}}var Tm=["retriesPerformedSoFar"];class $m{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!C(w)&&"onLine"in w.navigator&&(this.dr=w.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ve(w,"online",this.vr),ve(w,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,i=bd(e,Tm);Dt(n)&&(i.url=Ms(i.url,{retry_count:n})),this._instance._send_request(I({},i,{callback:r=>{if(r.statusCode!==200&&(400>r.statusCode||r.statusCode>=500)){if((r.statusCode===0?3:10)>(n??0))return void this.At(I({retriesPerformedSoFar:n},i));r.statusCode===0&&A.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}i.callback==null||i.callback(r)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+1;var i=(function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))})(n),r=Date.now()+i;this.tr.push({retryAt:r,requestOptions:e});var s="Enqueued failed request for retry in "+i;navigator.onLine||(s+=" (Browser is offline)"),A.warn(s),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],i=this.tr.filter((s=>e>s.retryAt||(n.push(s),!1)));if(this.tr=n,i.length>0)for(var r of i)this.retriableRequest(r.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,C(w)||(this.vr&&(w.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(w.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(I({},n,{transport:"sendBeacon"}))}catch(i){A.error(i)}}this.tr=[]}}class Mm{constructor(e){this.yr=()=>{var n,i,r,s;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(i=this.br.maxScrollHeight)!==null&&i!==void 0?i:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(r=this.br.maxContentY)!==null&&r!==void 0?r:0),this.br.maxContentHeight=Math.max(c,(s=this.br.maxContentHeight)!==null&&s!==void 0?s:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){ve(w,"scroll",this.yr,{capture:!0}),ve(w,"scrollend",this.yr,{capture:!0}),ve(w,"resize",this.yr)}scrollElement(){if(!this._r)return w?.document.documentElement;var e=U(this._r)?this._r:[this._r];for(var n of e){var i=w?.document.querySelector(n);if(i)return i}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var i=this.scrollElement();return i&&i[n]||0}return w?e==="y"?w.scrollY||w.pageYOffset||w.document.documentElement.scrollTop||0:w.scrollX||w.pageXOffset||w.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Lm=t=>Mf(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class ou{constructor(e,n,i,r){this.kr=s=>{var o=this.Sr();if(!o||o.sessionId!==s){var a={sessionId:s,props:this.Cr(this._instance)};this.Mr.register({[ma]:a})}},this._instance=e,this.Tr=n,this.Mr=i,this.Cr=r||Lm,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[ma]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?Lf(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return ie(pl(this.getSetOnceProps()),((n,i)=>{i==="$current_url"&&(i="url"),e["$session_entry_"+Qo(i)]=n})),e}}class wl{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((i=>i!==n))}}emit(e,n){for(var i of this.Er[e]||[])i(n);for(var r of this.Er["*"]||[])r(e,n)}constructor(){this.Er={}}}var ki=pe("[SessionId]");class au{on(e,n){return this.Ir.on(e,n)}constructor(e,n,i){var r;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new wl,this.Lr=(u,c)=>!(!Dt(u)||!Dt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===Wt)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=n||Ht,this.Nr=i||Ht;var s=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*At(this.Ne.session_idle_timeout_seconds||1800,60,36e3,ki.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+s+"_window_id",this.Br="ph_"+s+"_primary_window_exists",this.Hr()){var o=be.H(this.jr),a=be.H(this.Br);o&&!a?this.Or=o:be.q(this.jr),be.F(this.Br,!0)}if((r=this.Ne.bootstrap)!=null&&r.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){ki.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return C(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&be.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&be.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?be.H(this.jr):null}Zr(e){var n=this.Pr;return!Je(n)&&!Je(e)&&5e3>Math.abs(e-n)}Ur(e,n,i){var r=n!==this._sessionActivityTimestamp,s=!(e!==this.Dr||i!==this._sessionStartTimestamp);this._sessionStartTimestamp=i,this._sessionActivityTimestamp=n,this.Dr=e,s&&!r||s&&this.Zr(n)||(this.Pr=n,this.Mr.register({[Yn]:[n,e,i]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return Dt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(Yn):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!Je(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[Yn]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=Dt(e)?e:0,i=Dt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,i)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[Yn];return U(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&w&&(w.removeEventListener(cs,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&be.q(this.Br)},ve(w,cs,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===Wt)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var i=n||new Date().getTime(),r=this.Jr(),s=r[1],o=r[2],a=this.Yr(),l=this.Vr(),u=Dt(o)&&Math.abs(i-o)>864e5,c=!1,d=!1,f=!s,p=s,h=!f&&!e&&this.Lr(i,a);if(h){(h=this.Xr(i))||ki.info("cross-tab refresh kept the session alive",{sessionId:s});var g=this.Jr();s=g[1],o=g[2]}f||h||u?(s=this.$r(),l=this.Nr(),ki.info("new session ID generated",{sessionId:s,windowId:l,changeReason:{noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u}}),o=i,c=!0):(l||(l=this.Nr(),c=!0),(d=s!==p)&&(ki.info("adopted cross-tab session id",{sessionId:s,windowId:l}),c=!0));var m=Dt(a)&&e&&!u?a:i,v=Dt(o)?o:new Date().getTime();this.Wr(l),this.Ur(s,m,v),e||this.qr();var E={noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((S=>S(s,l,E))),{sessionId:s,windowId:l,sessionStartTimestamp:v,changeReason:c?E:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var Yf=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&kc(n,e))return!0;try{var i=t?.userAgentData;if(i!=null&&i.brands&&i.brands.some((r=>kc(r?.brand,e))))return!0}catch{}return!!t.webdriver};function Jf(){return(Jf=se((function*(){var t=He?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return X(n)&&n.length>0?n:void 0}catch(i){return void A.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",i)}}))).apply(this,arguments)}var ms=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function No(t,e,n){return Jn({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var Zf={exact:(t,e)=>e.some((n=>t.some((i=>n===i)))),is_not:(t,e)=>e.every((n=>t.every((i=>n!==i)))),regex:(t,e)=>e.some((n=>t.some((i=>ms(n,i))))),not_regex:(t,e)=>e.every((n=>t.every((i=>!ms(n,i))))),icontains:(t,e)=>e.map(Ar).some((n=>t.map(Ar).some((i=>n.includes(i))))),not_icontains:(t,e)=>e.map(Ar).every((n=>t.map(Ar).every((i=>!n.includes(i))))),gt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>i>parseFloat(r)))})),lt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>it.toLowerCase();function Xf(t,e){return!t||Object.entries(t).every((n=>{var i=n[1],r=e?.[n[0]];if(C(r)||Je(r))return!1;var s=[String(r)],o=Zf[i.operator];return!!o&&o(i.values,s)}))}var Fa="custom",lu="i.posthog.com",Nm=/^\/static\//;class Om{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+lu,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":Fa),this.en[this.apiHost]}rn(e){if(Nm.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var i=this.rn(n);if(i)return""+i+n}if(this.region===Fa)return this.apiHost+n;var r=lu+n;switch(e){case"assets":return"https://"+this.region+"-assets."+r;case"api":return"https://"+this.region+"."+r}}}function Qf(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var Q=pe("[Surveys]"),eh="seenSurvey_",th=t=>{try{var e=(n=>((i,r)=>""+eh+(function(s){return s.current_iteration&&s.current_iteration>0?s.id+"_"+s.current_iteration:s.id})(r))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){Q.error("Failed to persist survey seen state",n)}},Bm=[Ro.Popover,Ro.Widget,Ro.API],Dm={ignoreConditions:!1,ignoreDelay:!1,displayType:xa.Popover},jm=pe("[PostHog ExternalIntegrations]"),Um={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class Hm{constructor(e){this._instance=e}ai(e,n){var i;(i=B.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,e,(r=>{if(r)return jm.error("failed to load script",r);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var s,o,a,l=i[0],u=i[1];!u||(s=B.__PosthogExtensions__)!=null&&(s=s.integrations)!=null&&s[l]||e.ai(Um[l],(()=>{var c;(c=B.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=B.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=B.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var i of Object.entries((r=this._instance.config.integrations)!==null&&r!==void 0?r:{})){var r;n()}}}class Wm{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return se((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var i=e.setup(n.nn);i&&(yield i)}catch(s){var r=n.sn.get(e.name)===e;r&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',s),r&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&je(n.then)&&n.then(void 0,(i=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}))}catch(i){this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}}}class qm{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var i={};for(var r of e){var s=n?.get_property(r);C(s)||(i[r]=s)}return i}set(e,n){var i;(i=this._instance.persistence)==null||i.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var cu="extensionsRemoteConfig";class zm{constructor(e){this.an=!1,this.instance=e,this.rt=A,this.un=e.hn,this.kv=new qm(e),this.onEvent=n=>Cr(this.instance.on("eventCaptured",(i=>{try{n({event:i.event,properties:i.properties})}catch(r){this.rt.error("Browser extension event listener failed",r)}}))),this.onRemoteConfig=n=>{if(this.an)return Cr((()=>{}));var i=s=>{try{n(s)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},r=this.instance.dn.on(cu,i);return this.un&&i(this.un),Cr(r)},this.vn=new Wm(A.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(Qi))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(Qi);return typeof e=="string"?e:void 0}get library(){return{name:ne.LIB_NAME,version:ne.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,i,r,s=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=s?.sessionId)!==null&&n!==void 0?n:"",windowId:(i=s?.windowId)!==null&&i!==void 0?i:"",sessionStartTimestamp:(r=s?.sessionStartTimestamp)!==null&&r!==void 0?r:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,n,i){var r=this;return se((function*(){i?r.instance.capture(e,n,{timestamp:i.timestamp,uuid:i.uuid,$set:i.set,$set_once:i.setOnce}):r.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Cr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(cu,e))}sendRequest(e,n){var i=this;return se((function*(){var r;n===void 0&&(n={});var s=i.instance.requestRouter.endpointFor((r=n.target)!==null&&r!==void 0?r:"api",e),o={method:n.method,url:n.query?Ms(s,n.query):s,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.transport==="sendBeacon"?(i.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,i.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var Vi={},Oo=0,vs=()=>{},uu='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ci="Surveys module not available",du="sanitize_properties is deprecated. Use before_send instead",nh="Invalid value for property_denylist config: ",Vm=["token","distinct_id",cf],Kn="posthog",ih=!Am&&Ge?.indexOf("MSIE")===-1&&Ge?.indexOf("Mozilla")===-1,Bo=t=>{var e;return I({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:Gg(P?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:vs,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:me&&X(me?.search)&&me.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(w==null||(e=w.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(n){A.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:wa,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:Pa},error_tracking:{},_onCapture:vs},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:sm,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},Gm=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],fu=t=>{var e={};for(var n of Gm){var i=n[0],r=n[1];C(t[i])||(e[r]=t[i])}var s=fe({},e,t),o=t.__preview_external_dependency_versioned_paths;return C(o)||(C(t.strict_script_versioning)&&(s.strict_script_versioning=!!o),X(o)&&C(t.asset_host)&&(s.asset_host=o)),U(t.property_blacklist)&&(C(t.property_denylist)?s.property_denylist=t.property_blacklist:U(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:A.error(nh+t.property_denylist)),s};class Km{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){A.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Xe{pn(e,n){if(e){var i=this.sn.indexOf(e);i!==-1&&this.sn.splice(i,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===Wt||this.config.cookieless_mode===Cn&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new Km,this.mn=!1,this.version=ne.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new wl,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Bo(),this.SentryIntegration=hm,this.sentryIntegration=i=>(function(r,s){var o=Cf(r,s);return{name:kf,processEvent:a=>o(a)}})(this,i),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new Mm(this),this.pageViewManager=new Zc(this),this.rateLimiter=new Em(this),this.requestRouter=new Om(this),this.consent=new em(this),this.externalIntegrations=new Hm(this);var n=(e=Xe.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(i,r,s)=>{var o=X(i)?{[i]:r}:i;this.setPersonProperties(o),s?.({})},set_once:(i,r,s)=>{var o=X(i)?{[i]:r}:i;this.setPersonProperties(void 0,o),s?.({})}},this.on("eventCaptured",(i=>A.info('send "'+i?.event+'"',i)))}init(e,n,i){if(i&&i!==Kn){var r,s=(r=Vi[i])!==null&&r!==void 0?r:new Xe;return s._init(e,n,i),Vi[i]=s,Vi[Kn][i]=s,s}return this._init(e,n,i)}_init(e,n,i){var r,s;n===void 0&&(n={});var o,a=X(e)?e.trim():"";if(!a)return A.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=Bo(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=Bo(n.defaults),u=fu(n),c=fe({},l,u,{name:i,token:a});he(l.rageclick)&&he(u.rageclick)&&(c.rageclick=fe({},l.rageclick,u.rageclick)),he(l.session_recording)&&he(u.session_recording)&&(c.session_recording=fe({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&A.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=n.disable_compression?void 0:Ue.GZipJS;var d=this.En();if(this.persistence=new Fo(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Fo(I({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&be.N()){var f=be.H(this.bn);U(f)&&f.forEach((k=>{X(k)&&this.yn.add(k)}))}else be.q(this.bn);var p=I({},this.persistence.props),h=I({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new Rm((k=>this.Pn(k)),this.config.request_queue_config),this.Rn=new $m(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new au(this),this.sessionPropsManager=new ou(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((k,T,x)=>{(x!=null&&x.activityTimeout||x!=null&&x.sessionPastMaximumLength||x!=null&&x.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(A.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(A.info("Initializing extensions synchronously"),this.Ln(g)),ne.DEBUG=ne.DEBUG||this.config.debug,ne.DEBUG&&A.info("Starting in debug mode",{this:this,config:n,thisC:I({},this.config),p,s:h}),!this.config.identity_distinct_id||(r=n.bootstrap)!=null&&r.distinctID||(n.bootstrap=I({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((s=n.bootstrap)==null?void 0:s.distinctID)!==void 0){var m=n.bootstrap.distinctID,v=this.get_distinct_id(),E=this.persistence.get_property(lt);if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&E===Hn)this.identify(m);else if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&E===_n)A.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var S=this.config.get_device_id(Ht()),_=n.bootstrap.isIdentifiedID?S:m;this.persistence.set_property(lt,n.bootstrap.isIdentifiedID?_n:Hn),this.register({distinct_id:m,$device_id:_})}}if(g)this.register_once({distinct_id:Er,$device_id:null},"");else if(!this.get_distinct_id()){var b=this.config.get_device_id(Ht());this.register_once({distinct_id:b,$device_id:b},""),this.persistence.set_property(lt,Hn)}return ve(w,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.segment?(function(k,T){var x=k.config.segment;if(!x)return T();(function(F,$){var O=F.config.segment;if(!O)return $();var L=K=>{var V=()=>K.anonymousId()||Ht();F.config.get_device_id=V,K.id()&&(F.register({distinct_id:K.id(),$device_id:V()}),F.persistence.set_property(lt,_n)),$()},N=O.user();"then"in N&&je(N.then)?N.then(L):L(N)})(k,(()=>{x.register((F=>{typeof Promise<"u"&&Promise.resolve||Ao.warn("This browser does not have Promise support, and can not use the segment integration");var $=(O,L)=>{if(!L)return O;O.event.userId||O.event.anonymousId===F.get_distinct_id()||(Ao.info("No userId set, resetting PostHog"),F.reset()),O.event.userId&&O.event.userId!==F.get_distinct_id()&&(Ao.info("UserId set, identifying with PostHog"),F.identify(O.event.userId));var N=F.calculateEventProperties(L,O.event.properties);return O.event.properties=Object.assign({},N,O.event.properties),O};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:O=>$(O,O.event.event),page:O=>$(O,Gn),identify:O=>$(O,Io),screen:O=>$(O,"$screen")}})(k)).then((()=>{T()}))}))})(this,(()=>this.On())):this.On(),je(this.config._onCapture)&&this.config._onCapture!==vs&&(A.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(k=>this.config._onCapture(k.event,k)))),this.config.ip&&A.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return Jf.apply(this,arguments)})().then((k=>{k&&this.register({[So]:k})})).catch(vs),this}Fn(){var e,n,i,r,s,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(i=Xe.__defaultExtensionClasses)==null?void 0:i.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((r=this.Dn)==null||r.call(this),this.Dn=void 0,this.featureFlags=new a(this)),je(this.featureFlags.onReloading)&&je(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(s=(o=this.featureFlags).initialize)==null||s.call(o))}Ln(e){var n,i,r,s,o,a,l,u=performance.now(),c=I({},Xe.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(i=this.surveys)!==null&&i!==void 0?i:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(r=this.logs)!==null&&r!==void 0?r:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(s=this.metrics)!==null&&s!==void 0?s:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,fm)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((f=>{f.initialize&&d.push((()=>{f.initialize==null||f.initialize()}))})),d.push((()=>{if(this.Nn){var f=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(f)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var i=e.shift();if(i)try{i()}catch(s){A.error("Error initializing extension:",s)}}var r=Math.round(performance.now()-n);this.register_for_session({[uf]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[df]:r}),this.config.__preview_deferred_init_extensions&&A.info("PostHog extensions initialized ("+r+"ms)")}Zi(e){var n;if(!P||!P.body)return A.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var i,r=e.config;r.supportedCompression&&!this.config.disable_compression&&(this.compression=j(r.supportedCompression,Ue.GZipJS)?Ue.GZipJS:j(r.supportedCompression,Ue.Base64)?Ue.Base64:void 0),(i=r.analytics)!=null&&i.endpoint&&(this.analyticsDefaultEndpoint=r.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:wa}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((s=>s.onRemoteConfig==null?void 0:s.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(i){A.critical("`loaded` function failed",i)}if(this.Bn(),this.config.internal_or_test_user_hostname&&me!=null&&me.hostname){var e=me.hostname,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Of(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&Sr(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,i,r,s;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(xo),(i=this.logs)==null||i.flushLogs("sendBeacon"),(r=this.In)==null||r.unload(),(s=this.Rn)==null||s.unload()):this.zn()&&this.capture(xo,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ih?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=I({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(C(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var i,r,s,o=I({},n);o.timeout=o.timeout||6e4;var a,l,u,c,d,f=(i=o.transport)!==null&&i!==void 0?i:"fetch";f==="sendBeacon"&&C(o.compression)&&o.data&&(o.compression=Ue.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=U(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,v){return v===void 0&&(v=new Date().toISOString()),U(m)?m.map((E=>I({},E,{sent_at:v}))):I({},m,{sent_at:v})})(o.data))),o.url=su(o.url,o.method,o.compression,o.timestampMode);var p=Ur.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),h=(r=(s=(function(m,v){for(var E=0;m.length>E;E++)if(m[E].transport===f)return m[E]})(p))==null?void 0:s.method)!==null&&r!==void 0?r:p[0].method;if(!h)throw new Error("No available transport method");var g=m=>{try{h(m)}catch(v){Gf(v)?A.warn(v):A.error(v),o.callback==null||o.callback({statusCode:0,error:v})}};f!=="sendBeacon"&&o.data&&o.compression===Ue.GZipJS&&Yp&&typeof Promise<"u"&&!jr?Pm(o).then((m=>{g(m)})).catch((m=>{if(Ic(m))return jr=!0,void g(I({},o,{compression:void 0,url:su(n.url,n.method,void 0,n.timestampMode)}));(v=>{if(!v||typeof v!="object")return!1;var E="name"in v?String(v.name):"";return Ic(v)||E===Ed})(m)&&(jr=!0),g(o)})):h(o)})(I({},e,{callback:n=>{var i,r;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(i=(r=this.config).on_request_error)==null||i.call(r,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){Oo++;try{var n,i=[],r=[],s=[];Sr(e,(a=>{if(a)if(U(n=a[0]))s.push(a);else if(je(a))try{a.call(this)}catch(l){A.error("Error executing queued PostHog call",a,l)}else U(a)&&n==="alias"?i.push(a):U(a)&&n.indexOf("capture")!==-1&&je(this[n])?s.push(a):r.push(a)}));var o=function(a,l){Sr(a,(function(u){try{if(U(u[0])){var c=l;ie(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){A.error("Error executing queued PostHog call",u,d)}}))};o(i,this),o(r,this),o(s,this)}finally{Oo--}}push(e){if(Oo>0&&U(e)&&X(e[0])){var n=Xe.prototype[e[0]];je(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,i){var r,s,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!C(e)&&X(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=i!=null&&i.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){n!=null&&n.$current_url&&!X(n?.$current_url)&&(A.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||i!=null&&i.Wn||A.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,f=i?.timestamp||d,p=Fc(i?.uuid,Ht),h={uuid:p,event:e,properties:this.calculateEventProperties(e,n||{},f,p)};e===Gn&&this.config.__preview_capture_bot_pageviews&&u&&(h.event="$bot_pageview",h.properties.$browser_type="bot"),c&&(h.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var g=e==="$feature_flag_called"&&h.properties.$feature_flag_has_experiment===!1&&this.get_property(rs)===!0;i?.$set&&!g&&(h.$set=i?.$set);var m=i?.$unset;m&&(h.$unset=m);var v,E,S,_=g?void 0:this.Vn(i?.$set_once,e!==Nc,e===Io);if(_&&(h.$set_once=_),i!=null&&i._noTruncate||(s=this.config.properties_string_max_length,o=h,a=L=>X(L)?L.slice(0,s):L,l=new Set,h=(function L(N,K){if(N!==Object(N))return a?a(N):N;if(!l.has(N)){var V;if(l.add(N),U(N))V=[],Sr(N,(R=>{V.push(L(R))}));else{var M={};ie(N,((R,Z)=>{l.has(R)||(M[Z]=L(R))})),V=M}return V}})(o)),h.timestamp=f,C(i?.timestamp)||(h.properties.$event_time_override_provided=!0,h.properties.$event_time_override_system_time=d),g&&(h.properties=(function(L,N){N===void 0&&(N=[]);var K={},V=M=>{L[M]!==void 0&&(K[M]=L[M])};return Jp.forEach(V),N.forEach(V),K})(h.properties,Vm)),e===zt.DISMISSED||e===zt.SENT){var b=n?.[To.SURVEY_ID],k=n?.[To.SURVEY_ITERATION];th({id:b,current_iteration:k}),h.$set=I({},h.$set,{[(v={id:b,current_iteration:k},E=e===zt.SENT?"responded":"dismissed",S="$survey_"+E+"/"+v.id,v.current_iteration&&v.current_iteration>0&&(S="$survey_"+E+"/"+v.id+"/"+v.current_iteration),S)]:!0})}else e===zt.SHOWN&&(h.$set=I({},h.$set,{[To.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===bm.SHOWN){var T=n?.[Qc.TOUR_TYPE];T&&(h.$set=I({},h.$set,{[Qc.TOUR_LAST_SEEN_DATE+"/"+T]:new Date().toISOString()}))}var x=I({},h.properties.$set,h.$set);if(Kt(x)||this.setPersonPropertiesForFlags(x),!W(this.config.before_send)){var F=this.Pt(h);if(!F)return;(h=F).uuid=Fc(h.uuid,Ht)}this.dn.emit("eventCaptured",h);var $=(r=i?._url)!==null&&r!==void 0?r:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),O={method:"POST",url:$,data:h,compression:"best-available",timestampMode:i?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test($)?"body":"capture-body",batchKey:i?._batchKey,transport:i?.transport};return!this.config.request_batching||i&&(i==null||!i._batchKey)||i!=null&&i.send_instantly?this.Pn(O):this.In.enqueue(O),h}A.critical("This capture call is ignored due to client rate limiting.")}}else A.error("No event name provided to posthog.capture")}else A.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new zm(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var i=this._n.indexOf(e);i!==-1&&this._n.splice(i,1)}}}calculateEventProperties(e,n,i,r,s){if(i=i||new Date,!this.persistence||!this.sessionPersistence)return n;var o=s?void 0:this.persistence.remove_event_timer(e),a=I({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[cf]=!0),e==="$snapshot"){var l=I({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!X(a.distinct_id)&&!ke(a.distinct_id)||ea(a.distinct_id))&&A.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(b,k,T,x){var F,$,O,L;if(x===void 0&&(x=!1),!Ge)return{};var N,K=b?[...ai,...k||[]]:[],V=(function(Dn){for(var ze=0;Ac.length>ze;ze++){var jn=Ac[ze],Mt=jn[1],Lt=jn[0].exec(Dn),dt=Lt&&(je(Mt)?Mt(Lt,Dn):Mt);if(dt)return dt}return["",""]})(Ge),M=V[0],R=V[1],Z=(N=typeof navigator<"u"?navigator:void 0)!=null&&N.brave?{brave:!0}:{},Ce={};C(T)||(Ce.detectGoogleSearchApp=T);var oe={},ye=(F=navigator)==null||(F=F.userAgentData)==null?void 0:F.platform,$e=($=navigator)==null?void 0:$.maxTouchPoints,ae=w==null||(O=w.screen)==null?void 0:O.width,Ie=w==null||(L=w.screen)==null?void 0:L.height,Se=w?.devicePixelRatio;C(ye)||(oe.userAgentDataPlatform=ye),C($e)||(oe.maxTouchPoints=$e),C(ae)||(oe.screenWidth=ae),C(Ie)||(oe.screenHeight=Ie),C(Se)||(oe.devicePixelRatio=Se);var De,wt,ge,Ze,bt,vn,Te,Pe,$t=fe(pl({$os:M,$os_version:R,$browser:Gd(Ge,navigator.vendor,Z,Ce),$device:Pc(Ge),$device_type:(wt=Ge,ge=oe,Pe=Pc(wt),Pe===Pd||Pe===Ad||Pe==="Kobo"||Pe==="Kindle Fire"||Pe===Hd?ii:Pe===Zi||Pe===Qn||Pe===Xi||Pe===na?"Console":Pe===Rd?"Wearable":Pe?st:ge?.userAgentDataPlatform==="Android"&&((Ze=ge?.maxTouchPoints)!==null&&Ze!==void 0?Ze:0)>0?600>Math.min((bt=ge?.screenWidth)!==null&&bt!==void 0?bt:0,(vn=ge?.screenHeight)!==null&&vn!==void 0?vn:0)/((Te=ge?.devicePixelRatio)!==null&&Te!==void 0?Te:1)?st:ii:"Desktop"),$timezone:Nf(),$timezone_offset:_m()}),{$current_url:tr(x?fn(me?.href):me?.href,K,nr),$host:me?.host,$pathname:me?.pathname,$raw_user_agent:Ge.length>1e3?Ge.substring(0,997)+"...":Ge,$browser_version:gg(Ge,navigator.vendor,Z,Ce),$browser_language:Xc(),$browser_language_prefix:(De=Xc(),typeof De=="string"?De.split("-")[0]:void 0),$screen_height:w?.screen.height,$screen_width:w?.screen.width,$viewport_height:w?.innerHeight,$viewport_width:w?.innerWidth,$lib:ne.LIB_NAME,$lib_version:ne.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return ne.SDK_DIST_CHANNEL&&($t.$sdk_dist_channel=ne.SDK_DIST_CHANNEL),$t})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(s,i.getTime()),f=d.windowId;a.$session_id=d.sessionId,a.$window_id=f}this.sessionPropsManager&&fe(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&fe(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(b){a.$sdk_debug_error_capturing_properties=String(b)}if(this.requestRouter.region===Fa&&(a.$lib_custom_api_host=this.config.api_host),u=e!==Gn||s?e!==xo||s?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(i):this.pageViewManager.doPageView(i,r),a=fe(a,u),e===Gn&&P&&(a.title=P.title),!C(o)){var h=i.getTime()-o;a.$duration=parseFloat((h/1e3).toFixed(3))}Ge&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),m=this.sessionPersistence.properties();ie(["$referrer","$referring_domain"],(b=>{b in g&&delete m[b]}));var v={};if(this._n.length>0)for(var E of this._n.slice())try{fe(v,E())}catch(b){A.error("Failed to produce browser extension event properties",b)}(a=fe({},c,g,m,I({},v,a))).$is_identified=this._isIdentified(),U(this.config.property_denylist)?ie(this.config.property_denylist,(function(b){delete a[b]})):A.error(nh+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var S=this.config.sanitize_properties;S&&(A.error(du),a=S(a,e));var _=this.Zn();return a.$process_person_profile=_,_&&!s&&this.Gn("_calculate_event_properties"),a}Vn(e,n,i){var r;if(n===void 0&&(n=!0),i===void 0&&(i=!1),!this.persistence||!this.Zn()||this.mn&&!i)return e;var s=this.persistence.get_initial_props(),o=(r=this.sessionPropsManager)==null?void 0:r.getSetOnceProps(),a=fe({},s,o||{},e||{}),l=this.config.sanitize_properties;return l&&(A.error(du),a=l(a,"$set_once")),n&&(this.mn=!0),Kt(a)?void 0:a}register(e,n){var i;(i=this.persistence)==null||i.register(e,n)}register_once(e,n,i){var r;(r=this.persistence)==null||r.register_once(e,n,i)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((i=>this.yn.add(i))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!be.N())be.q(this.bn);else{var n=[];this.yn.forEach((i=>n.push(i))),n.length>0?be.F(this.bn,n):be.q(this.bn)}}getFeatureFlag(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var i,r;return(i=(r=this.featureFlags)==null?void 0:r.isFeatureEnabled(e,n))!==null&&i!==void 0?i:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,i){var r;(r=this.featureFlags)==null||r.updateFlags(e,n,i)}updateEarlyAccessFeatureEnrollment(e,n,i){var r;(r=this.featureFlags)==null||r.updateEarlyAccessFeatureEnrollment(e,n,i)}getEarlyAccessFeatures(e,n,i){var r;return n===void 0&&(n=!1),(r=this.featureFlags)==null?void 0:r.getEarlyAccessFeatures(e,n,i)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Ci}),()=>{})}onSessionId(e){var n,i;return(n=(i=this.sessionManager)==null?void 0:i.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:Ci})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:Ci})}renderSurvey(e,n){var i;(i=this.surveys)==null||i.renderSurvey(e,n)}displaySurvey(e,n){var i;n===void 0&&(n=Dm),(i=this.surveys)==null||i.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,i;return(n=(i=this.surveys)==null?void 0:i.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:Ci}}canRenderSurveyAsync(e,n){var i,r;return n===void 0&&(n=!1),(i=(r=this.surveys)==null?void 0:r.canRenderSurveyAsync(e,n))!==null&&i!==void 0?i:Promise.resolve({visible:!1,disabledReason:Ci})}Jn(e){return!e||ea(e)?(A.critical("Unique user id has not been set in posthog.identify"),!1):e===Er?(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,i){if(!this.__loaded||!this.persistence)return A.uninitializedWarning("posthog.identify");if(ke(e)&&(e=e.toString(),A.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var r=this.get_distinct_id();this.register({$user_id:e}),this.get_property(Qi)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),e!==r&&e!==this.get_property($i)&&(this.unregister($i),this.register({distinct_id:e}));var s,o=(this.persistence.get_property(lt)||Hn)===Hn,a=e!==r,l=!a&&o;if(a&&o)this.persistence.set_property(lt,_n),this.setPersonPropertiesForFlags({$set:n||{},$set_once:i||{}},!1),this.capture(Io,{distinct_id:e,$anon_distinct_id:r},{$set:n||{},$set_once:i||{}}),this.Sn=No(e,n,i),(s=this.featureFlags)==null||s.setAnonymousDistinctId(r);else if(l){this.persistence.set_property(lt,_n);var u=n||{},c=i||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=No(e,n,i)}else(n||i)&&this.setPersonProperties(n,i);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(An)):l&&(n||i)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var i=No(this.get_distinct_id(),e,n);this.Sn!==i?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=i):A.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,i=(U(e)?e:[e]).filter((r=>X(r)&&r.length>0));i.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(i,!0),this.capture("$set",{$unset:i}),this.Sn=null)}group(e,n,i){if(e&&n){var r=this.getGroups(),s=r[e]!==n;if(s&&this.resetGroupPropertiesForFlags(e),this.register({$groups:I({},r,{[e]:n})}),s||i){var o={$group_type:e,$group_key:n};i&&(o.$group_set=i),this.capture(Nc,o)}i&&this.setGroupPropertiesForFlags({[e]:i}),s&&!i&&this.reloadFeatureFlags()}else A.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),(i=this.featureFlags)==null||i.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((i=this.featureFlags)==null||i.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var i,r,s,o,a,l,u,c,d,f;if(n===void 0&&(n=!1),A.info("reset"),!this.__loaded)return A.uninitializedWarning("posthog.reset");var p,h=this.get_property(Qi),g=this.get_property(So),m=this.get_property(Pn),v=this.is_capturing();if(this.consent.reset(),n||!v||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(i=this.persistence)==null||i.clear(),(r=this.sessionPersistence)==null||r.clear(),this.yn.clear(),this.Qn(),C(m)||(p=this.persistence)==null||p.register({[Pn]:m}),(s=this.surveys)==null||s.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(lt,Hn),(f=this.sessionManager)==null||f.resetSessionId(),this.Sn=null,this.config.cookieless_mode===Wt)this.register_once({distinct_id:Er,$device_id:null},"");else{var E=this.config.get_device_id(Ht());this.register_once({distinct_id:E,$device_id:e?E:h},""),e||C(g)||this.register({[So]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return se((function*(){var i,r,s,o,a,l,u;if(n.__loaded){(i=n.Un)==null||i.stop(),(r=n.jn)==null||r.dispose(),(s=n.sessionRecording)==null||s.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){A.error("Error while destroying feature flags",d)}}else A.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var i;this.config.identity_distinct_id=e,this.config.identity_hash=n,this.alias(e),(i=this.conversations)==null||i.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&i){var s,o=(s=e.timestampLookBack)!==null&&s!==void 0?s:10;if(!i)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-i)/1e3)-o,0)}return r}alias(e,n){return e===this.get_property(nf)?(A.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(C(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn($i,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(A.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=I({},this.config);if(he(e)){var i,r,s,o,a,l,u,c,d,f,p,h;fe(this.config,fu(e));var g=this.En();(i=this.persistence)==null||i.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Fo(I({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);mt(m)&&(this.config.debug=m),mt(this.config.debug)&&(this.config.debug?(ne.DEBUG=!0,le.N()&&le.F("ph_debug",!0),A.info("set_config",{config:e,oldConfig:n,newConfig:I({},this.config)})):(ne.DEBUG=!1,le.N()&&le.q("ph_debug"))),(r=this.featureFlags)==null||r.updateConfig==null||r.updateConfig(this.config,this.Qi()),(s=this.exceptionObserver)==null||s.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(f=this.deadClicksAutocapture)==null||f.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(h=this.externalIntegrations)==null||h.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){ne.LIB_NAME=e,ne.LIB_VERSION=n}startSessionRecording(e){var n,i,r,s,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((i=this.sessionRecording)==null||i.overrideSampling()),l.linked_flag&&((r=this.sessionRecording)==null||r.overrideLinkedFlag()),l.url_trigger&&((s=this.sessionRecording)==null||s.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var i=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:i});return this.exceptions.sendExceptionEvent(I({},r,n))}}addExceptionStep(e,n){var i;(i=this.exceptions)==null||i.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:Xe.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,i;return(n=(i=this.toolbar)==null?void 0:i.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:Kn;return n!==Kn&&(n=Kn+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(lt))===_n||((n=this.sessionPersistence)==null?void 0:n.get_property(lt))===_n}Zn(){var e,n;return!(this.config.person_profiles==="never"||this.config.person_profiles===wa&&!this._isIdentified()&&Kt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[$i])&&((n=this.persistence)==null||(n=n.props)==null||!n[as]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(A.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(as,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Cn)}es(){var e,n,i,r,s=this.En();return((e=this.persistence)==null?void 0:e.xi)!==s&&((i=this.persistence)==null||i.set_disabled(s)),((n=this.sessionPersistence)==null?void 0:n.xi)!==s&&((r=this.sessionPersistence)==null||r.set_disabled(s)),s&&(this.yn.clear(),this.Qn()),s}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==Wt){if(this.gn()){var i,r,s,o,a;this.Yn(!0,!0),(i=this.sessionManager)==null||i.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=new au(this),this.pageViewManager=new Zc(this),this.persistence&&(this.sessionPropsManager=new ou(this,this.sessionManager,this.persistence));var l,u=(s=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&s!==void 0?s:(a=Xe.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==Cn&&((c=this.surveys)==null||c.loadIfEnabled()),(C(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else A.warn(uu)}opt_out_capturing(){var e,n,i;this.config.cookieless_mode!==Wt?(this.config.cookieless_mode===Cn&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Cn&&(this.register({distinct_id:Er,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):A.warn(uu)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===Wt||(this.config.cookieless_mode===Cn?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return He?Yf(He,this.config.custom_blocked_useragents):void 0}Hn(){P&&(P.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(Gn,{title:P.title},{send_instantly:!0}),this.kn&&(P.removeEventListener(ls,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ve(P,ls,this.kn)))}debug(e){e===!1?(w?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(w?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(A.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,i,r,s,o){var a=i in n&&!W(n[i]),l=r in n&&!W(n[r]);return a?n[i]:!!l&&(o&&o.warn("Config field '"+r+"' is deprecated. Please use '"+i+"' instead. The old field will be removed in a future major version."),n[r])})(e,"advanced_disable_flags","advanced_disable_decide",0,A)}Pt(e){var n;if(W(this.config.before_send))return e;var i=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(ig),r=U(this.config.before_send)?this.config.before_send:[this.config.before_send],s=e;for(var o of r){if(s=o(s),W(s)){var a="Event '"+e.event+"' was rejected in beforeSend function";return ng(e.event)?A.warn(a+". This can cause unexpected behavior."):A.info(a),null}s.properties&&!Kt(s.properties)||A.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of i)if(s.properties&&W(s.properties[l]))return A.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return s}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,i){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(i)})}Cn(e){var n=mt(e)&&!e,i=le.N()&&le.P("ph_debug")==="true";return!n&&(!!i||e)}}Xe.__defaultExtensionClasses={},Xe.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var n=0;e.length>n;n++)t.prototype[e[n]]=zg(t.prototype[e[n]])})(Xe,["identify"]);class hu{constructor(e){this.disabled=e===!1;var n=he(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,i){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(n-r.y)i-r.timestamp){if(this.clicks.push({x:e,y:n,timestamp:i}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:i}];return!1}}var Do="$copy_autocapture",jo=pe("[AutoCapture]");function Uo(t,e){return e.length>t?e.slice(0,t)+"...":e}function Ym(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!hn(e));return e}function Jm(t,e){var n,i,r=e.e,s=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!hn(t))return{props:{}};for(var c=[t],d=new Set([t]),f=t;f.parentNode&&!tt(f,"body")&&yf>c.length;)if(_f(f.parentNode)){var p=f.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),f=p}else{if(!hn(f.parentNode)||d.has(f.parentNode))break;d.add(f.parentNode),c.push(f.parentNode),f=f.parentNode}var h,g,m=[],v={},E=!1,S=!1;if(ie(c,(x=>{var F=Sa(x);if(tt(x,"a")){var $=x.getAttribute("href");E=!!(F&&$&&qi($))&&(u?fn($):$)}j(ds(x),"ph-no-capture")&&(S=!0),m.push((function(L,N,K,V,M){M===void 0&&(M=!1);var R=L.tagName.toLowerCase(),Z={tag_name:R};ml.indexOf(R)>-1&&!K&&(Z.$el_text=R.toLowerCase()==="a"||R.toLowerCase()==="button"?Uo(1024,Kc(L)):Uo(1024,er(L)));var Ce=ds(L);Ce.length>0&&(Z.classes=Ce.filter((function(ae){return ae!==""}))),ie(L.attributes,(function(ae){var Ie;if((!xf(L)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(V==null||!V.includes(ae.name))&&!N&&qi(ae.value)&&(!X(Ie=ae.name)||Ie.substring(0,10)!=="_ngcontent"&&Ie.substring(0,7)!=="_nghost")){var Se=ae.value;ae.name==="class"&&(Se=gl(Se).join(" ")),Z["attr__"+ae.name]=Uo(1024,ae.name==="href"&&M?fn(Se):Se)}}));for(var oe=1,ye=1,$e=L;$e=Ym($e);)oe++,$e.tagName===L.tagName&&ye++;return Z.nth_child=oe,Z.nth_of_type=ye,Z})(x,s,o,a,u));var O=(function(L){if(!Sa(L))return{};var N={};return ie(L.attributes,(function(K){if(K.name&&K.name.indexOf("data-ph-capture-attribute")===0){var V=K.name.replace("data-ph-capture-attribute-",""),M=K.value;V&&M&&qi(M)&&(N[V]=M)}})),N})(x);fe(v,O)})),S)return{props:{},explicitNoCapture:S};if(o||(m[0].$el_text=tt(t,"a")||tt(t,"button")?Kc(t):er(t)),E){var _,b;m[0].attr__href=E;var k=(_=fs(E))==null?void 0:_.host,T=w==null||(b=w.location)==null?void 0:b.host;k&&T&&k!==T&&(h=E)}return{props:fe({$event_type:r.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(x){return x.map((F=>{var $,O,L="";if(F.tag_name&&(L+=F.tag_name),F.attr_class)for(var N of(F.attr_class.sort(),F.attr_class))L+="."+N.replace(/"/g,"");var K=I({},F.text?{text:F.text}:{},{"nth-child":($=F.nth_child)!==null&&$!==void 0?$:0,"nth-of-type":(O=F.nth_of_type)!==null&&O!==void 0?O:0},F.href?{href:F.href}:{},F.attr_id?{attr_id:F.attr_id}:{},F.attributes),V={};return Dr(K).sort(((M,R)=>M[0].localeCompare(R[0]))).forEach((M=>{var R=M[1];return V[Yc(M[0].toString())]=Yc(R.toString())})),(L+=":")+Dr(V).map((M=>M[0]+'="'+M[1]+'"')).join("")})).join(";")})((function(x){return x.map((F=>{var $,O,L={text:($=F.$el_text)==null?void 0:$.slice(0,400),tag_name:F.tag_name,href:(O=F.attr__href)==null?void 0:O.slice(0,2048),attr_class:um(F),attr_id:F.attr__id,nth_child:F.nth_child,nth_of_type:F.nth_of_type,attributes:{}};return Dr(F).filter((N=>N[0].indexOf("attr__")===0)).forEach((N=>L.attributes[N[0]]=N[1])),L}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(i=m[0])==null?void 0:i.$el_text}:{},h&&r.type==="click"?{$external_click_url:h}:{},v)}}var Ai=pe("[ExceptionAutocapture]"),pu=()=>{},Zm=pe("[TracingHeaders]"),bn=pe("[Web Vitals]"),gu=9e5,mu="disabled",vu="lazy_loading",Pi="awaiting_config",Pr="missing_config";pe("[SessionRecording]"),pe("[SessionRecording]");var Ra="[SessionRecording]",Bt=pe(Ra),Xm=pe("[Heatmaps]");function Ho(t){return he(t)&&"clientX"in t&&"clientY"in t&&ke(t.clientX)&&ke(t.clientY)}var Fr=pe("[Product Tours]"),Wo=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(dl))},Qm=["$set_once","$set"],Et=pe("[SiteApps]"),_u="Error while initializing PostHog app with config id ";function zn(t,e,n){if(W(t))return!1;switch(n){case"exact":return t===e;case"contains":var i=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(i,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class ev{constructor(e){this.ns=new wl,this.ss=(n,i)=>this.os(n,i)&&this.ls(n,i)&&this.us(n,i)&&this.hs(n,i),this.os=(n,i)=>i==null||!i.event||n?.event===i?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;C((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((i,r)=>{this.on(i,r)}))}register(e){var n,i;if(!C((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(i=this._instance)!=null&&i.autocapture)){var r,s=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&s.add(l?.selector)}))})),(r=this._instance)==null||r.autocapture.setElementSelectors(s)}}on(e,n){var i;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((i=this.vs)==null?void 0:i.size)>0&&this.vs.forEach((r=>{this.cs(n,r)&&this.ns.emit("actionCaptured",r.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var i of n.steps)if(this.ss(e,i))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var i,r=e==null||(i=e.properties)==null?void 0:i.$current_url;if(!r||typeof r!="string"||!zn(r,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var i;if(n==null||!n.href)return!0;var r=this.bs(e);if(r.length>0)return r.some((a=>zn(a.href,n.href,n.href_matching||"exact")));var s,o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!o&&zn((s=o.match(/(?::|")href="(.*?)"/))?s[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var i;if(n==null||!n.text)return!0;var r=this.bs(e);if(r.length>0)return r.some((u=>zn(u.text,n.text,n.text_matching||"exact")||zn(u.$el_text,n.text,n.text_matching||"exact")));var s,o,a,l=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!l&&(s=(function(u){for(var c,d=[],f=/(?::|")text="(.*?)"/g;!W(c=f.exec(u));)d.includes(c[1])||d.push(c[1]);return d})(l),o=n.text,a=n.text_matching||"exact",s.some((u=>zn(u,o,a))))}ys(e,n){var i,r;if(n==null||!n.selector)return!0;var s=e==null||(i=e.properties)==null?void 0:i.$element_selectors;if(s!=null&&s.includes(n.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||Xf(n.properties.reduce(((i,r)=>{var s=U(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return i[r.key]={values:s,operator:r.operator||"exact"},i}),{}),e?.properties)}}class tv{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((i=>this.Ss(i)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&Xf(e.propertyFilters,n?.properties)}Ps(e,n){var i=new Map;return e.forEach((r=>{var s;(s=r.conditions)==null||(s=s[n])==null||(s=s.values)==null||s.forEach((o=>{if(o!=null&&o.name){var a=i.get(o.name)||[];a.push(r.id),i.set(o.name,a)}}))})),i}Rs(e,n,i){var r=(i===Si.Activation?this.ws:this.ks).get(e),s=[];return this.As((o=>{s=o.filter((a=>r?.includes(a.id)))})),s.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[i])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,n)}))}register(e){var n;C((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((i=>{var r,s;return((r=i.conditions)==null?void 0:r.actions)&&((s=i.conditions)==null||(s=s.actions)==null||(s=s.values)==null?void 0:s.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new ev(this._instance),this.Os.init(),this.Os.fs((i=>{this.onAction(i)}))),n.forEach((i=>{var r,s,o,a,l;i.conditions&&(r=i.conditions)!=null&&r.actions&&(s=i.conditions)!=null&&(s=s.actions)!=null&&s.values&&((o=i.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(i.conditions.actions.values),(l=i.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach((u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(i.id),this.xs.set(u.name,c||[i.id])}})))})))}Fs(e){var n,i=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.events)&&((a=s.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),r=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.cancelEvents)&&((a=s.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));i.length===0&&r.length===0||((n=this._instance)==null||n._addCaptureHook(((s,o)=>{this.onEvent(s,o)})),this.ws=this.Ps(e,Si.Activation),this.ks=this.Ps(e,Si.Cancellation))}onEvent(e,n){var i,r,s=this.Ds(),o=(n==null||(i=n.properties)==null?void 0:i.$survey_id)||(n==null||(r=n.properties)==null?void 0:r.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return s.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return s.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,Si.Cancellation);l.length>0&&(s.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){s.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,Si.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var i=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),r=[];for(var s of e)i&&this.Cs(s)?this.qs(s)&&this.Us(s):r.push(s);r.length>0&&(this._s=[...new Set([...this._s,...r])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((i=>i!==e));var n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((s=>!n.has(s)));var i=this.Zs(),r=i.filter((s=>!n.has(s)));r.length!==i.length&&(this.Ws(r),r.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return i&&typeof i=="object"?i:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(I({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),i={},r=!1;for(var s of Object.entries(n)){var o=s[0],a=s[1];e.includes(o)?r=!0:i[o]=a}r&&(Kt(i)?this.Es():this.Ts(i))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return ke(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,i=this.Zs();if(i.length===0)return[];var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],s=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return s&&r===s?i:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,i=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(i&&i!==e){var r=this.Zs(),s=this.Qs();r.length>0&&(this.Ws([]),r.filter((o=>ke(s[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class nv extends tv{constructor(e){super(e)}Js(){return ga}Ys(){return Nr}Ms(){return Or}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Or]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Or)}Cs(e){var n,i;this.As((s=>{i=s.find((o=>o.id===e))}));var r=(n=i)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return ke(r)&&r>0}ra(){return zt.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return Q}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[ga]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Nr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Nr)}ea(){return!1}$s(e,n){var i;this.As((s=>{i=s.find((o=>o.id===n))}));var r=!i||(function(s){var o;return Qf(s)&&!((o=s.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||s.schedule==="always"})(i);return r?e===zt.SHOWN?"consume":"ignore":e===zt.SHOWN?"persist":e===zt.DISMISSED||e===zt.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Rr="SDK is not enabled or survey functionality is not yet loaded",yu="Disabled. Not loading surveys.",iv=w!=null&&w.location?hs(w.location.hash,"__posthog")||hs(location.hash,"state"):null,wu="_postHogToolbarParams",bu=pe("[Toolbar]"),Eu=pe("[FeatureFlags]");class rv{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((i,r)=>{var s,o,a,l;return{bootstrap:{featureFlags:(s=i.bootstrap)==null?void 0:s.featureFlags,featureFlagPayloads:(o=i.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:r,featureFlagsDisabled:!!i.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!i.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!i.advanced_feature_flags_dedup_per_session,cacheTtlMs:i.feature_flag_cache_ttl_ms,requestTimeoutMs:i.feature_flag_request_timeout_ms,compression:i.disable_compression?"none":"base64",evaluationContexts:(a=(l=i.evaluation_contexts)!==null&&l!==void 0?l:i.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:U(i.flag_keys)?i.flag_keys:void 0}})(e,n),!e.evaluation_environments||e.evaluation_contexts||this.na||(Eu.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),C(e.flag_keys)||U(e.flag_keys)||Eu.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var Su=pe("[FeatureFlags]"),En=pe("[FeatureFlags]",{debugEnabled:!0}),qo=`" failed. Feature flags didn't load in time.`,xu="connection_error",Iu=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},ku=t=>{var e={};for(var n of Dr(t||{})){var i=n[1];i&&(e[n[0]]=i)}return e},St=pe("[Error tracking]"),Cu="Refusing to render web experiment since the viewer is a likely bot",sv={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>ms(e,t),not_regex:(t,e)=>!ms(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class Me{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(i){i===void 0&&(i=!1),n.getWebExperiments((r=>{Me.aa("retrieved web experiments from the server"),n.oa=new Map,r.forEach((s=>{if(s.feature_flag_key){var o;n.oa&&(Me.aa("setting flag key ",s.feature_flag_key," to web experiment ",s),(o=n.oa)==null||o.set(s.feature_flag_key,s));var a=n._instance.getFeatureFlag(s.feature_flag_key);X(a)&&s.variants[a]&&n.la(s.name,a,s.variants[a].transforms)}else if(s.variants)for(var l in s.variants){var u=s.variants[l];Me.ua(u,n._instance)&&n.la(s.name,l,u.transforms)}}))}),i)},this._instance=e,this._instance.onFeatureFlags((i=>{this.onFeatureFlags(i)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())Me.aa(Cu);else if(!this.Ne.disable_web_experiments){if(W(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();Me.aa("applying feature flags",e),e.forEach((n=>{var i;if(this.oa&&(i=this.oa)!=null&&i.has(n)){var r,s=this._instance.getFeatureFlag(n),o=(r=this.oa)==null?void 0:r.get(n);s&&o!=null&&o.variants[s]&&this.la(o.name,s,o.variants[s].transforms)}}))}}previewWebExperiment(){var e=Me.getWindowLocation();if(e!=null&&e.search){var n=oi(e?.search,"__experiment_id"),i=oi(e?.search,"__experiment_variant");n&&i&&(Me.aa("previewing web experiments "+n+" && "+i),this.getWebExperiments((r=>{this.ha(parseInt(n),i,r)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,i){if(this.Ne.disable_web_experiments&&!i)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!n)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:s=>e(s.statusCode===200&&s.json&&s.json.experiments||[])})}ha(e,n,i){var r=i.filter((s=>s.id===e));r&&r.length>0&&(Me.aa("Previewing web experiment ["+r[0].name+"] with variant ["+n+"]"),this.la(r[0].name,n,r[0].variants[n].transforms))}static ua(e,n){return!W(e.conditions)&&Me.da(e,n)&&Me.va(e)}static da(e,n){var i;if(W(e.conditions)||W((i=e.conditions)==null?void 0:i.url))return!0;var r=Me.getWindowLocation();if(r){var s,o,a,l=gf(n,r.href);return(s=e.conditions)==null||!s.url||sv[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return w?.location}static va(e){var n;if(W(e.conditions)||W((n=e.conditions)==null?void 0:n.utm))return!0;var i=Ff();if(i.utm_source){var r,s,o,a,l,u,c,d,f=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((s=e.conditions)==null||(s=s.utm)==null?void 0:s.utm_campaign)==i.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==i.utm_source,h=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((u=e.conditions)==null||(u=u.utm)==null?void 0:u.utm_medium)==i.utm_medium,g=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==i.utm_term;return f&&h&&g&&p}return!1}static aa(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;n>r;r++)i[r-1]=arguments[r];A.info("[WebExperiments] "+e,i)}la(e,n,i){this._is_bot()?Me.aa(Cu):n!=="control"?i.forEach((r=>{if(r.selector){var s;Me.aa("applying transform of variant "+n+" for experiment "+e+" ",r);var o=(s=document)==null?void 0:s.querySelectorAll(r.selector);o?.forEach((a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)}))}})):Me.aa("Control variants leave the page unmodified.")}_is_bot(){return He&&this._instance?Yf(He,this.Ne.custom_blocked_useragents):void 0}}var at=pe("[Conversations]"),Sn="Conversations not available yet.",Au="console",rh="__posthogHandledLogsRequestError",zo=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[rh]=!0,n},Pu=t=>!!t&&typeof t=="object"&&t[rh]===!0,Ls={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=Su,this.fa={},this.pa={},this.ga=[],this.ma=!1,this.ya=!1,this.ba=0,this._a=!1,this.wa=!1,this.ka=!1,this.xa=!1,this.Sa=0,this.Ca=()=>{var e=this.Ma();this.Sa=0,e&&this.reloadFeatureFlags()},"get"in t?this.Ta=t:(this.Ea=new rv(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return w&&ve(w,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){w?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],w?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[Li,Ni,Lr,It]){var n=this.Oa(e);C(n)||(t[e]=n)}this.fa=t;var i=I({},t),r=this.Oa(xn);if(r)for(var s of Object.entries(r))i["$feature/"+s[0]]=s[1];this.pa=i}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Wi);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!C(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,i=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(i).length){var r,s,o=(r=(s=n.bootstrap)==null?void 0:s.featureFlagPayloads)!==null&&r!==void 0?r:{},a=Object.keys(i).filter((u=>!!i[u])).reduce(((u,c)=>(u[c]=i[c]||!1,u)),{}),l=Object.keys(o).filter((u=>a[u])).reduce(((u,c)=>(o[c]&&(u[c]=o[c]),u)),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,n){var i,r,s=n!=null&&n.merge&&(i=this.Oa(xn))!==null&&i!==void 0?i:{},o=n!=null&&n.merge&&(r=this.Oa(Ni))!==null&&r!==void 0?r:{},a=I({},s,t),l=I({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],f=c[1];u[d]={key:d,enabled:bc(f),variant:Ec(f),reason:void 0,metadata:C(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(ha),e=this.Oa(It),n=this.Oa(In);if(!n&&!e)return t||{};var i=fe({},t||{}),r=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var s of r){var o,a,l=i[s],u=e?.[s],c=C(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=C(u)?l?.variant:typeof u=="string"?u:void 0,f=n?.[s],p=I({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),f&&(p.metadata=I({},l?.metadata,{payload:f,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),i[s]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:i}),this.ca=!0),i}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var i=t[n];return{key:n,enabled:bc(i),variant:Ec(i),payload:wc(e[n])}}))}getFlagVariants(){var t=this.Oa(xn),e=this.Oa(It);if(!e)return t||{};for(var n=fe({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(Ni),e=this.Oa(In);if(!e)return t||{};for(var n=fe({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(An)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:I({},e.initialPersonProperties,this.Oa(jt)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(kn),timezone:Nf()};C(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var i=this.Na();i.length&&(n.evaluation_contexts=i);var r=this.qa();C(r)||(n.flag_keys=r);var s=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(s?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Br]:[xu]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?Ue.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,f,p=(d=c.json)!==null&&d!==void 0?d:{},h=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),h||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!h;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?xu:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((f=p.quotaLimited)==null||!f.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[Br]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,h,{partialResponse:s}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Af(this.Sa,3)}Ua(t){this.Sa=Pf(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var i=this.getFeatureFlagResult(t,e);return(n=i?.variant)!==null&&n!==void 0?n:i?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+qo)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,i=this.getFlagVariants(),r=t in i,s=i[t],o=this.getFlagPayloads()[t],a=String(s),l=this.Oa(Lr)||void 0,u=this.Oa(Wi)||void 0,c=this.Oa(An)||{};if(this.Ne.deduplicateCallsPerSession){var d,f=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(Bi);f&&f!==p&&(c={},n=f)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[An]:c,[Bi]:n});else{var h,g,m,v,E,S,_,b,k,T;U(c[t])?c[t].push(a):c[t]=[a],this.F(I({[An]:c},n?{[Bi]:n}:{}));var x=this.getFeatureFlagDetails(t),F=[...(h=this.Oa(Br))!==null&&h!==void 0?h:[]];C(s)&&F.push("flag_missing");var $={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};C(x==null||(v=x.metadata)==null?void 0:v.has_experiment)||($.$feature_flag_has_experiment=x.metadata.has_experiment),C(x==null||(E=x.metadata)==null?void 0:E.version)||($.$feature_flag_version=x.metadata.version);var O,L=(S=x==null||(_=x.reason)==null?void 0:_.description)!==null&&S!==void 0?S:x==null||(b=x.reason)==null?void 0:b.code;L&&($.$feature_flag_reason=L),x!=null&&(k=x.metadata)!=null&&k.id&&($.$feature_flag_id=x.metadata.id),C(x?.original_variant)&&C(x?.original_enabled)||($.$feature_flag_original_response=C(x.original_variant)?x.original_enabled:x.original_variant),x!=null&&(T=x.metadata)!=null&&T.original_payload&&($.$feature_flag_original_payload=x==null||(O=x.metadata)==null?void 0:O.original_payload),F.length&&($.$feature_flag_error=F.join(",")),this.za($)}else n&&this.F({[An]:c,[Bi]:n});if(r)return{key:t,enabled:!!s,variant:typeof s=="string"?s:void 0,payload:wc(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+qo)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return se((function*(){var i=n.nn;if(i){var r={distinct_id:i.distinctId,token:i.projectToken,person_properties:{$lib:i.library.name,$lib_version:i.library.version}},s=n.Na();s.length&&(r.evaluation_contexts=s);var o,a=n.qa();C(a)||(r.flag_keys=a);try{var l,u=(l=(yield i.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:r,compression:n.Ne.compression==="base64"?Ue.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+qo),e.defaultValue;var n=this.getFeatureFlag(t,e);return C(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var i=(function(r,s,o,a,l,u){s===void 0&&(s={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=Su);var c=((k,T)=>{var x=k.flags;return x?I({},k,{featureFlags:Object.fromEntries(Object.keys(x).map((F=>{var $;return[F,($=x[F].variant)!==null&&$!==void 0?$:x[F].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(x).filter((F=>x[F].enabled)).filter((F=>{var $;return($=x[F].metadata)==null?void 0:$.payload})).map((F=>{var $;return[F,($=x[F].metadata)==null?void 0:$.payload]})))}):(k.featureFlags&&T.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),k)})(r,u),d=c.flags,f=c.featureFlags,p=c.featureFlagPayloads;if(f){var h=r.requestId,g=r.evaluatedAt;if(U(f)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var m={};if(f)for(var v=0;f.length>v;v++)m[f[v]]=!0;return{[Li]:f,[xn]:m,[rs]:!1}}var E=f,S=p,_=d;if(l!=null&&l.partialResponse)E=I({},s,E),S=I({},o,S),_=I({},a,_);else if(r.errorsWhileComputingFlags)if(d){var b=new Set(Object.keys(d).filter((k=>{var T;return!((T=d[k])!=null&&T.failed)})));E=I({},s,Object.fromEntries(Object.entries(E).filter((k=>b.has(k[0]))))),S=I({},o,Object.fromEntries(Object.entries(S||{}).filter((k=>b.has(k[0]))))),_=I({},a,Object.fromEntries(Object.entries(_||{}).filter((k=>b.has(k[0])))))}else E=I({},s,E),S=I({},o,S),_=I({},a,_);return I({[Li]:Object.keys(ku(E)),[xn]:E||{},[Ni]:S||{},[ha]:_||{},[rs]:r.minimalFlagCalledEvents===!0},h?{[Lr]:h}:{},g?{[Wi]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,this.rt);i&&this.F(i),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([It,In]),this.Va(),void En.info("All overrides cleared");if(U(t))return this.F({[It]:Iu(t)}),this.Va(),void En.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var i={},r=n.flags,s=n.payloads;return r&&(i[It]=U(r)?Iu(r):r),s&&(i[In]=s),Object.keys(i).length&&this.F(i),r===!1&&s===!1?this.q([It,In]):r===!1?this.q(It):s===!1&&this.q(In),this.Va(),r===!1?En.info("Flag overrides cleared"):r&&En.info("Flag overrides set",{flags:r}),void(s===!1?En.info("Payload overrides cleared"):s&&En.info("Payload overrides set",{payloads:s}))}if(t&&typeof t=="object")return this.F({[It]:t}),this.Va(),void En.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),n=e.flags,i=e.flagVariants;try{t(n,i)}catch(r){this.rt.error("Error while running feature flags callback",r)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var i=(this.Oa(Mr)||[]).find((l=>l.flagKey===t)),r={["$feature_enrollment/"+t]:e},s={$feature_flag:t,$feature_enrollment:e,$set:r};i&&(s.$early_access_feature_name=i.name),n&&(s.$feature_enrollment_stage=n);var o=I({},this.getFlagVariants(),{[t]:e});this.F({[Li]:Object.keys(ku(o)),[xn]:o,[jt]:I({},this.Oa(jt)||{},r)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",s).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var i=this.Oa(Mr);!i||e?this.Qa(t,n):t(i)}Qa(t,e){var n=this;return se((function*(){var i=n.nn;if(i){var r,s=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield i.sendRequest("/api/early_access_features/?token="+i.projectToken+s,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Mr]:r=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(r)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,i)=>(n[i]=e[i],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,i=e.flagVariants;this.featureFlagEventHandlers.forEach((r=>{try{r(n,i,{errorsLoading:t})}catch(s){this.rt.error("Error while running feature flags callback",s)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(jt)||{},i=t?.$set||(t!=null&&t.$set_once?{}:t),r=t?.$set_once,s={};if(r)for(var o in r)({}).hasOwnProperty.call(r,o)&&(o in n||(s[o]=r[o]));this.F({[jt]:I({},n,s,i)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=I({},this.Oa(jt)||{});t.forEach((i=>{delete n[i]})),this.F({[jt]:n}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(jt),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=this.Oa(kn)||{},i=I({},n);for(var r of Object.keys(t))i[r]=I({},n[r],t[r]);this.F({[kn]:i}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(kn)||{};this.F({[kn]:I({},e,{[t]:{}})})}else this.q(kn)}reset(){this.ba++,this.wa=!1,this.Fa(),this.ma=!1,this._a=!1,this.ka=!1,this.$anon_distinct_id=void 0,this.La(),this.ca=!1,this.Sa=0}}},ov={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===Pi||this.Ya===Pr?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=mu,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(P==null||!P.visibilityState||P.visibilityState==="visible")return!0;var n=w==null||(e=w.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.some((i=>i.name==="visible"))})(),this.Ie=()=>{var e;P?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw Bt.error("started without valid sessionManager"),new Error(Ra+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===Wt)throw new Error(Ra+' cannot be used with cookieless_mode="always"');P!=null&&P.addEventListener&&ve(P,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,P==null||P.removeEventListener==null||P.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(Pn))==null||!t.enabled),n=!this.Ne.disable_session_recording,i=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return w&&e&&n&&!i}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!C(Object.assign)&&!C(Array.from);this.ro&&n?(this.no(t),Bt.info("starting")):(this.Ya=mu,this.stopRecording())}}no(t){var e,n,i;this.ro&&(this.Ya!==Pi&&this.Ya!==Pr&&(this.Ya=vu),B!=null&&(e=B.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=B.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(i=B.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,this.ao,(r=>{if(r)return Bt.error("could not load recorder",r);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(fl),(e=this.Mr)==null||e.unregister(rf)}uo(t,e){if(W(t))return null;var n,i=ke(t)?t:parseFloat(t);return typeof(n=i)!="number"||!Number.isFinite(n)||0>n||n>1?(Bt.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):i}ho(t){if(this.Mr){var e,n,i=this.Mr,r=()=>{var s,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((s=this.Ne.session_recording)==null?void 0:s.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;W(u)&&this.lo();var c=o?.minimumDurationMilliseconds;i.register({[Pn]:I({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:I({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:C(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};r(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.onSessionId(r)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Pi&&(this.Ya=Pr,Bt.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):Bt.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(Pn);return(n==null||(e=n.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Pn);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(n){return Bt.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!W(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,i;if(!this.eo){if((e=B.__PosthogExtensions__)==null||!e.initSessionRecording)return Bt.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[ff]:!0});var r;if(this.Ja||(this.Ja=(r=B.__PosthogExtensions__)==null?void 0:r.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Pr||this.Ya===Pi?void 0:(this.Ya=Pi,Bt.info("persisted remote config is stale, requesting fresh config before starting"),void new Of(this._instance).load());this.Ya=vu,(n=(i=this.Ja).setDocumentWasEverVisible)==null||n.call(i,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[of]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[sf]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?af:lf]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},av={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new hu(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,n=he(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((i=>new RegExp(i))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((i=>new RegExp(i))),n}yo(){if(this.isBrowserSupported()){if(w&&P){var t=n=>{n=n||w?.event;try{this.bo(n)}catch(i){jo.error("Failed to capture event",i)}};if(ve(P,"submit",t,{capture:!0}),ve(P,"change",t,{capture:!0}),ve(P,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||w?.event;try{this.bo(n,Do)}catch(i){jo.error("Failed to capture copy/cut event",i)}};ve(P,"copy",e,{capture:!0}),ve(P,"cut",e,{capture:!0})}}}else jo.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;mt(n)&&(this.instance.persistence&&this.instance.persistence.register({[oa]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((i=>{var r=P?.querySelectorAll(i);r?.forEach((s=>{t===s&&n.push(i)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[oa],i=this.co,r=this.instance.Qi()&&!this.fo;if(Je(i)&&!mt(n)&&!r)return!1;var s=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!s}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,i=Co(t);vf(i)&&(i=i.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&Wc(i,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var r=e===Do;if(i&&(function(d,f,p,h,g,m){var v;if(!w||vl(d)||p!=null&&p.url_allowlist&&!jc(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&jc(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var E=p.dom_event_allowlist;if(E&&!E.some((x=>f.type===x)))return!1}var S=Sf(d,h),_=S.parentIsUsefulElement,b=S.targetElementList;if(!(function(x,F){var $=F?.element_allowlist;if(C($))return!0;var O,L=function(K){if($.some((V=>K.tagName.toLowerCase()===V)))return{v:!0}};for(var N of x)if(O=L(N))return O.v;return!1})(b,p)||!Ea(b,p?.css_selector_allowlist)||Ea(b,(v=p?.css_selector_ignorelist)!==null&&v!==void 0?v:rm))return!1;try{var k=w.getComputedStyle(d);if(k&&k.getPropertyValue("cursor")==="pointer"&&f.type==="click")return!0}catch{}var T=d.tagName.toLowerCase();switch(T){case"html":return!1;case"form":return(g||["submit"]).indexOf(f.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(f.type)>=0;default:return _?(g||["click"]).indexOf(f.type)>=0:(g||["click"]).indexOf(f.type)>=0&&(ml.indexOf(T)>-1||d.getAttribute("contenteditable")==="true")}})(i,t,this.Ne,r,r?["copy","cut"]:void 0,this.instance)){var s=Jm(i,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=s.props;if(s.explicitNoCapture)return!1;var a=this.getElementSelectors(i);if(a&&a.length>0&&(o.$element_selectors=a),e===Do){var l,u=wf(w==null||(l=w.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return je(P?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(w==null||(e=w.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(A.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,A.info("History API monitoring stopped")}monitorHistoryChanges(){w&&w.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(w&&((e=w.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(i,r,s){try{if(!(r in i))return pu;var o={next:i[r]},a=s((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return je(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),i[r]=a,()=>{if(i[r]!==a)for(var l=i[r];je(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else i[r]=o.next}}catch{return pu}})(w.history,t,(i=>function(r,s,o){i.call(this,r,s,o),n.So(t)}))}}So(t){try{var e,n=w==null||(e=w.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(Gn,{navigation_type:t}),this._o=n}catch(i){A.error("Error capturing "+t+" pageview",i)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ve(w,"popstate",t),this.wo=()=>{w&&w.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[aa]),this.rageclicks=new hu(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return he(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return W(this.Ne.capture_heatmaps)?W(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;Xm.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[aa]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ho(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=P?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){w&&P&&(this.Po=this.cr.bind(this),ve(w,cs,this.Po),this.Ro=t=>this.ke(t||w?.event),ve(P,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||w?.event),ve(P,"mousemove",this.Ao,{capture:!0}),this.Lo=new Jc(this.instance,dm,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ve(P,ls,this.Oo),this.vo=!0)}Eo(){var t;w&&P&&(this.Po&&w.removeEventListener(cs,this.Po),this.Ro&&P.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&P.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&P.removeEventListener(ls,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),i=this.instance.scrollManager.scrollX(),r=this.instance.scrollManager.scrollElement(),s=(function(o,a,l){for(var u=o;u&&hn(u)&&!tt(u,"body");){if(u===l)return!1;var c=void 0;try{var d,f,p;c=(d=(f=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&f!==void 0?f:w)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(j(a,c))return!0;u=bf(u)}return!1})(Co(t),["fixed","sticky"],r);return{x:t.clientX+(s?0:i),y:t.clientY+(s?0:n),target_fixed:s,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!Dc(t.target)&&Ho(t)){var i=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&Wc(Co(t),this.instance.config.rageclick)&&this.Vt(I({},i,{type:"rageclick"})),this.Vt(i)}}Fo(t){!Dc(t.target)&&Ho(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(w){var e=this.Ne.disable_capture_url_hashes?fn(w.location.href):w.location.href,n=this.Ne.custom_personal_data_properties,i=this.Ne.mask_personal_data_properties?[...ai,...n||[]]:[],r=tr(e,i,nr);this.R=this.R||{},this.R[r]||(this.R[r]=[]),this.R[r].push(t)}}cr(){this.R&&!Kt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:Jc,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",I({$current_url:this.R.url},this.R.metrics.reduce(((n,i)=>I({},n,{["$web_vitals_"+i.name+"_event"]:I({},i),["$web_vitals_"+i.name+"_value"]:i.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var i;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},W(n?.name)||W(n?.value))bn.error("Invalid metric received",n);else{var r=typeof n.navigationURL=="string"?n.navigationURL:void 0,s=this.Bo(r);if(!C(s)){var o=ke(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+s;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),C(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=s),this.R.firstMetricTimestamp=C(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(i=this._instance.sessionManager)==null?void 0:i.checkAndGetSessionAndWindowId(!0),l=I({},n,r?{navigationURL:s}:{},{$current_url:s,timestamp:Date.now()});C(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else bn.error("Ignoring metric with value >= "+this.Ho,n)}}},this.Uo=()=>{if(!this.vo){var n,i,r,s,o=B.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&C(a)?o?.postHogWebVitalsCallbacks:void 0);if(C(l)||(n=l.onLCP,i=l.onCLS,r=l.onFCP,s=l.onINP),n&&i&&r&&s){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&s(this.jo.bind(this),u),this.vo=!0}else bn.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[da]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=he(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return W(n)?((e=this._instance.persistence)==null?void 0:e.props[fa])||["CLS","FCP","INP","LCP"]:n}get flushToCaptureTimeoutMs(){return(he(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=he(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=he(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=he(this.Wo)&&ke(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:gu;return t>0&&6e4>=t?gu:t}get isEnabled(){var t=me?.protocol;if(t!=="http:"&&t!=="https:")return bn.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=he(this.Wo)?this.Wo.web_vitals:mt(this.Wo)?this.Wo:void 0;return mt(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(bn.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var n=he(e.capturePerformance)&&!!e.capturePerformance.web_vitals,i=he(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[da]:n}),this._instance.persistence.register({[fa]:i})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=B.__PosthogExtensions__,n=this.zo,i=e?.postHogWebVitalsCallbacksByFlavor;i!=null&&i[n]||n==="web-vitals"&&C(i)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(r=>{r?bn.error("failed to load script",r):t()}))}Bo(t){var e=t||w?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?fn(e):e,i=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[...ai,...i||[]]:[];return tr(n,r,nr)}bn.error("Could not determine current URL")}}},lv={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(w&&this.isEnabled&&(n=B.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var i=B.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=B.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=B.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=i(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=r(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=s(this.captureException.bind(this)))}catch(o){Ai.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[la]),this.Jo=new og(I({},(function(n){var i,r,s,o;return n===void 0&&(n={}),{refillRate:(i=(r=n.exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:n.__exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:1,bucketSize:(s=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&s!==void 0?s:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Ai})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return he(t)?e=I({},e,t):(C(t)?this.Ko:t)&&(e=I({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Ai.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=B.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=B.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(i=>{if(i)return Ai.error("failed to load script",i);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[la]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,i,r=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(r)?Ai.info("Skipping exception capture because of client rate limiting.",{exception:r}):(i=this._instance.exceptions)==null||i.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,n;this.Xo=[],this.tl=new Sg([new Rg,new jg,new $g,new Tg,new Bg,new Og,new Lg,new Dg],(function(i){for(var r=arguments.length,s=new Array(r>1?r-1:0),o=1;r>o;o++)s[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(`
-`),d=l;c.length>d;d++){var f=c[d];if(1024>=f.length){var p=Lc.test(f)?f.replace(Lc,"$1"):f;if(!p.match(/\S*Error: /)){for(var h of s){var g=h(p,i);if(g){u.push(g);break}}if(u.length>=50)break}}}return(function(m){if(!m.length)return[];var v=Array.from(m);return v.reverse(),v.slice(0,50).map((E=>{return I({},E,{filename:E.filename||(S=v,S[S.length-1]||{}).filename,function:E.function||si});var S}))})(u)}})("web:javascript",Cg,Fg)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(ca))!==null&&e!==void 0?e:[],this.el=is(this.il()),this.rl=new Hg(this.el)}onConfigChange(){this.el=is(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,i;if(t.ok){var r=t.config;if("errorTracking"in r){var s=(e=(n=r.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(i=r.errorTracking)==null?void 0:i.captureExtensionExceptions;this.Xo=s,this._instance.persistence&&this._instance.persistence.register({[ca]:this.Xo,[ua]:o})}}}get nl(){var t,e=!!this._instance.get_property(ua),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!X(t)||t.trim().length===0)return void St.warn("Ignoring exception step because message must be a non-empty string");var n=(function(s){if(!s)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(s).reduce(((a,l)=>Ug.has(l)?(o.push(l),a):(a[l]=s[l],a)),{}),droppedKeys:o}})(this.sl(e)),i=n.sanitizedProperties,r=n.droppedKeys;r.length>0&&St.warn("Ignoring reserved exception step fields",{droppedKeys:r}),this.rl.add(I({[ts]:t,[ns]:new Date().toISOString()},i))}catch(s){St.error("Failed to add exception step. Ignoring breadcrumb.",s)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void St.info("Skipping exception capture because a suppression rule matched");if(!this.nl&&this.ul(e))return this.ll("Exception dropped: thrown by a browser extension"),void St.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.hl(e))return this.ll("Exception dropped: thrown by the PostHog SDK"),void St.info("Skipping exception capture because it was thrown by the PostHog SDK")}var n=this.el.enabled&&W(t.$exception_steps)?this.dl(t):t,i=typeof(s=globalThis._posthogReleaseId)=="string"&&s.length>0?s:void 0;i&&(n.$release_id=i);try{var r=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return r&&this.rl.clear(),r}catch(o){return St.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void St.error("Failed to process exception event. Ignoring this exception.",o)}var s}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:I({},t,{$exception_steps:e})}catch(n){return St.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[ts]:t,[ns]:new Date().toISOString()})}sl(t){return he(t)?I({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,i)=>{var r=i.type,s=i.value;return X(r)&&r.length>0&&n.$exception_types.push(r),X(s)&&s.length>0&&n.$exception_values.push(s),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var i=n.values.map((r=>{var s=Zf[r.operator],o=e[r.key];if(!s||!o)return!1;var a=U(r.value)?r.value:[r.value];return a.length>0&&s(a,o)}));return n.type==="OR"?i.some(Boolean):i.every(Boolean)}))}catch(n){return St.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,i;return(n=(i=e.stacktrace)==null?void 0:i.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,i,r,s=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=s[s.length-1];return(i=o==null||(r=o.filename)==null?void 0:r.includes("posthog.com/static"))!==null&&i!==void 0&&i}return!1}al(t){return!W(t)&&U(t)}}},cv=I({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,i;if(this.Mr&&this.Mr.register({[dl]:!!e.productTours}),!Wo(this._instance))return!this.vl&&W((n=this.Mr)==null?void 0:n.props[Oi])||Fr.info("product tours disabled; stopping and clearing cached tours"),(i=this.vl)==null||i.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&Wo(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=B.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=B.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(i=>{i?Fr.error("Could not load product tours script",i):t()}))}fl(){var t;!this.vl&&(t=B.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=B.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!U(this.cl)||e){var n=this.Mr;if(n){var i=n.props[Oi];if(U(i)&&!e)return this.cl=i,void t(i,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",timestampMode:"query",callback:r=>{if(Wo(this._instance)){var s=r.statusCode;if(s!==200||!r.json){var o="Product Tours API could not be loaded, status: "+s;return s===0?r.error||Fr.warn(o):Fr.error(o),void t([],{isLoaded:!1,error:o})}var a=U(r.json.product_tours)?r.json.product_tours:[];this.cl=a,n&&n.register({[Oi]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){W(this.vl)?t([],{isLoaded:!1,error:"Product tours not loaded"}):this.vl.getActiveProductTours(t)}showProductTour(t){var e;(e=this.vl)==null||e.showTourById(t)}previewTour(t){this.vl?this.vl.previewTour(t):this.ai((()=>{var e;this.fl(),(e=this.vl)==null||e.previewTour(t)}))}dismissProductTour(){var t;(t=this.vl)==null||t.dismissTour("user_clicked_skip")}nextStep(){var t;(t=this.vl)==null||t.nextStep()}previousStep(){var t;(t=this.vl)==null||t.previousStep()}clearCache(){var t;this.cl=null,(t=this.Mr)==null||t.unregister(Oi)}resetTour(t){var e;(e=this.vl)==null||e.resetTour(t)}resetAllTours(){var t;(t=this.vl)==null||t.resetAllTours()}cancelPendingTour(t){var e;(e=this.vl)==null||e.cancelPendingTour(t)}}},Ls),uv={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=B._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,i,r,s,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var f=d[0];l[f]={id:u[f],type:f,properties:d[1]}}var p=t.$set_once,h=t.$set;return{event:I({},bd(t,Qm),{properties:I({},t.properties,h?{$set:I({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},h)}:{},p?{$set_once:I({},(i=(r=t.properties)==null?void 0:r.$set_once)!==null&&i!==void 0?i:{},p)}:{}),elements_chain:(s=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&s!==void 0?s:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Et.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Et.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,i,r,s,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=P?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,f=new WeakSet,p=(m,v,E)=>{if(m!=null&&m[v]){var S=m[v];m[v]=E(S),c.push((()=>{m[v]=S}))}},h=m=>{if(f.has(m))return m;var v=d.bl(m);return v&&f.add(v),v},g=m=>m.map((v=>typeof v=="string"?v:h(v))).filter((v=>!Je(v)));return p(u,"appendChild",(m=>function(v){var E=h(v);return E?m.call(this,E):v})),p(u,"insertBefore",(m=>function(v,E){var S=h(v);return S?m.call(this,S,E):v})),p(u,"replaceChild",(m=>function(v,E){var S=h(v);return S?m.call(this,S,E):E})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(i=l.DocumentFragment)==null?void 0:i.prototype].forEach((m=>{p(m,"append",(v=>function(){for(var E=arguments.length,S=new Array(E),_=0;E>_;_++)S[_]=arguments[_];return v.apply(this,g(S))})),p(m,"prepend",(v=>function(){for(var E=arguments.length,S=new Array(E),_=0;E>_;_++)S[_]=arguments[_];return v.apply(this,g(S))}))})),[(r=l.Element)==null?void 0:r.prototype,(s=l.CharacterData)==null?void 0:s.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(v=>function(){for(var E=arguments.length,S=new Array(E),_=0;E>_;_++)S[_]=arguments[_];return v.apply(this,g(S))})),p(m,"after",(v=>function(){for(var E=arguments.length,S=new Array(E),_=0;E>_;_++)S[_]=arguments[_];return v.apply(this,g(S))})),p(m,"replaceWith",(v=>function(){for(var E=arguments.length,S=new Array(E),_=0;E>_;_++)S[_]=arguments[_];var b=g(S);return S.length&&!b.length?void 0:v.apply(this,b)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(v,E){var S=h(E);return S?m.call(this,v,S):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var i=t(n);return e&&n(),i}catch(r){throw n(),r}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{var o;!e.errored&&this.gl.length&&(Et.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},i=!1,r=o=>{e.errored=!o,e.loaded=!0,Et.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),i&&n()};try{var s=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),r(a)}})),!1).processEvent;s&&(e.processEvent=s),i=!0}catch(o){Et.error(_u+t.id,o),r(!1)}if(i&&e.loaded)try{n()}catch(o){Et.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),i=function(s){try{e.xl((()=>s.processEvent==null?void 0:s.processEvent(n)))}catch(o){Et.error("Error while processing event "+t.event+" for site app "+s.id,o)}};for(var r of Object.values(this.apps))i(r)}}onRemoteConfig(t){var e,n,i,r=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",(l=>this.Cl(l)))):void Et.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((n=this.yl)==null||n.call(this),t.ok){var s=t.config;if((i=s.siteApps)!=null&&i.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;B["__$$ph_site_app_"+u]=r._instance,(l=B.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(r._instance,c,(d=>{if(d)return Et.error(_u+u,d)}))};for(var a of s.siteApps)o()}else Et.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},dv={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,i=this.Il();i?(C(this.Ml)&&(this.Ml=(e=B.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),C(this.Tl)&&(this.Tl=(n=B.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=B.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=B.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(i=>{if(i)return Zm.error("failed to load script",i);t()}))}Pl(){var t,e;return(t=(e=this._instance.config.tracing_headers)!==null&&e!==void 0?e:this._instance.config.addTracingHeaders)!==null&&t!==void 0?t:this._instance.config.__add_tracing_headers}Il(){var t=this.Pl();return U(t)?(U(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(U(this.El)&&this.El.splice(0),this.El=t||void 0,this.El)}Qo(){var t,e;(t=this.Ml)==null||t.call(this),(e=this.Tl)==null||e.call(this),this.Ml=void 0,this.Tl=void 0}startIfEnabledOrStop(){this.Il()?this.ai(this.Uo):this.Qo()}}},fv=I({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return Q.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(W(e))return Q.warn("Flags not loaded yet. Not loading surveys.");var n=U(e);this.Rl=n?e.length>0:e,Q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],n=0;nlocalStorage.removeItem(r)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)Q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)Q.info(yu);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())Q.info("Not loading surveys in cookieless mode without consent.");else{var t=B?.__PosthogExtensions__;if(t){if(!C(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var n=t.generateSurveys;if(n)return void this.Dl(n,e);var i=t.loadExternalDependency;if(!i)return void this.$l(hl);i(this._instance,"surveys",(r=>{r||!t.generateSurveys?this.$l("Could not load surveys script",r):this.Dl(t.generateSurveys,e)}))}catch(r){throw this.$l("Error initializing surveys",r),r}finally{this.Al=!1}}}else Q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new nv(this._instance),Q.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){Q.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return Q.info(yu),t([]);var n,i=this._instance.get_property(pa);if(i&&!e)return t(i,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((r=>t(r.surveys,r.context))):(typeof Promise<"u"&&(this.Ll=new Promise((r=>{n=r}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:r=>{var s;this.Ll=null;var o=r.statusCode;if(o!==200||!r.json){var a="Surveys API could not be loaded, status: "+o;o!==0?Q.error(a):r.error||Q.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=r.json.surveys||[],d=c.filter((p=>(function(h){return!(!h.start_date||h.end_date)})(p)&&(Qf(p)||(function(h){var g;return!((g=h.conditions)==null||(g=g.actions)==null||(g=g.values)==null||!g.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(s=this._instance.persistence)==null||s.register({[pa]:c,[ss]:Date.now()});var f={isLoaded:!0};t(c,f),n?.({surveys:c,context:f})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(ss);return ke(t)&&Date.now()-t>3e5}Bl(){return ke(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,i={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};th(i);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(n){Q.error("Error in survey callback",n)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!W(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);Q.warn("init was not called")}Hl(t){var e=null;return this.getSurveys((n=>{var i;e=(i=n.find((r=>r.id===t)))!==null&&i!==void 0?i:null})),e}Ul(t){if(W(this._surveyManager))return{eligible:!1,reason:Rr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(W(this._surveyManager))return{eligible:!1,reason:Rr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(W(this._surveyManager))return Q.warn("init was not called"),{visible:!1,disabledReason:Rr};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return W(this._surveyManager)?(Q.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:Rr})):new Promise((n=>{this.getSurveys((i=>{var r,s=(r=i.find((a=>a.id===t)))!==null&&r!==void 0?r:null;if(s){var o=this.zl(s);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var i;if(W(this._surveyManager))Q.warn("init was not called");else{var r=typeof t=="string"?this.Hl(t):t;if(r!=null&&r.id)if(Bm.includes(r.type)){var s=P?.querySelector(e);if(s)return(i=r.appearance)!=null&&i.surveyPopupDelaySeconds?(Q.info("Rendering survey "+r.id+" with delay of "+r.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;Q.info("Rendering survey "+r.id+" with delay of "+((o=r.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(r,s,n),Q.info("Survey "+r.id+" rendered")}),1e3*r.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(r,s,n);Q.warn("Survey element not found")}else Q.warn("Surveys of type "+r.type+" cannot be rendered in the app");else Q.warn("Survey not found")}}displaySurvey(t,e){var n;if(W(this._surveyManager))Q.warn("init was not called");else{var i=this.Hl(t);if(i){var r=i;if((n=i.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(r=I({},i,{appearance:I({},i.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==xa.Popover&&e.initialResponses&&Q.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var s=this.Ul(i);if(!s.eligible)return void Q.warn("Survey is not eligible to be displayed: ",s.reason)}e.displayType!==xa.Inline?this._surveyManager.handlePopoverSurvey(r,e):this.renderSurvey(r,e.selector,e.properties)}else Q.warn("Survey not found")}}cancelPendingSurvey(t){W(this._surveyManager)?Q.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},Ls),hv={toolbar:class{constructor(t){this.instance=t}Wl(t){B.ph_toolbar_state=t}Vl(){var t;return(t=B.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),ba(this.instance.config)||!w||!P)return!1;t=t??w.location,n=n??w.history;try{if(!e){try{w.localStorage.setItem("test","test"),w.localStorage.removeItem("test")}catch{return!1}e=w?.localStorage}var i,r=iv||hs(t.hash,"__posthog")||hs(t.hash,"state"),s=r?Oc((()=>JSON.parse(atob(decodeURIComponent(r)))))||Oc((()=>JSON.parse(decodeURIComponent(r)))):null;return s&&s.action==="ph_authorize"?((i=s).source="url",i&&Object.keys(i).length>0&&(s.desiredHash?t.hash=s.desiredHash:n?n.replaceState(n.state,"",t.pathname+t.search):t.hash="")):((i=JSON.parse(e.getItem(wu)||"{}")).source="localstorage",delete i.userIntent),!(!i.token||this.instance.config.token!==i.token||(this.loadToolbar(i),0))}catch{return!1}}Zl(t){var e=B.ph_load_toolbar||B.ph_load_editor;!W(e)&&je(e)?e(t,this.instance):bu.warn("No toolbar load function found")}loadToolbar(t){var e=!(P==null||!P.getElementById(mf));if(!w||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,i=I({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(w.localStorage.setItem(wu,JSON.stringify(I({},i,{source:void 0}))),this.Vl()===2)this.Zl(i);else if(this.Vl()===0){var r;this.Wl(1),(r=B.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"toolbar",(s=>{if(s)return bu.error("[Toolbar] Failed to load",s),void this.Wl(0);this.Wl(2),this.Zl(i)})),ve(w,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(i)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},pv=I({experiments:Me},Ls),gv={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;W(e)||(mt(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||ba(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=B?.__PosthogExtensions__;if(t&&!C(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(hl);n(this._instance,"conversations",(i=>{i||!t.initConversations?this.eu("Could not load conversations script",i):this.tu(t.initConversations),this.Kl=!1}))}catch(i){this.eu("Error initializing conversations",i),this.Kl=!1}}else at.error("Conversations enabled but missing token in remote config.")}}tu(t){if(this.Jl)try{this._conversationsManager=t(this.Jl,this._instance),this.Yl=!1,at.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else at.error("Cannot complete initialization: remote config is null")}eu(t,e){at.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():at.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!Je(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":ba(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":C(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?W(this.Jl)||!this.Jl.token?"missing_token":B!=null&&B.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,n){var i=this;return se((function*(){return i._conversationsManager?i._conversationsManager.sendMessage(t,e,n):(at.warn(Sn),null)}))()}getMessages(t,e){var n=this;return se((function*(){return n._conversationsManager?n._conversationsManager.getMessages(t,e):(at.warn(Sn),null)}))()}markAsRead(t){var e=this;return se((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(at.warn(Sn),null)}))()}getTickets(t){var e=this;return se((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(at.warn(Sn),null)}))()}requestRestoreLink(t){var e=this;return se((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(at.warn(Sn),null)}))()}restoreFromToken(t){var e=this;return se((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(at.warn(Sn),null)}))()}restoreFromUrlToken(){var t=this;return se((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(at.warn(Sn),null)}))()}getCurrentTicketId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getCurrentTicketId())!==null&&t!==void 0?t:null}getWidgetSessionId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getWidgetSessionId())!==null&&t!==void 0?t:null}Xn(){var t;(t=this._conversationsManager)==null||t.setIdentity()}ts(){var t;(t=this._conversationsManager)==null||t.clearIdentity()}}},mv={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=pe("[logs]"),this.nu=I({},this.rt,{error(){for(var i=arguments.length,r=new Array(i),s=0;i>s;s++)r[s]=arguments[s];r.some(Pu)||n.rt.error(...r)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var i,r;this.Sa=0,(i=this.ou)==null||i.onReconnect(),(r=this.lu)==null||r.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),w&&ve(w,"online",this.au)}uu(t,e,n,i){var r,s=(function(o,a){var l,u,c,d,f,p,h,g=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,v=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,E=C(v)?Math.max(m,2048):Math.max(m,v),S=o?.resourceAttributes;return{serviceName:(d=(f=S?.["service.name"])!==null&&f!==void 0?f:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=S?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(h=S?.["deployment.environment"])!==null&&h!==void 0?h:o?.environment,resourceAttributes:S,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:E,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:v,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((r=this._instance)==null||(r=r.config)==null?void 0:r.logs,n);return[new wg(this.hu(t,e),s,this.nu,(()=>this.du()),(o=>o()),void 0,i),s]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var i=this.uu((()=>this.tr),(r=>{this.tr=r}));this.ou=i[0],this.fu=i[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var n;(n=this.lu)==null||n.reset(),this.gu=e;var i=this.uu((()=>this.su),(r=>{this.su=r}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},Au);this.lu=i[0],this.mu=i[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!W(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){Pu(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=B?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(n=>{var i;n||(i=t.logs)==null||!i.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(hl)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:i=>i===Ut.LogsQueue?t():void 0,setPersistedProperty(i,r){var s;i===Ut.LogsQueue&&e((s=r)!==null&&s!==void 0?s:[])},Ot:i=>this.Ot(i),getLibraryId:()=>ne.LIB_NAME,getLibraryVersion:()=>ne.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Af(this.Sa,3))e({kind:"fatal",error:zo(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,i=s=>{n||(n=!0,clearTimeout(r),e(s))},r=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),i({kind:"retry-later",error:zo(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:s=>{var o=s.statusCode;if(this.ku(o),o>=200&&300>o)i({kind:"ok"});else if(o===413)i({kind:"too-large"});else if(o!==0&&o!==429&&500>o)i({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(s.error||this.rt.warn("Logs request failed before receiving an HTTP response"),i({kind:"retry-later",error:zo(s.error,"logs request failed before receiving an HTTP response")})):i({kind:"retry-later",error:(a=s.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Pf(t,this.Sa,3,(()=>this.rt.warn("Log requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped sending logs; will try again when connectivity changes."))))}bu(t){this.tr.length>0&&this.xu(t,this.tr,this.fu,ne.LIB_NAME,(e=>{this.tr=e})),this.su.length>0&&this.xu(t,this.su,this.mu,Au,(e=>{this.su=e}))}xu(t,e,n,i,r){if(e.length!==0){var s=e.map((a=>a.record));r([]);var o=Xd(s,Zd(n,ne.LIB_NAME,ne.LIB_VERSION),i,ne.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.windowId,r=n.sessionStartTimestamp,s=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=i,W(r)||(e.sessionStartTimestamp=r),W(s)||(e.lastActivityTimestamp=s)}if(B!=null&&(t=B.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?fn(B.location.href):B.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},vv={metrics:class{constructor(t){this.rt=pe("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new bg(this.hu(),(function(i){var r,s,o,a,l,u=i?.resourceAttributes;return{serviceName:(r=u?.["service.name"])!==null&&r!==void 0?r:i?.serviceName,serviceVersion:(s=u?.["service.version"])!==null&&s!==void 0?s:i?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:i?.environment,resourceAttributes:u,beforeSend:i?.beforeSend,flushIntervalMs:(a=i?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=i?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>ne.LIB_NAME,getLibraryVersion:()=>ne.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var i=!1,r=o=>{i||(i=!0,clearTimeout(s),n(o))},s=setTimeout((()=>r({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(I({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)r({kind:"ok"});else if(a===413)r({kind:"too-large"});else if(a!==0&&a!==429&&500>a)r({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;r({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},_v=I({},Ls,ov,av,lv,cv,uv,fv,dv,hv,pv,gv,mv,vv);Xe.__defaultExtensionClasses=I({},_v);(function(){ne.SDK_DIST_CHANNEL="npm";var t=Vi[Kn]=new Xe;return(function(){function e(){e.done||(e.done=!0,ih=!1,ie(Vi,(function(n){n._dom_loaded()})))}P!=null&&P.addEventListener?P.readyState==="complete"?e():ve(P,"DOMContentLoaded",e,{capture:!1}):w&&A.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const yv=["a[href]","button:not([disabled])","input:not([disabled]):not([type='hidden'])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");let Ke=null,_s=null,sh="";const Ta=new Map;function oh(t){return[...t.querySelectorAll(yv)].filter(e=>!e.hidden&&e.getAttribute("aria-hidden")!=="true"&&e.getClientRects().length>0)}function wv(t){for(const e of document.body.children)e===t||e.tagName==="SCRIPT"||(Ta.set(e,{inert:e.inert,ariaHidden:e.getAttribute("aria-hidden")}),e.inert=!0,e.setAttribute("aria-hidden","true"))}function bv(){for(const[t,e]of Ta)t.inert=e.inert,e.ariaHidden===null?t.removeAttribute("aria-hidden"):t.setAttribute("aria-hidden",e.ariaHidden);Ta.clear()}function ah(t){return t?.dataset.modalDismissible!=="false"&&t?.getAttribute("aria-busy")!=="true"}function We(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n)return!1;const i=Ke&&Ke!==n?Ke:null,r=_s;if(i&&qe(i,{restoreFocus:!1,force:!0}),Ke!==n){let a=e.trigger||document.activeElement;a&&(i?.contains(a)||n.contains(a))&&(a=r),_s=a,sh=document.body.style.overflow,wv(n),document.body.style.overflow="hidden"}Ke=n,n.classList.add("open"),n.setAttribute("aria-hidden","false");const s=n.querySelector(".modal-content");s&&(s.style.transform="scale(1) translateY(0)");const o=()=>{if(Ke!==n)return;((e.initialFocus?n.querySelector(e.initialFocus):n.querySelector("[data-modal-initial-focus]"))||oh(n)[0]||n.querySelector(".modal-content")||n).focus({preventScroll:!0})};return requestAnimationFrame(o),setTimeout(o,260),!0}function qe(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n||!e.force&&!ah(n))return!1;if(n.classList.remove("open"),n.setAttribute("aria-hidden","true"),n!==Ke)return!0;bv(),document.body.style.overflow=sh,Ke=null;const i=_s;return _s=null,e.restoreFocus!==!1&&i?.isConnected&&i.focus({preventScroll:!0}),!0}function Ev(){return!!Ke}function Fu(t,e,n="Operation in progress"){const i=typeof t=="string"?document.getElementById(t):t;i&&(i.dataset.modalDismissible=e?"false":"true",i.setAttribute("aria-busy",String(!!e)),e?i.setAttribute("aria-label",n):i.removeAttribute("aria-label"))}function Sv(t){if(!ah(t))return;const e=t.dataset.modalCloseHandler;e&&typeof window[e]=="function"?window[e]():qe(t)}document.addEventListener("keydown",t=>{if(!Ke)return;if(t.key==="Escape"){t.preventDefault(),t.stopImmediatePropagation(),Sv(Ke);return}if(t.key!=="Tab"){t.stopPropagation();return}const e=oh(Ke);if(!e.length){t.preventDefault(),(Ke.querySelector(".modal-content")||Ke).focus();return}const n=e[0],i=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),n.focus())},!0);function xv(){document.querySelectorAll(".modal-overlay").forEach(t=>{t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-hidden",t.classList.contains("open")?"false":"true");const e=t.querySelector(".modal-content");e&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1);const n=t.querySelector("h1, h2, h3");n&&(n.id||(n.id=`${t.id}-title`),t.setAttribute("aria-labelledby",n.id)),t.querySelectorAll(".modal-close").forEach(i=>{i.getAttribute("aria-label")||i.setAttribute("aria-label","Close dialog")})})}const bl=Object.freeze({free:"Free",professional:"Pro",power:"Power"}),Iv=Object.freeze({free:2,professional:50,power:2e3}),kv="(contact us)",Cv=Object.freeze({free:Object.freeze(["2 generations/month","Gemini model only","Code Review"]),professional:Object.freeze(["50 generations/month","All models","Code Regeneration","Code Review"]),power:Object.freeze(["2000 generations/month","All models","Code Regeneration","Bring your own key (BYOK)","Code Review","All models + early access",`API & MCP access ${kv}`])}),lh="CodeFile",ch="GeneratedCode",Av={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function ln(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function $a(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Pv(t={},e=0){const n=$a(t.artifactType||t.type||lh),i=$a(t.artifactName||t.name||t.fileName||`${ch}-${e+1}`);return`${n||"artifact"}-${i||e+1}`}function uh(t={},e=0){const n=ln(t),i=n.artifactType||n.type||lh,r=n.artifactName||n.name||ch;let s=n.fileName||r;return s.endsWith(".dart")||(s+=".dart"),{id:$a(n.id)||Pv({...n,artifactType:i,artifactName:r,fileName:s},e),artifactType:i,artifactName:r,fileName:s,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:dh(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:fh(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:ln(n.metadata),codeType:n.codeType||Av[i]||"O"}}function dh(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=ln(e),i=n.name||n.package;return i?{name:i,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(ln(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function fh(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=ln(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function Ma(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function ir(t,e={}){const n=[],i=typeof t=="string"?Ma(t):t,s=ln(i||{});!i&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(s.artifacts)?s.artifacts:[{artifactType:s.artifactType||e.artifactType,artifactName:s.artifactName||e.artifactName,fileName:s.fileName||e.fileName,description:s.description,code:s.code||e.code||(typeof t=="string"?t:""),dependencies:s.dependencies||e.dependencies,relationships:s.relationships||e.relationships}];o.forEach((d,f)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${f+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,f)=>uh(d,f)),l=new Map(o.map((d,f)=>[ln(d).id,a[f]?.id]).filter(([d,f])=>d&&f)),u=d=>l.get(d)||d,c=fh(s.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:s.schemaVersion||e.schemaVersion||null,id:s.id||e.id||"bundle-current",title:s.title||s.name||e.title||"Generated artifact bundle",description:s.description||e.description||"",artifacts:a,dependencies:dh(s.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(s.deployOrder)?s.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(s.warnings)?s.warnings:[]],metadata:ln(s.metadata)}}function ci(t){return ir(t).artifacts[0]||uh()}function Zt(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function ui(t){return JSON.stringify(t,null,2)}function Fv(t){return ui({task:"architect",userRequest:String(t??"")})}function Rv(t){const e=Zt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ui(e):ui({task:"generate_bundle",bundleSpec:e})}function Tv(t){return ui({task:"review_bundle",generatedBundle:Zt(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function El(t,e=null){const n={stage:t};return e!=null&&(n.bundle=Zt(e)),n}function $v({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:i,userFeedback:r}){return ui({task:"regenerate_artifact",artifactId:i,bundleSpec:Zt(t),artifactBundle:Zt(e),bundleReview:Zt(n),userFeedback:String(r)})}function hh({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:i}){return ui({task:"regenerate_bundle",bundleSpec:Zt(t),artifactBundle:Zt(e),bundleReview:Zt(n),userFeedback:String(i??"")})}const Ru={csam:"child-safety content",dangerous:"dangerous content",harassment:"harassment",hate_speech:"hate speech",maliciousUrls:"a potentially malicious URL",malicious_uris:"a potentially malicious URL",pi_and_jailbreak:"prompt-injection or jailbreak instructions",promptInjection:"prompt-injection or jailbreak instructions",rai:"restricted content",sdp:"sensitive personal data",sexually_explicit:"sexually explicit content",virus_scan:"potentially malicious file content"},Mv=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function nt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Lv(t){return nt(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||nt(t.filterSummary)||nt(t.filterResults):!1}function ph(t,e=0){if(!nt(t)||e>3)return null;if(Lv(t))return t;for(const n of Mv){const i=t[n];if(nt(i)){const r=ph(i,e+1);if(r)return r}}return null}function ys(t){return Array.isArray(t)?t.some(ys):nt(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(ys):!1}function La(t){return Array.isArray(t)?t.some(La):nt(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(La):!1}function gh(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function Nv(t,e){if(nt(t))for(const[n,i]of Object.entries(t)){if(!nt(i))continue;const r=nt(i.categories)?i.categories:{},s=Object.entries(r).filter(([,o])=>nt(o)&&o.matched===!0).map(([o])=>o);s.length>0?s.forEach(o=>e.add(o)):i.matched===!0&&e.add(gh(n))}}function Ov(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(i=>nt(i)?Object.entries(i):[]):Object.entries(t);for(const[i,r]of n){if(!ys(r))continue;const s=gh(i),o=r?.raiFilterResult?.raiFilterTypeResults||(s==="rai"?r?.raiFilterTypeResults:null),a=nt(o)?Object.entries(o).filter(([,l])=>ys(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(s)}}function Bv(t){return Ru[t]?Ru[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Tu(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function Dv(t){const e=ph(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);Nv(e.filterSummary,n),Ov(e.filterResults,n);const i=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,r=e.invocationResult||null,s=La(e.filterSummary||e.filterResults);return!i&&!s&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:i?"blocked":"unavailable",invocationResult:r,matchedFilters:[...n]}}function jv(t,e){const n=Dv(t);if(!n)return null;const i=[...new Set(n.matchedFilters.map(Bv))],r=n.kind==="blocked",s=new Error(r?`Safety screening blocked this pipeline step for ${Tu(i)}.`:"Safety screening could not be completed. Please try again.");return s.name="ModelArmorError",s.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",s.isModelArmor=!0,s.pipelineStep=e,s.userTitle=r?"Request blocked for safety":"Safety check unavailable",s.userMessage=r?`The safety check detected ${Tu(i)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",s.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",s.matchedFilters=n.matchedFilters,s}function Uv(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function $u(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,n=[];for(const i of Uv(t).split(`
-`)){if(!/^[A-Za-z_$]/.test(i)||e.test(i))continue;const r=i.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);r&&n.push(r[1])}return n}function Sl(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(i,r,s)=>s.toUpperCase());if(e==="A"){const i=n.replace(/(^|_)(\w)/g,(r,s,o)=>o.toUpperCase());return i.charAt(0).toLowerCase()+i.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function Mu(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),i=>i.toString(16).padStart(2,"0")).join("")}async function Hv(t,e=new Map){const n={},i=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=Sl(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Mu(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Mu(c)),n[o]=u,a.type==="F"){const d=$u(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>i.add(p))}}const r=new Set($u(e.get("lib/flutter_flow/custom_functions.dart")||"")),s={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(i).filter(o=>!r.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(s)}}const Wv=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Lu={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},qv=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),zv=["Struct","Record"],Vv=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>Vo(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; }
-class W extends StatefulWidget { const W({this.value}); final double? value; }`},{id:"non-nullable-public-field",severity:"error",message:"CustomWidget declares a non-nullable field with no constructor default. FlutterFlow omits unset Define Parameters fields, so the emitted call cannot supply it. Make the field nullable (`final double? value`) or give the parameter a default (`this.value = 0.0`).",detect:t=>Vo(t).some(e=>{const n=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let i;for(;(i=n.exec(e))!==null;){const r=i[1];if(!(new RegExp(`this\\.${r}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${r}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget {
- const W({required this.value});
- final double value;
-}`,neg:`class _P {
- const _P({required this.t});
- final double t;
-}
-class W extends StatefulWidget {
- const W({this.value = 1.0});
- final double value;
-}`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; }
-var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; }
-var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>Vo(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget {
- const W({this.textStyle});
- final TextStyle? textStyle;
- @override _S createState() => _S();
-}
-class _S extends State { @override Widget build(BuildContext c) => const SizedBox(); }`,neg:`class W extends StatefulWidget {
- const W({this.width});
- final double? width;
- @override _S createState() => _S();
-}
-class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function xt(t,e,n){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:n}}function rr(t){let e="",n=0;for(;n"&&(n--,n===0))return{inner:t.slice(e+1,i),end:i+1};return null}function Kv(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let i=0;for(let r=n.index+n[0].length-1;rYv(t).usable);function Zv(t=""){const e=rr(t);return Jv.filter(n=>n.detect(e)).map(({id:n,severity:i,message:r})=>({id:n,severity:i,message:r}))}function Xv(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const i of n){let r=i.index+6,s=null;const o=r;for(;ro;if(t[r]==="<"){const u=Gv(t,r);if(!u||(s=u.inner.replace(/\s+/g," ").trim(),r=u.end,!/\s/.test(t[r]||"")))continue;for(;rNu(o.functionName)===i);if(r)return r;const s=o=>!o.functionName.startsWith("_");return n.find(s)||n[0]}function Ns(t=""){return Array.from(rr(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function Qv(t="",e=""){return xl(t,e)?.returnType||null}function Ou(t){return String(t||"").replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").toLowerCase()}function e_(t,e){const n=Ns(e);if(n.length===0)return null;const r=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>Ou(l)===r)||n.length>1)return null;const[o]=n,a=`${Ou(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function Il(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function t_(t,e,n=""){const i=xl(e,n)?.functionName;if(!i)return null;const r=String(t||"").split("/").pop(),s=Sl(r,"A");if(s===i)return null;const o=`${Il(i)}.dart`;return`File name "${r}" does not match Action "${i}". FlutterFlow derives the action from the file name, so it looks for "${s}" and reports Action "${s}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${s}".`}function n_(t="",e=""){return xl(t,e)!==null}function i_(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(i=>qv.has(i)?!1:!zv.some(s=>i.endsWith(s))||e.has(i))}function r_(t,{functionName:e="",declaredTypes:n=new Set}={}){const i=Qv(t,e),r=i_(i,n);if(r.length===0)return null;const[s]=r;let o;return n.has(s)?o=`uses Code File type "${s}", which FlutterFlow cannot process as an Action Return Value`:i===s?o="is not a FlutterFlow Action Return Value":o=`uses type "${s}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${i}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function s_(t,e={}){const n=[],i=t.fileName||"",r=t.code||"";if(Wv.has(t.artifactType)||n.push(xt(t,"error",`Unsupported artifact type "${t.artifactType}".`)),i.endsWith(".dart")||n.push(xt(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return n.push(xt(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)||n.push(xt(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const s of Zv(r))n.push(xt(t,s.severity,s.message))}if(t.artifactType==="CustomAction"&&!n_(r,t.artifactName)&&n.push(xt(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const s=e.declaredTypes||new Set(Ns(r)),o=r_(r,{functionName:t.artifactName,declaredTypes:s});o&&n.push(xt(t,"error",o));const a=t_(i,r,t.artifactName);a&&n.push(xt(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&n.push(xt(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const s=e_(i,r);s&&n.push(xt(t,"info",s))}return n}function o_(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(s=>Ns(s.code||""))),i=e.flatMap(s=>s_(s,{declaredTypes:n})),r=e.map(s=>({artifactId:s.id,fileName:s.fileName,pathHint:Lu[s.artifactType]||Lu.CodeFile}));return{valid:i.every(s=>s.severity!=="error"),findings:i,deployHints:r}}const Bu="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function Du(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function a_(t=""){const e=t.indexOf(Bu);return e===-1?t:t.slice(e+Bu.length).replace(/^\s*\n/,"")}const l_=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function c_(t="",e=""){const n=a_(t),i=new Set((e.match(/^\s*import .*$/gm)||[]).map(Du).filter(Boolean)),r=n.split(`
-`).filter(s=>{const o=Du(s);return o===null||!i.has(o)?!0:!l_.test(s)}).join(`
-`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+r}const u_=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations","flutter_web_plugins","integration_test","sky_engine"]);function d_(t){let e="",n=0;for(;n{const i=n.name||n.package;if(!i||i==="flutter")return e;const r=n.versionRequired||n.required;return e[i]=r&&n.version||"",e},{})}function y_(t){const e=new Map,n=new Map,i=[];for(const r of t)e.has(r.fileName)?i.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?i.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return i}function w_(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(h=>h.id===p)).filter(Boolean),s=[...t?.warnings||[]];let o=[];r.forEach(p=>{const h=__(p),g=p.fixedCode||p.code||"",m=p.codeType||m_[p.artifactType]||Qe.OTHER;g.trim()||s.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:h,content:g,type:m,path:p.deployPath||v_(h,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,h)=>({entry:p,index:h})).filter(({entry:p})=>p.type===Qe.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],h={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId}
-${m.content}`).join(`
-
-`)},g=new Set(l.slice(1).map(({index:m})=>m));o=o.filter((m,v)=>!g.has(v)),o[p.index]=h}const u={...ju(t?.dependencies),...r.reduce((p,h)=>({...p,...ju(h.dependencies)}),{})},c={};r.forEach(p=>{kl(p.fixedCode||p.code||"").forEach(h=>{h in u||(c[h]="")})});const d={...c,...u},f=y_(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:s,errors:f}}function b_(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function E_(t){return String(t||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function S_(t,e){const i=[E_(t),b_(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!i)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return i}function x_(t,e=new Map){const n=[];for(const[i,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||i,className:S_(i,r),content:r.content,fileName:i,path:r.path});return n}function I_(t,e){const n=new Set(e.map(i=>i.path));return new Map(Array.from(t.entries()).filter(([,i])=>!n.has(i.path)))}const Uu={pass:0,warning:1,fail:2},k_=["manualActions"];function ot(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function Vt(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const n=e.filter(i=>typeof i=="string").join(`
-`);if(n)return n}}return""}function kt(t){return t==null?[]:Array.isArray(t)?t:[t]}function C_(t){const e=ot(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return Hu(n);const i=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return i?Hu(Number(i[1])):null}function Hu(t){return t>=0&&t<=100?t:null}function ct(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Cl(t){const e=String(t||"").toLowerCase();return/(fail|error|critical|block|reject|invalid)/.test(e)?"fail":/(warn|attention|manual|partial|incomplete|concern)/.test(e)?"warning":/(pass|success|ready|approve|valid|clean|info|notice)/.test(e)?"pass":null}function Na(...t){return t.filter(Boolean).reduce((e,n)=>Uu[n]>Uu[e]?n:e,"pass")}function _h(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const i=ot(t),r=Vt(i.message,i.title,i.issue,i.description,i.summary);return r?{severity:Cl(i.severity||i.status||i.level)||e,message:r,suggestion:Vt(i.suggestion,i.fix,i.recommendation,i.action),source:i.source||n}:null}function Oa(t,e="review"){const n=ot(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,s])=>kt(n[r]).map(o=>_h(o,s,e)).filter(Boolean))}function A_(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const i=ot(t),r=Vt(i.title,i.action,i.step,i.message,i.name,i.description);return r?{id:i.id||`${n||"bundle"}-manual-${e+1}`,title:r,detail:Vt(i.detail,i.instructions,i.description),location:Vt(i.location,i.flutterFlowPath,i.path),timing:Vt(i.timing,i.phase)||"unspecified",artifactId:n,source:Vt(i.source)||"Code Review"}:null}function Ba(t,e=null){const n=ot(t);return k_.flatMap(i=>kt(n[i])).map((i,r)=>A_(i,r,e)).filter(Boolean)}function P_(t){let e=typeof t=="string"?Ma(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=ot(e);typeof n.content=="string"&&(e=Ma(n.content)||e);const i=ot(e),r=ot(i.reviewResult||i.codeReview||i.result);return{rawText:"",root:Object.keys(r).length?r:i}}function F_(t,e){const n=[e.id,e.fileName,e.artifactName].map(ct);return t.find(i=>{const r=ot(i);return[r.id,r.fileName,r.artifactName,r.name].map(ct).some(s=>s&&n.includes(s))})||null}function R_(t,e){return kt(t?.metadata?.compatibility?.deployHints).find(r=>ct(r?.artifactId)===ct(e.id)||ct(r?.fileName)===ct(e.fileName))?.pathHint||""}function T_(t,e){return kt(t?.relationships).filter(n=>ct(n?.from)===ct(e.id)||ct(n?.to)===ct(e.id))}function $_(t,e){return kt(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||ct(n.artifactId)===ct(e.id)).map(n=>_h(n,"warning","Compatibility check")).filter(Boolean)}function M_(t,e,n,i){const r=F_(e,n),s=ot(r?.review||r||n.review),o=Object.keys(s).length>0,a=[...Oa(s),...$_(t,n)],l=Ba(s,n.id),u=Cl(s.status||s.verdict||s.outcome||s.result),c=a.length?Na(...a.map(f=>f.severity)):null,d=Na(u,c,o?null:"warning");return{...n,index:i,status:d,statusReason:o?Vt(s.summary,s.overview,s.assessment,s.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof s.fixedSource=="string"&&s.fixedSource.trim()?s.fixedSource.trim():null,pathHint:R_(t,n),relationships:T_(t,n)}}function L_({status:t,score:e,artifactPresentations:n,manualSteps:i}){const r=n.length;if(r===0&&i.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const s=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),r&&o.push(`${r} artifact${r===1?"":"s"}: ${s.pass} pass, ${s.warning} warn, ${s.fail} fail.`),i.length&&o.push(`Do before deploy: ${i.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function N_({bundle:t,reviewResult:e}){const n=ot(t),i=kt(n.artifacts),{root:r,rawText:s}=P_(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(ot).find(S=>Object.keys(S).length)||{},a=kt(r.artifacts||r.files||r.reviews),l=i.map((S,_)=>M_(n,a,S,_)),u=Oa(r),d=[...Oa(o),...u],f=[...Ba(o),...Ba(r),...l.flatMap(S=>S.manualSteps)].filter((S,_,b)=>b.findIndex(k=>k.title===S.title&&k.artifactId===S.artifactId)===_),p=Cl(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),h=Na(p,...d.map(S=>S.severity),...l.map(S=>S.status)),g=o.score??r.score??r.overallScore??s,m=C_(g),v=Vt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,r.overallSummary,r.headline,r.summary,r.executiveSummary,r.overview,r.assessment,r.conclusion,s)||L_({status:h,score:m,artifactPresentations:l,manualSteps:f}),E=l.reduce((S,_)=>(S[_.status]+=1,S),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:h,score:m,summary:v,findings:d,manualSteps:f,artifacts:l,counts:E,reviewCoverage:{reviewed:l.filter(S=>S.reviewComplete).length,total:l.length},deployOrder:kt(n.deployOrder),relationships:kt(n.relationships),warnings:kt(n.warnings),compatibility:ot(n.metadata?.compatibility)}}const O_=/^\uFEFF/;function Fi(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(`
-`)}function B_(t){const e=String(t??"").replace(O_,"");if(!e.trim())return"";const n=e.split(`
-`),i=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let r=0,s=-1;const o=[];{let c=0;for(let d=0;d=0&&(r++,s<0&&(s=d),o.push(c+f)),c+=n[d].length+1}}if(r===0)return Fi(n);{const c=Da(e);if(!c.error&&o.every(f=>qu(f,c.commentAndStringRanges)))return Fi(n)}if(r===1){const c=Fi(n.slice(0,s)),d=Fi(n.slice(s+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(`
-
-`)}function D_(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function yh(t){const e=D_(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),n=>n[1])}function wh(t){return`${Il(t)}.dart`}function j_(t){return Sl(t,"W")}const Wu={"(":")","[":"]","{":"}"},U_={")":"(","]":"[","}":"{"},H_=/[A-Za-z0-9_]/;function Da(t){const e=[{kind:"code",opener:null,openedLine:0}],n=[];let i=1,r=0;const s=(c,d)=>{(c===`
-`||c==="\r"&&d!==`
-`)&&i++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&n.push({start:c.startIndex,end:t.length})};for(;r0?t[r-1]:"",h=r>1?t[r-2]:"",g=(p==="r"||p==="R")&&!H_.test(h);e.push({kind:"string",quote:c,triple:f,raw:g,startIndex:r,openedLine:i}),r+=f?3:1;continue}if(Wu[c]){e.push({kind:"code",opener:c,openedLine:i}),r++;continue}if(U_[c]){if(d.interpolation&&c==="}"){e.pop(),r++;continue}if(d.opener&&Wu[d.opener]===c){e.pop(),r++;continue}return d.opener?(a(),{error:o??`line ${i}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${i}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}s(c,t[r+1]),r++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function W_(t){return Da(String(t??"")).error}function qu(t,e){return e.some(({start:n,end:i})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const q_=["gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com"],z_="MAGIC_LINK_SENT",V_="PLUS_ALIAS_REJECTED",G_="Please enter your primary email address. Plus aliases (such as {email}) are not allowed for {domain} accounts.",Os={allowlistedDomains:q_,successCode:z_,validationCode:V_,messageTemplate:G_},K_=new Set(Os.allowlistedDomains),Y_=Os.successCode,bh=Os.validationCode;function Bs(t){return typeof t=="string"?t.trim():""}function J_(t){const e=Bs(t),n=e.lastIndexOf("@");if(n<=0||n===e.length-1)return!1;const i=e.slice(0,n),r=e.slice(n+1).toLowerCase();return K_.has(r)?i.includes("+"):!1}function Z_(t,e){return Os.messageTemplate.replaceAll("{email}",t).replaceAll("{domain}",e)}function Eh(t){if(!J_(t))return null;const e=Bs(t),n=e.lastIndexOf("@"),i=e.slice(n+1).toLowerCase();return Z_(e,i)}function Sh(t,e){return t?.code===bh?t.message||Eh(e)||"Please enter your primary email address.":t?.code===Y_||!t?.code?`Check your email — we sent a link to ${Bs(e)}`:t.message||"Something went wrong. Please try again."}const X_="ccc_auth_session",Q_="ccc_subscription",ey=Object.freeze(["hasSeenWalkthrough"]);function ty(t){const e=[];for(const n of ey)t.getItem(n)!==null&&(t.removeItem(n),e.push(n));return e}function ny(){return[X_,Q_]}function iy({storage:t,onIdentityChanged:e,onPlanChanged:n}){for(const i of ny())t.removeItem(i);typeof e=="function"&&e(),typeof n=="function"&&n()}function ry({sendLink:t,getEmail:e,onState:n}){let i=!1;return async function(){if(i)return{status:"busy"};i=!0;let s;try{n({status:"pending",error:null});const o=await t(e());return s={status:"sent",data:o},n({status:"sent",data:o}),s}catch(o){return s={status:"error",error:o},n({status:"error",error:o}),s}finally{i=!1}}}const sy=/^dependencies\s*:\s*(?:#.*)?$/,oy=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function ur(t){const e=t.match(oy);return e?e[1]??e[2]??e[3]:null}function dr(t){const e=t.trim();return e===""||e.startsWith("#")}function pn(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function Pl(t,e){const n=t.findIndex(s=>e.test(s));if(n===-1)return null;let i=n,r=null;for(let s=n+1;su&&/\s/.test(s[c-1]);)c-=1}return t[r]=s.slice(0,u)+Rl(n)+s.slice(c),!0}return!1}function zu(t,e,n){if(n&&typeof n=="object"&&n.sdk)return[`${t}${e}:`,`${t} sdk: ${n.sdk}`];const i=String(n||"").trim();return[`${t}${e}: ${i?Rl(i):">=0.0.0"}`]}function uy(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(i.length===0)return{yaml:n,added:[],alreadyPresent:[]};const r=n.split(`
-`),s=new Set(Ph(n)),o=[],a=[];for(const[u,c]of i)s.has(u)?a.push(u):(o.push([u,c]),s.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=Fl(r);if(l){const u=o.flatMap(([c,d])=>zu(l.childIndent,c,d));r.splice(l.endIndex,0,...u)}else r.length>0&&r[r.length-1].trim()!==""&&r.push(""),r.push("dependencies:"),o.forEach(([u,c])=>{r.push(...zu(" ",u,c))});return{yaml:r.join(`
-`),added:o.map(([u])=>u),alreadyPresent:a}}function dy(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(i.length===0)return{yaml:n,overridden:[],skipped:[]};const r=n.split(`
-`),s=Ds(n),o=[],a=[];for(const[l,u]of i){const c=s.get(l),d=c&&!c.isScalar&&c.sourceKey===null&&c.version!==null;if(!c||!c.isScalar&&!d||!String(u||"").trim()){a.push(l);continue}if(d){cy(r,c,String(u).trim())?o.push({name:l,from:c.version,to:u}):a.push(l);continue}const f=" ".repeat(pn(r[c.lineIndex]));r[c.lineIndex]=`${f}${l}: ${Rl(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:r.join(`
-`),overridden:o,skipped:a}}function Rh(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),Fl(e.split(`
-`))||n.push("pubspec.yaml missing dependencies section"),Ph(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const fy=">=3.0.0 <4.0.0";function ja(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function hy(t=""){const e=g_(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function Vu(t,e,n){const i=[];for(const[r,s]of t){if(s.isScalar){e[r]=ja(s.constraint);continue}if(s.sourceKey==="sdk"){n.add(r);continue}if(s.sourceKey===null&&s.version){e[r]=ja(s.version);continue}i.push(r)}return i}function py(t){const e=new Set,n=new Set,i={},r={},s=Vu(Ds(t),i,e),o=Vu(ay(t,"dependency_overrides"),r,n),a=[...s,...o],l=new Set([...Object.keys(i),...e]),{sdk:u}=Fh(t);return{sdkConstraint:ja(u)||fy,dependencies:i,dependencyOverrides:r,sdkPackages:[...e].sort(),sdkOverrides:[...n].sort(),availablePackages:l,unrepresentable:a,unrepresentableOverrides:o}}function gy(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function my(t,e){const{sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o,availablePackages:a,unrepresentable:l}=py(e),u={sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o},c=[],d=[],f=l.map(p=>`Your project declares ${p} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${p}. Classes that do not import ${p} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const p of t){const{className:h,content:g}=p,m=kl(g),v=m.filter(_=>l.includes(_));if(v.length>0){d.push({className:h,reason:`${h} was not compiled before deploying: it imports ${v.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:E}=hy(g),S=m.filter(_=>!a.has(_));if(E.length>0||S.length>0){d.push({className:h,reason:gy(h,E,S)});continue}c.push({fileName:`${Il(h)}.dart`,content:g})}return{manifest:u,sources:c,skipped:d,approximate:f}}function Gu(t,e){const n=`${t}${e}`.split(`
-`),i=n.pop()??"",r=[];for(const s of n){const o=Th(s);o&&r.push(o)}return{events:r,buffer:i}}function vy(t){const e=Th(t);return e?[e]:[]}function Th(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}const Le=Object.freeze({COMMITTED:"committed",PARTIAL:"partial",FAILED:"failed",UNCONFIRMED:"unconfirmed"}),$h=12e4,Mh=1e4;function Lh(t){return t?.unconfirmed===!0||t?.outcome===Le.UNCONFIRMED?Le.UNCONFIRMED:t?.partial===!0||t?.outcome===Le.PARTIAL?Le.PARTIAL:t?.success===!0?Le.COMMITTED:Le.FAILED}class et extends Error{constructor(e){super(e),this.name="UnconfirmedDeployError",this.outcome=Le.UNCONFIRMED}}function Ku({httpStatus:t}={}){return new et(`Every FlutterFlow sync endpoint lost its response or ended in a server error${t?` (last: HTTP ${t})`:""} — neither can prove the push was refused, so it may already have been applied. Open the FlutterFlow project to reconcile before retrying.`)}async function _y(t,e={}){const{onPhase:n,onLog:i}=e;let r=null,s=null,o="";const a=u=>{if(u.event==="phase"){u.phase&&(s=u.phase),u.message&&n&&n(u.message);return}if(u.event==="log"){u.message&&i&&i(u.message);return}r=u};let l=null;try{if(t.body?.getReader){const u=t.body.getReader(),c=new TextDecoder;for(;;){const{done:d,value:f}=await u.read();if(d)break;const p=Gu(o,c.decode(f,{stream:!0}));o=p.buffer,p.events.forEach(a)}}else{const u=Gu("",await t.text());o=u.buffer,u.events.forEach(a)}}catch(u){l=u}return vy(o).forEach(a),r?{...r,success:r.success===!0||r.success===void 0&&t.ok,finalResultReceived:!0,runnerPhase:s,httpStatus:t.status}:{success:!1,finalResultReceived:!1,httpRejected:!t.ok,httpStatus:t.status,runnerPhase:s,error:t.ok?l?"The connection to the FlutterFlow deploy runner dropped before it reported a result.":"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}const yy=new Set(["connected","workspace_init","workspace_ready","verifying"]);function Nh(t){return t?.preWrite===!0||Array.isArray(t?.analyzerErrors)&&t.analyzerErrors.length>0?!0:typeof t?.runnerPhase=="string"?yy.has(t.runnerPhase):typeof t?.httpStatus=="number"?t.httpStatus>=400&&t.httpStatus<500:!1}function Yu(t){if(t?.finalResultReceived){const e=Lh(t);return e===Le.FAILED&&!Nh(t)?Le.UNCONFIRMED:e}return t?.httpRejected?Le.FAILED:Le.UNCONFIRMED}function wy(){let t=document.getElementById("fx-grid");if(!t)return null;const e=window.matchMedia("(prefers-reduced-motion: reduce)"),n=window.matchMedia("(pointer: none)");let i=t.getContext("webgl2",{alpha:!0,antialias:!1,depth:!1,stencil:!1,premultipliedAlpha:!0,powerPreference:"low-power"}),r=i?null:t.getContext("2d");if(!i&&!r)return null;const s='',o=`#version 300 es
-in vec2 p; void main(){ gl_Position = vec4(p, 0.0, 1.0); }`;function a(){return["#version 300 es","precision highp float;","out vec4 o;","uniform vec2 res;","uniform vec2 design;","uniform vec2 mouse;","uniform float energy;","uniform float parallax;","uniform float t;","uniform vec3 ink;","uniform sampler2D mark;","uniform vec2 rot;","const float WARP_A = 0.0032;","void main(){"," vec2 px = gl_FragCoord.xy * (design / res);"," vec2 p = vec2(px.x, design.y - px.y);"," vec2 off = vec2(0.0, -parallax) + vec2(sin(t * 0.11), cos(t * 0.09)) * 7.0;"," vec2 g = p + off;"," vec2 gm = mouse + off;"," float base = min(design.x, design.y);"," float spacing = clamp(base / 10.0, 64.0, 118.0);"," vec2 rel = g - gm;"," float rho = length(rel) + 1e-5;"," vec2 dir = rel / rho;"," vec2 pw = gm + dir * (rho + WARP_A * rho * rho);"," vec2 cell = floor(pw / spacing);"," vec2 cw = (cell + 0.5) * spacing - gm;"," float Rc = length(cw) + 1e-5;"," float rhoC = (-1.0 + sqrt(1.0 + 4.0 * WARP_A * Rc)) / (2.0 * WARP_A);"," vec2 c = gm + (cw / Rc) * rhoC;"," float cellSize = spacing / (1.0 + 2.0 * WARP_A * rhoC);"," float sigma = spacing * 2.9;"," float f = exp(-(rhoC * rhoC) / (2.0 * sigma * sigma));"," float scale = mix(0.32, 1.42, f);"," float weight = smoothstep(0.06, 0.80, f);"," float hs = cellSize * 0.26 * scale;"," vec2 uv = (g - c) / hs;"," vec2 ruv = mat2(rot.x, rot.y, -rot.y, rot.x) * uv;"," float cov = 0.0;"," if (abs(ruv.x) <= 1.0 && abs(ruv.y) <= 1.0) cov = texture(mark, ruv * 0.5 + 0.5).a;"," float s = cov * weight * energy * 0.26;"," o = vec4(ink * s, s);","}"].join(`
-`)}let l=null,u,c,d,f,p,h,g,m,v;function E(Y,q){if(!i)return null;const D=i.createShader(Y);return i.shaderSource(D,q),i.compileShader(D),i.getShaderParameter(D,i.COMPILE_STATUS)?D:(window.console&&console.warn("fx-grid shader: "+i.getShaderInfoLog(D)),null)}if(i){const Y=E(i.VERTEX_SHADER,o),q=E(i.FRAGMENT_SHADER,a());if(Y&&q&&(l=i.createProgram(),i.attachShader(l,Y),i.attachShader(l,q),i.linkProgram(l),i.getProgramParameter(l,i.LINK_STATUS)||(window.console&&console.warn("fx-grid link: "+i.getProgramInfoLog(l)),l=null)),l){i.useProgram(l),i.bindBuffer(i.ARRAY_BUFFER,i.createBuffer()),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),i.STATIC_DRAW);const D=i.getAttribLocation(l,"p");i.enableVertexAttribArray(D),i.vertexAttribPointer(D,2,i.FLOAT,!1,0,0),u=i.getUniformLocation(l,"res"),c=i.getUniformLocation(l,"design"),d=i.getUniformLocation(l,"mouse"),f=i.getUniformLocation(l,"energy"),p=i.getUniformLocation(l,"parallax"),h=i.getUniformLocation(l,"t"),g=i.getUniformLocation(l,"ink"),m=i.getUniformLocation(l,"mark"),v=i.getUniformLocation(l,"rot"),i.enable(i.BLEND),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.clearColor(0,0,0,0)}else{i=null;const D=t.cloneNode(!1);if(t.parentNode.replaceChild(D,t),t=D,r=t.getContext("2d"),!r)return null}}function S(Y){if(!Y)return null;const q=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(Y);if(q){let D=q[1];return D.length===3&&(D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]),[parseInt(D.slice(0,2),16)/255,parseInt(D.slice(2,4),16)/255,parseInt(D.slice(4,6),16)/255]}try{const D=document.createElement("canvas");D.width=1,D.height=1;const ue=D.getContext("2d");ue.fillStyle="rgb(9, 8, 7)";const xe=String(ue.fillStyle);ue.fillStyle=Y;const Fe=String(ue.fillStyle);if(Fe===xe)return null;const ft=/^#([0-9a-f]{6})$/i.exec(Fe);if(ft){const ht=ft[1];return[parseInt(ht.slice(0,2),16)/255,parseInt(ht.slice(2,4),16)/255,parseInt(ht.slice(4,6),16)/255]}const Nt=/rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)/i.exec(Fe);if(Nt)return[Number(Nt[1])/255,Number(Nt[2])/255,Number(Nt[3])/255]}catch{}return null}function _(){let Y="";try{const q=getComputedStyle(document.documentElement);Y=(q.getPropertyValue("--fx-ink")||"").trim()||(q.getPropertyValue("--fg")||"").trim()}catch{}return S(Y)||[.56,.68,.88]}const b=_();let k=1920,T=1080,x=960,F=540,$=960,O=540,L=.66,N=0,K=-1e9,V=!1,M=0,R=0,Z=null,Ce=!1,oe=!1,ye=!1;const $e=64,ae=15.2;let Ie=0,Se=0;const De=.0032,wt=0,ge=.56,Ze=.26,bt=.32,vn=.16,Te=.349;let Pe=wt;function $t(){const Y=t.getBoundingClientRect(),q=t.clientWidth,D=t.clientHeight;if(!Y.width||!q||!D)return;const ue=Math.min(window.devicePixelRatio||1,2),xe=Math.max(.2,Math.min(2,Y.width/q*ue)),Fe=Math.max(2,Math.round(q*xe)),ft=Math.max(2,Math.round(D*xe));(Fe!==t.width||ft!==t.height)&&(t.width=Fe,t.height=ft,i&&i.viewport(0,0,Fe,ft)),k=q,T=D,V||(x=$=k/2,F=O=T/2,V=!0)}function Dn(Y){!l||!Ce||!i||(i.uniform2f(u,t.width,t.height),i.uniform2f(c,k,T),i.uniform2f(d,x,F),i.uniform1f(f,L),i.uniform1f(p,N),i.uniform2f(v,Math.cos(Pe),Math.sin(Pe)),i.uniform1f(h,Y),i.uniform3f(g,b[0],b[1],b[2]),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLES,0,3))}function ze(Y,q,D){const ue=Math.max(0,Math.min(1,(D-Y)/(q-Y)));return ue*ue*(3-2*ue)}function jn(Y){if(!Z||!r)return;const q=r;q.setTransform(1,0,0,1,0,0),q.clearRect(0,0,t.width,t.height);const D=t.width/k;q.setTransform(D,0,0,D,0,0),q.globalAlpha=1;const ue=Math.min(k,T),xe=Math.max(64,Math.min(118,ue/10)),Fe=xe*2.9,ft=2*Fe*Fe,Nt=Math.sin(Y*.11)*7,ht=Math.cos(Y*.09)*7-N,vr=x+Nt,_r=F+ht,lo=Fe*Math.sqrt(2*Math.log(1/.06)),yi=lo+De*lo*lo+xe,qp=Math.floor((vr-yi)/xe)-1,zp=Math.ceil((vr+yi)/xe)+1,Vp=Math.floor((_r-yi)/xe)-1,Gp=Math.ceil((_r+yi)/xe)+1;for(let co=Vp;co<=Gp;co++){const Kp=(co+.5)*xe;for(let uo=qp;uo<=zp;uo++){const fo=(uo+.5)*xe-vr,ho=Kp-_r,po=Math.sqrt(fo*fo+ho*ho)+1e-5;if(po>yi)continue;const yr=(-1+Math.sqrt(1+4*De*po))/(2*De),gc=Math.exp(-(yr*yr)/ft),mc=ze(.06,.8,gc)*L*.26;if(mc<.004)continue;const on=xe/(1+2*De*yr)*.26*(.32+1.1*gc),vc=yr/po,go=vr+fo*vc,mo=_r+ho*vc;go<-on*1.6||go>k+on*1.6||mo<-on*1.6||mo>T+on*1.6||(q.globalAlpha=mc,q.save(),q.translate(go,mo),q.rotate(Pe),q.drawImage(Z,-on,-on,on*2,on*2),q.restore())}}q.globalAlpha=1}function Mt(Y){if(!oe)return;const q=R?Math.min(.05,(Y-R)/1e3):.016;R=Y;const ue=Y-K>2400?.6:1;L+=(ue-L)*Math.min(1,q*3.2);const xe=Math.min(.05,q);Ie+=(($-x)*$e-Ie*ae)*xe,Se+=((O-F)*$e-Se*ae)*xe,x+=Ie*xe,F+=Se*xe,N=(window.scrollY||window.pageYOffset||0)*.55;const Fe=Y/1e3,ft=x/(k||1)-.5,Nt=F/(T||1)-.5;let ht=ft*(ft>=0?ge:Ze)+Nt*(Nt>=0?bt:vn);ht>Te?ht=Te:ht<-Te&&(ht=-Te),Pe=wt+ht-N*6e-4,$t(),i?Dn(Fe):jn(Fe),M=requestAnimationFrame(Mt)}function Lt(Y){if(!oe)return;const q=t.getBoundingClientRect();!q.width||!k||!T||($=(Y.clientX-q.left)/q.width*k,O=(Y.clientY-q.top)/q.height*T,K=performance.now())}function dt(){oe||ao||e.matches||n.matches||!ye||document.hidden||(oe=!0,R=0,M=requestAnimationFrame(Mt))}function sn(){oe=!1,M&&(cancelAnimationFrame(M),M=0),R=0}function _i(){e.matches?(sn(),t.classList.remove("is-ready")):ye&&dt()}function Un(){n.matches?sn():ye&&dt()}function fc(){document.hidden?sn():ye&&dt()}const hc=new IntersectionObserver(Y=>{ye=Y[0]?.isIntersecting||!1,ye?dt():sn()},{threshold:0});hc.observe(t),window.addEventListener("pointermove",Lt,{passive:!0,capture:!0}),window.addEventListener("resize",$t),e.addEventListener("change",_i),n.addEventListener("change",Un),document.addEventListener("visibilitychange",fc);function Wp(){const Y=(s.match(/\sd="([^"]+)"/)||[])[1],q=document.createElement("canvas");q.width=256,q.height=256;const D=q.getContext("2d");if(Y&&window.Path2D){const ue=Math.min(8.533333333333333,8.421052631578947);D.setTransform(ue,0,0,ue,ue+(256-30*ue)/2,-6.4*ue),D.fillStyle="rgb(255,255,255)",D.fill(new Path2D(Y),"evenodd"),D.setTransform(1,0,0,1,0,0)}try{const ue=D.getImageData(0,0,256,256),xe=ue.data;for(let Fe=3;Feoe}}const by=120;function Ey(t,e,n){return tn?n:t}function de(t,e,n){return Ey((t-e)/(n-e),0,1)}function Sy(t){return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2}function Go(t){return 1-Math.pow(1-t,3)}function Ve(t,e){return e=e===void 0?1.7:e,1+(e+1)*Math.pow(t-1,3)+e*Math.pow(t-1,2)}function Ju(t){return 1-Math.pow(2,-9*t)*Math.cos(t*15)}function te(t,e){if(t<=e[0].t)return e[0].v;for(let n=1;n8.2&&_<9.4&&(s*=1-.07*Math.sin(de(_,8.2,9.4)*Math.PI))}else if(t<53){const _=t-42;g=te(_,[{t:0,v:1},{t:2,v:0},{t:4.2,v:0},{t:4.6,v:1},{t:6.8,v:1},{t:7.4,v:0},{t:9.4,v:0},{t:10.6,v:1}]),h=te(_,[{t:0,v:1},{t:2,v:.3},{t:4.6,v:1,e:Ve}]),d=te(_,[{t:0,v:0},{t:2,v:.3},{t:4.6,v:.16,e:Ve},{t:10.6,v:0}]),p=te(_,[{t:0,v:0},{t:2,v:-40},{t:4.6,v:0,e:Ve}]),o=te(_,[{t:0,v:0},{t:4.6,v:-.12},{t:10.6,v:0}])}else if(t<60){const _=t-53;c=te(_,[{t:0,v:1},{t:.35,v:0},{t:.45,v:0},{t:.7,v:1}]);const b=de(_,.45,2.2);a=b>0?-2.6*(1-Ju(b)):0,g=te(_,[{t:0,v:1},{t:.57,v:0},{t:.67,v:0},{t:.92,v:1}]);const k=de(_,.67,2.42);f=k>0?-2.6*(1-Ju(k)):0,s=1-.05*(Math.sin(de(_,1.9,2.5)*Math.PI)+Math.sin(de(_,2.5,3.1)*Math.PI))}else if(t<74){let b=function(F){return[te(F,[{t:0,v:0},{t:.25,v:1},{t:.5,v:1},{t:.72,v:.14},{t:.82,v:.14},{t:1,v:0}]),te(F,[{t:0,v:0},{t:.08,v:-.62},{t:.25,v:-.62},{t:.33,v:.62},{t:.7,v:.62},{t:.82,v:-.62},{t:1,v:-.62}])]};var S=b;const _=t-60,k=1-de(_,12,14),T=b(de(_,0,12)),x=b(de(_-.5,0,12));n=T[0]*k,i=(T[1]+.05*Math.sin(_*7))*k,o=(x[0]-T[0])*.6*k,a=(x[1]-T[1])*.6*k,p=(x[0]-T[0])*30*k,E=de(_,0,.4)*k}else if(t<85.4){const _=t-74,b=te(_,[{t:0,v:0},{t:4,v:1},{t:8,v:.24},{t:9.6,v:1,e:Ve},{t:11.4,v:0}]);o=b*.5,d=-b*.5,l=te(_,[{t:0,v:0},{t:4,v:6},{t:8,v:20},{t:9.6,v:38,e:Ve},{t:11.4,v:0}]),p=-l*.7,a=te(_,[{t:0,v:0},{t:8,v:0},{t:9.6,v:.4},{t:11.4,v:0}])}else if(t<96.4){const _=t-85.4,b=de(_,0,5.6),k=de(_,5.6,7.6),T=.72*Math.min(1,_/.6)*(1-k);d=Math.cos(b*Math.PI*2)*T,f=Math.sin(b*Math.PI*2)*T*.55,p=b*360*(1-k);const x=te(_,[{t:0,v:0},{t:7.6,v:0},{t:8.2,v:1,e:Go},{t:8.6,v:.55},{t:9.4,v:0}]);o=-.16*x,d+=.16*x,l=-6*x,p+=6*x,s=1+.05*x,m=1+.9*x}else if(t<108.6){const _=t-96.4,b=de(_,9.6,12.2);n=te(_,[{t:0,v:0},{t:2.1,v:1},{t:4.8,v:.08},{t:7.5,v:1},{t:9.6,v:0}])*(1-b),i=-.35*Math.abs(Math.sin(de(_,0,9.6)*Math.PI*3))*(1-b);const k=Math.sin(_*6.2)*(1-b);u=1+.12*k,h=1-.12*k,l=k*8,p=-k*8,o=.06*k,d=-.06*k,E=de(_,0,.4)*(1-b)}else{const _=t-108.6,b=Math.sin(de(_,0,8)*Math.PI),k=1-de(_,8,11.4);s=1+.04*b*k,i=-.1*b*k,r=2*b*k,m=1+.5*Math.sin(de(_,0,6)*Math.PI),v=1+.1*Math.sin(de(_,0,6)*Math.PI)}return e.x=n,e.y=i,e.rot=r,e.scale=s,e.ax=o,e.ay=a,e.ar=l,e.asc=u,e.afade=c,e.bx=d,e.by=f,e.br=p,e.bsc=h,e.bfade=g,e.hfade=m,e.hsc=v,e.shd=E,e}function xy(t={}){const e=t.arena||document.querySelector(".pipeline-glyph.logo-loop");if(!e)return null;const n=e.querySelector(".loop-mark"),i=e.querySelector(".loop-piece-a"),r=e.querySelector(".loop-piece-b"),s=e.querySelector(".loop-halo"),o=e.querySelector(".loop-shadow");if(!n||!i||!r||!s||!o)return null;const a=t.reducedMotion||window.matchMedia("(prefers-reduced-motion: reduce)"),l=by;let u=34,c=0,d=0;function f(){u=n.offsetWidth||34,c=Math.max(0,e.offsetWidth-u-4),d=Math.max(0,(e.offsetHeight-u)/2-2),e.style.setProperty("--mark-c",u/2+"px")}function p(M){const R=Math.min(1,Math.max(0,M.x))*c,Z=M.y*d;n.style.transform="translate3d("+R.toFixed(2)+"px,"+Z.toFixed(2)+"px,0) rotate("+M.rot.toFixed(2)+"deg) scale("+M.scale.toFixed(3)+")",i.style.transform="translate3d("+(M.ax*u).toFixed(2)+"px,"+(M.ay*u).toFixed(2)+"px,0) rotate("+M.ar.toFixed(2)+"deg) scale("+M.asc.toFixed(3)+")",i.style.opacity=M.afade.toFixed(3),r.style.transform="translate3d("+(M.bx*u).toFixed(2)+"px,"+(M.by*u).toFixed(2)+"px,0) rotate("+M.br.toFixed(2)+"deg) scale("+M.bsc.toFixed(3)+")",r.style.opacity=M.bfade.toFixed(3),s.style.transform="scale("+M.hsc.toFixed(3)+")",s.style.opacity=(.09*M.hfade).toFixed(3),o.style.transform="translateX("+R.toFixed(2)+"px) scaleX("+(.75+.4*Math.abs(M.x)).toFixed(3)+")",o.style.opacity=(M.shd*.5).toFixed(3)}let h=0,g=0,m=0,v=!1,E=!1,S=!1,_=0;function b(){return S||a.matches||document.hidden||!e.offsetParent?!1:E}function k(M){if(!v)return;if(m=requestAnimationFrame(k),!b()){x();return}const R=g?(M-g)/1e3:0;g=M,h=(h+Math.min(R,.1))%l,_+=1,p(Ri(h))}function T(){v||S||b()&&(v=!0,g=0,m=requestAnimationFrame(k))}function x(){v=!1,m&&(cancelAnimationFrame(m),m=0),g=0}function F(){b()?T():x()}function $(){a.matches?(x(),p(Ri(0))):F()}function O(){f(),v&&p(Ri(h))}function L(){g=0,F()}const N=new IntersectionObserver(M=>{E=M[0]?M[0].isIntersecting:!1,F()},{threshold:0});N.observe(e),window.addEventListener("resize",O),a.addEventListener("change",$),document.addEventListener("visibilitychange",L);function K(){S||(S=!0,x(),N.disconnect(),window.removeEventListener("resize",O),a.removeEventListener("change",$),document.removeEventListener("visibilitychange",L))}window.addEventListener("pagehide",K);function V(M){h=(M%l+l)%l,p(Ri(h))}return f(),p(Ri(0)),F(),{isRunning:()=>v,currentTime:()=>h,frameCount:()=>_,seek:V,dispose:K}}const Iy=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function Xt(t){const e=String(t||"").trim().match(Iy);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function ky(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function Ay(t){const e=Xt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function Tl(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return Xt(o)?{min:o,minInclusive:!0,max:Ay(o),maxInclusive:!1}:null}if(Xt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},i=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let r=!1,s;for(;(s=i.exec(e))!==null;){const[,o,a]=s;if(!Xt(a))return null;r=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return r?n:null}function Zu(t,e){const n=Tl(t);if(!n||!Xt(e))return!1;if(n.min!==null){const i=ws(e,n.min);if(i<0||i===0&&!n.minInclusive)return!1}if(n.max!==null){const i=ws(e,n.max);if(i>0||i===0&&!n.maxInclusive)return!1}return!0}function Py(t,e){const n=Tl(t);if(!n||!Xt(e))return!1;if(n.max===null)return!0;const i=ws(n.max,e);return i>0?!0:i===0&&n.maxInclusive}function Vn(t){const e=Tl(t);return e?e.min:null}const Fy="https://pub.dev/api/packages/",Ry=8e3;function Ty(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null}=e,r=Array.isArray(t?.versions)?t.versions:[];let s=null;for(const o of r){const a=o?.version;if(!a||o.retracted||Cy(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!Zu(l.sdk,n)||i&&l.flutter&&!Zu(l.flutter,i)||(!s||ws(a,s)>0)&&(s=a)}return s?{version:s,constraint:`^${s}`}:null}async function $y(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null,fetchImpl:r=fetch}=e;let s;try{const a=await r(`${Fy}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(Ry)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};s=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=Ty(s,{dartSdkFloor:n,flutterSdkFloor:i});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function My(t,e={}){const n=await Promise.all(t.map(i=>$y(i,e)));return new Map(n.map(({name:i,...r})=>[i,r]))}async function Ly(t,e={},n={}){const{resolveVersions:i=My}=n,r=Object.entries(e).filter(([d])=>d&&d!=="flutter"),s=Fh(t),o={dartSdkFloor:Vn(s.sdk),flutterSdkFloor:Vn(s.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(r.length===0)return a;const l=Ds(t),u=[],c=[];for(const[d,f]of r){const p=l.get(d);if(!p){(u_.has(d)?c:u).push(d);continue}const h=Vn(f);if(!h){a.kept.push({name:d,constraint:p.constraint});continue}const g=p.isScalar?p.constraint:p.sourceKey===null?p.version:null;if(g===null){a.warnings.push(`"${d}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${h}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:d,constraint:p.constraint});continue}if(Py(g,h)){a.kept.push({name:d,constraint:g});continue}a.overrides[d]=`^${h}`,a.warnings.push(`"${d}" was pinned to ${g} in your project, which cannot resolve the ${h} the generated code needs. Raising it to ^${h} — this changes a dependency the rest of your app also uses.`)}for(const d of c)a.additions[d]={sdk:"flutter"};if(u.length>0){const d=await i(u,o);for(const f of u){const p=d.get(f);if(p?.constraint){a.additions[f]=p.constraint;continue}const h=e[f]||"";if(Vn(h)){a.additions[f]=`^${Vn(h)}`,a.warnings.push(`Could not confirm "${f}" version on pub.dev (${p?.error||"lookup failed"}). Using ^${Vn(h)} from the AI's recommendation — verify this is current.`);continue}a.additions[f]=">=0.0.0",a.warnings.push(`Could not determine a version for "${f}" (${p?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const Ny={"&":"&","<":"<",">":">",'"':""","'":"'"};function Qt(t){return String(t??"").replace(/[&<>"']/g,e=>Ny[e])}function z(t){return t?Qt(t).replace(/\n/g,"
"):""}function Jt(t){return Qt(t).replace(/\r?\n/g," ")}function js(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const i=t?.message||"";return i.includes("Code Generator")?2:i.includes("Code Review")?3:1}function Bh(t){if(!t)return{kind:"generic",title:"Generation failed",message:"An unknown error occurred. Please try again.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1};if(t.isModelArmor){const n=t.code==="MODEL_ARMOR_BLOCKED";return{kind:"safety",title:t.userTitle||"Request blocked for safety",message:t.userMessage||t.message,detail:t.retryExplanation||"",canRetry:!n,canEdit:!0,canUpgrade:!1}}if(t.isUsageLimit)return{kind:"quota",title:"Monthly limit reached",message:t.message||"You've used all your generations for this period.",detail:"",canRetry:!1,canEdit:!1,canUpgrade:!0};const e=t.message||"";return/timed out after/i.test(e)?{kind:"timeout",title:"Request timed out",message:"The generation service took too long to respond.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:/unreachable|failed to fetch|load failed|cors/i.test(e)?{kind:"network",title:"Connection problem",message:"We couldn't reach the generation service. Check your connection and try again.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:{kind:"generic",title:"Generation failed",message:e||"An unexpected error occurred.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1}}function Oy(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📄"}function By(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📝"}function Dy(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function di(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function Xu(t){return t=Qt(t),t=t.replace(/\*\*(.*?)\*\*/g,'$1'),t=t.replace(/\*(.*?)\*/g,'$1'),t=t.replace(/`(.*?)`/g,'$1'),t=t.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),t=t.replace(/\b(WARN|WARNING)\b/g,'$1'),t=t.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),t}function Dh(t,e="dart",n=globalThis.hljs){if(!t)return"";const i=di(t);try{return n.highlight(i,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return n.highlight(i,{language:"json"}).value}catch{return Qt(i)}}}function Us(t,e={}){const{highlighter:n=globalThis.hljs}=e;let i='';const r=String(t??"").split(`
-`);let s=!1,o="";for(const a of r){if(a.startsWith("```")){if(s){const l=Dy(o),u=Dh(o.trim(),l,n);i+=`
`,o="",s=!1}else s=!0;continue}if(s){o+=a+`
-`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();i+=``;continue}if(a.startsWith("## ")){const l=a.substring(3).trim();i+=`
-
- ${By(l)}
- ${Qt(l)}
-
- `;continue}if(/^[-*+]\s+/.test(a)||/^\d+\.\s+/.test(a)){const l=a.replace(/^([-*+]|\d+\.)\s+/,"").trim();i+=`
- •
- ${Xu(l)}
-
`;continue}a.trim()!==""&&(i+=`
${Xu(a)}
`)}return i+="
",`
-
- `}const jy=[[/gradient stroke\s*$/i," and an animated percentage label"],[/gauge\s*$/i," with a gradient stroke and animated fill"],[/rating\s*(bar|widget)?\s*$/i," with half-star support and haptic feedback"],[/list\s*$/i," with swipe-to-delete and an undo snackbar"],[/pad\s*$/i," that exports a transparent PNG"],[/carousel\s*$/i," with parallax cards and page indicators"],[/(button|cta)\s*$/i," with a loading spinner and success state"],[/(chart|graph)\s*$/i," that animates from a Firestore stream"],[/action\s*(that|to)?\s*$/i," uploads an image to Firebase Storage and returns the URL"],[/timer\s*$/i," with pause, resume and a completion callback"],[/map\s*$/i," with clustered markers and a custom info window"],[/^a\s+\w*$/i," widget that"],[/(picker|selector)\s*$/i," with search and multi-select"]],Uy=220,Hy=6;function Qu(t,e){return!!(t&&t.trim())&&!e}function Wy(t,e=""){if(typeof t!="string"||!t||t===e||t.trim().lengthi.test(t));return n?n[1]:null}function qy(){let t="",e="";return{get active(){return t},resolve(n){return t=Wy(n,e)??"",t},dismiss(){t=""},accept(n){if(!t)return null;const i=n+t;return e=i,t="",i}}}function zy({onSubmit:t}){const e=document.getElementById("composer"),n=document.getElementById("pipeline-input"),i=document.getElementById("hero-send");if(!e||!n||!i||typeof t!="function")return;const r=e.querySelector(".ghost .typed"),s=e.querySelector(".ghost .suggest"),o=document.getElementById("tab-hint"),a=document.getElementById("suggest-status"),l=Array.from(document.querySelectorAll("#example-chips .chip")),u=document.getElementById("btn-add-images"),c=document.getElementById("prompt-image-input"),d=window.matchMedia("(prefers-reduced-motion: reduce)"),f=qy();let p=!1,h=!1,g=!1,m=!1,v=null,E=null;function S(){i.disabled=!Qu(n.value,h||g||m)}function _(){r&&(r.textContent=n.value)}function b(){s&&(s.textContent=""),_(),e.classList.remove("has-suggest"),o&&(o.hidden=!0,o.tabIndex=-1),a&&(a.textContent="")}function k(R){s&&(s.textContent=R),_(),e.classList.add("has-suggest"),o&&(o.hidden=!1,o.tabIndex=0,o.setAttribute("aria-label","Accept suggestion: "+R.trim())),a&&(a.textContent="Suggestion: "+R+". Press Tab to accept.")}function T(){f.dismiss(),b()}function x(){if(p||h)return;const R=f.resolve(n.value);R&&k(R)}function F(){clearTimeout(v),!p&&(v=setTimeout(x,Uy))}function $(){const R=f.accept(n.value);return R===null?!1:(n.value=R,b(),S(),!0)}function O(R){h=R,e.classList.toggle("is-busy",R),i.classList.toggle("is-busy",R),i.setAttribute("aria-label",R?"Generating":"Generate"),n.readOnly=R,l.forEach(Z=>{Z.disabled=R}),u&&(u.disabled=R),c&&(c.disabled=R),S()}async function L(){if(Qu(n.value,h||g||m)){T(),O(!0);try{await t()}finally{O(!1)}}}function N(){g=!1,E&&(clearInterval(E),E=null),e.classList.remove("is-demo-typing"),S()}function K(){l.forEach(R=>{R.classList.remove("is-active"),R.setAttribute("aria-pressed","false")})}function V(){try{n.focus({preventScroll:!0}),n.setSelectionRange(n.value.length,n.value.length)}catch{}}function M(R){const Z=R.dataset.prompt||"";if(N(),clearTimeout(v),v=null,T(),l.forEach(oe=>{const ye=oe===R;oe.classList.toggle("is-active",ye),oe.setAttribute("aria-pressed",String(ye))}),d.matches||!Z){n.value=Z,_(),S(),V();return}n.value="",_(),g=!0,S(),e.classList.add("is-demo-typing");let Ce=0;E=setInterval(()=>{Ce+=1,n.value=Z.slice(0,Ce),_(),Ce>=Z.length?(N(),V()):S()},22)}return l.forEach(R=>{R.setAttribute("aria-pressed","false"),R.addEventListener("click",()=>M(R))}),n.addEventListener("keydown",R=>{if(g&&R.key==="Enter"&&!R.shiftKey&&!R.isComposing&&!p){R.preventDefault();return}N(),R.key==="Tab"&&!R.shiftKey&&f.active?(R.preventDefault(),$()):R.key==="Escape"?(clearTimeout(v),v=null,T()):R.key==="Enter"&&!R.shiftKey&&!R.isComposing&&!p&&(R.preventDefault(),L())}),n.addEventListener("input",()=>{N(),K(),T(),S(),F()}),n.addEventListener("compositionstart",()=>{p=!0}),n.addEventListener("compositionend",()=>{p=!1,T(),S(),F()}),n.addEventListener("scroll",()=>{r&&r.parentNode&&(r.parentNode.scrollTop=n.scrollTop)}),o&&o.addEventListener("click",()=>{$(),n.focus({preventScroll:!0})}),i.addEventListener("click",L),n.addEventListener("pointerdown",()=>{N(),K()}),_(),S(),{setAttachmentsPending(R){m=!!R,S()}}}const Vy="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const _t="https://4tgke4.buildship.run",jh={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},bs="ccc_auth_session",Ua="ccc_signin_return",Gy=1800*1e3,ed=new WeakSet;let H={email:null,sessionToken:null,isVerified:!1};function Ln(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let ce=Ln({isResolved:!0}),Ha=Promise.resolve();const Ky=`${_t}/service/runpipeline`,Yy="bs_user_id",Jy="bs_identity_token",Zy=`${_t}/authUserCheck`;let pt={userId:null,token:null,status:null,resolved:!1};const Es=Iv,Ss="ccc_subscription",td=3,Xy=new Set(["active","trialing","paid"]),xs="google/gemini-3.7-flash",Hr=["anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta","openrouter/free","openrouter/deepseek/deepseek-v4-pro"],Qy={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function Gt(t){return Qy[t]||t}const e0=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function Uh(t){return e0.has(t)}const Wa=4,Ko=8*1024*1024,t0="https://4tgke4.buildship.run/service/runpipeline-image";let Oe=[];const gn=[],n0=3e4;let Hh=null;function i0(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function r0(t,e){const n=new FormData;return n.append("file",t),(await fetch(t0,{method:"POST",body:n,signal:e})).json()}function s0(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const i=e[n];if(i&&typeof i=="object"){if(typeof i.file=="string")return i.file;if(typeof i.url=="string")return i.url}if(typeof i=="string")return i}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function o0(t,e,n){const i=await i0(t);i&&Oe.includes(e)&&(e.dataUrl=i,cn());let r="";if(i)try{r=s0(await r0(t,n))}catch{r=""}return Oe.includes(e)?!i||!r?(Oe.splice(Oe.indexOf(e),1),cn(),"failed"):(e.url=r,cn(),"added"):"dropped"}function Wh(t){const e=gn.indexOf(t);e>=0&&gn.splice(e,1),zh()}function qh(t){t.controller.abort(),Wh(t);const e=Oe.indexOf(t.slot);e>=0&&(Oe.splice(e,1),cn())}function zh(){Hh?.setAttachmentsPending(gn.length>0)}async function a0(t){const e=Array.from(t.target.files||[]);if(!e.length)return;if(t.target.value="",y.isRunning){Ee("Wait for the current generation to finish before attaching images.","info");return}const n=e.filter(u=>u.size>Ko);n.length&&Ee(`Skipped ${n.length} image(s) over the ${(Ko/1024/1024).toFixed(0)} MB limit.`,"warning");const i=e.filter(u=>u.size<=Ko);if(!i.length)return;const r=Wa-Oe.length,s=i.slice(0,r);if(i.length>r&&Ee(`You can attach up to ${Wa} images.`,"info"),!s.length)return;const o=s.map(u=>{const c={dataUrl:null,name:u.name,url:null};Oe.push(c);const d={slot:c,controller:new AbortController},f=setTimeout(()=>d.controller.abort(),n0);return d.job=o0(u,c,d.controller.signal),gn.push(d),d.job.finally(()=>{clearTimeout(f),Wh(d)}),d.job});cn(),zh();const l=(await Promise.all(o)).filter(u=>u==="failed").length;l&&Ee(`${l} image(s) could not be uploaded and were not attached.`,"error")}function l0(t){const e=Oe[t],n=gn.find(i=>i.slot===e);if(n){qh(n);return}Oe.splice(t,1),cn()}function cn(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Oe.forEach((n,i)=>{const r=document.createElement("div");r.className="prompt-img-thumb"+(n.url?"":" is-pending"),r.innerHTML=(n.dataUrl?`
`:"")+``,t.appendChild(r)}),e&&(e.textContent=Oe.length>=Wa?"Image limit reached":"Add images"))}function $l(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=Uh(e?.value);t.classList.toggle("hidden",!n),!n&&Oe.length&&(gn.slice().forEach(qh),Oe=[],cn())}const Rn="ccc_usage",Vh="google/gemini-3.7-flash",Gh="google/gemini-3.7-flash",Tr="google/gemini-3.7-flash",Di={professional:11,power:49},qa={en_US:"USD",en_GB:"GBP",en_AU:"AUD",en_NZ:"NZD",en_CA:"CAD",en_IN:"INR",en_SG:"SGD",en_HK:"HKD",en_PH:"PHP",en_ZA:"ZAR",en:"USD",de:"EUR",fr:"EUR",es:"EUR",it:"EUR",nl:"EUR",pt_PT:"EUR",pt_BR:"BRL",pt:"BRL",ja:"JPY",ko:"KRW",zh_CN:"CNY",zh_TW:"TWD",zh:"CNY",th:"THB",vi:"VND",id:"IDR",ms_MY:"MYR",ms:"MYR",sv:"SEK",nb:"NOK",da:"DKK",pl:"PLN",cs:"CZK",hu:"HUF",ro:"RON",tr:"TRY",ar:"AED",he:"ILS",ru:"RUB",uk:"UAH"},Wr={AUD:1,USD:.65,EUR:.6,GBP:.52,CAD:.88,NZD:1.08,JPY:97,KRW:870,INR:54,SGD:.87,HKD:5.08,BRL:3.18,CNY:4.7,TWD:20.5,THB:22.5,VND:16200,IDR:10200,MYR:2.88,SEK:6.8,NOK:6.95,DKK:4.48,PLN:2.6,CZK:15.2,HUF:238,RON:2.98,TRY:20.9,AED:2.39,ILS:2.38,PHP:36.4,ZAR:11.8,RUB:58,UAH:26.8,CHF:.57,MXN:11.1,ARS:580,CLP:610,COP:2700,PEN:2.44};let qr={...Wr};async function c0(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const i=await n.json();if(i.result!=="success"||!i.rates)return;const r=i.rates,s={AUD:1},o=new Set([...Object.keys(Wr),...Object.values(za),...Object.values(qa)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?s[a]=r[a]:Wr[a]&&(s[a]=Wr[a]));qr=s}catch{}finally{clearTimeout(e)}}const za={"America/Sao_Paulo":"BRL","America/Fortaleza":"BRL","America/Recife":"BRL","America/Bahia":"BRL","America/Belem":"BRL","America/Manaus":"BRL","America/Cuiaba":"BRL","America/Campo_Grande":"BRL","America/Araguaina":"BRL","America/Noronha":"BRL","America/Rio_Branco":"BRL","America/Porto_Velho":"BRL","America/Boa_Vista":"BRL","America/Maceio":"BRL","America/Santarem":"BRL","America/Eirunepe":"BRL","Europe/London":"GBP","Europe/Paris":"EUR","Europe/Berlin":"EUR","Europe/Madrid":"EUR","Europe/Rome":"EUR","Europe/Amsterdam":"EUR","Europe/Brussels":"EUR","Europe/Vienna":"EUR","Europe/Lisbon":"EUR","Europe/Dublin":"EUR","Europe/Helsinki":"EUR","Europe/Athens":"EUR","Europe/Bucharest":"RON","Europe/Budapest":"HUF","Europe/Warsaw":"PLN","Europe/Prague":"CZK","Europe/Copenhagen":"DKK","Europe/Stockholm":"SEK","Europe/Oslo":"NOK","Europe/Zurich":"CHF","Europe/Istanbul":"TRY","Europe/Moscow":"RUB","Europe/Kiev":"UAH","Europe/Kyiv":"UAH","Asia/Tokyo":"JPY","Asia/Seoul":"KRW","Asia/Shanghai":"CNY","Asia/Taipei":"TWD","Asia/Hong_Kong":"HKD","Asia/Singapore":"SGD","Asia/Kolkata":"INR","Asia/Calcutta":"INR","Asia/Bangkok":"THB","Asia/Ho_Chi_Minh":"VND","Asia/Jakarta":"IDR","Asia/Kuala_Lumpur":"MYR","Asia/Dubai":"AED","Asia/Jerusalem":"ILS","Asia/Tel_Aviv":"ILS","Asia/Manila":"PHP","Pacific/Auckland":"NZD","Australia/Sydney":"AUD","Australia/Melbourne":"AUD","Australia/Brisbane":"AUD","Australia/Perth":"AUD","Australia/Adelaide":"AUD","Australia/Hobart":"AUD","Australia/Darwin":"AUD","Australia/Lord_Howe":"AUD","America/Toronto":"CAD","America/Vancouver":"CAD","America/Edmonton":"CAD","America/Winnipeg":"CAD","America/Halifax":"CAD","America/St_Johns":"CAD","America/Regina":"CAD","America/New_York":"USD","America/Chicago":"USD","America/Denver":"USD","America/Los_Angeles":"USD","America/Phoenix":"USD","America/Anchorage":"USD","Pacific/Honolulu":"USD","America/Mexico_City":"MXN","America/Cancun":"MXN","America/Tijuana":"MXN","America/Argentina/Buenos_Aires":"ARS","America/Santiago":"CLP","America/Bogota":"COP","America/Lima":"PEN","Africa/Johannesburg":"ZAR"};function Ml(){try{const s=Intl.DateTimeFormat().resolvedOptions().timeZone;if(s&&za[s])return za[s]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=qa[e];if(n)return n;const i=e.split("_")[0],r=qa[i];return r||"USD"}function ji(t,e){const n=qr[e]??qr.USD,i=t*n,r=Math.round(i*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:r>=100||r%1===0?0:2}).format(r)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*qr.USD)}}const gt="ccc_api_key_",Pt="ccc_session_api_key_",Rt="ccc_encryption_key",sr="ccc_encryption_key_scope",u0="ccc_keystore",Is="keys",or="ccc_encryption_key_version";let Va=null,ks=null,ar=!1,Cs=!1,nd=!1;class As extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function id(){if(nd)return;nd=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&Ee(t,"warning")}function Kh(){return localStorage.getItem(or)||""}function Ga(){return crypto.randomUUID?.()||Jh(crypto.getRandomValues(new Uint8Array(16)))}function d0(){const t=Kh();if(t)return t;const e=Ga();return localStorage.setItem(or,e),e}function fi(){Va=null,ks=null,ar=!1,Cs=!1}window.addEventListener("storage",t=>{t.key===or&&fi()});function f0(){return new Promise((t,e)=>{const n=indexedDB.open(u0,1);n.onupgradeneeded=()=>{const i=n.result;i.objectStoreNames.contains(Is)||i.createObjectStore(Is)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function Ll(t,e){const n=await f0();return new Promise((i,r)=>{const s=n.transaction(Is,t);let o;try{o=e(s.objectStore(Is))}catch(l){n.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),s.oncomplete=()=>{n.close(),i(a)},s.onerror=()=>{n.close(),r(s.error||new Error("Encryption key transaction failed."))},s.onabort=()=>{n.close(),r(s.error||new Error("Encryption key transaction aborted."))}})}function h0(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function p0(){const t=await Ll("readonly",e=>e.get(Rt));return h0(t)?t:null}async function Yh(t){await Ll("readwrite",e=>e.put(t,Rt))}async function g0(){fi();try{await Ll("readwrite",t=>t.delete(Rt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function m0(){const t=sessionStorage.getItem(Rt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Yh(e),sessionStorage.removeItem(Rt),sessionStorage.removeItem(sr),localStorage.removeItem(gt+"salt"),e}async function rd(t){const e=sessionStorage.getItem(Rt);if(e)return Cs=sessionStorage.getItem(sr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new As;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),i=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(Rt,JSON.stringify(i)),sessionStorage.setItem(sr,"session"),Cs=!1,crypto.subtle.importKey("jwk",i,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function v0(t){if(sessionStorage.getItem(sr)==="session"&&sessionStorage.getItem(Rt))return id(),ar=!0,rd(t);try{const e=await p0();if(e)return e;const n=await m0();if(n)return n;const i=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Yh(i),i}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),id(),ar=!0,rd(t)}}async function Nl(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=d0();ks!==n&&fi();const i=Va||v0(e);Va=i,ks=n;try{return await i}catch(r){throw fi(),r}}async function _0(t){const e=await Nl(),n=ks,i=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,i.encode(t)),o=new Uint8Array(r.length+s.byteLength);return o.set(r),o.set(new Uint8Array(s),r.length),{ciphertext:Jh(o),keyVersion:n,sessionFallback:ar}}async function y0(t,e={}){const{isSessionCredential:n=!1}=e;try{const i=await Nl({allowSessionFallbackCreation:!1});if(ar&&!n&&!Cs)throw new As;const r=w0(t),s=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},i,o);return new TextDecoder().decode(a)}catch(i){if(i instanceof As)throw i;return console.error("Decryption failed:",i),null}}function Jh(t){const e=new Uint8Array(t);let n="";for(let i=0;i0}let Nn="",hi="",Gi=null,od=0,it="not-configured";async function Ol(){sessionStorage.getItem(Rt)&&await Nl(),Nn=await Re("flutterflow"),hi=await Re("flutterflow_project_id"),A0(),rn(),Nn?Ul():(it="not-configured",vt())}let lr=!1;function Zh(){const t=document.getElementById("api-keys-modal");We(t),jl(),Nn&&Hl(Nn)}function Bl(){lr=!1,Zh()}function E0(){lr=!0;const t=document.getElementById("walkthrough-modal");t&&qe(t),Zh()}let ad=!1;function ld(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-settings-model");if(!t||!e)return;e.value=t.value;const n=Array.from(t.options);Array.from(e.options).forEach((r,s)=>{const o=n[s];o&&(r.textContent=o.textContent)});const i=document.getElementById("composer-settings-free-notice");i&&(document.getElementById("model-selector-free-notice")?(i.hidden=!1,i.innerHTML='Free plan — Gemini only. '):i.hidden=!0)}function cd(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-image-capability"),n=document.getElementById("composer-image-capability-note");if(!t)return;const i=Gt(t.value),r=Uh(t.value);e&&(e.textContent=r?"Supported":"Not supported"),n&&(n.textContent=r?`${i} accepts reference images you attach to the prompt.`:`Images can't be attached with ${i}. Attached images are removed when you switch to it.`),$l()}function S0(){if(lr=!1,ld(),cd(),!ad){const e=document.getElementById("composer-settings-model");e&&e.addEventListener("change",()=>{const n=document.getElementById("code-generator-model");n.value=e.value,n.dispatchEvent(new Event("change")),ld(),cd()}),ad=!0}const t=document.querySelector('.composer [aria-label="Generation settings"]');We("composer-settings-modal",{trigger:t})}function x0(t){t&&t.target!==t.currentTarget||qe("composer-settings-modal")}function Xh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&qe(e);const n=lr;if(lr=!1,n){const i=document.getElementById("walkthrough-modal");i&&(it==="connected"&&Dl(),We(i))}}let en=1;function Qh(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Hs(){const t=Qh();t.length&&t.forEach((e,n)=>{const i=n+1;e.classList.remove("wt-current","wt-done","wt-pending");const r=e.querySelector(".wt-step-num");i===en?(e.classList.add("wt-current"),r&&(r.textContent=i)):i0&&en<=t&&(en++,Hs())}function I0(){const t=document.getElementById("walkthrough-modal");t&&(en=1,Hs(),We(t))}function k0(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&qe(e);const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function ep(){if(H.isVerified&&Tt()&&ce.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(en=1,Hs(),We(e))}}async function jl(){const t=document.getElementById("flutterflow-api-key-input");Nn?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",C0()}function C0(){ud("flutterflow","flutterflow-key-status"),ud("flutterflow_project_id","flutterflow-project-status")}function ud(t,e){const n=document.getElementById(e);if(!n)return;const i=n.querySelector(".key-status-dot"),r=n.querySelector("span");Ct(t)?(i.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(i.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function rn(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff");e&&e.classList.toggle("hidden",!t)}function A0(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((i,r)=>{const s=n[r];s==="flutterflow"?Ct("flutterflow")&&Ct("flutterflow_project_id")?(i.className="key-status-dot configured",i.title="FlutterFlow (Fully configured)"):Ct("flutterflow")||Ct("flutterflow_project_id")?(i.className="key-status-dot env",i.title="FlutterFlow (Partially configured)"):(i.className="key-status-dot missing",i.title="FlutterFlow (Not configured)"):Ct(s)?(i.className="key-status-dot configured",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (User key)"):(i.className="key-status-dot missing",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (Not configured)")}),rn()}async function P0(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select"),n=t.value.trim(),i=e?.value.trim()||"";if(n){const o=await Re("flutterflow").catch(()=>"");await sd("flutterflow",n),n!==o&&!i&&tp()}if(i){if(!Ws(i)){Ee("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await sd("flutterflow_project_id",i)}await Ol(),n&&await Ul(),jl();const r=document.querySelector("#api-keys-modal .bg-blue-500"),s=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=s,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),Xh()},1e3)}async function F0(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(or,Ga()),fi(),localStorage.removeItem(gt+"flutterflow"),localStorage.removeItem(gt+"flutterflow_project_id"),sessionStorage.removeItem(Pt+"flutterflow"),sessionStorage.removeItem(Pt+"flutterflow_project_id"),sessionStorage.removeItem(Rt),sessionStorage.removeItem(sr),localStorage.removeItem(gt+"salt"),await g0(),localStorage.setItem(or,Ga()),localStorage.removeItem(gt+"flutterflow"),localStorage.removeItem(gt+"flutterflow_project_id"),sessionStorage.removeItem(Pt+"flutterflow"),sessionStorage.removeItem(Pt+"flutterflow_project_id"),await Ol();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),jl()}function Ws(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function vt(){const t=document.getElementById("acct-ff-dot"),e=document.getElementById("acct-ff-status"),n=document.getElementById("acct-ff-endpoint"),i=document.getElementById("acct-ff-project");if(n){const o=yt();n.textContent=o.includes("staging")?"Staging":"Production"}if(i&&(i.textContent=hi||"—"),!e)return;let r,s;if(!Ct("flutterflow"))r="Not connected — add your FlutterFlow API key",s="";else switch(it){case"connected":r="Connected to FlutterFlow",s="ok";break;case"no-projects":r="Key accepted — no projects found",s="warn";break;case"unauthorized":r="API key rejected (401/403) — re-enter your key",s="bad";break;case"network-error":r="Could not reach FlutterFlow — check your network",s="bad";break;default:r="Checking connection…",s="warn";break}e.textContent=r,t&&(t.className=`acct-dot${s?" "+s:""}`)}async function Ul(){const t=await Re("flutterflow");if(!t||!Ct("flutterflow"))return it="not-configured",vt(),null;it="validating",vt();try{const n=await new mi(t,"","main",yt()).listProjects();return it=n&&n.length>0?"connected":"no-projects",vt(),n}catch(e){const n=String(e&&e.message||"");return it=/(401|403)|denied|unauthorized|scoped|list permission/i.test(n)?"unauthorized":"network-error",vt(),null}}function tp(){hi="",localStorage.removeItem(gt+"flutterflow_project_id"),sessionStorage.removeItem(Pt+"flutterflow_project_id")}function R0(){tp();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML='',t.value=""),Ct("flutterflow")?(it="validating",Hl(Nn)):it="not-configured",vt()}function T0(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function $0(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const n=e.target.value.trim().length>0;T0("flutterflow-api-key-input",n)}),t.addEventListener("blur",M0(async e=>{const n=e.target.value.trim();n&&await Hl(n)},500)))}function M0(t,e){let n;return function(...r){const s=()=>{clearTimeout(n),t(...r)};clearTimeout(n),n=setTimeout(s,e)}}async function Hl(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',n&&n.classList.add("hidden"),(Ct("flutterflow")||t)&&(it="validating"),vt();try{const r=await new mi(t,"","main",yt()).listProjects();if(!r||r.length===0){it="no-projects",vt(),e.innerHTML='';return}it="connected",vt(),e.innerHTML='',r.forEach(s=>{const o=document.createElement("option");o.value=s.id||s.projectId||"",o.textContent=s.name||s.projectName||`Project ${s.id}`,e.appendChild(o)}),hi&&(e.value=hi)}catch(i){console.error("Failed to fetch projects:",i);const r=String(i&&i.message||"");it=/(401|403)|denied|unauthorized|scoped|list permission/i.test(r)?"unauthorized":"network-error",vt(),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${i.message}`,n.classList.remove("hidden"))}}function L0(t){const e=document.getElementById(t),i=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",i.innerHTML=`
-
- `):(e.type="password",i.innerHTML=`
-
-
- `)}let y={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1,runId:0,submittedPrompt:"",submittedImages:[]};function N0(){y.step1Result=null,y.step2Result=null,y.step3Result=null,y.bundleSpec=null,y.artifactBundle=null,y.bundleReview=null,y.selectedArtifactId=null,y.resultsViewMode="summary"}function O0(){y.bundleSpec=ir(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function qs(){const t=ci(y.bundleSpec);y.artifactBundle=ir(y.step2Result,{id:y.bundleSpec?.id,title:y.bundleSpec?.title,description:y.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:y.bundleSpec?.relationships,code:y.step2Result||""});const e=o_(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=ci(y.artifactBundle).id}function zs(){const t=ir(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(i=>[i.id,i.review])),n=new Map(t.artifacts.filter(i=>{const r=i.review;return r&&typeof r.fixedSource=="string"&&r.fixedSource.trim()}).map(i=>[i.id,i.review.fixedSource.trim()]));y.bundleReview=ir({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(i=>{const r=n.get(i.id)||null;return{...i,review:e.get(i.id)||i.review||y.step3Result||null,...r?{fixedCode:r}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function np(){const t=Wl();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function Wl(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(n=>n.id===y.selectedArtifactId)||ci(t)}function ql(){return Wl().code||y.step2Result||""}async function B0(){try{await Ol()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const zr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function D0(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class mi{constructor(e,n,i="main",r=zr.production){this.apiKey=e,this.baseUrl=r,this._projectId=n,this._branchName=i,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const i of e)try{const r=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(i)});if(!r.ok){const a=await r.text();n=new Error(`Export failed: ${r.status} - ${a}`);continue}const s=await r.json(),o=s?.value?.project_zip||s?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(r){n=r}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),i=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!i)throw new Error("Export did not contain a pubspec.yaml.");const r=i.slice(0,i.length-12),s=new Map,o=Object.keys(n.files).filter(a=>{if(n.files[a].dir||!a.startsWith(r))return!1;const l=a.slice(r.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{s.set(a.slice(r.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[i].async("string"),files:s}}async pushCodeWithRetry(e,n=3,i=null){const r=[zr.production,zr.staging],s=Math.max(0,r.indexOf(this._endpoint));let o=!1,a=null;for(let l=0;lsetTimeout(h,1e3*(l+1)));continue}if(d.ok)return console.log(`Push to ${c} succeeded!`),d;a=d.status;const f=d.status<500&&!o;if(Ka(f?d.clone():d,Mh).then(p=>console.log(`Push to ${c} returned ${d.status}: ${p}`),()=>console.log(`Push to ${c} returned ${d.status} (unreadable response body)`)),d.status>=500&&(o=!0),d.status===500){console.warn(`Endpoint ${c} returned 500, trying next...`),await new Promise(p=>setTimeout(p,1e3*(l+1)));continue}if(d.status>=500)throw new et(`FlutterFlow reported a server error (HTTP ${d.status}), which cannot prove the push was refused — the write may have been applied before the failure. Open your FlutterFlow project to reconcile before retrying.`);if(o)throw new et(`The push was refused (HTTP ${d.status}), but an earlier sync attempt may already have applied it — server errors and dropped responses cannot prove a refusal. Open your FlutterFlow project to reconcile before retrying.`);return d}throw Ku({httpStatus:a})}async pushCode(e,n=null){return this.pushCodeWithRetry(e,3,n)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const i=JSON.parse(e.value);if(i&&Array.isArray(i.entries))return i.entries.map(r=>({id:r.id,name:r.project?.name||r.id}))}catch(i){console.error("Failed to parse stringified project value:",i)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,i="";for(const r of e){const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(s.ok)return r!==e[0]&&console.log(`listProjects answered on legacy path ${r}`),this.parseProjectsResponse(await s.json());if(n=s.status,i=await s.text(),console.warn(`listProjects via ${r} returned ${n}: ${i}`),s.status===401||s.status===403)throw new Error(D0(s.status,i));if(s.status!==404)throw new Error(`List projects failed: ${s.status} - ${i}`)}throw new Error(`List projects failed: ${n} - ${i}`)}}function Ka(t,e){const n=t.body?.getReader?.(),i=n?(async()=>{const r=new TextDecoder;let s="";for(;;){const{done:o,value:a}=await n.read();if(o)break;s+=r.decode(a,{stream:!0})}return s+r.decode()})():Promise.resolve("");return Gl(i,e,(r,s)=>{try{n?.cancel()?.catch?.(()=>{})}catch{}s(new Error("The response body stalled before it finished."))})}async function j0(t,e=Mh){const n=t.clone();let i;try{i=JSON.parse(await Ka(t,e))}catch{let o="";try{o=await Ka(n,e)}catch{}if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:o||`HTTP ${t.status}`,errorMap:new Map};throw new et(`FlutterFlow accepted the sync but returned an unreadable response${o?`: ${o.slice(0,200)}`:"."}`)}if(!t.ok){let s=i.message||`HTTP ${t.status}`,o=new Map;if(i.errors)o=new Map(Object.entries(i.errors));else if(!i.message&&typeof i=="object"){const a=Object.keys(i).filter(l=>l.endsWith(".dart")&&Array.isArray(i[l]));a.length>0&&(o=new Map(Object.entries(i)),s=a.flatMap(u=>i[u].map(c=>`${u}: ${c.errorMessage}`)).join(`
-`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:s,errorMap:o}}let r={};if(i.value)try{r=typeof i.value=="string"?JSON.parse(i.value):i.value}catch(s){console.warn("Ignoring malformed push response value:",s)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function zl(t,e){return{401:"Authentication failed. Please check your FlutterFlow API key.",403:"Access denied. You may not have permission to modify this project.",404:"Project not found. Please check your Project ID.",409:"Conflict detected. The project may have been modified elsewhere.",422:"Validation failed: Invalid request format",429:"Rate limit exceeded. Please try again in a few minutes.",500:"FlutterFlow server error. Please try again later.",503:"FlutterFlow service temporarily unavailable."}[t]||`FlutterFlow API error: ${`HTTP ${t}`}`}const J={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},ip=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,rp=/extends\s+State<\w+>/;function U0(t,e=""){if(t==="pubspec.yaml")return J.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return J.OTHER;if(t==="custom_functions.dart")return J.FUNCTION;if(e){const n=ip.test(e),i=rp.test(e);if(n||i)return J.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return J.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return J.FUNCTION}return J.CODE_FILE}function sp(t,e){switch(e){case J.ACTION:return`lib/custom_code/actions/${t}`;case J.WIDGET:return`lib/custom_code/widgets/${t}`;case J.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case J.CODE_FILE:return`lib/custom_code/${t}`;case J.DEPENDENCIES:return"pubspec.yaml";case J.OTHER:return`lib/custom_code/${t}`;default:return t}}async function Vl(t,e=new Map){return Hv(t,e)}const Ya=new Map,ei=new Map,ti=new Map;function hr(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function pi(t){Ya.delete(hr(t))}function Vr(t,e,n){const i=hr(t),r=ei.get(i)??new Map;for(const{path:s,content:o}of e){const a=r.get(s)??new Map,l=a.get(o)??{uncertain:0,verified:0};n.uncertain&&(l.uncertain+=n.uncertain),n.verified&&(l.verified+=n.verified),l.uncertain<=0&&l.verified<=0?a.delete(o):a.set(o,l),a.size===0?r.delete(s):r.set(s,a)}r.size===0?ei.delete(i):ei.set(i,r)}function H0(t,e){Vr(t,e,{uncertain:1})}function W0(t){const e=hr(t);ti.set(e,(ti.get(e)??0)+1)}function dd(t){const e=hr(t),n=(ti.get(e)??0)-1;n<=0?ti.delete(e):ti.set(e,n)}function Gl(t,e,n){return new Promise((i,r)=>{let s=!1;const o=(l,u,c)=>{s||(s=!0,c==="resolve"?i(u):r(u))},a=setTimeout(()=>{s||(s=!0,n(i,r))},e);t.then(l=>{clearTimeout(a),o(i,l,"resolve")},l=>{clearTimeout(a),o(r,l,"reject")})})}async function Kl(t,e,n=$h){const i={stop:!1},r=(async()=>{const s=await t.pushCode(e,i);return j0(s)})();return Gl(r,n,(s,o)=>{i.stop=!0,pi(t),W0(t),r.then(()=>dd(t),()=>dd(t)),o(new et("FlutterFlow did not answer the sync in time — the push may still have been applied. The outcome is not yet known: open your FlutterFlow project to reconcile before retrying the deploy."))})}async function Yl(t,e,n,i,r="",s=$h){const o=x_(e,n);if(o.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[],approximate:[]};const a=my(o,r),l={...a.manifest,sources:a.sources},u=a.skipped.map(h=>h.reason);u.forEach(h=>console.warn(`[custom class deploy] ${h}`));const c=a.approximate;c.forEach(h=>console.warn(`[custom class deploy] ${h}`)),console.log(`Provisioning ${o.length} new FlutterFlow custom code file(s) before sync.`),Be.set("provision");let d=!0,f,p;try{if(p=(async()=>{let h;try{h=await fetch(Vy,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:i,customClasses:o,verification:l,stream:!0})})}catch{throw new et("The provisioning request did not return a response. The deploy may have reached the FlutterFlow server — open your FlutterFlow project to reconcile before retrying.")}return _y(h,{onPhase:g=>{d&&Be.setSubstatus(g)},onLog:g=>{d&&console.log(`[custom class deploy] ${g}`)}})})(),f=await Gl(p,s,(h,g)=>{d=!1,g(new et("The deploy is still working on the FlutterFlow server, but this browser tab has stopped waiting. Your custom classes may or may not have been written — the outcome is not yet known. Open your FlutterFlow project to reconcile before retrying the deploy."))}),!f.finalResultReceived)throw Yu(f)===Le.FAILED?new Error(f.error||`FlutterFlow custom class provisioning failed (HTTP ${f.httpStatus}).`):new et("The connection to the FlutterFlow deploy runner dropped before it reported a result. The deploy may still be finishing on the server; open your FlutterFlow project to reconcile before retrying.");if(!f.success){const h=f.details?` ${f.details}`:"",g=`${f.error||"FlutterFlow custom class provisioning failed."}${h}`;throw Yu(f)===Le.UNCONFIRMED?new et(`${g} The failure arrived after the deploy began — custom classes may already be written. Open your FlutterFlow project to reconcile before retrying.`):new Error(g)}}catch(h){throw h instanceof et&&(pi(t),H0(t,o),p?.then(g=>{g?.finalResultReceived&&g.success?Vr(t,o,{uncertain:-1,verified:1}):g?.finalResultReceived&&Nh(g)&&Vr(t,o,{uncertain:-1})},()=>{})),h}return pi(t),Vr(t,o,{verified:1}),f.verificationSkipped&&(console.warn(`[custom class deploy] ${f.verificationSkipped}`),u.push(f.verificationSkipped)),{remoteFiles:n,syncFileMap:I_(e,o),unverified:u,approximate:c,provisionSucceeded:!0}}async function Jl(t,e={}){const n=hr(t);let i=Ya.get(n);if(i===void 0){try{i=await t.fetchProjectSource()}catch(u){throw new Error(`Could not read your project's pubspec.yaml (${u.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const a=Rh(i.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);const l=ei.get(n);if(l){for(const[u,c]of[...l]){const d=i.files.get(u);if(d!==void 0){const f=c.get(d);f&&(f.verified>0?f.verified-=1:f.uncertain-=1,f.uncertain<=0&&f.verified<=0&&c.delete(d))}c.size===0&&l.delete(u)}l.size===0&&ei.delete(n)}!ei.has(n)&&!ti.has(n)&&Ya.set(n,i)}const r=await Ly(i.pubspecYaml,e),s=dy(i.pubspecYaml,r.overrides),o=uy(s.yaml,r.additions);return r.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>{const l=r.additions[a],u=l?.sdk?`sdk: ${l.sdk}`:l||"any";return`${a}: ${u}`}).join(", "),r.sdk.dartSdkFloor?`(resolved for Dart ${r.sdk.dartSdkFloor})`:""),r.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:s.overridden,warnings:r.warnings,remoteFiles:i.files}}function q0(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const i=t.content.split(`
-`).length;i>500&&n.push(`Code has ${i} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===J.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const r=t.content.match(/print\s*\(/g);r&&r.length>3&&n.push(`Code contains ${r.length} print statements. Consider removing debug prints before committing.`);const s=W_(t.content);if(s&&e.push(`FlutterFlow cannot format this code - ${s}. Fix or regenerate before committing.`),t.codeType===J.WIDGET){const o=yh(t.content),a=j_(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${wh(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function op(t,e={}){const{artifactType:n="CustomWidget",artifactName:i="GeneratedCode",fileName:r}=e,s=B_(t);let o=r||i;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=yh(s)[0],c=u?wh(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=J.CODE_FILE;switch(n){case"CustomAction":a=J.ACTION;break;case"CustomWidget":a=J.WIDGET;break;case"CustomFunction":a=J.FUNCTION;break;case"CustomClass":case"CodeFile":a=J.CODE_FILE;break}let l="";return a===J.WIDGET?l=`// Automatic FlutterFlow imports
-import '/flutter_flow/flutter_flow_theme.dart';
-import '/flutter_flow/flutter_flow_util.dart';
-import 'package:flutter/material.dart';
-// Begin custom widget code
-// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
-
-`:a===J.ACTION?l=`// Automatic FlutterFlow imports
-import '/flutter_flow/flutter_flow_theme.dart';
-import '/flutter_flow/flutter_flow_util.dart';
-import 'package:flutter/material.dart';
-// Begin custom action code
-// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
-
-`:a===J.FUNCTION&&(l=`// Automatic FlutterFlow imports
-import 'dart:convert';
-import 'dart:math' as math;
-
-import 'package:flutter/material.dart';
-import 'package:google_fonts/google_fonts.dart';
-import 'package:intl/intl.dart';
-import 'package:timeago/timeago.dart' as timeago;
-import '/flutter_flow/lat_lng.dart';
-import '/flutter_flow/place.dart';
-import '/flutter_flow/uploaded_file.dart';
-
-`),{content:c_(s,l),fileName:o,codeType:a,artifactType:n,artifactName:i}}function z0(t){const e={};for(const n of kl(t))e[n]="";return e}function V0(t,e={}){return{timestamp:new Date().toISOString(),artifactType:t.artifactType,artifactName:t.artifactName,codeType:t.codeType,fileName:t.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:t.content.length}}function G0(t,e,n,i=new Set,r=""){const s=[],o=ip.test(e),a=rp.test(e);return n===J.WIDGET&&!o&&!a&&s.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:s.length===0,errors:s}}function Vs(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const i=new Set(Array.from(t.values()).flatMap(r=>Ns(r.content||"")));for(const[r,s]of t.entries()){if((!s.content||s.content.trim().length===0)&&e.push(`File ${r} is empty`),s.content&&s.content.length>1e5&&n.push(`File ${r} is very large (>100KB)`),r.endsWith(".dart")){const o=G0(r,s.content,s.type,i,s.artifactName);o.valid||e.push(...o.errors.map(a=>`${r}: ${a}`))}if(r==="pubspec.yaml"){const o=Rh(s.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}const ee={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},G={currentState:ee.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=ee.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(ee).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===ee.PREPARING&&(this.startTime=Date.now()),(t===ee.SUCCESS||t===ee.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:t,commitState:this}})),console.log(`Commit state changed to: ${t}`)},setError(t){this.error=t,this.setState(ee.ERROR)},setSuccess(t){this.result=t,this.setState(ee.SUCCESS)},setProgress(t,e){this.filesProcessed=t,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===ee.PREPARING||this.currentState===ee.VALIDATING||this.currentState===ee.PUSHING}};async function K0(t,e,n={}){let{codeType:i="W"}=n;const{pubspecDeps:r={},artifactName:s=e}=n;i==="CustomWidget"&&(i=J.WIDGET),i==="CustomAction"&&(i=J.ACTION),i==="CustomFunction"&&(i=J.FUNCTION),i==="CustomClass"&&(i=J.CODE_FILE),i==="CodeFile"&&(i=J.CODE_FILE),G.reset(),G.setState(ee.PREPARING);try{const o=await Re("flutterflow"),a=await Re("flutterflow_project_id");if(!o||!a)throw new Error("FlutterFlow credentials not configured. Please set your API key and Project ID in the API Keys settings.");if(!Ws(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=yt(),u=new mi(o,a,"main",l);G.setState(ee.VALIDATING);const c=new Map,d=i||U0(e,t),f=sp(e,d);c.set(e,{artifactName:s,content:t,type:d,path:f}),G.setProgress(0,c.size);const p=Vs(c);if(!p.valid)throw new Error(`Validation failed:
-${p.errors.join(`
-`)}`);const h=await Jl(u,r),g=h.yaml,m=await Yl(u,c,h.remoteFiles,`Provision ${s} custom class`,g),v=await Vl(m.syncFileMap,m.remoteFiles),E=new Map(m.syncFileMap);E.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),Be.set("package");const S=await Zl(E),_={project_id:a,zipped_custom_code:S,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:v.fileMapContents,functions_map:v.functionsMapContents};G.setState(ee.PUSHING),G.setProgress(1,c.size),pi(u),Be.set("push");const b=await Kl(u,_);if(b.success)G.setSuccess({fileCount:c.size,projectId:a,warnings:b.errorMap&&b.errorMap.size>0?Array.from(b.errorMap.entries()):[]});else{const k=b.errorMessage||zl(b.responseCode),T=new Error(k);throw T.remoteRefusal=!0,T}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:h.added,unverified:m.unverified,approximate:m.approximate,warnings:b.errorMap?Array.from(b.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),G.setError(o),o instanceof et?{success:!1,unconfirmed:!0,error:o.message,state:G.currentState}:{success:!1,error:o.message,remoteRefusal:o.remoteRefusal===!0,state:G.currentState}}}async function Zl(t){const e=new JSZip;for(const[n,i]of t.entries())e.file(n,i.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function Y0(t,e={}){const{artifactType:n,artifactName:i,fileName:r,pipelineResult:s}=e;console.log(`Starting commit for ${i} (${n})`);let o=!1;const a={projectId:null,endpoint:yt(),artifactType:n,artifactName:i,fileName:r};try{G.setState(ee.PREPARING);const l=op(t,{artifactType:n,artifactName:i,fileName:r}),u=z0(l.content);console.log("Detected dependencies:",u),G.setState(ee.VALIDATING);const c=await Re("flutterflow"),d=Gi||await Re("flutterflow_project_id");if(!c)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!d)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ws(d))throw new Error("Invalid FlutterFlow Project ID format.");a.projectId=d;const f=new Map;f.set(l.fileName,{artifactName:i,content:l.content,type:l.codeType,path:sp(l.fileName,l.codeType),functionName:l.codeType===J.FUNCTION?i:void 0}),G.setProgress(0,f.size);const p=Vs(f);if(!p.valid)throw new Error(`File validation failed:
-${p.errors.join(`
-`)}`);p.warnings.length>0&&console.warn("Validation warnings:",p.warnings),G.setState(ee.PUSHING);const h=yt(),g=new mi(c,d,"main",h),m=await Jl(g,u),v=m.yaml,E=await Yl(g,f,m.remoteFiles,`Provision ${i} custom class`,v);o=E.provisionSucceeded===!0;const S=await Vl(E.syncFileMap,E.remoteFiles),_=new Map(E.syncFileMap);_.set("pubspec.yaml",{content:v,type:J.DEPENDENCIES,path:"pubspec.yaml"}),Be.set("package");const b=await Zl(_),k={project_id:d,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:g.branchName,serialized_yaml:v,file_map:S.fileMapContents,functions_map:S.functionsMapContents};G.setProgress(1,f.size),pi(g),Be.set("push");const T=await Kl(g,k);if(T.success){const x={...V0(l,s),projectId:d};return G.setSuccess({...x,fileCount:f.size,warnings:T.errorMap?Array.from(T.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${l.fileName} to FlutterFlow`,metadata:x,targetIdentity:a,addedDependencies:m.added,unverified:E.unverified,approximate:E.approximate,warnings:T.errorMap?Array.from(T.errorMap.entries()):[],elapsedTime:G.getElapsedTime()}}else{const x=T.errorMessage||zl(T.responseCode),F=new Error(x);throw F.errorMap=T.errorMap,F.remoteRefusal=!0,F}}catch(l){console.error("Commit execution failed:",l),G.setError(l);let u=new Map;if(l.errorMap)u=l.errorMap;else if(l.message&&l.message.includes("{"))try{const c=l.message.match(/\{[\s\S]*\}/);if(c){const d=JSON.parse(c[0]);u=new Map(Object.entries(d))}}catch(c){console.warn("Failed to parse error map from commit response:",c)}return l instanceof et?{success:!1,unconfirmed:!0,error:l.message,errorMap:u,targetIdentity:a,state:G.currentState,elapsedTime:G.getElapsedTime()}:o?{success:!1,partial:!0,error:l.message,errorMap:u,targetIdentity:a,state:G.currentState,elapsedTime:G.getElapsedTime()}:{success:!1,error:l.message,errorMap:u,remoteRefusal:l.remoteRefusal===!0,targetIdentity:a,state:G.currentState,elapsedTime:G.getElapsedTime()}}}async function J0(t,e={}){const{pipelineResult:n}=e;let i=!1;const r={projectId:null,endpoint:yt(),artifactType:"Bundle",artifactName:t?.title,fileName:t?.fileEntries?`${t.fileEntries.length} artifacts`:"bundle"};try{if(G.setState(ee.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed:
-${t.errors.join(`
-`)}`);const s=new Map(t.fileEntries.map(b=>[b.fileName,{artifactId:b.artifactId,artifactName:b.artifactName,content:b.content,type:b.type,path:b.path,functionName:b.type===J.FUNCTION?b.artifactName:void 0}]));G.setProgress(0,s.size);const o=Vs(s);if(!o.valid)throw new Error(`File validation failed:
-${o.errors.join(`
-`)}`);G.setState(ee.VALIDATING);const a=await Re("flutterflow"),l=Gi||await Re("flutterflow_project_id");if(!a)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!l)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ws(l))throw new Error("Invalid FlutterFlow Project ID format.");r.projectId=l,G.setState(ee.PUSHING);const u=yt(),c=new mi(a,l,"main",u),d=await Jl(c,t.dependencies),f=d.yaml,p=await Yl(c,s,d.remoteFiles,`Provision ${t.title} custom classes`,f);i=p.provisionSucceeded===!0;const h=await Vl(p.syncFileMap,p.remoteFiles),g=new Map(p.syncFileMap);g.set("pubspec.yaml",{content:f,type:J.DEPENDENCIES,path:"pubspec.yaml"}),Be.set("package");const m=await Zl(g),v={project_id:l,zipped_custom_code:m,uid:`web_${Date.now()}`,branch_name:c.branchName,serialized_yaml:f,file_map:h.fileMapContents,functions_map:h.functionsMapContents};G.setProgress(1,s.size),pi(c),Be.set("push");const E=await Kl(c,v);if(E.success){const b={...n,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((k,T)=>k+T.content.length,0),projectId:l};return G.setSuccess({...b,fileCount:s.size,warnings:E.errorMap?Array.from(E.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:b,targetIdentity:r,addedDependencies:d.added,unverified:p.unverified,approximate:p.approximate,warnings:E.errorMap?Array.from(E.errorMap.entries()):[],elapsedTime:G.getElapsedTime()}}const S=E.errorMessage||zl(E.responseCode),_=new Error(S);throw _.errorMap=E.errorMap,_.remoteRefusal=!0,_}catch(s){console.error("Bundle commit execution failed:",s),G.setError(s);const o=s.errorMap||new Map;return s instanceof et?{success:!1,unconfirmed:!0,error:s.message,errorMap:o,targetIdentity:r,state:G.currentState,elapsedTime:G.getElapsedTime()}:i?{success:!1,partial:!0,error:s.message,errorMap:o,targetIdentity:r,state:G.currentState,elapsedTime:G.getElapsedTime()}:{success:!1,error:s.message,errorMap:o,targetIdentity:r,state:G.currentState,elapsedTime:G.getElapsedTime()}}}async function Z0(t,e=[]){const n=El("architect");try{return await Rs("architect",Vh,Fv(t),n,e)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Prompt Architect failed: ${i.message}`)}}async function Gs(t,e,n=[],i){const r=Rv(t),s=El("generator",y.bundleSpec);try{return await Rs("generator",e,r,s,n)}catch(o){if(o.isModelArmor||o.isUsageLimit||o.isPipelineCancel)throw o;if(e!==Tr){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,o.message),nb(e,Tr,i);try{return await Rs("generator",Tr,r,s,n)}catch(a){throw a.isModelArmor||a.isUsageLimit||a.isPipelineCancel?a:new Error(`Code Generator failed: primary (${e}): ${o.message} | fallback (${Tr}): ${a.message}`)}}throw new Error(`Code Generator failed: ${o.message}`)}}async function Ks(t,e=null){const n={...El("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await Rs("review",Gh,Tv(t),n)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Code Review failed: ${i.message}`)}}function Ps(t,e){const n=document.getElementById(`step${t}-item`),i=document.getElementById(`step${t}-status`);!n||!i||(n.classList.remove("active","completed","error"),i.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),i.classList.add("running"),i.innerHTML=``):e==="completed"?(n.classList.add("completed"),i.classList.add("completed"),i.innerHTML=``):e==="error"?(n.classList.add("error"),i.classList.add("error"),i.innerHTML=``):i.innerHTML=``)}function Ae(t,e){const n=document.getElementById(`step${t}-loading`),i=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),i.classList.add("hidden"),Ps(t,"active")):(n.classList.add("hidden"),i.classList.remove("hidden"),Ps(t,"completed"))}function X0(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function Q0(t){rt(parseInt(t.replace("step","")))}function rt(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),On();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const i=document.getElementById(`step${t}-content`);i&&i.classList.remove("hidden");const r=document.getElementById("stage-title"),s={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=s[t]||"Active Workflow Stage")}function ew(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const r=e.closest(".code-container")?.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(i=>{console.warn("Failed to copy to clipboard:",i)})}function Ja(t){const e=Za(t);console.log(`Step 1 (Prompt Architect): ${Gt(Vh)}`),console.log(e!==t?`Step 2 (Code Generator): ${Gt(t)} → ${Gt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${Gt(t)}`),console.log(`Step 3 (Code Review): ${Gt(Gh)}`)}function ap(){return{step1Result:y.step1Result,step2Result:y.step2Result,step3Result:y.step3Result,artifactBundle:y.artifactBundle,bundleReview:y.bundleReview,selectedArtifactId:y.selectedArtifactId}}function tw(t){if(!t)return;Object.assign(y,t),new Set((y.artifactBundle?.artifacts||[]).map(n=>n.id)).has(y.selectedArtifactId)||(y.selectedArtifactId=ci(y.artifactBundle)?.id||null)}const lp="results-replacement-error";function nw(t,{stage:e=2,runId:n,retry:i}){if(!re(n))return;const r=document.getElementById(lp);if(!r)return;const s=Bh(t),o=document.getElementById("results-replacement-error-title"),a=document.getElementById("results-replacement-error-message"),l=document.getElementById("results-replacement-error-retry"),u=document.getElementById("results-replacement-error-upgrade");o&&(o.textContent=`${Xs[e]||"Regeneration"}: ${s.title}`),a&&(a.textContent=s.message),r.hidden=!1;let c=null;u&&(u.hidden=!s.canUpgrade,s.canUpgrade&&(u.textContent="View plans",u.onclick=()=>gi(),c=u)),l&&(l.hidden=s.canUpgrade,s.canUpgrade||(l.onclick=()=>{Xl(),typeof i=="function"&&i()},l.textContent="Retry",c=l)),(c||r).focus({preventScroll:!0})}function Xl(){const t=document.getElementById(lp);t&&(t.hidden=!0)}function cp(t,{previous:e,stage:n,runId:i,retry:r}){re(i)&&(t.isUsageLimit&&un(),tw(e),gr(),nn(!0),mr(),oo(),nw(t,{stage:n,runId:i,retry:r}),rn())}async function up(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0;const e=Qs();Ql("standardRegenerate",y.step2Result,y.step1Result);const n=document.querySelectorAll(".btn-refine-action"),i=ap();n.forEach(r=>{r.disabled=!0,r.innerHTML=`
- Refining...`});try{Xl();const r=Wl(),s=r.id,o=$v({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:r.id,userFeedback:"Fix the issues listed in the audit report."});io({runId:e}),Ft(2,e),rt(2),Ae(2,!0);const a=await Gs(o,t,[],e);if(!re(e))return;y.step2Result=a,qs(),tn(2,e);const l=document.getElementById("step2-output"),u=di(y.step2Result);l.textContent=u,l.dataset.raw=u,Ae(2,!1),rt(3),Ft(3,e),Ae(3,!0);const c=await Ks(y.step2Result,y.step1Result);if(!re(e))return;y.step3Result=c,zs(),tn(3,e),y.artifactBundle?.artifacts?.some(p=>p.id===s)?y.selectedArtifactId=s:y.selectedArtifactId=ci(y.artifactBundle)?.id||null;const d=document.getElementById("step3-output");d.textContent=y.step3Result,Ae(3,!1),gr();const f=Us(y.step3Result);mr(u,f)}catch(r){if(console.error("Refinement failed:",r),!re(e))return;const s=js(r,{architect:2,generator:2,review:3});cp(r,{previous:i,stage:s,runId:e,retry:up})}finally{n.forEach(r=>{r.disabled=!1,r.textContent="Refine & Regenerate"}),re(e)&&(y.isRunning=!1,rn())}}async function Ql(t,e,n){const i=`${_t}/connectFeedback`,r={type:t,code:e,input:n};try{const s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!s.ok){const a=await s.text();return console.error(`callEndpoint failed: ${s.status} ${s.statusText}`,a),{success:!1,status:s.status,error:a}}const o=await s.json();return console.log("Telemetry success:",o),o}catch(s){return console.error("callEndpoint failed:",s),{success:!1,error:s.message}}}function iw(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function dp(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){Ee("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0;const i=Qs();Ql("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` Fixing…`);const s=ap();try{Xl();const o=hh({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});jp(),io({runId:i}),Ft(2,i),rt(2),Ae(2,!0);const a=await Gs(o,n,[],i);if(!re(i))return;y.step2Result=a,qs(),tn(2,i);const l=document.getElementById("step2-output"),u=di(y.step2Result);l.textContent=u,l.dataset.raw=u,Ae(2,!1),rt(3),Ft(3,i),Ae(3,!0);const c=await Ks(y.step2Result,y.step1Result);if(!re(i))return;y.step3Result=c,zs(),tn(3,i);const d=document.getElementById("step3-output");d.textContent=y.step3Result,Ae(3,!1),gr();const f=Us(y.step3Result);mr(u,f),t&&(t.value="")}catch(o){if(console.error("Fix from errors failed:",o),!re(i))return;const a=js(o,{architect:2,generator:2,review:3});cp(o,{previous:s,stage:a,runId:i,retry:dp})}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),re(i)&&(y.isRunning=!1,rn())}}async function cr(){if(console.log("runThinkingPipeline called"),y.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value,n=Oe.slice();if(!t.trim()){Ee("Please describe your FlutterFlow widget first.","warning");return}y.isRunning=!0;const i=Qs();try{if(await Ha,!re(i)||(gn.length&&await Promise.allSettled(gn.map(v=>v.job)),!re(i))||!await Cw()||!re(i)||(await bw(),!re(i)))return;const r=Za(e);t.length,N0(),y.submittedPrompt=t,y.submittedImages=n.filter(v=>v.url),el(!0),Ja(r),On();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");const o=document.getElementById("paywall-exhausted");o&&o.classList.add("hidden"),io({prompt:t,runId:i}),ob(),rt(1),Ft(1,i),Ae(1,!0);const a=y.submittedImages.map(v=>({url:v.url})),l=await Z0(t,a);if(!re(i))return;y.step1Result=l,O0(),tn(1,i);const u=document.getElementById("step1-output"),c=di(y.step1Result);u.textContent=c,u.dataset.raw=c,Ae(1,!1),rt(2),Ft(2,i),Ae(2,!0);const d=await Gs(y.step1Result,r,a,i);if(!re(i))return;y.step2Result=d,qs(),tn(2,i);const f=document.getElementById("step2-output"),p=di(y.step2Result);f.textContent=p,f.dataset.raw=p,Ae(2,!1),rt(3),Ft(3,i),Ae(3,!0);const h=await Ks(y.step2Result,y.step1Result);if(!re(i))return;y.step3Result=h,zs(),tn(3,i);const g=document.getElementById("step3-output");g.textContent=y.step3Result,Ae(3,!1),gr();const m=Us(y.step3Result);ab(),mr(p,m)}catch(r){if(r.isPipelineCancel||console.error("Pipeline failed:",r),!re(i))return;const s=js(r,{architect:1,generator:2,review:3});r.isUsageLimit?un():(r.message,Za(document.getElementById("code-generator-model").value),void 0),rt(s),Ae(s,!1),Np(r,{stage:s,runId:i}),Ps(s,"error")}finally{re(i)&&(y.isRunning=!1,el(!1),rn())}}function rw(){const t=document.getElementById("code-generator-model").value,e=[xs,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(i=>i!==t),n=prompt(`Retry with different model?
-
-Current: ${t}
-
-Options:
-1. ${e[0]}
-2. ${e[1]}
-
-Enter 1 or 2:`);n==="1"?(document.getElementById("code-generator-model").value=e[0],cr()):n==="2"&&(document.getElementById("code-generator-model").value=e[1],cr())}async function sw(){const t=ql();if(!t){Ee("No code to commit. Please run the pipeline first.","warning");return}const e=await Re("flutterflow"),n=await Re("flutterflow_project_id");if(!e||!n){Ee("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Bl();return}if(y.artifactBundle?.artifacts?.length>1){await ow();return}const{artifactType:i,artifactName:r,fileName:s}=np(),o=op(t,{artifactType:i,artifactName:r,fileName:s}),a=q0(o);if(!a.canProceed){Ee(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}nc(o,a,null,null)}async function ow(){const t=await Re("flutterflow"),e=await Re("flutterflow_project_id");if(!t||!e){Ee("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Bl();return}const n=w_(y.artifactBundle);if(n.errors.length>0){Ee(`Bundle validation failed: ${n.errors.join("; ")}`,"error");return}const i=new Map(n.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),r=Vs(i),s={canProceed:r.valid&&n.errors.length===0,issues:[...n.errors,...r.errors],warnings:[...n.warnings,...r.warnings]};if(!s.canProceed){Ee(`Bundle validation failed: ${s.issues.join("; ")}`,"error");return}const o={content:n.fileEntries.map(a=>`// ${a.fileName}
-${a.content}`).join(`
-
-`),fileName:`${n.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:n.title};nc(o,s,n.dependencies,n)}function aw(t){let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let n=`
-
FlutterFlow Commit Failed
-
${z(t.error)}
`;if(e&&e.size>0){n+=`
-
Errors:
-
`;for(const[r,s]of e.entries()){const o=Al(s);n+=`-
- ${z(r)}: ${z(o)}
-
`}n+="
"}n+="
",n+=`
-
-
`;const i=document.getElementById("step3-output");i&&(i.innerHTML=n,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{fp(t.error,e)}))}async function fp(t,e){if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0;const i=Qs(),r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` Fixing...`);try{let s=`The previous code had the following errors when committing to FlutterFlow:
-
-`;if(e&&e.size>0)for(const[p,h]of e.entries()){const g=Al(h);s+=`File: ${p}
-Error: ${g}
-
-`}else s+=`${t}
-`;const o=hh({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:s});io({runId:i}),Ft(2,i),rt(2),Ae(2,!0);const a=await Gs(o,n,[],i);if(!re(i))return;y.step2Result=a,qs(),tn(2,i);const l=document.getElementById("step2-output"),u=di(y.step2Result);l.textContent=u,l.dataset.raw=u,Ae(2,!1),rt(3),Ft(3,i),Ae(3,!0);const c=await Ks(y.step2Result,y.step1Result);if(!re(i))return;y.step3Result=c,zs(),tn(3,i);const d=document.getElementById("step3-output");d.textContent=y.step3Result,Ae(3,!1),gr();const f=Us(y.step3Result);mr(u,f)}catch(s){if(console.error("Regeneration failed:",s),!re(i))return;const o=js(s,{architect:2,generator:2,review:3});s.isUsageLimit&&un(),rt(o),Ae(o,!1),Np(s,{stage:o,runId:i,retry:()=>fp(t,e)}),Ps(o,"error")}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),re(i)&&(y.isRunning=!1,rn())}}async function lw(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const n=await Re("flutterflow"),i=await Re("flutterflow_project_id");n&&i?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):n||i?(t.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(t.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function hp(t){try{const e=await fetch(`${_t}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function cw(t){try{const n=await(await fetch(`${_t}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(n.error||!n.email||!n.sessionToken)throw new Error(n.error||"Invalid or expired link");return n}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function uw(t){try{const e=await fetch(`${_t}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:t})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${_t}/auth/refresh-session`,status:e.status}),null;const n=await e.json();return n.error||!n.email||!n.sessionToken?(console.warn("refreshSession: validation failed",{error:n.error,hasEmail:!!n.email,hasToken:!!n.sessionToken}),null):n}catch(e){return console.error("refreshSession: fetch failed",{url:`${_t}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function fd(t,e){const n=gp(),i=(H.email||n.email)!==t;H.email=t,H.sessionToken=e,H.isVerified=!0,ce=Ln({isLoading:!0}),localStorage.setItem(bs,JSON.stringify({email:t,sessionToken:e})),i&&bp()}function pp(){H.email=null,H.sessionToken=null,H.isVerified=!1,ce=Ln({isResolved:!0}),localStorage.removeItem(bs),localStorage.removeItem(Ss)}function gp(){try{const t=localStorage.getItem(bs);if(!t)return{email:null,sessionToken:null};const e=JSON.parse(t);return!e.email||!e.sessionToken?{email:null,sessionToken:null}:e}catch(t){return console.warn("getStoredSession: failed to parse auth session:",t),localStorage.removeItem(bs),{email:null,sessionToken:null}}}async function dw(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname+window.location.hash);try{const{email:n,sessionToken:i}=await cw(e);fd(n,i),mp();const r=hd();r&&!window.location.hash&&(window.location.hash=r)}catch(n){hd();const i=n.message||"Sign-in link invalid or expired.";Ee(i,"error"),Ys(),Zn(i,"error")}}else{const{email:n,sessionToken:i}=gp();if(n&&i){const r=await uw(i);r?fd(r.email,r.sessionToken):pp()}}ec()}function fw(){try{localStorage.setItem(Ua,JSON.stringify({hash:window.location.hash||"#home",ts:Date.now()}))}catch(t){console.warn("rememberSignInReturnSurface: failed to persist return surface:",t)}}function hd(){try{const t=localStorage.getItem(Ua);if(localStorage.removeItem(Ua),!t)return null;const{hash:e,ts:n}=JSON.parse(t);return!e||typeof n!="number"||Date.now()-n>Gy?null:e}catch(t){return console.warn("consumeSignInReturnSurface: failed to read return surface:",t),null}}function Ys(){const t=document.getElementById("signin-modal");if(!t)return;fw(),document.getElementById("signin-email-input")?.removeAttribute("aria-invalid"),Zn(""),We(t)}function mp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&qe(e)}function Zn(t,e){const n=document.getElementById("signin-message");n&&(n.textContent=t||"",n.classList.remove("signin-message-success","signin-message-error"),e&&n.classList.add(`signin-message-${e}`))}async function hw(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),n=Bs(t?.value);if(!n||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(n)||n.length>254){t?.setAttribute("aria-invalid","true"),Zn("Please enter a valid email address.","error");return}t?.removeAttribute("aria-invalid"),e&&(e.disabled=!0,e.textContent="Sending…");const r=Eh(n);r&&Zn(r,"error");try{const s=await hp(n),o=s?.code===bh;t&&!o&&(t.value=""),t?.setAttribute("aria-invalid",String(o)),Zn(Sh(s,n),o?"error":"success"),e&&(e.disabled=!1,e.textContent=o?"Send Sign-in Link":"Sent!",o||setTimeout(()=>{e.textContent==="Sent!"&&(e.textContent="Send Sign-in Link")},2500))}catch(s){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:n,err:s}),Zn("Something went wrong. Please try again.","error"),e&&(e.disabled=!1,e.textContent="Send Sign-in Link")}}function pw(){H.email=null,H.sessionToken=null,H.isVerified=!1,ce=Ln({isResolved:!0}),iy({storage:window.localStorage,onIdentityChanged:ec,onPlanChanged:Zs})}const gw=ry({sendLink:hp,getEmail:()=>H.email||"",onState:mw});function mw(t){const e=document.getElementById("send-new-link-btn"),n=document.getElementById("send-new-link-msg");if(!e||!n)return;if(t.status==="pending"){e.disabled=!0,e.textContent="Sending…",n.className="acct-access-msg",n.textContent="Sending a fresh sign-in link…";return}if(t.status==="sent"){e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg",n.textContent=Sh(t.data,H.email||"")||"Link sent — check your email.";return}e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg error";const i=t.error?.message?`Couldn't send a link right now. ${t.error.message}`:"Couldn't send a link right now. Please try again.";n.textContent=i}async function vw(){await gw()}function _w(){const t=ty(window.localStorage),e=t.length?`Cleared disposable UI caches: ${t.join(", ")}.`:"Nothing disposable to clear.";Ee(`${e} Your run count, identity and stored keys are kept.`,"info")}function yw(){const t=document.getElementById("delete-unavailable-modal");t&&We(t,{trigger:document.activeElement})}function ww(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("delete-unavailable-modal");e&&qe(e)}function ec(){const t=H.isVerified&&!!H.email,e=document.getElementById("auth-signedout"),n=document.getElementById("auth-signedin"),i=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),n&&n.classList.toggle("hidden",!t),i&&i.classList.toggle("hidden",t);const r=document.getElementById("auth-user-email");r&&(r.textContent=H.email||"");const s=document.getElementById("access-signed-email");s&&(s.textContent=H.email||""),Fw(),Zs()}async function vp(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),n=e.visitorId,i=await fetch(Zy,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:n})});if(!i.ok)throw new Error(`Identity check HTTP ${i.status}`);const r=await i.json();if(pt.userId=r.user_id,pt.token=r.identity_token||null,pt.status=r.status,pt.resolved=!0,sessionStorage.setItem(Yy,r.user_id),pt.token&&sessionStorage.setItem(Jy,pt.token),r.usage_count!==void 0){const s=mn(),a=(r.usage_month||s)===s?r.usage_count:0;localStorage.setItem(Rn,JSON.stringify({count:a,month:s})),un()}console.log(`Identity resolved: ${r.status} (${r.user_id.slice(0,8)}...) usage: ${r.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Yo=null;function bw(t=5e3){return pt.resolved?Promise.resolve():(Yo||(Yo=vp().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Yo,new Promise(e=>setTimeout(e,t))]))}function _p(){const t=mn();try{const e=localStorage.getItem(Rn);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Rn,month:t,err:e}),localStorage.removeItem(Rn),{count:0,month:t}}}function mn(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function pr(){const t=_p();return t.month!==mn()?{count:0,month:mn()}:t}function Ew(){const e={count:pr().count+1,month:mn()};return localStorage.setItem(Rn,JSON.stringify(e)),e}function vi(){return!!ce.isLoading}function Tt(){return!!ce.isResolved}function Sw(t){if(!t)return null;const e=String(t).toLowerCase().replace(/[^a-z0-9]+/g,"_");return e==="pro"||e==="professional_plan"?"professional":e==="power_developer"||e==="power_plan"?"power":Object.prototype.hasOwnProperty.call(Es,e)?e:null}function xw(t){return t&&Object.entries(jh).find(([,e])=>e===t)?.[0]||null}function $r(...t){return t.find(e=>e!=null&&e!=="")}function Iw(...t){return t.find(e=>e&&typeof e=="object")||{}}function kw(t){const e=t.data&&typeof t.data=="object"?t.data:t,n=Iw(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),i=e.metadata||n.metadata||e.customer?.metadata||{},r=$r(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,n.priceId,n.price_id,n.plan?.id,n.price?.id,n.items?.data?.[0]?.price?.id,n.items?.[0]?.price?.id,n.lines?.data?.[0]?.price?.id),s=$r(e.status,e.subscriptionStatus,e.subscription_status,n.status,"none"),o=Sw($r(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,n.tier,n.plan,i.tier,i.plan)),a=Xy.has(String(s).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||xw(r)||(a||l?"professional":"free");return Ln({tier:u,status:s,periodEnd:$r(e.periodEnd,e.currentPeriodEnd,e.current_period_end,n.current_period_end,n.periodEnd,null),isResolved:!0})}function Js(){return Es[ce.tier]??Es.free}async function Cw(){if(H.isVerified&&(!Tt()||vi())&&(await wp({force:!0}),Zs()),H.isVerified&&!Tt())return Ee("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=pr(),e=Js();if(t>=e)return yp(t,e,{openModal:!0}),!1;const n=Math.floor(e*.8);if(t>=n){const i=e-t;Ee(`${i} run${i===1?"":"s"} remaining this month.`,"warning")}return!0}function pd(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function yp(t,e,n={}){nn(!0);const i=document.getElementById("walkthrough-modal");i&&qe(i,{restoreFocus:!1});const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const s=document.getElementById("preview-frame-container");s&&(s.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){Ee(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),gi();return}const c=document.getElementById("paywall-exhausted-text");if(c){const f=ce.tier;f==="free"?c.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:c.textContent=`You've used all ${e} generations this month on your ${f} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",H.isVerified),u.classList.remove("hidden"),n.openModal&&gi()}function Za(t){return ce.tier==="free"&&Hr.includes(t)?xs:t}function Aw(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const n=ce.tier,r=!(H.isVerified&&!Tt())&&n==="free";Array.from(e.options).forEach(o=>{const a=Gt(o.value),l=Hr.includes(o.value);o.textContent=l&&r?`${a} (PRO)`:a,o.disabled=!1}),r&&Hr.includes(e.value)&&(e.value=xs),e.disabled=!1,ed.has(e)||(e.addEventListener("change",()=>{Tt()&&ce.tier==="free"&&Hr.includes(e.value)&&(e.value=xs,gi()),Ja(e.value),$l()}),ed.add(e));let s=document.getElementById("model-selector-free-notice");r?(s||(s=document.createElement("p"),s.id="model-selector-free-notice",s.className="text-xs text-gray-400 mt-1",t.appendChild(s)),s.innerHTML='Free plan — Gemini only. '):s&&s.remove(),Ja(e.value)}function tc(){const t=H.isVerified&&!!H.email,e=t&&vi(),n=!t||Tt(),i=pr(),r=n?i.count:0,s=n?Js():0,o=Math.max(0,s-r),a=`${r} / ${s} runs this month`,l=bl,u=n?ce.tier||"free":null,c=document.getElementById("topbar-credits-count");c&&(e?c.textContent="…":n?c.textContent=String(o):c.textContent="—");const d=document.getElementById("credits-balance");d&&(e?d.textContent="Checking plan…":n?d.textContent=a:d.textContent="Plan check failed");const f=document.getElementById("usage-dialog-tier");f&&(e?f.textContent="Checking…":n?f.textContent=l[u]||"Free":f.textContent="Unavailable");const p=document.getElementById("usage-dialog-status");p&&(e?p.textContent="Verifying your subscription…":n?p.textContent="Runs reset at the start of each month.":p.textContent="Could not verify your subscription. Try again or sign out.");const h=document.getElementById("usage-counter");if(h)if(e&&t)h.textContent="Checking plan…",h.className="text-xs text-gray-500";else if(!n&&t)h.textContent="Plan check failed",h.className="text-xs text-red-600 font-medium";else{h.textContent=a;const g=s>0?r/s:0;h.className=g>=1?"text-xs text-red-600 font-medium":g>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500"}if(!t){const g=document.getElementById("guest-usage-text");if(g){const m=_p(),v=m.month===mn()?m.count??0:0;g.textContent=`${v} / ${Es.free} generations used`}}Pw()}function Pw(){if(!(H.isVerified&&!!H.email))return;const e=vi(),n=Tt(),i=pr(),r=n?i.count:0,s=n?Js():0,o=Math.max(0,s-r),a=n?ce.tier||"free":null,l={free:"Free",professional:"Pro",power:"Power"}[a]||"Free",u=H.email||"",c=u.split("@")[0]||u,d=document.getElementById("acct-avatar");d&&(d.textContent=(u[0]||"?").toUpperCase());const f=document.getElementById("acct-name");f&&(f.textContent=c||"—");const p=document.getElementById("acct-plan-tier"),h=document.getElementById("acct-plan-price"),g=document.getElementById("acct-plan-note"),m=document.getElementById("acct-renewal");if(p&&(p.textContent=e?"Checking…":n?l:"Plan unavailable"),h)if(e)h.textContent="—";else if(!n)h.textContent="—";else if(a==="free")h.textContent="$0 / month";else{const x=ji(Di[a]??0,Ml());h.textContent=`${x} / month`}if(g&&(e?g.textContent="Verifying your subscription…":n?a==="free"?g.textContent="No subscription. Upgrade for more generations.":g.textContent="billed monthly through Stripe":g.textContent="Could not verify your subscription. Check billing or sign out."),m){const x=Date.parse(ce.periodEnd||""),F=n&&a!=="free"&&!!ce.periodEnd&&!Number.isNaN(x);if(e)m.textContent="";else if(!n)m.textContent="";else if(a==="free")m.textContent="";else if(F){const $=new Date(x).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"});m.textContent=`Renews ${$} · reset at the start of each month.`}else m.textContent="Renewal date is not available for this period."}const v=document.getElementById("acct-left-count"),E=document.getElementById("acct-left-limit"),S=document.getElementById("acct-reset-note");v&&(v.textContent=e?"…":n?String(o):"—"),E&&(E.textContent=e?"…":n?String(s):"—"),S&&(e?S.textContent="Checking plan…":n?S.textContent="Runs reset at the start of each month.":S.textContent="Plan check failed. Refresh or manage billing.");const _=document.getElementById("acct-used-count"),b=document.getElementById("acct-meter-fill"),k=document.getElementById("acct-meter-meta"),T=document.getElementById("acct-meter-track");if(_&&(_.textContent=e?"…":n?String(r):"—"),b){const x=n&&s>0?Math.min(100,Math.round(r/s*100)):0;b.style.width=`${x}%`}if(k)if(e)k.textContent="Checking…";else if(!n)k.textContent="Plan check failed";else if(s===0)k.textContent=`${r} of ${s}`;else{const x=Math.round(r/s*100);k.textContent=`${r} of ${s} · ${x}%`}T&&(e?T.setAttribute("aria-label","Checking usage…"):n?T.setAttribute("aria-label",`${r} of ${s} generations used`):T.setAttribute("aria-label","Usage unavailable")),vt()}function un(){if(tc(),H.isVerified&&(vi()||!Tt())){pd();return}const{count:t}=pr(),e=Js();t>=e&&!y.isRunning&&!Ev()?yp(t,e):pd()}function Fw(){tc()}async function wp(t={}){const e=t.force===!0;if(!H.isVerified||!H.sessionToken){ce=Ln({isResolved:!0});return}ce={...ce,isLoading:!0,error:null};const n=H.sessionToken,i=localStorage.getItem(Ss);if(!e&&i)try{const{data:r,email:s,ts:o,version:a}=JSON.parse(i);if(a===td&&s===H.email&&Date.now()-o<300*1e3){ce={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",i)}try{const s=await(await fetch(`${_t}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken,user_id:pt.userId})})).json();if(!H.isVerified||H.sessionToken!==n)return;if(s.error){if(["unauthorized","invalid session","expired session"].some(a=>String(s.error).toLowerCase().includes(a))){pp(),ec();return}ce=Ln({isResolved:!1,error:s.error});return}ce=kw(s),localStorage.setItem(Ss,JSON.stringify({version:td,data:ce,email:H.email,ts:Date.now()}))}catch(r){if(!H.isVerified||H.sessionToken!==n)return;console.error("fetchSubscription failed:",r),ce={...ce,isLoading:!1,isResolved:!1,error:r.message}}}function bp(){localStorage.removeItem(Ss)}async function Rw(t){if(!H.isVerified||!H.sessionToken){Ep(),Ys();return}if(!jh[t]){Ee("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const i=await(await fetch(`${_t}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:H.sessionToken,currency:Ml()})})).json();if(i.error||!i.url)throw new Error(i.error||"Failed to create checkout session");const{url:r}=i;window.location.href=r}catch(n){console.error("startCheckout failed:",n),e&&(e.disabled=!1,e.textContent="Subscribe"),Ee("Could not start checkout. Please try again.","error")}}async function Tw(t){if(!H.isVerified||!H.sessionToken){Ys();return}const e=t||document.getElementById("manage-billing-btn"),n=e?e.textContent:"";e&&(e.disabled=!0,e.textContent="Loading…");try{const r=await(await fetch(`${_t}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to open billing portal");const{url:s}=r;window.location.href=s}catch(i){console.error("openCustomerPortal failed:",i),e&&(e.disabled=!1,e.textContent=n),Ee("Could not open billing portal. Please try again.","error")}}const Fs=new Set;function $w(){Fs.forEach(t=>t.abort()),Fs.clear()}async function Rs(t,e,n,i={},r=[]){const o=new AbortController;Fs.add(o);let a=!1;const l=setTimeout(()=>{a=!0,o.abort()},12e4);try{const u=await fetch(Ky,{method:"POST",headers:{"Content-Type":"application/json",...pt.token?{Authorization:`Bearer ${pt.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:pt.userId,step:t,model:e,prompt:n,images:r,context:i})}),c=await u.text();let d={};try{d=c?JSON.parse(c):{}}catch{d={}}if(u.status===429){d.serverCount!==void 0&&(localStorage.setItem(Rn,JSON.stringify({count:d.serverCount,month:mn()})),un());const h=new Error(d.message||"Monthly usage limit reached. Upgrade to continue.");throw h.isUsageLimit=!0,h.pipelineStep=t,h}const f=jv(d,t);if(f)throw f;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(d),"content type:",typeof d.content),!u.ok)throw new Error(`${d.message||d.error||"BuildShip pipeline error"} (HTTP ${u.status})`);if(t==="generator")if(d.usage_status==="success"&&Number.isFinite(d.usage_count)){const h=mn();(d.usage_month||h)===h&&(localStorage.setItem(Rn,JSON.stringify({count:d.usage_count,month:h})),un())}else Ew(),un();let p=d.output||d.content;if(!p){const h=c?` (body: ${c.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${h}`)}return Array.isArray(p)&&(p=p.map(h=>typeof h=="string"?h:h.text||"").join("")),typeof p!="string"&&(p=JSON.stringify(p)),p}catch(u){if(u.name==="AbortError"){if(a)throw new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`);const c=new Error(`BuildShip ${t} request cancelled`);throw c.isPipelineCancel=!0,c}throw u instanceof TypeError?new Error(`BuildShip unreachable: ${u.message}`):u}finally{clearTimeout(l),Fs.delete(o)}}let Xa=!1;function Mw(){const e=new URLSearchParams(window.location.search).get("checkout");return e==="success"?(window.history.replaceState({},"",window.location.pathname+window.location.hash),bp(),Xa=!0):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname+window.location.hash),Ee("Checkout cancelled.","info")),e}function Lw(){if(!Xa)return;Xa=!1;const t=ce.tier!=="free";Ee(t?"Subscription active! Your plan is live.":"Checkout complete — confirming your subscription. Check Manage billing if it does not update.",t?"success":"info")}function Zs(){const t=H.isVerified&&!!H.email,e=ce.tier,n=t&&vi(),i=!t||Tt(),r=document.getElementById("subscription-tier-badge");if(r){const a=bl,l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};r.textContent=n?"Checking…":i?a[e]||"Free":"Plan unavailable",r.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${i?l[e]||l.free:l.unresolved}`}const s=document.getElementById("upgrade-prompt");s&&s.classList.toggle("hidden",!t||n||!i||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||n||i&&e==="free"),Nw(i?e:null),Aw(),$l(),un(),Up()}function Nw(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([r,{btnId:s,defaultText:o}])=>{const a=document.getElementById(s);a&&(r===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const i=document.getElementById("free-tier-current");i&&i.classList.toggle("hidden",t!=="free")}function Ow(){document.querySelectorAll(".pm-card[data-tier]").forEach(t=>{const e=t.dataset.tier,n=Cv[e];if(!n)return;const i=t.querySelector("ul.pm-features");if(i){i.innerHTML="";for(const r of n){const s=document.createElement("li");s.textContent=r,i.appendChild(s)}}})}function Qa(){const t=Ml(),e=document.getElementById("pro-price"),n=document.getElementById("power-price"),i=document.getElementById("plans-pro-price"),r=document.getElementById("plans-power-price"),s=document.getElementById("pro-price-note"),o=document.getElementById("power-price-note"),a=document.getElementById("plans-pro-price-note"),l=document.getElementById("plans-power-price-note");e&&(e.textContent=ji(Di.professional,t)),n&&(n.textContent=ji(Di.power,t)),i&&(i.textContent=ji(Di.professional,t)),r&&(r.textContent=ji(Di.power,t));const u="billed monthly";s&&(s.textContent=u),o&&(o.textContent=u),a&&(a.textContent=u),l&&(l.textContent=u)}function gi(){Qa();const t=document.getElementById("pricing-modal");t&&We(t),c0().then(()=>Qa())}function Ep(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&qe(e)}function Ee(t,e="info"){const n={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},i=document.createElement("div");i.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${n[e]||n.info}`,i.textContent=t,document.body.appendChild(i),setTimeout(()=>{i.style.opacity="0",setTimeout(()=>i.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{xv(),hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),Bw(),window.__heroField=wy(),window.__pipelineLogo=xy(),Hh=zy({onSubmit:cr}),Ha=(async()=>{try{await dw(),Mw(),await wp()}catch(n){console.warn("Startup auth/subscription initialization failed:",n)}})(),await Ha,Lw(),Zs(),Qa(),Ow(),await B0(),$0();const t=document.getElementById("flutterflow-endpoint-select");if(t){const n=yt();t.value=n}ep(),vp();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{en===2&&e.value.trim().length>0&&(Dl(),Hs())}),e.addEventListener("blur",()=>{const n=document.getElementById("walkthrough-modal");en===2&&n&&We(n)}),e.addEventListener("keydown",n=>{if(n.key==="Tab"){const i=document.getElementById("walkthrough-modal");en===2&&i&&setTimeout(()=>{We(i)},100)}})),window.addEventListener("commitStateChange",n=>{const{state:i}=n.detail;i===ee.PREPARING||i===ee.VALIDATING||i===ee.PUSHING?(Ap(),Be.phaseId||Pp(),md(i)):(i===ee.SUCCESS||i===ee.ERROR)&&(md(i),Yi=setTimeout(()=>{Yi=null,rc()},1e3))}),dc()});function Bw(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Dw(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",On),document.addEventListener("keydown",On))}function On(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),n=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),n&&n.classList.remove("hidden");const i=document.getElementById("welcome-video-player");i&&i.removeEventListener("click",On),document.removeEventListener("keydown",On),ep()}let Ki=null;async function jw(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++od,n=()=>e===od,i=await Re("flutterflow"),r=await Re("flutterflow_project_id");if(n()){if(!i){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new mi(i,"","main",yt()).listProjects();if(!n())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),r&&(t.value=r)}catch(s){if(!n())return;console.error("Failed to load projects for deploy:",s),t.innerHTML=''}}}function Uw(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function nc(t,e,n,i=null){Ki={codeInfo:t,checks:e,deps:n,bundlePlan:i},document.getElementById("confirm-file-name").textContent=t.fileName,document.getElementById("confirm-artifact-type").textContent=t.artifactType,document.getElementById("confirm-file-size").textContent=`${(t.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=i?`${i.fileEntries.length} files`:t.content.split(`
-`).length,jw();const r=document.getElementById("confirm-deps-list"),s=document.getElementById("confirm-deps-section");n&&Object.keys(n).length>0?(r.innerHTML=Object.entries(n).map(([u,c])=>{const d=c?`at least ${Qt(c)}`:"version resolved from your project";return`• ${Qt(u)}: ${d}`}).join(""),s.classList.remove("hidden")):s.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`• ${Qt(u)}`).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=t.content,document.getElementById("code-preview-content").classList.add("hidden"),document.getElementById("code-preview-chevron").style.transform="rotate(0deg)";const l=document.getElementById("commit-confirm-modal");l&&We(l)}function Sp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&qe(e),Ki=null}function Hw(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&qe(e);const n=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const s of n){const o=document.getElementById(s);o&&(o.textContent="")}const i=document.getElementById("success-warnings-section");i&&i.classList.add("hidden");const r=document.getElementById("success-warnings-list");r&&(r.innerHTML="")}function xp(t){const e=(m,v)=>{const E=document.getElementById(m);E&&(E.textContent=v||"")},n=t.metadata?.fileName||"",i=t.metadata?.projectId||"",r=t.metadata?.artifactType||"",s=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",i),e("success-file-name",n),e("success-artifact-type",r),e("success-time",s),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&i&&(u.href=`https://app.flutterflow.io/project/${i}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),f=t.unverified||[],p=t.approximate||[],h=t.warnings||[];(h.length>0||f.length>0||p.length>0)&&c&&d&&(d.innerHTML=[...f.map(m=>`Not verified before deploying: ${z(String(m))}`),...p.map(m=>`Verified approximately: ${z(String(m))}`),...h.map(([m,v])=>`${z(m)}: ${z(String(v))}`)].join(""),c.classList.remove("hidden"));const g=document.getElementById("commit-success-modal");g&&We(g)}function Ip(t){rc(),aw(t);const e=t.remoteRefusal===!0;ic(t,{heading:"Deploy failed",title:e?"FlutterFlow refused this deploy — nothing was confirmed written.":"The deploy failed before FlutterFlow confirmed anything.",guidance:e?"Review the error and any per-file outcomes above, fix them in your code or in FlutterFlow, then deploy again. A refusal is definitive: no part of this deploy was applied, so retrying is safe once the problem is fixed.":"Review the error above, fix it, then deploy again. The deploy stopped before a write was confirmed, so nothing was applied."})}function ic(t,{heading:e,title:n,guidance:i}){const r=t.targetIdentity||{},s=document.getElementById("commit-terminal-modal");if(!s)return!1;const o=(h,g)=>{const m=document.getElementById(h);m&&(m.textContent=g||"")};o("terminal-heading",e),o("terminal-title",n),o("terminal-message",t.error||t.message||"");const a=document.getElementById("terminal-identity-list");if(a){const h=[["Project",r.projectId||t.metadata?.projectId],["Endpoint",r.endpoint],["File",r.fileName||t.metadata?.fileName],["Artifact",r.artifactType||t.metadata?.artifactType]];a.innerHTML=h.map(([g,m])=>`${z(g)}:${z(String(m??"—"))}
`).join("")}const l=document.getElementById("terminal-file-outcomes");let u=t.errorMap;u&&!(u instanceof Map)&&(u=new Map(Object.entries(u)));const c=l?.querySelector("ul");l&&c&&u&&u.size>0?(c.innerHTML=[...u.entries()].map(([h,g])=>`${z(h)}: ${z(Al(g))}`).join(""),l.classList.remove("hidden")):l&&(c&&(c.innerHTML=""),l.classList.add("hidden"));const d=document.getElementById("terminal-guidance");d&&(d.innerHTML=i);const f=document.getElementById("terminal-open-ff-link"),p=r.projectId||t.metadata?.projectId;return f&&(f.href=p?`https://app.flutterflow.io/project/${p}`:"https://app.flutterflow.io/"),We(s),!0}function kp(t){ic(t,{heading:"Deploy partially applied",title:"Some custom classes reached FlutterFlow, but the deploy did not fully complete.",guidance:"The custom classes the runner confirmed are already in your project and are not lost. Review the per-file errors above, fix them in FlutterFlow or regenerate, then deploy again. Open the project to see exactly what landed."})}function Cp(t){ic(t,{heading:"Deploy outcome not yet known",title:"This browser stopped waiting before the FlutterFlow server reported a result.",guidance:"The deploy may still be finishing on the server — it was not cancelled. Open your FlutterFlow project and confirm whether the class landed before retrying, so you do not push a duplicate or build on top of an unknown state."})}function Ww(t){t&&t.target!==t.currentTarget||qe(document.getElementById("commit-terminal-modal"))}function qw(){const t=document.getElementById("code-preview-content"),e=document.getElementById("code-preview-chevron");t.classList.contains("hidden")?(t.classList.remove("hidden"),e.style.transform="rotate(90deg)"):(t.classList.add("hidden"),e.style.transform="rotate(0deg)")}const gd={prepare:{message:"Preparing your code...",start:4,end:14},validate:{message:"Checking FlutterFlow credentials...",start:14,end:22},project:{message:"Reading your FlutterFlow project...",start:22,end:40},provision:{message:"Creating custom classes in FlutterFlow...",start:40,end:82},package:{message:"Packaging files for upload...",start:82,end:88},push:{message:"Pushing to FlutterFlow...",start:88,end:97},done:{message:"Complete!",start:100,end:100}},zw=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}];let Yi=null;function Ap(){Yi&&clearTimeout(Yi),Yi=null}const Be={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){Ap(),this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&(Fu(e,!0,"Deploying to FlutterFlow"),We(e)),this.set("prepare")},set(t,e=null){if(!(!gd[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const n=this.sequence.indexOf("package");this.sequence.splice(n===-1?this.sequence.length:n,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=gd[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,n=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=zw.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const i=this.sequence.indexOf(this.phaseId),s=[`Step ${i===-1?1:i+1} of ${this.sequence.length}`];e>=5&&s.push(Vw(e)),Fp(this.phaseId==="done"?100:n,t.message,s.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&(Fu(t,!1),qe(t,{force:!0,restoreFocus:!1}))}};function Vw(t){const e=Math.floor(t);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function Pp(t){Be.start(t)}function rc(){Be.stop()}function Fp(t,e,n,i=null){const r=document.getElementById("commit-progress-bar"),s=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");r&&(r.style.width=`${Math.round(t*10)/10}%`),s&&(s.textContent=e),o&&(o.textContent=n),a&&(a.textContent=i||"",a.classList.toggle("hidden",!i))}function md(t){const e={[ee.PREPARING]:"prepare",[ee.VALIDATING]:"validate",[ee.PUSHING]:"project",[ee.SUCCESS]:"done"};if(t===ee.ERROR){Be.timer&&clearInterval(Be.timer),Be.timer=null,Fp(100,"Failed","Error occurred");return}const n=e[t];n&&Be.set(n)}function Gw(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===J.CODE_FILE):t.codeInfo?.codeType===J.CODE_FILE}let Rp=!1;function Tp(t){Rp=t;const e=document.querySelector("#commit-confirm-modal button[data-deploy-confirm]");e&&(e.disabled=t),[...document.querySelectorAll("[data-deploy-start]"),...document.querySelectorAll("#btn-deploy-to-ff")].forEach(i=>{i.disabled=t})}function vd(t){rc(),Tp(!1);const e=Lh(t);e===Le.COMMITTED?xp(t):e===Le.PARTIAL?kp(t):e===Le.UNCONFIRMED?Cp(t):Ip(t)}async function Kw(){if(!Ki){console.error("No pending commit data");return}if(Rp){console.warn("Deploy already in flight; ignoring duplicate confirm.");return}const t=Ki;if(Ki=null,Gi=Uw(),Sp(),Tp(!0),Pp({withProvisioning:Gw(t)}),t.bundlePlan){const o=await J0(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Gi=null,vd(o);return}const{codeInfo:e}=t,{artifactType:n,artifactName:i,fileName:r}=np(),s=await Y0(e.content,{artifactType:n,artifactName:i,fileName:r,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Gi=null,vd(s)}window.runThinkingPipeline=cr;window.toggleStep=Q0;window.toggleSection=X0;window.selectWorkflowStep=rt;window.copyCode=ew;window.retryWithDifferentModel=rw;window.openApiKeysModal=Bl;window.closeApiKeysModal=Xh;window.openComposerSettings=S0;window.closeComposerSettings=x0;window.walkthroughConnectAccount=E0;window.closeWalkthroughModal=k0;window.openWalkthroughModal=I0;window.advanceWalkthrough=Dl;window.commitToFlutterFlow=K0;function Yw(){const t=document.getElementById("pipeline-input");t&&t.focus()}function Jw(){const t=document.getElementById("advanced-settings");t&&(t.open=!0);const e=document.getElementById("code-generator-model");e&&(e.scrollIntoView({behavior:"smooth",block:"center"}),e.focus(),e.click())}window.focusPromptInput=Yw;window.openModelSelector=Jw;window.handlePromptImageSelect=a0;window.removePromptImage=l0;window.saveApiKeys=P0;window.validateFlutterFlowConnection=Ul;window.clearAllApiKeys=F0;window.toggleKeyVisibility=L0;window.handleWelcomeVideoEnd=Dw;window.dismissWelcomeVideo=On;window.initiateCommitToFlutterFlow=sw;window.updateFlutterFlowCredentialStatus=lw;window.openCommitConfirmModal=nc;window.closeCommitConfirmModal=Sp;window.closeCommitSuccessModal=Hw;window.closeCommitTerminalModal=Ww;window.showCommitPartialModal=kp;window.showCommitUnconfirmedModal=Cp;window.showCommitSuccessModal=xp;window.showCommitFailureModal=Ip;window.toggleCodePreview=qw;window.confirmCommitToFlutterFlow=Kw;window.runRefinement=up;window.regenerateFromPastedErrors=dp;window.clearErrorInput=iw;window.setFlutterFlowEndpoint=b0;window.getFlutterFlowEndpoint=yt;window.commitProgress=Be;window.openSignInModal=Ys;window.closeSignInModal=mp;window.handleMagicLinkRequest=hw;window.handleSignOut=pw;window.handleSendNewLink=vw;window.handleClearCache=_w;window.handleDeleteAccount=yw;window.closeDeleteUnavailableModal=ww;window.startCheckout=Rw;window.openCustomerPortal=Tw;window.openPricingModal=gi;window.closePricingModal=Ep;let Gr=null,$p=null,Bn={1:"pending",2:"pending",3:"pending"},sc=1,oc=null;const Xs={1:"Prompt Architect",2:"Code Generator",3:"Code Review"},Zw={1:"Understanding your prompt",2:"Generating Dart code",3:"Running the code audit"},Xw={1:"Prompt understood",2:"Dart code generated",3:"Code audit complete"};function Qs(){return y.runId+=1,y.runId}function re(t){return t===void 0||t===y.runId}function Qw(){y.runId+=1}function ac(t){return document.getElementById(`pdot-${t}`)}function el(t){const e=document.getElementById("btn-run-pipeline")||document.getElementById("hero-send");e&&(e.disabled=t,e.classList.toggle("is-busy",t),t?e.setAttribute("aria-busy","true"):e.removeAttribute("aria-busy"))}function eo(t){const e=document.getElementById("pipeline-progress");e&&(e.dataset.runState=t)}function Tn(t,e){Bn[t]=e;const n=ac(t);if(!n)return;n.dataset.state=e,n.disabled=e==="pending"||e==="skipped";const i=Xs[t],r={pending:"not started",active:"in progress",done:"complete",failed:"failed",skipped:"not run"};n.setAttribute("aria-label",`Step ${t} of 3, ${i}: ${r[e]||e}`),e==="active"?n.setAttribute("aria-current","step"):n.removeAttribute("aria-current")}function eb(){return[1,2,3].filter(t=>Bn[t]==="done").length}function to(){const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width=`${eb()/3*100}%`);const e=document.getElementById("progress-stage-count");e&&(e.textContent=`Step ${sc} of 3`)}function no(t,{done:e=!1}={}){const n=document.getElementById("progress-title-text"),i=document.getElementById("progress-substep-text"),r=Bn[t],s=e||r==="done";if(n&&(n.textContent=s?Xw[t]:Zw[t]),i){const o=s?" — complete":r==="failed"?" — stopped":"";i.textContent=`Step ${t} of 3 — ${Xs[t]}${o}`}}function tb(t){Bn[t]==="pending"||Bn[t]==="skipped"||(oc=t,[1,2,3].forEach(e=>{const n=ac(e);n&&n.setAttribute("aria-pressed",String(e===t))}),no(t))}function lc(){oc=null,[1,2,3].forEach(t=>{const e=ac(t);e&&e.removeAttribute("aria-pressed")})}function Mp(t){const e=document.getElementById("pipeline-note");e&&(e.textContent=t||"",e.hidden=!t)}function nb(t,e,n){re(n)&&Mp(`${Gt(t)} did not answer. Continuing on ${Gt(e)}.`)}function cc(){const t=document.getElementById("pipeline-failure");if(!t)return;t.hidden=!0;const e=document.getElementById("pipeline-failure-actions");e&&e.replaceChildren()}const ib=1120;function rb(){const t=getComputedStyle(document.documentElement).getPropertyValue("--t-morph").trim(),e=Number.parseFloat(t);return Number.isFinite(e)&&e>0?e:ib}let ni=null,Kr=null;function sb(){return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0}function dn(){if(Kr){try{Kr.cancel()}catch{}Kr=null}ni&&(ni.remove(),ni=null),window.removeEventListener("resize",dn)}function Lp(t,e){if(dn(),sb()||!t||!e||!document.body||typeof Element.prototype.animate!="function")return;const n=t.getBoundingClientRect(),i=e.getBoundingClientRect();if(!n.width||!n.height||!i.width||!i.height)return;const r=document.createElement("div");r.className="composer-morph",r.setAttribute("aria-hidden","true"),r.style.cssText=`left:${i.left}px;top:${i.top}px;width:${i.width}px;height:${i.height}px;opacity:0;`,document.body.appendChild(r);const s=n.left+n.width/2-(i.left+i.width/2),o=n.top+n.height/2-(i.top+i.height/2),a=n.width/i.width,l=n.height/i.height,u=`translate(${s}px,${o}px) scale(${a},${l})`,c=r.animate([{transform:u,opacity:0,offset:0,easing:"cubic-bezier(.2,0,0,1)"},{transform:u,opacity:1,offset:.14,easing:"cubic-bezier(.4,0,.2,1)"},{transform:`translate(${s}px,${o}px) scale(${a*.93},${l*.93})`,opacity:1,offset:.28,easing:"cubic-bezier(.32,1.38,.5,1)"},{transform:"translate(0px,0px) scale(1,1)",opacity:1,offset:1}],{duration:rb(),fill:"both"});ni=r,Kr=c,window.addEventListener("resize",dn),c.onfinish=()=>{if(ni!==r)return;const d=r.animate([{opacity:1},{opacity:0}],{duration:260,fill:"forwards"});d.onfinish=()=>{ni===r&&dn()}}}function ob(){const e=document.getElementById("composer")?.getBoundingClientRect();e&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{Lp({getBoundingClientRect:()=>e},document.getElementById("main-stage-container"))})})}function ab(){Lp(document.getElementById("pipeline-progress"),document.getElementById("main-stage-container"))}window.addEventListener("hashchange",dn);window.addEventListener("popstate",dn);function io(t={}){const{prompt:e=null,runId:n}=t;if(!re(n))return;so(),nn(!0);const i=document.getElementById("pipeline-progress"),r=document.getElementById("results-view"),s=document.getElementById("ready-state");if(s&&s.classList.add("hidden"),r&&r.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),i&&i.classList.add("visible"),eo("running"),e!==null){const a=document.getElementById("pipeline-submitted-prompt");a&&(a.textContent=e)}$p=Date.now();const o=document.getElementById("progress-elapsed");o&&(o.textContent="0s"),Bn={1:"pending",2:"pending",3:"pending"},lc(),cc(),Mp(""),[1,2,3].forEach(a=>Tn(a,"pending")),Ft(1,n),lb()}function Ft(t,e){re(e)&&(sc=t,lc(),[1,2,3].forEach(n=>{n===t?Tn(n,"active"):nt&&Tn(n,"pending")}),no(t),to())}function tn(t,e){re(e)&&(Tn(t,"done"),oc===null&&no(t,{done:!0}),to())}function Np(t,{stage:e=1,runId:n,retry:i=Op}={}){if(!re(n))return;ro(),so(),dn(),eo("failed"),nn(!0);const r=document.getElementById("pipeline-progress");r&&r.classList.add("visible");const s=document.getElementById("results-view");s&&s.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),Tn(e,"failed"),[1,2,3].forEach(h=>{h>e&&Tn(h,"pending")}),sc=e,lc(),no(e),to();const o=Bh(t),a=document.getElementById("pipeline-failure"),l=document.getElementById("pipeline-failure-title"),u=document.getElementById("pipeline-failure-message"),c=document.getElementById("pipeline-failure-hint"),d=document.getElementById("pipeline-failure-actions");if(!a||!l||!u||!d)return;if(a.dataset.kind=o.kind,l.textContent=`${Xs[e]}: ${o.title}`,u.textContent=o.message,c){const h=o.detail&&o.detail!==o.message?o.detail:"";c.textContent=h,c.hidden=!h}d.replaceChildren();const f=[o.canUpgrade&&{id:"upgrade",label:"View plans",variant:"primary",onClick:()=>gi()},o.canRetry&&{id:"retry",label:"Retry",variant:o.canUpgrade?"secondary":"primary",onClick:i},o.canEdit&&{id:"edit",label:"Edit prompt",variant:"secondary",onClick:tl}].filter(Boolean);!o.canEdit&&!o.canRetry&&f.push({id:"edit",label:"Back to prompt",variant:"secondary",onClick:tl}),f.forEach(h=>{const g=document.createElement("button");g.type="button",g.textContent=h.label,g.dataset.action=h.id,g.dataset.variant=h.variant,g.addEventListener("click",h.onClick),d.appendChild(g)}),a.hidden=!1;const p=d.querySelector("button");p&&p.focus({preventScroll:!0})}function tl(){Qw(),$w(),y.isRunning=!1,el(!1),rn(),eo("settled"),dn(),ro(),so(),cc();const t=document.getElementById("pipeline-progress");t&&t.classList.remove("visible"),nn(!1);const e=document.getElementById("pipeline-input");e&&(y.submittedPrompt&&(e.value=y.submittedPrompt,e.dispatchEvent(new Event("input",{bubbles:!0}))),e.focus({preventScroll:!0}),e.setSelectionRange(e.value.length,e.value.length))}function Op(){const t=document.getElementById("pipeline-input");t&&y.submittedPrompt&&(t.value=y.submittedPrompt,t.dispatchEvent(new Event("input",{bubbles:!0}))),Oe=y.submittedImages.slice(),cn(),cc(),cr()}function lb(){ro(),Gr=setInterval(()=>{const t=(Date.now()-$p)/1e3,e=document.getElementById("progress-elapsed");e&&(e.textContent=`${Math.floor(t)}s`)},250)}function ro(){Gr&&(clearInterval(Gr),Gr=null)}let Ji=null;function so(){Ji&&(clearTimeout(Ji),Ji=null)}function gr(){ro(),so(),eo("settled"),to();const t=document.getElementById("pipeline-progress-fill");Ji=setTimeout(()=>{Ji=null;const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function $n(t,e=""){const n={pass:'',warning:'',fail:'',info:''};return``}function Bp(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function cb(){return N_({bundle:y.artifactBundle,reviewResult:y.step3Result})}function ub(t){return`
-
- ${$n(t.severity)}
-
-
${z(t.message)}
- ${t.suggestion?`
${z(t.suggestion)}
`:""}
-
${z(t.source)}
-
-
- `}function db(t){return`
-
-
-
${z(t.title)}
- ${t.detail&&t.detail!==t.title?`
${z(t.detail)}
`:""}
-
-
- `}function fb(t){const e=document.getElementById("results-summary-detail"),n=document.getElementById("results-title");if(!e)return;n&&(n.textContent=t.title);const i=t.score,r=i==null?"neutral":i>=80?"pass":i>=60?"warning":"fail",s=i==null?"":i>=80?"Strong":i>=60?"Needs work":"High risk",o=t.findings.length?`
-
- ${t.findings.map(u=>`
- -
- ${$n(u.severity)}
-
- ${z(u.message)}
- ${u.suggestion?`${z(u.suggestion)}`:""}
-
-
- `).join("")}
-
- `:"",a=t.warnings.length?`
-
- ${$n("warning")} Bundle
-
- ${t.warnings.map(u=>`- ${z(u)}
`).join("")}
-
-
- `:"",l=t.manualSteps.length?`
-
- ${$n("info")} Complete in FlutterFlow
- For your information — these don't block the deploy. Finish them by hand in the FlutterFlow editor once the code is pushed.
-
- ${t.manualSteps.map(u=>`
- -
- ${z(u.title)}
- ${u.detail&&u.detail!==u.title?`${z(u.detail)}`:""}
-
- `).join("")}
-
-
- `:"";e.innerHTML=`
-
-
-
${z(t.summary)}
- ${o}
- ${a}
- ${l}
-
-
-
-
-
Is the generated code correct?
-
-
-
-
-
- `}function hb(t){const e=t.artifacts.find(l=>l.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const n={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],i=e.findings.length?e.findings.map(ub).join(""):`${$n(n.icon)} ${z(n.message)}
`,r=e.dependencies?.length?e.dependencies.map(l=>`
- ${z(l.name)}${l.version?` ${z(l.version)}`:""}${l.reason?`${z(l.reason)}
`:""}
- `).join(""):'No external packages',s=e.imports?.length?e.imports.map(l=>`${z(l)}`).join(""):'No imports returned',o=e.publicApi?.length?e.publicApi.map(l=>`${z(l)}`).join(""):'No public API signature returned',a=e.relationships.length?e.relationships.map(l=>`
- ${z(l.from||"Bundle")} ${z(l.type)} ${z(l.to||"Bundle")}${l.description?`${z(l.description)}
`:""}
- `).join(""):'No relationships for this file';return`
-
-
- Code Review findings
- ${i}
-
- ${e.manualSteps.length?`
-
- Manual FlutterFlow steps for this file
- ${e.manualSteps.map(db).join("")}
-
- `:""}
-
- File details
-
-
-
- Deployment
-
- - Status
- ${z(e.deployStatus||"pending")}
- - Order
- ${e.index+1} of ${t.artifacts.length}
- - Path hint
- ${z(e.pathHint||"Not returned")}
-
-
-
-
-
-
-
- `}function pb(t){const e=document.getElementById("bundle-strip"),n=document.getElementById("results-summary-tab"),i=document.getElementById("artifact-tabs"),r=document.getElementById("results-file-count");if(n){const s=y.resultsViewMode==="summary";n.classList.toggle("active",s),n.setAttribute("role","tab"),n.setAttribute("aria-selected",String(s)),n.setAttribute("aria-controls","results-summary-detail"),n.tabIndex=s?0:-1}if(i&&(i.setAttribute("role","tablist"),i.setAttribute("aria-label","Artifacts in this bundle")),!t.artifacts.length){r&&(r.textContent="0 files"),e&&e.classList.remove("visible"),i&&(i.innerHTML=""),_d();return}if(r){const s=t.artifacts.length;r.textContent=`${s} ${s===1?"file":"files"}`}i&&(i.innerHTML=t.artifacts.map(s=>{const o=y.resultsViewMode==="file"&&s.id===y.selectedArtifactId;return`
-
- `}).join(""),i.onclick=s=>{const o=s.target.closest(".artifact-tab");o?.dataset?.artifactId&&uc(o.dataset.artifactId)},_d()),e&&e.classList.add("visible")}function _d(){const t=document.getElementById("bundle-strip");!t||t.dataset.tabKeyboard==="bound"||(t.dataset.tabKeyboard="bound",t.addEventListener("keydown",e=>{if(e.defaultPrevented)return;const n=[document.getElementById("results-summary-tab"),...Array.from(document.querySelectorAll("#artifact-tabs .artifact-tab"))].filter(Boolean);if(!n.length||!n.includes(document.activeElement))return;let i=-1;const r=n.indexOf(document.activeElement);if(e.key==="ArrowRight")i=(r+1)%n.length;else if(e.key==="ArrowLeft")i=(r-1+n.length)%n.length;else if(e.key==="Home")i=0;else if(e.key==="End")i=n.length-1;else return;e.preventDefault();const s=n[i];if(!s)return;if(s.id==="results-summary-tab")Dp();else{const a=s.dataset.artifactId;a&&uc(a)}const o=s.id==="results-summary-tab"?document.getElementById("results-summary-tab"):document.querySelector(`#artifact-tabs .artifact-tab[data-artifact-id="${s.dataset.artifactId}"]`);o&&o.focus()}))}function oo(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),n=document.getElementById("results-audit-output"),i=document.getElementById("results-summary-detail"),r=document.getElementById("artifact-results-split"),s=cb(),o=ql();if(i&&(i.setAttribute("role","tabpanel"),i.setAttribute("aria-labelledby","results-summary-tab")),r){r.setAttribute("role","tabpanel");const a=s?.artifacts?.find(l=>l.id===y.selectedArtifactId);r.setAttribute("aria-labelledby",a?`artifact-tab-${a.id}`:"results-summary-tab")}if(fb(s),pb(s),e&&(e.textContent=""),e){const a=Dh(o);e.innerHTML=a}n&&(n.innerHTML=hb(s)),i&&i.classList.toggle("hidden",y.resultsViewMode!=="summary"),r&&r.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function mr(t,e){nn(!0),y.selectedArtifactId||(y.selectedArtifactId=ci(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const n=document.getElementById("step3-output");n&&(n.textContent=""),oo(),rn(),gb()}function gb(){const t=document.getElementById("btn-feedback-up"),e=document.getElementById("btn-feedback-down"),n=document.getElementById("results-feedback-status");t&&(t.className="feedback-btn",t.setAttribute("aria-pressed","false"),t.disabled=!1,t.removeAttribute("aria-disabled")),e&&(e.className="feedback-btn",e.setAttribute("aria-pressed","false"),e.disabled=!1,e.removeAttribute("aria-disabled")),n&&(n.textContent=""),nl=!1}function uc(t){y.selectedArtifactId=t,y.resultsViewMode="file",oo()}function Dp(){y.resultsViewMode="summary",oo()}function mb(){const t=document.getElementById("btn-copy-results"),e=document.getElementById("results-copy-status"),n=ql(),i=(r,s)=>{e&&(e.textContent=r,e.classList.toggle("ok",!!s),e.classList.toggle("fail",!s))};if(!navigator.clipboard?.writeText){i("Copying isn't supported in this browser.",!1);return}navigator.clipboard.writeText(n).then(()=>{if(i("Copied to clipboard",!0),t){t.classList.add("copied");const r=t.querySelector("span");if(r){const s=r.textContent;r.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),r.textContent=s},2e3)}}}).catch(()=>{i("Clipboard permission was denied. Select the code to copy it manually.",!1)})}let nl=!1;async function vb(t){const e=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down"),i=document.getElementById("results-feedback-status");if(!e||!n||nl)return;const r=l=>{i&&(i.textContent="",i.offsetWidth,i.textContent=l)},s=l=>{nl=l,[e,n].forEach(u=>{u.disabled=l,u.setAttribute("aria-disabled",String(l))})},o=t==="up"?"thumbsUp":"thumbsDown";s(!0),r("Submitting review feedback…");const a={type:o,code:y.step2Result,input:y.step1Result};try{const l=await Ql(a.type,a.code,a.input);if(!l||l.success!==!0){s(!1),r("Review feedback could not be sent. Tap again to retry.");return}e.classList.toggle("active-up",t==="up"),n.classList.toggle("active-down",t==="down"),e.setAttribute("aria-pressed",String(t==="up")),n.setAttribute("aria-pressed",String(t==="down")),s(!1),r("Review feedback saved.")}catch{s(!1),r("Review feedback could not be sent. Tap again to retry.")}}function _b(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function jp(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}function nn(t){const e=document.getElementById("generation-stage");e&&(t?(e.hidden=!1,e.inert=!1,requestAnimationFrame(()=>e.classList.add("is-active"))):(e.classList.remove("is-active"),e.inert=!0,setTimeout(()=>{e.classList.contains("is-active")||(e.hidden=!0)},260)))}function Up(){const t=H.isVerified&&!!H.email,e=ce.tier||"free",n=t&&vi(),i=!t||Tt(),s=n?"Checking…":i?bl[e]||"Free":"—",o=document.getElementById("topbar-plan");o&&(o.textContent=s);const a=document.getElementById("topbar-avatar");a&&(a.textContent=(H.email||"?")[0].toUpperCase()),tc();const l=document.getElementById("plans-free-current");l&&l.classList.toggle("hidden",e!=="free"||!i);const u=document.getElementById("plans-checkout-btn-professional");if(u){const d=e==="professional"&&i;u.disabled=d,u.textContent=d?"Current plan":"Subscribe"}const c=document.getElementById("plans-checkout-btn-power");if(c){const d=e==="power"&&i;c.disabled=d,c.textContent=d?"Current plan":"Subscribe"}}function yb(){Up();const t=document.getElementById("credits-modal");t&&We(t)}function wb(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("credits-modal");e&&qe(e)}function Hp(t,e=!0,n=!0){if(t=["home","account","plans"].includes(t)?t:"home",document.querySelectorAll(".view[data-view]").forEach(r=>{r.dataset.view===t?(r.hidden=!1,r.removeAttribute("inert"),requestAnimationFrame(()=>{r.classList.add("is-active"),n&&r.focus({preventScroll:!0})})):(r.classList.remove("is-active"),r.setAttribute("inert","true"),setTimeout(()=>{r.classList.contains("is-active")||(r.hidden=!0)},260))}),t!=="home")nn(!1);else{const r=document.getElementById("main-stage-container");r&&r.classList.contains("visible")&&nn(!0)}if(document.querySelectorAll(".nav-link[data-view]").forEach(r=>{const s=r.dataset.view===t;r.setAttribute("aria-current",s?"page":null),s||r.removeAttribute("aria-current")}),e){const r=t==="home"?"":`#${t}`;window.location.hash!==r&&window.history.pushState({view:t},"",r||"#")}}let yd=!1;function dc(){const t=window.location.hash.replace(/^#/,"");Hp(t||"home",!1,yd),yd=!0}window.addEventListener("popstate",t=>{dc()});window.addEventListener("hashchange",()=>{dc()});window.copyResultsCode=mb;window.selectArtifact=uc;window.selectResultsSummary=Dp;window.submitResultsFeedback=vb;window.showErrorInputPanel=_b;window.hideErrorInputPanel=jp;window.setGenerationStageVisible=nn;window.switchView=Hp;window.selectPipelineStage=tb;window.editPipelinePrompt=tl;window.retryPipelineRun=Op;window.openCreditsModal=yb;window.closeCreditsModal=wb;
diff --git a/dist/assets/index-DcLSblVK.css b/dist/assets/index-DcLSblVK.css
deleted file mode 100644
index dcb3d83..0000000
--- a/dist/assets/index-DcLSblVK.css
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:Delight;src:url(/assets/Delight-VF-CnVpVuQk.ttf) format("truetype");font-weight:100 900;font-display:swap}:root{--bg: oklch(96.65% .0074 260.73);--surface: oklch(100% 0 0);--surface-translucent: oklch(100% 0 0 / .65);--surface-glass: oklch(100% 0 0 / .72);--surface-sunken: oklch(98.4% .004 260);--fg: oklch(20.77% .0398 265.75);--muted: oklch(48% .02 260);--muted-2: oklch(68% .018 260);--on-dark: oklch(100% 0 0);--border: oklch(90% .012 260);--border-strong: oklch(80% .02 260);--fill-hover: color-mix(in oklch, var(--fg) 5%, var(--surface));--fill-subtle: color-mix(in oklch, var(--fg) 6%, var(--surface));--fill-selected: color-mix(in oklch, var(--fg) 4%, var(--surface));--track: color-mix(in oklch, var(--fg) 7%, var(--surface));--avatar: oklch(88% .02 260);--accent: oklch(63% .22 32);--accent-soft: oklch(from var(--accent) l c h / .18);--accent-ring: oklch(from var(--accent) l c h / .45);--fx-ink: oklch(70% .13 250);--ok: oklch(52% .11 165);--ok-soft: oklch(52% .11 165 / .12);--warn: oklch(66% .13 70);--warn-soft: oklch(66% .13 70 / .14);--bad: oklch(55% .19 25);--bad-soft: oklch(55% .19 25 / .1);--disabled-bg: oklch(88% .015 260);--disabled-fg: oklch(58% .02 260);--font-display: "Delight", "Outfit", "DM Sans", system-ui, sans-serif;--font-body: "Delight", "Outfit", "DM Sans", system-ui, sans-serif;--font-mono: "DM Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--fw-ui: 560;--fw-bold: 620;--fw-black: 700;--ls-display: -.04em;--ls-heading: -.03em;--ls-mono: .13em;--fs-display: 54px;--fs-h2: 28px;--fs-h3: 22px;--fs-h4: 18px;--fs-lead: 17px;--fs-body: 14.5px;--fs-small: 13.5px;--fs-caption: 12.5px;--fs-mono: 11.5px;--fs-micro: 10.5px;--lh-display: 1.04;--lh-heading: 1.15;--lh-body: 1.6;--radius-xl: 22px;--radius-lg: 20px;--radius-md: 16px;--radius-sm: 14px;--radius-control: 12px;--radius-nav: 11px;--radius-icon: 10px;--radius-chip: 999px;--radius-badge: 7px;--shadow-sm: 0 1px 2px oklch(20% .03 260 / .06);--shadow-md: 0 1px 2px oklch(20% .03 260 / .06), 0 18px 46px -22px oklch(20% .03 260 / .3);--shadow-control: 0 2px 6px oklch(20% .03 260 / .22);--shadow-composer: 0 0 0 3px var(--accent-soft), 0 1px 2px oklch(20% .03 260 / .06), 0 0 44px -8px oklch(63% .22 32 / .16), 0 20px 52px -20px oklch(63% .22 32 / .18);--blur-chrome: 14px;--ease: cubic-bezier(.2, 0, 0, 1);--ease-overshoot: cubic-bezier(.32, 1.38, .5, 1);--t-fast: .15s;--t-enter: .22s;--t-reveal: .5s;--t-progress: .7s;--t-ring: .9s;--t-morph: 1.12s;--touch: 44px;--control-h: 46px;--stage-w: 1920px;--stage-h: 1080px;--measure-prose: 62ch;--measure-lead: 68ch}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;transition-delay:0ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:where(button,[role=button],input,select,textarea,a){-webkit-tap-highlight-color:transparent}:where(button,[role=button],.control-button,.icon-button){min-height:44px;border-radius:var(--radius-md, 12px);transition:color var(--motion-fast, .16s) ease,background-color var(--motion-fast, .16s) ease,border-color var(--motion-fast, .16s) ease,box-shadow var(--motion-fast, .16s) ease,transform var(--motion-fast, .16s) ease,opacity var(--motion-fast, .16s) ease}:where(.icon-button,.modal-close,button:has(>svg:only-child)){min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}:where(button,[role=button],input,select,textarea,a[href]):focus-visible{outline:3px solid color-mix(in srgb,var(--accent, #3b82f6) 45%,transparent);outline-offset:2px}:where(button,[role=button]):active:not(:disabled){transform:scale(.98)}:where(button,[role=button]):disabled,:where(button,[role=button])[aria-disabled=true]{cursor:not-allowed;opacity:.5;box-shadow:none}:where(button,[role=button])[aria-busy=true]{cursor:progress;pointer-events:none}:where(button,[role=button])[aria-busy=true]:after{content:"";width:1em;height:1em;margin-inline-start:.55em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:shared-control-spin .7s linear infinite}:where(input,select,textarea,.control-field){min-height:44px;border:1px solid var(--border, #dfe3ea);border-radius:var(--radius-md, 12px);background:var(--surface-sunken, #f8fafc)}:where(.badge,.sb-section-badge,.results-file-count,.pm-popular-badge){display:inline-flex;align-items:center;border-radius:999px;font-weight:600}:where(.panel,.results-panel,.pm-card){border:1px solid var(--border, #dfe3ea);border-radius:var(--radius-lg, 16px);background:var(--surface, #fff)}.modal-overlay{overflow:auto;overscroll-behavior:contain;padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}.modal-overlay.open .modal-content{transform:scale(1) translateY(0)!important}.modal-overlay[aria-hidden=true]{pointer-events:none}.modal-overlay[aria-busy=true]{cursor:progress}.modal-content{width:min(100%,680px);max-height:calc(100dvh - 32px)!important;overflow:auto!important;overscroll-behavior:contain}.modal-content>:is(.border-t,.wt-footer){position:sticky;bottom:0;z-index:2;background:#fff}.modal-content>:is(.border-b,.pm-header){position:sticky;top:0;z-index:2;background:#fff}@media(max-width:480px),(max-height:600px){.modal-overlay{align-items:flex-start;padding:8px}.modal-content{max-height:calc(100dvh - 16px)!important;border-radius:14px}}@media(hover:hover){:where(button,[role=button]):hover:not(:disabled):not([aria-disabled=true]){filter:brightness(.97)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}@keyframes shared-control-spin{to{transform:rotate(360deg)}}.hero-field{position:absolute;inset:0;overflow:hidden;z-index:-2;pointer-events:none}.fx-grid{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:-2;pointer-events:none;opacity:0;transition:opacity var(--t-reveal) var(--ease)}.fx-grid.is-ready{opacity:1}.fx-mask{position:absolute;z-index:-1;pointer-events:none;background:var(--bg);filter:blur(46px)}.fx-mask-hero{left:50%;top:50%;width:980px;height:520px;transform:translate(-50%,-54%)}.fx-mask-top{left:-48px;right:-48px;top:-48px;height:132px}.fx-mask-bottom{left:-48px;right:-48px;bottom:-48px;height:132px}@media(max-width:920px){.fx-mask{filter:blur(36px)}.fx-mask-hero{width:92%;height:62%;top:50%;transform:translate(-50%,-50%)}.fx-mask-top{height:104px}.fx-mask-bottom{height:124px}}@media(prefers-reduced-motion:reduce){.hero-field,.fx-grid,.fx-mask{display:none}}.pipeline-glyph.logo-loop{position:relative;width:100%;height:88px;margin:0 0 12px;overflow:hidden;pointer-events:none;color:var(--fg)}.loop-mark,.loop-shadow{position:absolute}.loop-mark{left:0;top:50%;width:52px;height:52px;margin:-26px 0 0;will-change:transform}.loop-piece{position:absolute;inset:0;display:block;will-change:transform,opacity}.loop-piece svg{display:block;width:100%;height:100%;overflow:visible}.loop-halo{position:absolute;left:50%;top:50%;width:74px;height:74px;margin:-37px 0 0 -37px;border-radius:50%;background:radial-gradient(circle,color-mix(in oklch,var(--accent) 60%,transparent),transparent 64%);filter:blur(5px);opacity:.09;will-change:transform,opacity}.loop-shadow{left:var(--mark-c, 26px);bottom:13px;width:46px;height:6px;margin-left:-23px;border-radius:50%;background:color-mix(in oklch,var(--fg) 26%,transparent);opacity:0;will-change:transform,opacity}@media(max-width:920px){.pipeline-glyph.logo-loop{height:66px;margin-bottom:8px}.loop-mark{width:40px;height:40px;margin:-20px 0 0}.loop-halo{width:58px;height:58px;margin:-29px 0 0 -29px}.loop-shadow{bottom:6px}}
diff --git a/dist/assets/index-LEYLuMwg.js b/dist/assets/index-LEYLuMwg.js
new file mode 100644
index 0000000..3f5f345
--- /dev/null
+++ b/dist/assets/index-LEYLuMwg.js
@@ -0,0 +1,328 @@
+(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=n(r);fetch(r.href,s)}})();var w=typeof window<"u"?window:void 0,Ue=typeof globalThis<"u"?globalThis:w,Ve=Ue?.navigator,F=Ue?.document,_e=Ue?.location,_l=Ue?.fetch,ua=Ue!=null&&Ue.XMLHttpRequest&&"withCredentials"in new Ue.XMLHttpRequest?Ue.XMLHttpRequest:void 0,Oc=Ue?.AbortController,_g=Ue?.CompressionStream,Xe=Ve?.userAgent;function jd(){return!(!w||w.navigator.onLine===!1)}var Pi=typeof globalThis<"u"?globalThis:w;Pi&&typeof self>"u"&&(Pi.self=Pi),Pi&&typeof File>"u"&&(Pi.File=function(){});var O=w??{},oe={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Bc(t,e,n,i,r,s,o){try{var a=t[s](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(i,r)}function ce(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var s=t.apply(e,n);function o(l){Bc(s,i,r,o,a,"next",l)}function a(l){Bc(s,i,r,o,a,"throw",l)}o(void 0)}))}}function k(){return k=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var i in n)({}).hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},k.apply(null,arguments)}function Ud(t,e){if(t==null)return{};var n={};for(var i in t)if({}.hasOwnProperty.call(t,i)){if(e.indexOf(i)!==-1)continue;n[i]=t[i]}return n}var Dc=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function jc(t){return typeof t=="string"||t}function Uc(t){return typeof t=="string"?t:void 0}var Fi,wg=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],Kt=(function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t})({}),Hc=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),bg=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],Eg=["token"],Hd="NativeGzipValidationError",da=t=>t.length>=2&&t[0]===31&&t[1]===139,Wc=(t,e)=>t===Hc.GZipJS||e===Hc.GZipJS||e==="gzip",qc=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",Tr=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Hd,e},Sg=(function(){var t=ce((function*(e,n){18>e.size&&Tr("too-short");var i=new Uint8Array(yield e.slice(0,10).arrayBuffer());da(i)&&i[2]===8||Tr("invalid-header");var r=new DataView(yield e.slice(e.size-8).arrayBuffer());r.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Fi)return Fi;Fi=[];for(var c=0;256>c;c++){for(var d=c,f=0;8>f;f++)d=1&d?3988292384^d>>>1:d>>>1;Fi[c]=d>>>0}return Fi})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Tr("invalid-crc");var s=n.length>>>0;r.getUint32(4,!0)!==s&&Tr("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function fa(){return fa=ce((function*(t,e,n){e===void 0&&(e=!0);try{var i=new TextEncoder().encode(t),r=new globalThis.CompressionStream("gzip"),s=r.writable.getWriter(),o=s.write(i).then((()=>s.close())).catch((function(){var u=ce((function*(c){try{yield s.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(r.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield Sg(l,i),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),fa.apply(this,arguments)}var xg=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],zc=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var n=t.toLowerCase();return xg.concat(e).some((i=>{var r=i.toLowerCase();return n.indexOf(r)!==-1}))};function j(t,e){return t.indexOf(e)!==-1}var Vs=function(t){return t.trim()},ha=function(t){return t.replace(/^\$/,"")};function Wd(t){var e,n=[];return(e=JSON.stringify(t,(function(i,r){if(typeof r=="bigint")return r.toString();if(typeof r!="function"&&typeof r!="symbol"){if(r instanceof Error)return{name:r.name,message:r.message,stack:r.stack};if(r&&typeof r=="object"){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(r))return"[Circular]";n.push(r)}return r}})))!==null&&e!==void 0?e:"null"}var qd=Object.prototype,zd=qd.hasOwnProperty,Gs=qd.toString,U=Array.isArray||function(t){return Gs.call(t)==="[object Array]"},qe=t=>typeof t=="function",ve=t=>t===Object(t)&&!U(t),rn=t=>{if(ve(t)){for(var e in t)if(zd.call(t,e))return!1;return!0}return!1},C=t=>t===void 0,Q=t=>Gs.call(t)=="[object String]",pa=t=>Q(t)&&t.trim().length===0,tt=t=>t===null,z=t=>C(t)||tt(t),Pe=t=>Gs.call(t)=="[object Number]"&&t==t,Vt=t=>Pe(t)&&t>0,St=t=>Gs.call(t)==="[object Boolean]",Ig=t=>t instanceof FormData,kg=t=>j(bg,t),Cg=t=>j(Eg,t);function Vd(t){return t===null||typeof t!="object"}function as(t,e){return{}.toString.call(t)==="[object "+e+"]"}function wl(t){return typeof Event<"u"&&Gd(t,Event)}function Gd(t,e){try{return t instanceof e}catch{return!1}}var Ag=[!0,"true",1,"1","yes"],Ro=t=>j(Ag,t),Pg=[!1,"false",0,"0","no"];function Tt(t,e,n,i,r){return e>n&&(i.warn("min cannot be greater than max."),e=n),Pe(t)?t>n?(i.warn(" cannot be greater than max: "+n+". Using max value instead."),n):e>t?(i.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(i.warn(" must be a number. using max or fallback. max: "+n+", fallback: "+r),Tt(r||n,e,n,i))}class Fg{constructor(e){this.tt={},this.et=e.et,this.it=Tt(e.bucketSize,0,100,e.rt),this.nt=Tt(e.refillRate,0,this.it,e.rt),this.st=Tt(e.refillInterval,0,864e5,e.rt)}ot(e,n){var i=Math.floor((n-e.lastAccess)/this.st);i>0&&(e.tokens=Math.min(e.tokens+i*this.nt,this.it),e.lastAccess=e.lastAccess+i*this.st)}consumeRateLimit(e){var n,i=Date.now(),r=String(e),s=this.tt[r];return s?this.ot(s,i):this.tt[r]=s={tokens:this.it,lastAccess:i},s.tokens===0||(s.tokens--,s.tokens===0&&((n=this.et)==null||n.call(this,e)),s.tokens===0)}stop(){this.tt={}}}var dt="Mobile",ls="iOS",sn="Android",fi="Tablet",Kd=sn+" "+fi,Yd="iPad",Jd="Apple",Zd=Jd+" Watch",Ji="Safari",hi="BlackBerry",Xd="Samsung",Qd=Xd+"Browser",ef=Xd+" Internet",Dn="Chrome",Rg=Dn+" OS",tf=Dn+" "+ls,bl="Internet Explorer",nf=bl+" "+dt,El="Opera",Tg=El+" Mini",Sl="Edge",rf="Microsoft "+Sl,ai="Firefox",sf=ai+" "+ls,sr="Nintendo",or="PlayStation",li="Xbox",of=sn+" "+dt,af=dt+" "+Ji,Ui="Windows",ga=Ui+" Phone",Vc="Nokia",ma="Ouya",lf="Generic",$g=lf+" "+dt.toLowerCase(),cf=lf+" "+fi.toLowerCase(),va="Konqueror",uf="Oculus Browser",cs="Vivaldi",df="Yandex",us="Whale",ya="DuckDuckGo",ff="Pale Moon",ds="Waterfox",Zi="Brave",hf="Google Search App",Se="(\\d+(\\.\\d+)?)",To=new RegExp("Version/"+Se),Mg=new RegExp(li,"i"),Lg=new RegExp(or+" \\w+","i"),Ng=new RegExp(sr+" \\w+","i"),xl=new RegExp(hi+"|PlayBook|BB10","i"),Og={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},pf=function(t,e,n,i){e=e||"";var r=(function(s){return s!=null&&s.brave?Zi:null})(n);return r||(i!=null&&i.detectGoogleSearchApp&&j(t,"GSA/")?hf:j(t," OPR/")&&j(t,"Mini")?Tg:j(t," OPR/")?El:xl.test(t)?hi:j(t,"IE"+dt)||j(t,"WPDesktop")?nf:j(t,"OculusBrowser")?uf:j(t,Qd)?ef:j(t,Sl)||j(t,"Edg/")?rf:j(t,cs+"/")?cs:j(t,"YaBrowser/")?df:j(t,us+"/")?us:j(t,ya+"/")||j(t,"Ddg/")?ya:j(t,"FBIOS")?"Facebook "+dt:j(t,"UCWEB")||j(t,"UCBrowser")?"UC Browser":j(t,"CriOS")?tf:j(t,"CrMo")||j(t,Dn)?Dn:j(t,sn)&&j(t,Ji)?of:j(t,"FxiOS")?sf:j(t.toLowerCase(),va.toLowerCase())?va:j(t,Zi+"/")?Zi:((s,o)=>o&&j(o,Jd)||(function(a){return j(a,Ji)&&!j(a,Dn)&&!j(a,sn)})(s))(t,e)?j(t,dt)?af:Ji:j(t,"PaleMoon/")?ff:j(t,ds+"/")?ds:j(t,ai)?ai:j(t,"MSIE")||j(t,"Trident/")?bl:j(t,"Gecko")?ai:"")},Bg={[nf]:[new RegExp("rv:"+Se)],[rf]:[new RegExp(Sl+"?\\/"+Se)],[Dn]:[new RegExp("("+Dn+"|CrMo)\\/"+Se)],[tf]:[new RegExp("CriOS\\/"+Se)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+Se)],[Ji]:[To],[af]:[To],[El]:[new RegExp("(Opera|OPR)\\/"+Se)],[ai]:[new RegExp(ai+"\\/"+Se)],[sf]:[new RegExp("FxiOS\\/"+Se)],[va]:[new RegExp("Konqueror[:/]?"+Se,"i")],[hi]:[new RegExp(hi+" "+Se),To],[of]:[new RegExp("android\\s"+Se,"i")],[ef]:[new RegExp(Qd+"\\/"+Se)],[uf]:[new RegExp("OculusBrowser\\/"+Se)],[cs]:[new RegExp(cs+"\\/"+Se)],[df]:[new RegExp("YaBrowser\\/"+Se)],[us]:[new RegExp(us+"\\/"+Se)],[Zi]:[new RegExp(Zi+"\\/"+Se)],[ya]:[new RegExp("(DuckDuckGo|Ddg)\\/"+Se)],[ff]:[new RegExp("PaleMoon\\/"+Se)],[ds]:[new RegExp(ds+"\\/"+Se)],[hf]:[new RegExp("GSA\\/"+Se)],[bl]:[new RegExp("(rv:|MSIE )"+Se)],Mozilla:[new RegExp("rv:"+Se)]},Dg=function(t,e,n,i){var r=pf(t,e,n,i),s=Bg[r];if(C(s))return null;for(var o=0;s.length>o;o++){var a=t.match(s[o]);if(a)return parseFloat(a[a.length-2])}return null},Gc=[[new RegExp(li+"; "+li+" (.*?)[);]","i"),t=>[li,t&&t[1]||""]],[new RegExp(sr,"i"),[sr,""]],[new RegExp(or,"i"),[or,""]],[xl,[hi,""]],[new RegExp(Ui,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[ga,""];if(new RegExp(dt).test(e)&&!/IEMobile\b/.test(e))return[Ui+" "+dt,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var i=Og[n[1]]||"";return/arm/i.test(e)&&(i="RT"),[Ui,i]}return[Ui,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[ls,[t[3],t[4],t[5]||"0"].join(".")]:[ls,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=C(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+sn+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+sn+")","i"),t=>t&&t[2]?[sn,[t[2],t[3],t[4]||"0"].join(".")]:[sn,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,t=>{var e=["Mac OS X",""];return t&&t[1]&&(e[1]=[t[1],t[2],t[3]||"0"].join(".")),e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[Rg,""]],[/Linux|debian/i,["Linux",""]]],Kc=function(t){return Ng.test(t)?sr:Lg.test(t)?or:Mg.test(t)?li:new RegExp(ma,"i").test(t)?ma:new RegExp("("+ga+"|WPDesktop)","i").test(t)?ga:/iPad/.test(t)?Yd:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Zd:xl.test(t)?hi:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(Vc,"i").test(t)?Vc:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(dt).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?sn:Kd:new RegExp("(pda|"+dt+")","i").test(t)?$g:new RegExp(fi,"i").test(t)&&!new RegExp(fi+" pc","i").test(t)?cf:""},jg=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Yc(t,e){return typeof(n=t)=="string"&&jg.test(n)?t:e();var n}function wn(t){return t&&t.split("#")[0]}function Il(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function Jc(t,e,n){return gf.apply(this,arguments)}function gf(){return(gf=ce((function*(t,e,n){var i;try{return yield Promise.race([t,new Promise(((r,s)=>{i=Il((()=>{try{n?.(),r()}catch(o){s(o)}}),e)}))])}finally{clearTimeout(i)}}))).apply(this,arguments)}var Ug=t=>t instanceof Error,mf={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Hg=mf.info;function vf(t){if(St(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(U(t))return{arrayValue:{values:t.map((e=>vf(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function fs(t){var e=[];for(var n in t){var i=t[n];tt(i)||C(i)||e.push({key:n,value:vf(i)})}return e}function Wg(t,e){var n=mf[t.level||"info"]||Hg,i=n.text,r=n.number,s=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),z(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),z(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=k({},o,t.attributes||{}),l={timeUnixNano:s,observedTimeUnixNano:s,severityNumber:r,severityText:i,body:{stringValue:t.body},attributes:fs(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),C(t.trace_flags)||(l.flags=t.trace_flags),l}function yf(t,e,n){return k({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":n})}function _f(t,e,n,i){return{resourceLogs:[{resource:{attributes:fs(e)},scopeLogs:[{scope:{name:n,version:i},logRecords:t}]}]}}let qg=class{constructor(t,e,n,i,r,s,o){var a;s===void 0&&(s=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=i,this.ht=r,this.dt=s,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Wg(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=U(e)?e:[e],i=t;for(var r of n)try{var s=r(i);if(!s)return this.rt.info("Log was rejected in beforeSend function"),null;i=s}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return i}Rt(){if(this.Tt===void 0)return!0;var t=Date.now(),e=t-this.bt;return this.Mt>e&&e>=0||(this.bt=t,this._t=0,this.wt=!1),this.Tt>this._t?(this._t++,!0):(this.wt||(this.rt.warn("captureLog dropping logs: exceeded "+this.Tt+" logs per "+this.Mt+"ms"),this.wt=!0),!1)}flush(){var t=this;return ce((function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally((()=>{t.ct=null}))),t.ct}))()}Ft(){var t=this;return ce((function*(){var e;t.Et();var n=(e=t._instance.getPersistedProperty(Kt.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var i=n.length,r=0;n.length>0&&i>r;){var s,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=_f(l.map((d=>d.record)),t.Lt(),(s=t.vt)!==null&&s!==void 0?s:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(Kt.LogsQueue))!==null&&o!==void 0?o:[],r+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return ce((function*(){var n,i=Math.max(0,t-e.ft),r=(n=e._instance.getPersistedProperty(Kt.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(Kt.LogsQueue,r.slice(i)),yield e.dt()}))()}Lt(){return yf(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(Kt.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(Kt.LogsQueue,n),this.kt>n.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Il((()=>{this.Nt=void 0,this.It()}),t))}qt(){var t=Math.min(Math.max(0,this.yt-1),6);return this.St*Math.pow(2,t)}jt(){var t=this._instance.getPersistedProperty(Kt.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return ce((function*(){e.Et();var n=e.flush().catch((()=>{}));t!==void 0?yield Jc(n,t):yield n}))()}flushWithTimeout(t){var e=this;return ce((function*(){var n=e.flush();yield Jc(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var $o=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Zc(t){return String(t)+"000000"}function Xc(t,e,n,i){var r="";return i&&(r=Object.keys(i).sort().map((s=>JSON.stringify(s)+":"+JSON.stringify(i[s]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+r}let zg=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var r=ce((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return r.apply(this,arguments)}})(),i=n().finally((()=>{this.ct===i&&(this.ct=null)}));return this.ct=i,i}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var n,i;try{n=e.attributes?k({},e.attributes):void 0,i=Xc(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var r=this.Bt.get(i);if(!r){if(!this.Qt())return;r={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(i,r)}var s=this.Ut.get(e.name);s===void 0?this.Ut.set(e.name,e.type):s===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+s+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(r,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array($o.length+1).fill(0)});var i=t.hist;i.count+=1,i.sum+=e,i.min=Math.min(i.min,e),i.max=Math.max(i.max,e),i.bucketCounts[(function(r,s){for(var o=0;s.length>o;o++)if(s[o]>=r)return o;return s.length})(e,$o)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=U(e)?e:[e],i=t;for(var r of n)try{var s=r(i);if(!s)return this.rt.info("Metric was rejected in beforeSend function"),null;i=s}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return i}$t(){this.Nt||(this.Nt=Il((()=>{this.Nt=void 0,this.flush().catch((t=>{this.rt.error("Metrics flush failed:",t)}))}),this.Ne.flushIntervalMs))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}Zt(){var t=this;return ce((function*(){if(t.Bt.size!==0){var e=t.Bt;t.Bt=new Map,t.Ht=!1,t.Ut=new Map,t.zt=new Set;var n=t.Wt,i=yield t._instance.Jt(t.Gt(e));if(n===t.Wt)switch(i.kind){case"ok":return;case"retry-later":return t.Yt(e),void t.$t();case"too-large":return void t.rt.warn("Metrics batch exceeded the server size limit and was dropped");case"fatal":return void t.rt.error("Failed to send metrics batch:",i.error)}}}))()}Gt(t){return e=this.Xt(t),n=(function(s,o,a){return k({},s.resourceAttributes,{"service.name":s.serviceName||"unknown_service"},s.environment&&{"deployment.environment":s.environment},s.serviceVersion&&{"service.version":s.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),i=this._instance.getLibraryId(),r=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:fs(n)},scopeMetrics:[{scope:{name:i,version:r},metrics:e}]}]};var e,n,i,r}Xt(t){var e=Zc(Date.now()),n=new Map;for(var i of t.values()){var r,s=Xc(i.type,i.name,i.unit,void 0),o=n.get(s);o||(o=k({name:i.name},i.unit&&{unit:i.unit}),i.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:i.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},n.set(s,o));var a=fs((r=i.attributes)!==null&&r!==void 0?r:{}),l=Zc(i.windowStartMs);if(i.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=i.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(i.type==="gauge"){var d,f={attributes:a,timeUnixNano:e,asDouble:(d=i.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(f)}else i.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:i.hist.count,sum:i.hist.sum,min:i.hist.min,max:i.hist.max,bucketCounts:i.hist.bucketCounts,explicitBounds:$o})}return Array.from(n.values())}Yt(t){var e,n;for(var i of t){var r=i[0],s=i[1],o=this.Bt.get(r);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,s.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=s.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(s.hist)if(o.hist){o.hist.count+=s.hist.count,o.hist.sum+=s.hist.sum,o.hist.min=Math.min(o.hist.min,s.hist.min),o.hist.max=Math.max(o.hist.max,s.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=s.hist.bucketCounts[a]}else o.hist=s.hist}else this.Qt()&&this.Bt.set(r,s)}}};var $r,Qc,Mo;function Vg(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return Mo&&n.length===Qc||(Qc=n.length,Mo=n.reduce(((i,r)=>{$r||($r={});var s=$r[r];if(s)i[s[0]]=s[1];else for(var o=t(r),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[r];if(u&&c){i[u]=c,$r[r]=[u,c];break}}return i}),{})),Mo}}class Gg{constructor(e,n,i){i===void 0&&(i=[]),this.coercers=e,this.stackParser=n,this.modifiers=i}buildFromUnknown(e,n){n===void 0&&(n={});var i=n&&n.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(i,n,0).apply(e),s=this.buildParsingContext(n),o=this.parseStacktrace(r,s);return{$exception_list:this.convertToExceptionList(o,i),$exception_level:"error"}}modifyFrames(e){var n=this;return ce((function*(){for(var i of e)i.stacktrace&&i.stacktrace.frames&&U(i.stacktrace.frames)&&(i.stacktrace.frames=yield n.applyModifiers(i.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var i,r;return e.cause!=null&&(i=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(r=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),k({},e,{cause:i,stack:r})}applyChunkIds(e,n){return e.map((i=>(i.filename&&n&&(i.chunk_id=n[i.filename]),i)))}applyCoercers(e,n){for(var i of this.coercers)if(i.match(e))return i.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return ce((function*(){var i=e;for(var r of n.modifiers)i=yield r(i);return i}))()}convertToExceptionList(e,n){var i,r,s,o={type:e.type,value:e.value,mechanism:{type:(i=n.type)!==null&&i!==void 0?i:"generic",handled:(r=n.handled)===null||r===void 0||r,synthetic:(s=e.synthetic)!==null&&s!==void 0&&s}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,k({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:Vg(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,i){i===void 0&&(i=0);var r=(s,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(s,a)}};return k({},n,{syntheticException:i==0?n.syntheticException:void 0,mechanism:e,apply:s=>r(s,i),next:s=>r(s,i+1)})}}var pi="?";function _a(t,e,n,i,r){var s={platform:t,filename:e,function:n===""?pi:n,in_app:!0};return C(i)||(s.lineno=i),C(r)||(s.colno=r),s}var wf=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,i=t.indexOf("safari-web-extension")!==-1;return n||i?[t.indexOf("@")!==-1?t.split("@")[0]:pi,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},Kg=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Yg=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Jg=/\((\S*)(?::(\d+))(?::(\d+))\)/,Zg=(t,e)=>{var n=Kg.exec(t);if(n)return _a(e,n[1],pi,+n[2],+n[3]);var i=Yg.exec(t);if(i){if(i[2]&&i[2].indexOf("eval")===0){var r=Jg.exec(i[2]);r&&(i[2]=r[1],i[3]=r[2],i[4]=r[3])}var s=wf(i[1]||pi,i[2]);return _a(e,s[1],s[0],i[3]?+i[3]:void 0,i[4]?+i[4]:void 0)}},Xg=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Qg=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,em=(t,e)=>{var n=Xg.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var i=Qg.exec(n[3]);i&&(n[1]=n[1]||"eval",n[3]=i[1],n[4]=i[2],n[5]="")}var r=n[3],s=n[1]||pi,o=wf(s,r);return _a(e,r=o[1],s=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},eu=/\(error: (.*)\)/;class tm{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var i=Q(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:i?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return as(e,"DOMException")}isDOMError(e){return as(e,"DOMError")}}class nm{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Gd(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var i=e.message;return String(i.error&&typeof i.error.message=="string"?i.error.message:i)}getStack(e){return e.stacktrace||e.stack||void 0}}class im{constructor(){}match(e){return!!as(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var i;if(e.error!=null)return n.apply(e.error);var r=n.apply(e.message);return k({},r,{stack:(i=this.pe(e))!==null&&i!==void 0?i:r.stack,synthetic:!0})}fe(e){return Q(e.message)&&e.message.length>0}pe(e){var n=e;if(Q(n.filename)&&n.filename.length>0){var i,r,s=(i=n.lineno)!==null&&i!==void 0?i:0,o=(r=n.colno)!==null&&r!==void 0?r:0;return`Error
+ at `+n.filename+":"+s+":"+o}}}var rm=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class sm{match(e){return typeof e=="string"}coerce(e,n){var i,r=this.getInfos(e),s=r[0],o=r[1];return{type:s??"Error",value:o??e,stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}getInfos(e){var n="Error",i=e,r=e.match(rm);return r&&(n=r[1],i=r[2]),[n,i]}}var om=["fatal","error","warning","log","info","debug"];function bf(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var i=n.length;i>0;i--){var r=n.slice(0,i).join(", ");if(e>=r.length)return i===n.length?r:r.length>e?r.slice(0,e)+"...":r}return""}class am{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var i,r,s=this.getErrorPropertyFromObject(e);return s?n.apply(s):{type:this.getType(e),value:this.getValue(e),stack:(i=this.getStack(e))!==null&&i!==void 0?i:(r=n.syntheticException)==null?void 0:r.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return wl(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var i=this.getObjectClassName(e);return(i&&i!=="Object"?"'"+i+"'":"Object")+" captured as exception with keys: "+bf(e)}isSeverityLevel(e){return Q(e)&&!pa(e)&&om.indexOf(e)>=0}getStack(e){try{return Q(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:Q(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var i=e[n];if(Ug(i))return i}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class lm{match(e){return wl(e)}coerce(e,n){var i,r=e.constructor.name;return{type:r,value:r+" captured as exception with keys: "+bf(e),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}}class cm{match(e){return Vd(e)}coerce(e,n){var i;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}}}class um{match(e){return as(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!wl(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var i,r=this.getUnhandledRejectionReason(e);return Vd(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:(i=n.syntheticException)==null?void 0:i.stack,synthetic:!0}:n.apply(r)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var hs="$message",ps="$timestamp",dm=new Set([hs,ps]),Lo={enabled:!0,max_bytes:32768};function gs(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:Lo.enabled,max_bytes:hm(t.max_bytes,Lo.max_bytes)}:k({},Lo)}class fm{constructor(e){this.Ke=[],this.Je=0,this.Ne=gs(e)}setConfig(e){this.Ne=gs(e),this.Xe()}add(e){var n=(function(r){var s;try{s=Wd(r)}catch{return}try{var o=JSON.parse(s);if(!ve(o))return;var a=o,l=a[hs],u=a[ps];return!Q(l)||l.trim().length===0||!Q(u)&&!Pe(u)?void 0:{step:a,json:s}}catch{return}})(e);if(n){var i=(function(r){if(typeof TextEncoder<"u")return new TextEncoder().encode(r).length;for(var s=encodeURIComponent(r),o=0,a=0;s.length>a;a++)s[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);i>this.Ne.max_bytes||(this.Ke.push({step:n.step,bytes:i}),this.Je+=i,this.Xe())}}getAttachable(){return this.Ke.map((e=>e.step))}clear(){this.Ke=[],this.Je=0}size(){return this.Ke.length}Xe(){for(;this.Je>this.Ne.max_bytes&&this.Ke.length>0;){var e=this.Ke.shift();e&&(this.Je-=e.bytes)}}}function hm(t,e){if(!Pe(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var Ef=function(t,e){var n=(e===void 0?{}:e).debugEnabled,i={k(r){if(w&&(oe.DEBUG||w.POSTHOG_DEBUG||n)&&!C(w.console)&&w.console){for(var s=("__rrweb_original__"in w.console[r])?w.console[r].__rrweb_original__:w.console[r],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];s(t,...a)}},debug(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("debug",...s)},info(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("log",...s)},warn(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("warn",...s)},error(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];i.k("error",...s)},critical(){for(var r=arguments.length,s=new Array(r),o=0;r>o;o++)s[o]=arguments[o];console.error(t,...s)},uninitializedWarning(r){i.error("You must initialize PostHog before calling "+r)},createLogger:(r,s)=>Ef(t+" "+r,s)};return i},A=Ef("[PostHog.js]"),ye=A.createLogger,pm=ye("[ExternalScriptsLoader]"),No=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return pm.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var i=F?.querySelectorAll("script");if(i){for(var r,s=function(){if(i[o].src===e){var l=i[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;i.length>o;o++)if(r=s())return r.v}var a=()=>{if(!F)return n("document not found");var l=F.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")F.head.appendChild(l);else{var u,c=F.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):F.body.appendChild(l)}};F!=null&&F.body?a():F?.addEventListener("DOMContentLoaded",a)};O.__PosthogExtensions__=O.__PosthogExtensions__||{},O.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{if(e!=="remote-config"){var i;if(t.config.strict_script_versioning)i=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var r="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var s=3e5;r=r+"&t="+Math.floor(Date.now()/s)*s}i=t.requestRouter.endpointFor("assets",r)}No(t,i,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");No(t,o,n)}},O.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var i=t.requestRouter.endpointFor("api",e);No(t,i,n)};oe.DEBUG=!1,oe.LIB_VERSION="1.415.7",oe.LIB_NAME="web";var Sf="$people_distinct_id",ar="$device_id",Oo="$device_model",Hi="__alias",Wi="__timers",wa="$autocapture_disabled_server_side",ba="$heatmaps_enabled_server_side",Ea="$exception_capture_enabled_server_side",Sa="$error_tracking_suppression_rules",xa="$error_tracking_capture_extension_exceptions",Ia="$web_vitals_enabled_server_side",kl="$dead_clicks_enabled_server_side",Cl="$product_tours_enabled_server_side",ka="$web_vitals_allowed_metrics",On="$session_recording_remote_config",xf="$replay_sample_rate",If="$replay_override_sampling",kf="$replay_override_linked_flag",Cf="$replay_override_url_trigger",Af="$replay_override_event_trigger",ri="$sesid",Al="$session_is_sampled",Tn="$enabled_feature_flags",qi="$active_feature_flags",Vr="$early_access_features",Ca="$feature_flag_details",zi="$feature_flag_payloads",Gr="$feature_flag_request_id",ms="$minimal_flag_called_events",Pt="$override_feature_flags",$n="$override_feature_flag_payloads",Gt="$stored_person_properties",Mn="$stored_group_properties",Aa="$surveys",vs="$surveys_loaded_at",Pa="$surveys_activated",Kr="$surveys_activated_session",Yr="$surveys_activated_timestamps",Vi="ph_product_tours",Nn="$flag_call_reported",Gi="$flag_call_reported_session_id",Jr="$feature_flag_errors",Xi="$feature_flag_evaluated_at",pt="$user_state",Fa="$client_session_props",Ra="$capture_rate_limit",Ta="$initial_campaign_params",$a="$initial_referrer_info",ys="$initial_person_info",_s="$epp",Mr="$posthog_cookieless",Pf="$cookieless_mode",Ff="$sdk_debug_extensions_init_method",Rf="$sdk_debug_extensions_init_time_ms",Tf="$sdk_debug_recording_script_not_loaded",Pl="PostHog loadExternalDependency extension not found.",Ln="on_reject",Xt="always",Zn="anonymous",kn="identified",Ma="identified_only",ws="visibilitychange",bs="beforeunload",ni="$pageview",Bo="$pageleave",Do="$identify",tu="$groupidentify";function Lr(t,e){U(t)&&t.forEach(e)}function ae(t,e){if(!z(t))if(U(t))t.forEach(e);else if(Ig(t))t.forEach(((i,r)=>e(i,r)));else for(var n in t)zd.call(t,n)&&e(t[n],n)}var me=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;e>i;i++)n[i-1]=arguments[i];for(var r of n)for(var s in r)r[s]!==void 0&&(t[s]=r[s]);return t};function Zr(t){for(var e=Object.keys(t),n=e.length,i=new Array(n);n--;)i[n]=[e[n],t[e[n]]];return i}var nu=function(t){try{return t()}catch{return}},gm=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),i=0;e>i;i++)n[i]=arguments[i];return t.apply(this,n)}catch(r){A.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),A.critical(r)}}},Fl=function(t){var e={};return ae(t,(function(n,i){(Q(n)&&n.length>0||Pe(n))&&(e[i]=n)})),e},mm=["herokuapp.com","vercel.app","netlify.app"];function vm(t){var e=t?.hostname;if(!Q(e))return!1;var n=e.split(".").slice(-2).join(".");for(var i of mm)if(n===i)return!1;return!0}function we(t,e,n,i){var r=i??{},s=r.capture,o=r.passive;t?.addEventListener(e,n,{capture:s!==void 0&&s,passive:o===void 0||o})}function La(t){return t.name==="ph_toolbar_internal"}var $f=t=>{if(F){try{for(var e=t+"=",n=F.cookie.split(";").filter((s=>s.length)),i=0;n.length>i;i++){for(var r=n[i];r.charAt(0)==" ";)r=r.substring(1,r.length);if(r.indexOf(e)===0)return decodeURIComponent(r.substring(e.length,r.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return Pe(t)&&isFinite(t)&&Math.floor(t)===t});class Es{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,i,r){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(i)||!Number.isInteger(r)||0>e||0>n||0>i||0>r||e>0xffffffffffff||n>4095||i>1073741823||r>4294967295)throw new RangeError("invalid field value");var s=new Uint8Array(16);return s[0]=e/Math.pow(2,40),s[1]=e/Math.pow(2,32),s[2]=e/Math.pow(2,24),s[3]=e/Math.pow(2,16),s[4]=e/256,s[5]=e,s[6]=112|n>>>8,s[7]=n,s[8]=128|i>>>24,s[9]=i>>>16,s[10]=i>>>8,s[11]=i,s[12]=r>>>24,s[13]=r>>>16,s[14]=r>>>8,s[15]=r,new Es(s)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new Es(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var i=this.bytes[n]-e.bytes[n];if(i!==0)return Math.sign(i)}return 0}}class ym{generate(){var e=this.generateOrAbort();if(!C(e))return e;this.S=0;var n=this.generateOrAbort();if(C(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return Es.fromFieldsV7(this.S,Math.trunc(this.I/Math.pow(2,30)),this.I&Math.pow(2,30)-1,this.A.nextUint32())}C(){this.I=1024*this.A.nextUint32()+(1023&this.A.nextUint32())}constructor(){this.S=0,this.I=0,this.A=new _m}}var iu,Mf=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};w&&!C(w.crypto)&&crypto.getRandomValues&&(Mf=t=>crypto.getRandomValues(t));class _m{nextUint32(){return this.R.length>this.O||(Mf(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var Yt=()=>wm().toString(),wm=()=>(iu||(iu=new ym)).generate(),Ri="",bm=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,Qt={N:()=>!!F,j(t){A.error("cookieStore error: "+t)},P:$f,H(t){var e;try{e=JSON.parse(Qt.P(t))||{}}catch{}return e},F(t,e,n,i,r){if(!F)return!1;try{var s="",o="",a=(function(c,d){if(d){var f=(function(h,g){if(g===void 0&&(g=F),Ri)return Ri;if(!g||["localhost","127.0.0.1"].includes(h))return"";for(var m=h.split("."),v=Math.min(m.length,8),x="dmn_chk_"+Yt();!Ri&&v--;){var E=m.slice(v).join("."),y=x+"=1;domain=."+E+";path=/";g.cookie=y+";max-age=3",g.cookie.includes(x)&&(g.cookie=y+";max-age=0",Ri=E)}return Ri})(c);if(!f){var p=(h=>{var g=h.match(bm);return g?g[0]:""})(c);p!==f&&A.info("Warning: cookie subdomain discovery mismatch",p,f),f=p}return f?"; domain=."+f:""}return""})(F.location.hostname,i);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),s="; expires="+l.toUTCString()}r&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+s+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&A.warn("cookieStore warning: large cookie, len="+u.length),F.cookie=u,!0}catch{return!1}},q(t,e){if(F!=null&&F.cookie)try{Qt.F(t,"",-1,e)}catch{return}}},jo=null,de={N(){if(!tt(jo))return jo;var t=!0;if(C(w))t=!1;else try{var e="__mplssupport__";de.F(e,"xyz"),de.P(e)!=='"xyz"'&&(t=!1),de.q(e)}catch{t=!1}return t||A.error("localStorage unsupported; falling back to cookie store"),jo=t,t},j(t){A.error("localStorage error: "+t)},P(t){try{return w?.localStorage.getItem(t)}catch(e){de.j(e)}return null},H(t){try{return JSON.parse(de.P(t))||{}}catch{}return null},F(t,e){try{return w?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){de.j(n)}return!1},q(t){try{w?.localStorage.removeItem(t)}catch(e){de.j(e)}}},Em=[ar,"distinct_id",ri,Al,_s,ys,pt],Nr={},Sm={N:()=>!0,j(t){A.error("memoryStorage error: "+t)},P:t=>Nr[t]||null,H:t=>Nr[t]||null,F:(t,e)=>(Nr[t]=e,!0),q(t){delete Nr[t]}},Cn=null,xe={N(){if(!tt(Cn))return Cn;if(Cn=!0,C(w))Cn=!1;else try{var t="__support__";xe.F(t,"xyz"),xe.P(t)!=='"xyz"'&&(Cn=!1),xe.q(t)}catch{Cn=!1}return Cn},j(t){A.error("sessionStorage error: ",t)},P(t){try{return w?.sessionStorage.getItem(t)}catch(e){xe.j(e)}return null},H(t){try{return JSON.parse(xe.P(t))||null}catch{}return null},F(t,e){try{return w?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(n){xe.j(n)}return!1},q(t){try{w?.sessionStorage.removeItem(t)}catch(e){xe.j(e)}}};class xm{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===Xt||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Ln}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,n=e.token,i=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(i?i+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return Ro(e)?1:j(Pg,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?de:Qt;if(!this.ni||this.ni!==n){this.ni=n;var i=e==="localStorage"?Qt:de;i.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Ro(i.P(this.ri))),i.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[Ve?.doNotTrack,Ve?.msDoNotTrack,O.doNotTrack].some((e=>Ro(e)))}}function Lf(t,e){var n,i=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!qe(i))return e;try{var r=i(e);return Q(r)&&r?r:e}catch(s){return A.error("Error in get_current_url, falling back to window.location.href",s),e}}var Nf="__POSTHOG_TOOLBAR__",Im=1,km=3,Cm=11;function ru(t){return t instanceof Element&&(t.id===Nf||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function bn(t){return!!t&&t.nodeType===Im}function at(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Of(t){return!!t&&t.nodeType===km}function Bf(t){return!!t&&t.nodeType===Cm&&bn(t.host)}var Df=1e3;function Rl(t){return t?Vs(t).split(/\s+/):[]}function su(t,e){var n=(function(i){var r,s=w==null||(r=w.location)==null?void 0:r.href;return C(s)?void 0:Lf(i,s)})(e);return!!(n&&t&&t.some((i=>n.match(i))))}function Ss(t){var e="";switch(typeof t.className){case"string":e=t.className;break;case"object":e=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:e=""}return Rl(e)}function jf(t){return z(t)?null:Vs(t).split(/(\s+)/).filter((e=>Qi(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function lr(t){var e="";return Oa(t)&&!qf(t)&&t.childNodes&&t.childNodes.length&&ae(t.childNodes,(function(n){var i;Of(n)&&n.textContent&&(e+=(i=jf(n.textContent))!==null&&i!==void 0?i:"")})),Vs(e)}function Uo(t){var e;return C(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Tl=["a","button","form","input","select","textarea","label"];function Na(t,e){if(C(e))return!0;var n,i=function(s){if(e.some((o=>(function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}})(s,o))))return{v:!0}};for(var r of t)if(n=i(r))return n.v;return!1}function Uf(t){var e=t.parentNode;return!(!e||!bn(e))&&e}var Am=[".ph-no-autocapture","[data-ph-no-autocapture]"],Hf=["next","previous","prev",">","<"],Pm=[...Hf,"+","-","−","–"],ou=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,au=[".ph-no-rageclick",".ph-no-capture"],Fm=["","text","search","email","password","url","tel","number"];function lu(t,e){if(!w||$l(t))return!1;var n,i,r,s,o;if(St(e)?(n=!!e&&au,i=void 0,r=!1):(n=(s=e?.css_selector_ignorelist)!==null&&s!==void 0?s:au,i=e?.content_ignorelist,r=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||r&&(function(l){return!(!l||!bn(l))&&(!!at(l,"textarea")||(at(l,"input")?j(Fm,(l.getAttribute("type")||"").toLowerCase()):(function(u){if(u.isContentEditable)return!0;var c=u.getAttribute==null?void 0:u.getAttribute("contenteditable");return c==="true"||c===""})(l)))})(t))return!1;var a=Wf(t,!1).targetElementList;return!(function(l,u){if(l===!1||C(l))return!1;var c;if(l===!0)c=Hf;else{if(!U(l))return!1;if(l.length>10)return A.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var f=d.safeText,p=d.ariaLabel;return c.some((h=>ou(f,h)||ou(p,h)))}))})(i,a.map((l=>{var u;return{safeText:lr(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!Na(a,n)}var $l=t=>!t||at(t,"html")||!bn(t),Wf=(t,e)=>{if(!w||$l(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,i=[t],r=t;r.parentNode&&!at(r,"body");)if(Bf(r.parentNode))i.push(r.parentNode.host),r=r.parentNode.host;else{var s=Uf(r);if(!s)break;if(e||Tl.indexOf(s.tagName.toLowerCase())>-1)n=!0;else try{var o=w.getComputedStyle(s);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}i.push(s),r=s}return{parentIsUsefulElement:n,targetElementList:i}};function Oa(t){for(var e=new Set,n=0,i=t;i.parentNode&&!at(i,"body");i=i.parentNode){if(n++>=Df||e.has(i))return!1;e.add(i);var r=Ss(i);if(j(r,"ph-sensitive")||j(r,"ph-no-capture"))return!1}if(j(Ss(t),"ph-include"))return!0;var s=t.type||"";if(Q(s))switch(s.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!Q(o)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(o.replace(/[^a-zA-Z0-9]/g,""))}function qf(t){return!!(at(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||at(t,"select")||at(t,"textarea")||t.getAttribute("contenteditable")==="true")}var cu=new RegExp("^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$"),uu=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,Rm=[16,15,14,13],Tm=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),du=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),fu=/[0-9A-Za-z_]/;function $m(t){for(var e=0,n=!1,i=t.length-1;i>=0;i--){var r=t.charCodeAt(i)-48;n&&(r*=2)>9&&(r-=9),e+=r,n=!n}return e%10==0}function Qi(t,e){if(e===void 0&&(e=!0),z(t))return!1;if(Q(t)){t=Vs(t);var n=e?cu.test((t||"").replace(/[- ]/g,"")):(function(r){var s;for(uu.lastIndex=0;s=uu.exec(r);){var o=s[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Rm){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(cu.test(d)&&$m(d))return!0}}}return!1})(t);if(n)return!1;var i=e?Tm.test(t):(function(r){var s;for(du.lastIndex=0;s=du.exec(r);){var o=s[1],a=s[3];if(!(o&&a&&fu.test(o)&&fu.test(a)))return!0}return!1})(t);if(i)return!1}return!0}function hu(t){var e=lr(t);return Qi(e=(e+" "+zf(t)).trim())?e:""}function zf(t){var e="";return t&&t.childNodes&&t.childNodes.length&&ae(t.childNodes,(function(n){var i;if(n&&((i=n.tagName)==null?void 0:i.toLowerCase())==="span")try{var r=lr(n);e=(e+" "+r).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+zf(n)).trim())}catch(s){A.error("[AutoCapture]",s)}})),e}function pu(t){return t.replace(/"|\\"/g,'\\"')}function Mm(t){var e=t.attr__class;if(e)return U(e)?e:Rl(e)}var Or=ye("[Dead Clicks]"),Lm=()=>!0,Nm=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(kl)),i=t.instance.config.capture_dead_clicks;return St(i)?i:!!ve(i)||n};class gu{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,i){this.instance=e,this.isEnabled=n,this.onCapture=i,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[kl]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,i;(n=O.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"dead-clicks-autocapture",(r=>{r?Or.error("failed to load script",r):e()}))}oi(){var e;if(F){if(!this.si&&(e=O.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=ve(this.instance.config.capture_dead_clicks)?k({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=O.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(F),Or.info("starting...")}}else Or.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,Or.info("stopping..."))}}var Ho=ye("[SegmentIntegration]"),Vf="posthog-js";function Gf(t,e){var n=e===void 0?{}:e,i=n.organization,r=n.projectId,s=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,f,p,h,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var v,x=((d=c.exception)==null?void 0:d.values)||[],E=x.map((S=>k({},S,{stacktrace:S.stacktrace?k({},S.stacktrace,{type:"raw",frames:(S.stacktrace.frames||[]).map((I=>k({},I,{platform:"web:javascript"})))}):void 0}))),y={$exception_message:((f=x[0])==null?void 0:f.value)||c.message,$exception_type:(p=x[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:E,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((h=x[0])==null?void 0:h.value)||c.message,$sentry_exception_type:(g=x[0])==null?void 0:g.type,$sentry_tags:c.tags};return i&&r&&(y.$sentry_url=(s||"https://sentry.io/organizations/")+i+"/issues/?project="+r+"&query="+c.event_id),u&&((v=t.exceptions)==null||v.sendExceptionEvent(y)),c}}class Om{constructor(e,n,i,r,s,o){this.name=Vf,this.setupOnce=function(a){a(Gf(e,{organization:n,projectId:i,prefix:r,severityAllowList:s,sendExceptionsToPostHog:o==null||o}))}}}class mu{constructor(e){this.li=(n,i,r)=>{r&&(r.noSessionId||r.activityTimeout||r.sessionPastMaximumLength||r.crossTabAdoption)&&(A.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,changeReason:r}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,n){var i,r=this.vi(e,n);return this.ui={pathname:(i=w?.location.pathname)!==null&&i!==void 0?i:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),r}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var i=this.ui;if(!i)return{$pageview_id:n};var r={$pageview_id:n,$prev_pageview_id:i.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var o=s.maxScrollHeight,a=s.lastScrollY,l=s.maxScrollY,u=s.maxContentHeight,c=s.lastContentY,d=s.maxContentY;if(!(C(o)||C(a)||C(l)||C(u)||C(c)||C(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var f=o>1?Tt(a/o,0,1,A):1,p=o>1?Tt(l/o,0,1,A):1,h=u>1?Tt(c/u,0,1,A):1,g=u>1?Tt(d/u,0,1,A):1;r=me(r,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:f,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:h,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:g})}}return i.pathname&&(r.$prev_pageview_pathname=i.pathname),i.timestamp&&(r.$prev_pageview_duration=(e.getTime()-i.timestamp.getTime())/1e3),r}}var Wo=["flags","surveys"],Bm={[Sf]:{exposure:"hidden"},[Hi]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Wi]:{exposure:"hidden"},[wa]:{exposure:"event"},[ba]:{exposure:"hidden"},[Ea]:{exposure:"event"},[Sa]:{exposure:"hidden"},[xa]:{exposure:"event"},[Ia]:{exposure:"event"},[kl]:{exposure:"event"},[Cl]:{exposure:"hidden"},[ka]:{exposure:"event"},[On]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[ri]:{exposure:"hidden"},[Al]:{exposure:"event"},[xf]:{exposure:"event",shouldSkipFromEventProperties:t=>tt(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Tn]:{exposure:"hidden",storageGroup:"flags"},[qi]:{exposure:"hidden",storageGroup:"flags"},[Vr]:{exposure:"hidden"},[Ca]:{exposure:"hidden",storageGroup:"flags"},[zi]:{exposure:"hidden",storageGroup:"flags"},[Gr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ms]:{exposure:"hidden",storageGroup:"flags"},[Pt]:{exposure:"hidden"},[$n]:{exposure:"hidden"},[Gt]:{exposure:"hidden"},[Mn]:{exposure:"hidden"},[Aa]:{exposure:"hidden",storageGroup:"surveys"},[vs]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Pa]:{exposure:"event"},[Kr]:{exposure:"hidden"},[Yr]:{exposure:"hidden"},[Vi]:{exposure:"hidden"},$product_tours_activated:{exposure:"hidden"},$product_tours_activated_session:{exposure:"hidden"},$conversations_widget_session_id:{exposure:"event"},$conversations_ticket_id:{exposure:"event"},$conversations_widget_state:{exposure:"event"},$conversations_user_traits:{exposure:"event"},[Nn]:{exposure:"hidden"},[Gi]:{exposure:"hidden"},[Jr]:{exposure:"hidden"},[Xi]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[pt]:{exposure:"hidden"},[Fa]:{exposure:"hidden"},[Ra]:{exposure:"hidden"},[Ta]:{exposure:"hidden"},[$a]:{exposure:"hidden"},[ys]:{exposure:"hidden"},[_s]:{exposure:"hidden"},[If]:{exposure:"event"},[kf]:{exposure:"event"},[Cf]:{exposure:"event"},[Af]:{exposure:"event"},[Ff]:{exposure:"event"},[Rf]:{exposure:"event"},[Tf]:{exposure:"event"},$sdk_debug_replay_event_trigger_status:{exposure:"event"},$sdk_debug_replay_linked_flag_trigger_status:{exposure:"event"},$sdk_debug_replay_matched_recording_trigger_groups:{exposure:"event"},$sdk_debug_replay_remote_trigger_matching_config:{exposure:"event"},$sdk_debug_replay_trigger_groups_count:{exposure:"event"},$sdk_debug_replay_url_trigger_status:{exposure:"event"},$session_recording_start_reason:{exposure:"event"}},Dm=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],An=t=>{var e=Bm[t];if(e)return e;for(var n of Dm){var i=n[1];if(t.indexOf(n[0])===0)return i}},si=(t,e)=>{try{return JSON.stringify(t,((n,i)=>typeof i=="bigint"?i.toString():i),e)}catch{return Wd(t)}},xs=t=>{var e=F?.createElement("a");return C(e)?null:(e.href=t,e)},gi=function(t,e){for(var n,i=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),r=0;i.length>r;r++){var s=i[r].split("=");if(s[0]===e){n=s;break}}if(!U(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{A.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},cr=function(t,e,n){if(!t||!e||!e.length)return t;for(var i=t.split("#"),r=i[1],s=(i[0]||"").split("?"),o=s[1],a=s[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");U(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var f=a;return o!=null&&(f+="?"+u.join("&")),r!=null&&(f+="#"+r),f},Is=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},Kf=(t,e)=>t>=e&&jd(),Yf=(t,e,n,i)=>{if(t===0){if(jd()){var r=e+1;return r===n&&i(),r}return e}return 0},Br="https?://(.*)",mi=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],jm=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...mi],ur="",Um=["li_fat_id"];function Jf(t,e,n){if(!F)return{};var i,r=e?[...mi,...n||[]]:[],s=Zf(cr(F.URL,r,ur),t),o=(i={},ae(Um,(function(a){var l=$f(a);i[a]=l||null})),i);return me(o,s)}function Zf(t,e){var n=jm.concat(e||[]),i={};return ae(n,(function(r){var s=gi(t,r);i[r]=s||null})),i}function Xf(t){var e=(function(s){return s?s.search(Br+"google.([^/?]*)")===0?"google":s.search(Br+"bing.com")===0?"bing":s.search(Br+"yahoo.com")===0?"yahoo":s.search(Br+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",i={};if(!tt(e)){i.$search_engine=e;var r=F?gi(F.referrer,n):"";r.length&&(i.ph_keyword=r)}return i}function vu(){return navigator.language||navigator.userLanguage}var ks="$direct";function Qf(){return F?.referrer||ks}function eh(t,e,n){n===void 0&&(n=!1);var i=t?[...mi,...e||[]]:[],r=n?wn(_e?.href):_e?.href,s=r?.substring(0,1e3);return{r:Qf().substring(0,1e3),u:s?cr(s,i,ur):void 0}}function th(t,e){var n;e===void 0&&(e=!1);var i=t.r,r=t.u,s=e?wn(r):r,o={$referrer:i,$referring_domain:i==null?void 0:i==ks?ks:(n=xs(i))==null?void 0:n.host};if(s){o.$current_url=s;var a=xs(s);o.$host=a?.host,o.$pathname=a?.pathname;var l=Zf(s);me(o,l)}if(i){var u=Xf(i);me(o,u)}return o}function nh(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Hm(){try{return new Date().getTimezoneOffset()}catch{return}}var Wm={flags:Xi,surveys:vs},qm=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],Xn="main";class qo{constructor(e,n,i){if(i===void 0&&(i=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=i,this.props={},this.mi=void 0,this.yi=(s=>{var o="";return s.token&&(o=s.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),s.persistence_name?"ph_"+s.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&A.info("Persistence loaded",e.persistence,k({},this.props)),this.update_config(e,e,n),this.save(),w){var r=()=>this.flush();we(w,"beforeunload",r,{capture:!1}),we(w,"pagehide",r,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return Pe(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){qm.indexOf(e.persistence.toLowerCase())===-1&&(A.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,i=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...Em,...o];return k({},de,{H(u){try{var c={};try{c=Qt.H(u)||{}}catch{}var d,f=JSON.parse(de.P(u)||"{}");if(a){var p={};for(var h in c){var g=c[h];tt(g)||g===""||(p[h]=g)}d=me(f,p)}else d=me(c,f);return de.F(u,d),d}catch{}return null},F(u,c,d,f,p,h){var g=de.F(u,c,void 0,void 0,h);try{var m={};l.forEach((v=>{c[v]&&(m[v]=c[v])})),Object.keys(m).length&&Qt.F(u,m,d,f,p,h)}catch(v){de.j(v)}return g},q(u,c){try{w?.localStorage.removeItem(u),Qt.q(u,c)}catch(d){de.j(d)}}})})(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),r=!1,s=e.persistence.toLowerCase();return s==="localstorage"&&de.N()?(n=de,r=!0):s==="localstorage+cookie"&&i.N()?(n=i,r=!0):s==="sessionstorage"&&xe.N()?n=xe:s==="memory"?n=Sm:s==="cookie"?n=Qt:i.N()?(n=i,r=!0):n=Qt,this.fi=r,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return ae(this.props,((n,i)=>{var r=An(i);if(!r||r.exposure==="event"){if(r!=null&&r.shouldSkipFromEventProperties!=null&&r.shouldSkipFromEventProperties(n))return;e[i]=n}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=me({},e)),this.pi&&this.Ci()}}Ci(){for(var e of Wo){var n=de.H(this.Si(e));if(n&&!rn(n)){var i=this.Mi(e);i.persisted=!0,this.Ti(e)||(i.fingerprint=this.Ei(n,e)),this.Ii(e,n)||me(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var i;return((i=An(n))==null?void 0:i.storageGroup)===e}))}Ii(e,n){var i=Wm[e];if(!i)return!1;var r=n[i],s=this.props[i];return Pe(r)&&Pe(s)&&s>r}refreshKey(e){var n;if(!this.xi){var i=this.pi?(n=An(e))==null?void 0:n.storageGroup:void 0,r=i?de.H(this.Si(i)):this.ii.H(this.yi);if(r&&e in r)this.Pi(e,r[e]);else{if(i){var s=this.ii.H(this.yi);if(s&&e in s)return void this.Pi(e,s[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?C(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){C(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,Xn))}Li(){var e=this.Di(),n=e.main,i=e.groups;for(var r of(this.Oi(this.ii,this.yi,n,Xn),Wo)){var s,o=i[r];(!rn(o)||(s=this.ci[r])!=null&&s.persisted)&&this.Oi(de,this.Si(r),o,r)}}Di(){var e={},n={flags:{},surveys:{}};return ae(this.props,((i,r)=>{var s,o=(s=An(r))==null?void 0:s.storageGroup;o?n[o][r]=i:e[r]=i})),{main:e,groups:n}}Ei(e,n){if(n===Xn)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var i={};return ae(e,((r,s)=>{var o;i[s]=(o=An(s))!=null&&o.volatile?"__volatile__":r})),JSON.stringify(i)}Oi(e,n,i,r){var s=this.Mi(r);if(r===Xn||s.dirty||C(s.fingerprint)){var o;try{if((o=this.Ei(i,r))===s.fingerprint)return void(s.dirty=!1)}catch{o=void 0}e.F(n,i,this.$i,this.Ni,this.qi,this.Ne.debug)?(s.dirty=!1,r!==Xn&&(s.persisted=!0),C(o)||(s.fingerprint=o)):this.Ne.debug&&A.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,i=n!==void 0&&n;if(C(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!i&&this.gi)for(var r of Wo)de.q(this.Si(r));i?delete this.ci[Xn]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,i){if(ve(e)){C(n)&&(n="None"),this.$i=C(i)?this.ji:i;var r=!1;if(ae(e,((s,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,s),r=!0)})),r)return this.save(),!0}return!1}register(e,n){if(ve(e)){this.$i=C(n)?this.ji:n;var i=!1;if(ae(e,((r,s)=>{e.hasOwnProperty(s)&&(this.props[s]!==r||ve(r)||U(r))&&(this.Pi(s,r),i=!0)})),i)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,i=!1;for(var r of n)r in this.props&&(this.Ri(r),i=!0);i&&this.save()}update_campaign_params(){var e=F?.URL;if(e!==this.mi){var n=Jf(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);rn(Fl(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=F?.referrer)?Xf(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Qf(),$referring_domain:F!=null&&F.referrer&&((e=xs(F.referrer))==null?void 0:e.host)||ks},void 0)}set_initial_person_info(){this.props[Ta]||this.props[$a]||this.register_once({[ys]:eh(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};ae([$a,Ta],(r=>{var s=this.props[r];s&&ae(s,(function(o,a){e["$initial_"+ha(a)]=o}))}));var n=this.props[ys];if(n){var i=(function(r,s){s===void 0&&(s=!1);var o=th(r,s),a={};return ae(o,(function(l,u){a["$initial_"+ha(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);me(e,i)}return e}safe_merge(e){return ae(this.props,(function(n,i){i in e||(e[i]=n)})),e}update_config(e,n,i){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!i),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var r=e.persistence!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((f,p)=>f===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),s=r?this.bi(e):this.ii,o=this.wi(e);if(r||o!==this.pi){var a=this.props;this.clear(),this.ii=s,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var i=this.props[Wi]||{};i[e]=n,this.Pi(Wi,i),this.save()}remove_event_timer(e){var n=this.props[Wi]||{},i=n[e];return C(i)||(delete n[e],this.Pi(Wi,n),this.save()),i}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var i;this.props[e]=n,(i=An(e))!=null&&i.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,i=(n=An(e))==null?void 0:n.storageGroup;i&&(this.Mi(i).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Dr(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&qe(n.then)&&n.then(void 0,(()=>{}))}}}}var ze={GZipJS:"gzip-js",Base64:"base64"},Ti={Activation:"events",Cancellation:"cancelEvents"},zo={Popover:"popover",API:"api",Widget:"widget"},en={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},Vo={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},Ba={Popover:"popover",Inline:"inline"},zm={SHOWN:"product tour shown"},yu={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},_u=ye("[RateLimiter]");class Vm{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var i=n.text;if(i&&i.length)try{(JSON.parse(i).quota_limited||[]).forEach((r=>{_u.info((r||"events")+" is quota limited."),this.serverLimits[r]=new Date().getTime()+6e4}))}catch(r){return void _u.warn('could not rate limit - continuing. Error: "'+r?.message+'"',{text:i})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var n,i,r;e===void 0&&(e=!1);var s=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(i=this.instance.persistence)==null?void 0:i.get_property(Ra))!==null&&n!==void 0?n:{tokens:s,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>s&&(l.tokens=s);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(Pe(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(r=this.instance.persistence)==null||r.set_property(Ra,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!U(n)||!n.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&_e!=null&&_e.pathname)return""+((e=_e.origin)!==null&&e!==void 0?e:"")+_e.pathname}Hi(e){var n,i,r=this.captureEventsBurstLimit,s=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(i=this.instance).get_session_id)==null?void 0:n.call(i):void 0,l=[e+" event(s) dropped since the last warning",o?"triggered on "+o:void 0,a?"session "+a:void 0].filter(Boolean).join(", ");return!!this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited: "+l+". Config is set to "+s+" events per second and "+r+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return mn.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void mn.warn("Remote config is disabled. Falling back to local config.");this.Wi((e=>{if(!e)return mn.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi((n=>{this.Zi(n.json,n),this.Gi()}));this.Zi(e),this.Gi()}))}catch(e){mn.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&F&&F.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||mn.warn("Failed to fetch remote config from PostHog."):mn.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(r){mn.error("Error applying remote config",r)}if(e?.hasFeatureFlags!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var i;(i=this._instance.featureFlags)==null||i.ensureFlagsLoaded()}catch(r){mn.error("Error loading feature flags",r)}}}var mt=Uint8Array,et=Uint16Array,vi=Uint32Array,Ml=new mt([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ll=new mt([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),wu=new mt([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rh=function(t,e){for(var n=new et(31),i=0;31>i;++i)n[i]=e+=1<i;++i)for(var s=n[i];n[i+1]>s;++s)r[s]=s-n[i]<<5|i;return[n,r]},sh=rh(Ml,2),Da=sh[1];sh[0][28]=258,Da[258]=28;for(var bu=rh(Ll,0)[1],oh=new et(32768),be=0;32768>be;++be){var Qn=(43690&be)>>>1|(21845&be)<<1;oh[be]=((65280&(Qn=(61680&(Qn=(52428&Qn)>>>2|(13107&Qn)<<2))>>>4|(3855&Qn)<<4))>>>8|(255&Qn)<<8)>>>1}var er=function(t,e,n){for(var i=t.length,r=0,s=new et(e);i>r;++r)++s[t[r]-1];var o,a=new et(e);for(r=0;e>r;++r)a[r]=a[r-1]+s[r-1]<<1;for(o=new et(i),r=0;i>r;++r)o[r]=oh[a[t[r]-1]++]>>>15-t[r];return o},Hn=new mt(288);for(be=0;144>be;++be)Hn[be]=8;for(be=144;256>be;++be)Hn[be]=9;for(be=256;280>be;++be)Hn[be]=7;for(be=280;288>be;++be)Hn[be]=8;var Cs=new mt(32);for(be=0;32>be;++be)Cs[be]=5;var Gm=er(Hn,9),Km=er(Cs,5),ah=function(t){return(t/8>>0)+(7&t&&1)},lh=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var i=new(t instanceof et?et:t instanceof vi?vi:mt)(n-e);return i.set(t.subarray(e,n)),i},qt=function(t,e,n){var i=e/8>>0;t[i]|=n<<=7&e,t[i+1]|=n>>>8},$i=function(t,e,n){var i=e/8>>0;t[i]|=n<<=7&e,t[i+1]|=n>>>8,t[i+2]|=n>>>16},Go=function(t,e){for(var n=[],i=0;t.length>i;++i)t[i]&&n.push({s:i,f:t[i]});var r=n.length,s=n.slice();if(!r)return[new mt(0),0];if(r==1){var o=new mt(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(S,I){return S.f-I.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=r-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var f=s[0].s;for(i=1;r>i;++i)s[i].s>f&&(f=s[i].s);var p=new et(f+1),h=ja(n[c-1],p,0);if(h>e){i=0;var g=0,m=h-e,v=1<i;++i){var x=s[i].s;if(e>=p[x])break;g+=v-(1<>>=m;g>0;){var E=s[i].s;e>p[E]?g-=1<=0&&g;--i){var y=s[i].s;p[y]==e&&(--p[y],++g)}h=e}return[new mt(p),h]},ja=function(t,e,n){return t.s==-1?Math.max(ja(t.l,e,n+1),ja(t.r,e,n+1)):e[t.s]=n},Eu=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new et(++e),i=0,r=t[0],s=1,o=function(l){n[i++]=l},a=1;e>=a;++a)if(t[a]==r&&a!=e)++s;else{if(!r&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(r),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(r);s=1,r=t[a]}return[n.subarray(0,i),e]},Mi=function(t,e){for(var n=0,i=0;e.length>i;++i)n+=t[i]*e[i];return n},Ua=function(t,e,n){var i=n.length,r=ah(e+2);t[r]=255&i,t[r+1]=i>>>8,t[r+2]=255^t[r],t[r+3]=255^t[r+1];for(var s=0;i>s;++s)t[r+s+4]=n[s];return 8*(r+4+i)},Su=function(t,e,n,i,r,s,o,a,l,u,c){qt(e,c++,n),++r[256];for(var d=Go(r,15),f=d[0],p=d[1],h=Go(s,15),g=h[0],m=h[1],v=Eu(f),x=v[0],E=v[1],y=Eu(g),S=y[0],I=y[1],R=new et(19),b=0;x.length>b;++b)R[31&x[b]]++;for(b=0;S.length>b;++b)R[31&S[b]]++;for(var P=Go(R,7),T=P[0],M=P[1],L=19;L>4&&!T[wu[L-1]];--L);var B,Y,G,$,q=u+5<<3,se=Mi(r,Hn)+Mi(s,Cs)+o,Fe=Mi(r,f)+Mi(s,g)+o+14+3*L+Mi(R,T)+(2*R[16]+3*R[17]+7*R[18]);if(se>=q&&Fe>=q)return Ua(e,c,t.subarray(l,l+u));if(qt(e,c,1+(se>Fe)),c+=2,se>Fe){B=er(f,p),Y=f,G=er(g,m),$=g;var ee=er(T,M);for(qt(e,c,E-257),qt(e,c+5,I-1),qt(e,c+10,L-4),c+=14,b=0;L>b;++b)qt(e,c+3*b,T[wu[b]]);c+=3*L;for(var Ee=[x,S],Me=0;2>Me;++Me){var ie=Ee[Me];for(b=0;ie.length>b;++b)qt(e,c,ee[he=31&ie[b]]),c+=T[he],he>15&&(qt(e,c,ie[b]>>>5&127),c+=ie[b]>>>12)}}else B=Gm,Y=Hn,G=Km,$=Cs;for(b=0;a>b;++b)if(i[b]>255){var he;$i(e,c,B[257+(he=i[b]>>>18&31)]),c+=Y[he+257],he>7&&(qt(e,c,i[b]>>>23&31),c+=Ml[he]);var ue=31&i[b];$i(e,c,G[ue]),c+=$[ue],ue>3&&($i(e,c,i[b]>>>5&8191),c+=Ll[ue])}else $i(e,c,B[i[b]]),c+=Y[i[b]];return $i(e,c,B[256]),c+Y[256]},Ym=new vi([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Jm=(function(){for(var t=new vi(256),e=0;256>e;++e){for(var n=e,i=9;--i;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),Ko=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function Zm(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(f){for(var p=d,h=0;f.length>h;++h)p=Jm[255&p^f[h]]^p>>>8;d=p},d(){return 4294967295^d}}})(),i=t.length;n.p(t);var r,s,o,a,l,u=(a=10+((r=e).filename&&r.filename.length+1||0),l=8,(function(d,f,p,h,g,m){var v=d.length,x=new mt(h+v+5*(1+Math.floor(v/7e3))+g),E=x.subarray(h,x.length-g),y=0;if(!f||8>v)for(var S=0;v>=S;S+=65535){var I=S+65535;v>I?y=Ua(E,y,d.subarray(S,I)):(E[S]=!0,y=Ua(E,y,d.subarray(S,v)))}else{for(var R=Ym[f-1],b=R>>>13,P=8191&R,T=(1<S;++S){var he=G(S),ue=32767&S,Oe=L[he];if(M[ue]=Oe,L[he]=ue,S>=Me){var N=v-S;if((Fe>7e3||Ee>24576)&&N>423){y=Su(d,E,0,$,q,se,ee,Ee,ie,S-ie,y),Ee=Fe=ee=0,ie=S;for(var Z=0;286>Z;++Z)q[Z]=0;for(Z=0;30>Z;++Z)se[Z]=0}var Re=2,Be=0,nt=P,Te=ue-Oe&32767;if(N>2&&he==G(S-Te))for(var Ae=Math.min(b,N)-1,it=Math.min(32767,S),Kn=Math.min(258,N);it>=Te&&--nt&&ue!=Oe;){if(d[S+Re]==d[S+Re-Te]){for(var Je=0;Kn>Je&&d[S+Je]==d[S+Je-Te];++Je);if(Je>Re){if(Re=Je,Be=Te,Je>Ae)break;var Yn=Math.min(Te,Je-2),Ut=0;for(Z=0;Yn>Z;++Z){var Ht=S-Te+Z+32768&32767,yt=Ht-M[Ht]+32768&32767;yt>Ut&&(Ut=yt,Oe=Ht)}}}Te+=(ue=Oe)-(Oe=M[ue])+32768&32767}if(Be){$[Ee++]=268435456|Da[Re]<<18|bu[Be];var pn=31&Da[Re],Ci=31&bu[Be];ee+=Ml[pn]+Ll[Ci],++q[257+pn],++se[Ci],Me=S+Re,++Fe}else $[Ee++]=d[S],++q[d[S]]}}y=Su(d,E,!0,$,q,se,ee,Ee,ie,S-ie,y)}return lh(x,0,h+ah(y)+g)})(s=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):12+o.mem,a,l)),c=u.length;return(function(d,f){var p=f.filename;if(d[0]=31,d[1]=139,d[2]=8,d[8]=2>f.level?4:f.level==9?2:0,d[9]=3,f.mtime!=0&&Ko(d,4,Math.floor(new Date(f.mtime||Date.now())/1e3)),p){d[3]=8;for(var h=0;p.length>=h;++h)d[h+10]=p.charCodeAt(h)}})(u,e),Ko(u,c-8,n.d()),Ko(u,c-4,i),u}var Xm=!!ua||!!_l,ch="text/plain",Xr=!1,uh=(t,e)=>{var n=t.split("#"),i=n[1],r=n[0].split("?"),s=r[0],o=r[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return s+(a?"?"+a:"")+(i?"#"+i:"")},Ks=function(t,e,n){var i;n===void 0&&(n=!0);var r=t.split("?"),s=r[0],o=r[1],a=k({},e),l=(i=o?.split("&").map((c=>{var d,f=c.split("="),p=f[0],h=n&&(d=a[p])!==null&&d!==void 0?d:f[1];return delete a[p],p+"="+h})))!==null&&i!==void 0?i:[],u=(function(c,d){var f,p;d===void 0&&(d="&");var h=[];return ae(c,(function(g,m){C(g)||C(m)||m==="undefined"||(f=encodeURIComponent((v=>v instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),h[h.length]=p+"="+f)})),h.join(d)})(a);return u&&l.push(u),l.length>0?s+"?"+l.join("&"):s},Yo=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===ze.GZipJS){var i=Zm((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new mt(a.length+(a.length>>>1)),d=0,f=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var h=new mt(d+8+(u-p<<1));h.set(c),c=h}var g=a.charCodeAt(p);128>g?f(g):2048>g?(f(192|g>>>6),f(128|63&g)):g>55295&&57344>g?(f(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),f(128|g>>>12&63),f(128|g>>>6&63),f(128|63&g)):(f(224|g>>>12),f(128|g>>>6&63),f(128|63&g))}return lh(c,0,d)})(si(e)),{mtime:0});return{contentType:ch,body:i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength),estimatedSize:i.byteLength}}if(n===ze.Base64){var r=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(si(e)),s=(a=>"data="+encodeURIComponent(typeof a=="string"?a:si(a)))(r);return{contentType:"application/x-www-form-urlencoded",body:s,estimatedSize:new Blob([s]).size}}var o=si(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},dh=t=>{var e,n,i=()=>t.transport==="sendBeacon"?{url:Ks(t.url,{compression:ze.Base64}),encodedBody:Yo(k({},t,{compression:ze.Base64,Ji:void 0}))}:{url:uh(t.url,"compression"),encodedBody:Yo(k({},t,{compression:void 0,Ji:void 0}))};try{e=Yo(t)}catch(r){if(Wc(t.compression,gi(t.url,"compression")))return A.error("Failed to gzip request body, sending uncompressed payload",r),i();throw r}return e&&Wc(t.compression,gi(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?da(new Uint8Array(n)):ArrayBuffer.isView(n)&&da(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(Xr=!0,i()):{url:t.url,encodedBody:e}},fh=t=>{try{return dh(t)}catch(e){return A.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Qm=(function(){var t=ce((function*(e){var n=si(e.data),i=yield(function(s,o,a){return fa.apply(this,arguments)})(n,oe.DEBUG,{rethrow:!0});if(!i)return e;var r=yield i.arrayBuffer();return k({},e,{Ji:{contentType:ch,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),ev=/Failed to fetch|NetworkError|Load failed/i,hh=t=>t?.name==="TypeError"&&ev.test(t?.message||""),ph=t=>{var e=fh(t);if(e){var n=e.url,i=e.encodedBody,r=i??{},s=r.contentType,o=r.body,a=r.estimatedSize,l=new Headers;ae(t.headers,(function(h,g){l.append(g,h)})),s&&l.append("Content-Type",s);var u=null,c=!1;if(Oc){var d=new Oc;u={signal:d.signal,timeout:setTimeout((()=>{var h,g;c=!0,d.abort((h=t.timeout,(g=new Error("PostHog request timed out"+(h?" after "+h+"ms":""))).name="AbortError",g))}),t.timeout)}}var f=h=>{c&&h?.name==="AbortError"||hh(h)?A.warn(h):A.error(h),t.callback==null||t.callback({statusCode:0,error:h})};try{var p;_l(n,k({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((h=>h.text().then((g=>{var m={statusCode:h.status,text:g};if(h.status===200)try{m.json=JSON.parse(g)}catch(v){A.error(v)}t.callback==null||t.callback(m)})))).catch(f).finally((()=>u?clearTimeout(u.timeout):null))}catch(h){u&&clearTimeout(u.timeout),f(h)}}},Ha=t=>{try{var e,n=dh(t),i=n.url,r=n.encodedBody,s=r??{},o=s.body,a=s.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:s.contentType});if(Ve.sendBeacon(i,l))return;var u=U(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(U(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=f=>U(t.data)?f:k({},t.data,{batch:f});return Ha(k({},t,{data:d(u.slice(0,c))})),void Ha(k({},t,{data:d(u.slice(c))}))}A.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),ph(k({},t,{Yi:!0}))}catch(f){A.warn("Beacon send failed",f)}},xu=(t,e,n,i)=>{var r=i==="query"?e==="POST"?"sent_at":"_":void 0;return Ks(n===ze.GZipJS?uh(t,"compression"):t,k({},r?{[r]:Date.now().toString()}:{},n===ze.GZipJS?{}:{compression:n}))},Qr=[];_l&&Qr.push({transport:"fetch",method:ph}),ua&&Qr.push({transport:"XHR",method(t){var e=fh(t);if(e){var n=new ua,i=e.encodedBody;n.open(t.method||"GET",e.url,!0);var r=i??{},s=r.contentType,o=r.body;ae(t.headers,(function(a,l){n.setRequestHeader(l,a)})),s&&n.setRequestHeader("Content-Type",s),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),Ve!=null&&Ve.sendBeacon&&Qr.push({transport:"sendBeacon",method:Ha});var Wa=3e3;class tv{constructor(e,n){this.Xi=!0,this.tr=[],this.er=Tt(n?.flush_interval_ms||Wa,250,5e3,A.createLogger("flush interval"),Wa),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},n=Object.values(e);[...n.filter((i=>i.url.indexOf("/e")===0)),...n.filter((i=>i.url.indexOf("/e")!==0))].map((i=>{this.lr(k({},i,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var n=this.ar(),i=function(){var s=n[r],o=new Date().getTime();s.data&&U(s.data)&&ae(s.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(s)};for(var r in n)i()}}),this.er))}lr(e){try{this.ir(e)}catch(n){A.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return ae(this.tr,(n=>{var i,r=n,s=(r?r.batchKey:null)||r.url;C(e[s])&&(e[s]=k({},r,{data:[]})),(i=e[s].data)==null||i.push(r.data)})),this.tr=[],e}}var nv=["retriesPerformedSoFar"];class iv{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!C(w)&&"onLine"in w.navigator&&(this.dr=w.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},we(w,"online",this.vr),we(w,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,i=Ud(e,nv);Vt(n)&&(i.url=Ks(i.url,{retry_count:n})),this._instance._send_request(k({},i,{callback:r=>{if(r.statusCode!==200&&(400>r.statusCode||r.statusCode>=500)){if((r.statusCode===0?3:10)>(n??0))return void this.At(k({retriesPerformedSoFar:n},i));r.statusCode===0&&A.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}i.callback==null||i.callback(r)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+1;var i=(function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))})(n),r=Date.now()+i;this.tr.push({retryAt:r,requestOptions:e});var s="Enqueued failed request for retry in "+i;navigator.onLine||(s+=" (Browser is offline)"),A.warn(s),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],i=this.tr.filter((s=>e>s.retryAt||(n.push(s),!1)));if(this.tr=n,i.length>0)for(var r of i)this.retriableRequest(r.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,C(w)||(this.vr&&(w.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(w.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(k({},n,{transport:"sendBeacon"}))}catch(i){A.error(i)}}this.tr=[]}}class rv{constructor(e){this.yr=()=>{var n,i,r,s;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(i=this.br.maxScrollHeight)!==null&&i!==void 0?i:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(r=this.br.maxContentY)!==null&&r!==void 0?r:0),this.br.maxContentHeight=Math.max(c,(s=this.br.maxContentHeight)!==null&&s!==void 0?s:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){we(w,"scroll",this.yr,{capture:!0}),we(w,"scrollend",this.yr,{capture:!0}),we(w,"resize",this.yr)}scrollElement(){if(!this._r)return w?.document.documentElement;var e=U(this._r)?this._r:[this._r];for(var n of e){var i=w?.document.querySelector(n);if(i)return i}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var i=this.scrollElement();return i&&i[n]||0}return w?e==="y"?w.scrollY||w.pageYOffset||w.document.documentElement.scrollTop||0:w.scrollX||w.pageXOffset||w.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var sv=t=>eh(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Iu{constructor(e,n,i,r){this.kr=s=>{var o=this.Sr();if(!o||o.sessionId!==s){var a={sessionId:s,props:this.Cr(this._instance)};this.Mr.register({[Fa]:a})}},this._instance=e,this.Tr=n,this.Mr=i,this.Cr=r||sv,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Fa]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?th(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return ae(Fl(this.getSetOnceProps()),((n,i)=>{i==="$current_url"&&(i="url"),e["$session_entry_"+ha(i)]=n})),e}}class Nl{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((i=>i!==n))}}emit(e,n){for(var i of this.Er[e]||[])i(n);for(var r of this.Er["*"]||[])r(e,n)}constructor(){this.Er={}}}var Li=ye("[SessionId]");class ku{on(e,n){return this.Ir.on(e,n)}constructor(e,n,i){var r;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Nl,this.Lr=(u,c)=>!(!Vt(u)||!Vt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===Xt)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=n||Yt,this.Nr=i||Yt;var s=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*Tt(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Li.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+s+"_window_id",this.Br="ph_"+s+"_primary_window_exists",this.Hr()){var o=xe.H(this.jr),a=xe.H(this.Br);o&&!a?this.Or=o:xe.q(this.jr),xe.F(this.Br,!0)}if((r=this.Ne.bootstrap)!=null&&r.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Li.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return C(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&xe.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&xe.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?xe.H(this.jr):null}Zr(e){var n=this.Pr;return!tt(n)&&!tt(e)&&5e3>Math.abs(e-n)}Ur(e,n,i){var r=n!==this._sessionActivityTimestamp,s=!(e!==this.Dr||i!==this._sessionStartTimestamp);this._sessionStartTimestamp=i,this._sessionActivityTimestamp=n,this.Dr=e,s&&!r||s&&this.Zr(n)||(this.Pr=n,this.Mr.register({[ri]:[n,e,i]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return Vt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(ri):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!tt(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[ri]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=Vt(e)?e:0,i=Vt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,i)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[ri];return U(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&w&&(w.removeEventListener(bs,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&xe.q(this.Br)},we(w,bs,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===Xt)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var i=n||new Date().getTime(),r=this.Jr(),s=r[1],o=r[2],a=this.Yr(),l=this.Vr(),u=Vt(o)&&Math.abs(i-o)>864e5,c=!1,d=!1,f=!s,p=s,h=!f&&!e&&this.Lr(i,a);if(h){(h=this.Xr(i))||Li.info("cross-tab refresh kept the session alive",{sessionId:s});var g=this.Jr();s=g[1],o=g[2]}f||h||u?(s=this.$r(),l=this.Nr(),Li.info("new session ID generated",{sessionId:s,windowId:l,changeReason:{noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u}}),o=i,c=!0):(l||(l=this.Nr(),c=!0),(d=s!==p)&&(Li.info("adopted cross-tab session id",{sessionId:s,windowId:l}),c=!0));var m=Vt(a)&&e&&!u?a:i,v=Vt(o)?o:new Date().getTime();this.Wr(l),this.Ur(s,m,v),e||this.qr();var x={noSessionId:f,activityTimeout:h,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((E=>E(s,l,x))),{sessionId:s,windowId:l,sessionStartTimestamp:v,changeReason:c?x:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var gh=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&zc(n,e))return!0;try{var i=t?.userAgentData;if(i!=null&&i.brands&&i.brands.some((r=>zc(r?.brand,e))))return!0}catch{}return!!t.webdriver};function mh(){return(mh=ce((function*(){var t=Ve?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return Q(n)&&n.length>0?n:void 0}catch(i){return void A.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",i)}}))).apply(this,arguments)}var As=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function Jo(t,e,n){return si({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var vh={exact:(t,e)=>e.some((n=>t.some((i=>n===i)))),is_not:(t,e)=>e.every((n=>t.every((i=>n!==i)))),regex:(t,e)=>e.some((n=>t.some((i=>As(n,i))))),not_regex:(t,e)=>e.every((n=>t.every((i=>!As(n,i))))),icontains:(t,e)=>e.map(jr).some((n=>t.map(jr).some((i=>n.includes(i))))),not_icontains:(t,e)=>e.map(jr).every((n=>t.map(jr).every((i=>!n.includes(i))))),gt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>i>parseFloat(r)))})),lt:(t,e)=>e.some((n=>{var i=parseFloat(n);return!isNaN(i)&&t.some((r=>it.toLowerCase();function yh(t,e){return!t||Object.entries(t).every((n=>{var i=n[1],r=e?.[n[0]];if(C(r)||tt(r))return!1;var s=[String(r)],o=vh[i.operator];return!!o&&o(i.values,s)}))}var qa="custom",Cu="i.posthog.com",ov=/^\/static\//;class av{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+Cu,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":qa),this.en[this.apiHost]}rn(e){if(ov.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var i=this.rn(n);if(i)return""+i+n}if(this.region===qa)return this.apiHost+n;var r=Cu+n;switch(e){case"assets":return"https://"+this.region+"-assets."+r;case"api":return"https://"+this.region+"."+r}}}function _h(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var te=ye("[Surveys]"),wh="seenSurvey_",bh=t=>{try{var e=(n=>((i,r)=>""+wh+(function(s){return s.current_iteration&&s.current_iteration>0?s.id+"_"+s.current_iteration:s.id})(r))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){te.error("Failed to persist survey seen state",n)}},lv=[zo.Popover,zo.Widget,zo.API],cv={ignoreConditions:!1,ignoreDelay:!1,displayType:Ba.Popover},uv=ye("[PostHog ExternalIntegrations]"),dv={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class fv{constructor(e){this._instance=e}ai(e,n){var i;(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,e,(r=>{if(r)return uv.error("failed to load script",r);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var s,o,a,l=i[0],u=i[1];!u||(s=O.__PosthogExtensions__)!=null&&(s=s.integrations)!=null&&s[l]||e.ai(dv[l],(()=>{var c;(c=O.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=O.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=O.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var i of Object.entries((r=this._instance.config.integrations)!==null&&r!==void 0?r:{})){var r;n()}}}class hv{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return ce((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var i=e.setup(n.nn);i&&(yield i)}catch(s){var r=n.sn.get(e.name)===e;r&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',s),r&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&qe(n.then)&&n.then(void 0,(i=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}))}catch(i){this.rt.error('Failed to dispose browser extension "'+e.name+'"',i)}}}class pv{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var i={};for(var r of e){var s=n?.get_property(r);C(s)||(i[r]=s)}return i}set(e,n){var i;(i=this._instance.persistence)==null||i.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var Au="extensionsRemoteConfig";class gv{constructor(e){this.an=!1,this.instance=e,this.rt=A,this.un=e.hn,this.kv=new pv(e),this.onEvent=n=>Dr(this.instance.on("eventCaptured",(i=>{try{n({event:i.event,properties:i.properties})}catch(r){this.rt.error("Browser extension event listener failed",r)}}))),this.onRemoteConfig=n=>{if(this.an)return Dr((()=>{}));var i=s=>{try{n(s)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},r=this.instance.dn.on(Au,i);return this.un&&i(this.un),Dr(r)},this.vn=new hv(A.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(ar))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(ar);return typeof e=="string"?e:void 0}get library(){return{name:oe.LIB_NAME,version:oe.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,i,r,s=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=s?.sessionId)!==null&&n!==void 0?n:"",windowId:(i=s?.windowId)!==null&&i!==void 0?i:"",sessionStartTimestamp:(r=s?.sessionStartTimestamp)!==null&&r!==void 0?r:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,n,i){var r=this;return ce((function*(){i?r.instance.capture(e,n,{timestamp:i.timestamp,uuid:i.uuid,$set:i.set,$set_once:i.setOnce}):r.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Dr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Au,e))}sendRequest(e,n){var i=this;return ce((function*(){var r;n===void 0&&(n={});var s=i.instance.requestRouter.endpointFor((r=n.target)!==null&&r!==void 0?r:"api",e),o={method:n.method,url:n.query?Ks(s,n.query):s,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.transport==="sendBeacon"?(i.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,i.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var tr={},Zo=0,Ps=()=>{},Pu='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ni="Surveys module not available",Fu="sanitize_properties is deprecated. Use before_send instead",Eh="Invalid value for property_denylist config: ",mv=["token","distinct_id",Pf],ii="posthog",Sh=!Xm&&Xe?.indexOf("MSIE")===-1&&Xe?.indexOf("Mozilla")===-1,Xo=t=>{var e;return k({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:vm(F?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:Ps,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:_e&&Q(_e?.search)&&_e.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(w==null||(e=w.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(n){A.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:Ma,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:Wa},error_tracking:{},_onCapture:Ps},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:Pm,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},vv=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],Ru=t=>{var e={};for(var n of vv){var i=n[0],r=n[1];C(t[i])||(e[r]=t[i])}var s=me({},e,t),o=t.__preview_external_dependency_versioned_paths;return C(o)||(C(t.strict_script_versioning)&&(s.strict_script_versioning=!!o),Q(o)&&C(t.asset_host)&&(s.asset_host=o)),U(t.property_blacklist)&&(C(t.property_denylist)?s.property_denylist=t.property_blacklist:U(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:A.error(Eh+t.property_denylist)),s};class yv{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){A.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class rt{pn(e,n){if(e){var i=this.sn.indexOf(e);i!==-1&&this.sn.splice(i,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===Xt||this.config.cookieless_mode===Ln&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new yv,this.mn=!1,this.version=oe.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Nl,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Xo(),this.SentryIntegration=Om,this.sentryIntegration=i=>(function(r,s){var o=Gf(r,s);return{name:Vf,processEvent:a=>o(a)}})(this,i),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new rv(this),this.pageViewManager=new mu(this),this.rateLimiter=new Vm(this),this.requestRouter=new av(this),this.consent=new xm(this),this.externalIntegrations=new fv(this);var n=(e=rt.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(i,r,s)=>{var o=Q(i)?{[i]:r}:i;this.setPersonProperties(o),s?.({})},set_once:(i,r,s)=>{var o=Q(i)?{[i]:r}:i;this.setPersonProperties(void 0,o),s?.({})}},this.on("eventCaptured",(i=>A.info('send "'+i?.event+'"',i)))}init(e,n,i){if(i&&i!==ii){var r,s=(r=tr[i])!==null&&r!==void 0?r:new rt;return s._init(e,n,i),tr[i]=s,tr[ii][i]=s,s}return this._init(e,n,i)}_init(e,n,i){var r,s;n===void 0&&(n={});var o,a=Q(e)?e.trim():"";if(!a)return A.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=Xo(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=Xo(n.defaults),u=Ru(n),c=me({},l,u,{name:i,token:a});ve(l.rageclick)&&ve(u.rageclick)&&(c.rageclick=me({},l.rageclick,u.rageclick)),ve(l.session_recording)&&ve(u.session_recording)&&(c.session_recording=me({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&A.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=n.disable_compression?void 0:ze.GZipJS;var d=this.En();if(this.persistence=new qo(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new qo(k({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&xe.N()){var f=xe.H(this.bn);U(f)&&f.forEach((I=>{Q(I)&&this.yn.add(I)}))}else xe.q(this.bn);var p=k({},this.persistence.props),h=k({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new tv((I=>this.Pn(I)),this.config.request_queue_config),this.Rn=new iv(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new ku(this),this.sessionPropsManager=new Iu(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((I,R,b)=>{(b!=null&&b.activityTimeout||b!=null&&b.sessionPastMaximumLength||b!=null&&b.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(A.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(A.info("Initializing extensions synchronously"),this.Ln(g)),oe.DEBUG=oe.DEBUG||this.config.debug,oe.DEBUG&&A.info("Starting in debug mode",{this:this,config:n,thisC:k({},this.config),p,s:h}),!this.config.identity_distinct_id||(r=n.bootstrap)!=null&&r.distinctID||(n.bootstrap=k({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((s=n.bootstrap)==null?void 0:s.distinctID)!==void 0){var m=n.bootstrap.distinctID,v=this.get_distinct_id(),x=this.persistence.get_property(pt);if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&x===Zn)this.identify(m);else if(n.bootstrap.isIdentifiedID&&v!=null&&v!==m&&x===kn)A.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var E=this.config.get_device_id(Yt()),y=n.bootstrap.isIdentifiedID?E:m;this.persistence.set_property(pt,n.bootstrap.isIdentifiedID?kn:Zn),this.register({distinct_id:m,$device_id:y})}}if(g)this.register_once({distinct_id:Mr,$device_id:null},"");else if(!this.get_distinct_id()){var S=this.config.get_device_id(Yt());this.register_once({distinct_id:S,$device_id:S},""),this.persistence.set_property(pt,Zn)}return we(w,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.segment?(function(I,R){var b=I.config.segment;if(!b)return R();(function(P,T){var M=P.config.segment;if(!M)return T();var L=Y=>{var G=()=>Y.anonymousId()||Yt();P.config.get_device_id=G,Y.id()&&(P.register({distinct_id:Y.id(),$device_id:G()}),P.persistence.set_property(pt,kn)),T()},B=M.user();"then"in B&&qe(B.then)?B.then(L):L(B)})(I,(()=>{b.register((P=>{typeof Promise<"u"&&Promise.resolve||Ho.warn("This browser does not have Promise support, and can not use the segment integration");var T=(M,L)=>{if(!L)return M;M.event.userId||M.event.anonymousId===P.get_distinct_id()||(Ho.info("No userId set, resetting PostHog"),P.reset()),M.event.userId&&M.event.userId!==P.get_distinct_id()&&(Ho.info("UserId set, identifying with PostHog"),P.identify(M.event.userId));var B=P.calculateEventProperties(L,M.event.properties);return M.event.properties=Object.assign({},B,M.event.properties),M};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:M=>T(M,M.event.event),page:M=>T(M,ni),identify:M=>T(M,Do),screen:M=>T(M,"$screen")}})(I)).then((()=>{R()}))}))})(this,(()=>this.On())):this.On(),qe(this.config._onCapture)&&this.config._onCapture!==Ps&&(A.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(I=>this.config._onCapture(I.event,I)))),this.config.ip&&A.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return mh.apply(this,arguments)})().then((I=>{I&&this.register({[Oo]:I})})).catch(Ps),this}Fn(){var e,n,i,r,s,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(i=rt.__defaultExtensionClasses)==null?void 0:i.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((r=this.Dn)==null||r.call(this),this.Dn=void 0,this.featureFlags=new a(this)),qe(this.featureFlags.onReloading)&&qe(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(s=(o=this.featureFlags).initialize)==null||s.call(o))}Ln(e){var n,i,r,s,o,a,l,u=performance.now(),c=k({},rt.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(i=this.surveys)!==null&&i!==void 0?i:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(r=this.logs)!==null&&r!==void 0?r:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(s=this.metrics)!==null&&s!==void 0?s:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,Nm)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((f=>{f.initialize&&d.push((()=>{f.initialize==null||f.initialize()}))})),d.push((()=>{if(this.Nn){var f=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(f)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var i=e.shift();if(i)try{i()}catch(s){A.error("Error initializing extension:",s)}}var r=Math.round(performance.now()-n);this.register_for_session({[Ff]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[Rf]:r}),this.config.__preview_deferred_init_extensions&&A.info("PostHog extensions initialized ("+r+"ms)")}Zi(e){var n;if(!F||!F.body)return A.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var i,r=e.config;r.supportedCompression&&!this.config.disable_compression&&(this.compression=j(r.supportedCompression,ze.GZipJS)?ze.GZipJS:j(r.supportedCompression,ze.Base64)?ze.Base64:void 0),(i=r.analytics)!=null&&i.endpoint&&(this.analyticsDefaultEndpoint=r.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:Ma}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((s=>s.onRemoteConfig==null?void 0:s.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(i){A.critical("`loaded` function failed",i)}if(this.Bn(),this.config.internal_or_test_user_hostname&&_e!=null&&_e.hostname){var e=_e.hostname,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new ih(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&Lr(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,i,r,s;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(Bo),(i=this.logs)==null||i.flushLogs("sendBeacon"),(r=this.In)==null||r.unload(),(s=this.Rn)==null||s.unload()):this.zn()&&this.capture(Bo,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?Sh?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=k({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(C(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var i,r,s,o=k({},n);o.timeout=o.timeout||6e4;var a,l,u,c,d,f=(i=o.transport)!==null&&i!==void 0?i:"fetch";f==="sendBeacon"&&C(o.compression)&&o.data&&(o.compression=ze.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=U(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,v){return v===void 0&&(v=new Date().toISOString()),U(m)?m.map((x=>k({},x,{sent_at:v}))):k({},m,{sent_at:v})})(o.data))),o.url=xu(o.url,o.method,o.compression,o.timestampMode);var p=Qr.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),h=(r=(s=(function(m,v){for(var x=0;m.length>x;x++)if(m[x].transport===f)return m[x]})(p))==null?void 0:s.method)!==null&&r!==void 0?r:p[0].method;if(!h)throw new Error("No available transport method");var g=m=>{try{h(m)}catch(v){hh(v)?A.warn(v):A.error(v),o.callback==null||o.callback({statusCode:0,error:v})}};f!=="sendBeacon"&&o.data&&o.compression===ze.GZipJS&&_g&&typeof Promise<"u"&&!Xr?Qm(o).then((m=>{g(m)})).catch((m=>{if(qc(m))return Xr=!0,void g(k({},o,{compression:void 0,url:xu(n.url,n.method,void 0,n.timestampMode)}));(v=>{if(!v||typeof v!="object")return!1;var x="name"in v?String(v.name):"";return qc(v)||x===Hd})(m)&&(Xr=!0),g(o)})):h(o)})(k({},e,{callback:n=>{var i,r;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(i=(r=this.config).on_request_error)==null||i.call(r,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){Zo++;try{var n,i=[],r=[],s=[];Lr(e,(a=>{if(a)if(U(n=a[0]))s.push(a);else if(qe(a))try{a.call(this)}catch(l){A.error("Error executing queued PostHog call",a,l)}else U(a)&&n==="alias"?i.push(a):U(a)&&n.indexOf("capture")!==-1&&qe(this[n])?s.push(a):r.push(a)}));var o=function(a,l){Lr(a,(function(u){try{if(U(u[0])){var c=l;ae(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){A.error("Error executing queued PostHog call",u,d)}}))};o(i,this),o(r,this),o(s,this)}finally{Zo--}}push(e){if(Zo>0&&U(e)&&Q(e[0])){var n=rt.prototype[e[0]];qe(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,i){var r,s,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!C(e)&&Q(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=i!=null&&i.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){n!=null&&n.$current_url&&!Q(n?.$current_url)&&(A.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||i!=null&&i.Wn||A.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,f=i?.timestamp||d,p=Yc(i?.uuid,Yt),h={uuid:p,event:e,properties:this.calculateEventProperties(e,n||{},f,p)};e===ni&&this.config.__preview_capture_bot_pageviews&&u&&(h.event="$bot_pageview",h.properties.$browser_type="bot"),c&&(h.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var g=e==="$feature_flag_called"&&h.properties.$feature_flag_has_experiment===!1&&this.get_property(ms)===!0;i?.$set&&!g&&(h.$set=i?.$set);var m=i?.$unset;m&&(h.$unset=m);var v,x,E,y=g?void 0:this.Vn(i?.$set_once,e!==tu,e===Do);if(y&&(h.$set_once=y),i!=null&&i._noTruncate||(s=this.config.properties_string_max_length,o=h,a=L=>Q(L)?L.slice(0,s):L,l=new Set,h=(function L(B,Y){if(B!==Object(B))return a?a(B):B;if(!l.has(B)){var G;if(l.add(B),U(B))G=[],Lr(B,(q=>{G.push(L(q))}));else{var $={};ae(B,((q,se)=>{l.has(q)||($[se]=L(q))})),G=$}return G}})(o)),h.timestamp=f,C(i?.timestamp)||(h.properties.$event_time_override_provided=!0,h.properties.$event_time_override_system_time=d),g&&(h.properties=(function(L,B){B===void 0&&(B=[]);var Y={},G=$=>{L[$]!==void 0&&(Y[$]=L[$])};return wg.forEach(G),B.forEach(G),Y})(h.properties,mv)),e===en.DISMISSED||e===en.SENT){var S=n?.[Vo.SURVEY_ID],I=n?.[Vo.SURVEY_ITERATION];bh({id:S,current_iteration:I}),h.$set=k({},h.$set,{[(v={id:S,current_iteration:I},x=e===en.SENT?"responded":"dismissed",E="$survey_"+x+"/"+v.id,v.current_iteration&&v.current_iteration>0&&(E="$survey_"+x+"/"+v.id+"/"+v.current_iteration),E)]:!0})}else e===en.SHOWN&&(h.$set=k({},h.$set,{[Vo.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===zm.SHOWN){var R=n?.[yu.TOUR_TYPE];R&&(h.$set=k({},h.$set,{[yu.TOUR_LAST_SEEN_DATE+"/"+R]:new Date().toISOString()}))}var b=k({},h.properties.$set,h.$set);if(rn(b)||this.setPersonPropertiesForFlags(b),!z(this.config.before_send)){var P=this.Pt(h);if(!P)return;(h=P).uuid=Yc(h.uuid,Yt)}this.dn.emit("eventCaptured",h);var T=(r=i?._url)!==null&&r!==void 0?r:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),M={method:"POST",url:T,data:h,compression:"best-available",timestampMode:i?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(T)?"body":"capture-body",batchKey:i?._batchKey,transport:i?.transport};return!this.config.request_batching||i&&(i==null||!i._batchKey)||i!=null&&i.send_instantly?this.Pn(M):this.In.enqueue(M),h}A.critical("This capture call is ignored due to client rate limiting.")}}else A.error("No event name provided to posthog.capture")}else A.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new gv(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var i=this._n.indexOf(e);i!==-1&&this._n.splice(i,1)}}}calculateEventProperties(e,n,i,r,s){if(i=i||new Date,!this.persistence||!this.sessionPersistence)return n;var o=s?void 0:this.persistence.remove_event_timer(e),a=k({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[Pf]=!0),e==="$snapshot"){var l=k({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!Q(a.distinct_id)&&!Pe(a.distinct_id)||pa(a.distinct_id))&&A.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(S,I,R,b){var P,T,M,L;if(b===void 0&&(b=!1),!Xe)return{};var B,Y=S?[...mi,...I||[]]:[],G=(function(Kn){for(var Je=0;Gc.length>Je;Je++){var Yn=Gc[Je],Ut=Yn[1],Ht=Yn[0].exec(Kn),yt=Ht&&(qe(Ut)?Ut(Ht,Kn):Ut);if(yt)return yt}return["",""]})(Xe),$=G[0],q=G[1],se=(B=typeof navigator<"u"?navigator:void 0)!=null&&B.brave?{brave:!0}:{},Fe={};C(R)||(Fe.detectGoogleSearchApp=R);var ee={},Ee=(P=navigator)==null||(P=P.userAgentData)==null?void 0:P.platform,Me=(T=navigator)==null?void 0:T.maxTouchPoints,ie=w==null||(M=w.screen)==null?void 0:M.width,he=w==null||(L=w.screen)==null?void 0:L.height,ue=w?.devicePixelRatio;C(Ee)||(ee.userAgentDataPlatform=Ee),C(Me)||(ee.maxTouchPoints=Me),C(ie)||(ee.screenWidth=ie),C(he)||(ee.screenHeight=he),C(ue)||(ee.devicePixelRatio=ue);var Oe,N,Z,Re,Be,nt,Te,Ae,it=me(Fl({$os:$,$os_version:q,$browser:pf(Xe,navigator.vendor,se,Fe),$device:Kc(Xe),$device_type:(N=Xe,Z=ee,Ae=Kc(N),Ae===Yd||Ae===Kd||Ae==="Kobo"||Ae==="Kindle Fire"||Ae===cf?fi:Ae===sr||Ae===li||Ae===or||Ae===ma?"Console":Ae===Zd?"Wearable":Ae?dt:Z?.userAgentDataPlatform==="Android"&&((Re=Z?.maxTouchPoints)!==null&&Re!==void 0?Re:0)>0?600>Math.min((Be=Z?.screenWidth)!==null&&Be!==void 0?Be:0,(nt=Z?.screenHeight)!==null&&nt!==void 0?nt:0)/((Te=Z?.devicePixelRatio)!==null&&Te!==void 0?Te:1)?dt:fi:"Desktop"),$timezone:nh(),$timezone_offset:Hm()}),{$current_url:cr(b?wn(_e?.href):_e?.href,Y,ur),$host:_e?.host,$pathname:_e?.pathname,$raw_user_agent:Xe.length>1e3?Xe.substring(0,997)+"...":Xe,$browser_version:Dg(Xe,navigator.vendor,se,Fe),$browser_language:vu(),$browser_language_prefix:(Oe=vu(),typeof Oe=="string"?Oe.split("-")[0]:void 0),$screen_height:w?.screen.height,$screen_width:w?.screen.width,$viewport_height:w?.innerHeight,$viewport_width:w?.innerWidth,$lib:oe.LIB_NAME,$lib_version:oe.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return oe.SDK_DIST_CHANNEL&&(it.$sdk_dist_channel=oe.SDK_DIST_CHANNEL),it})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(s,i.getTime()),f=d.windowId;a.$session_id=d.sessionId,a.$window_id=f}this.sessionPropsManager&&me(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&me(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(S){a.$sdk_debug_error_capturing_properties=String(S)}if(this.requestRouter.region===qa&&(a.$lib_custom_api_host=this.config.api_host),u=e!==ni||s?e!==Bo||s?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(i):this.pageViewManager.doPageView(i,r),a=me(a,u),e===ni&&F&&(a.title=F.title),!C(o)){var h=i.getTime()-o;a.$duration=parseFloat((h/1e3).toFixed(3))}Xe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),m=this.sessionPersistence.properties();ae(["$referrer","$referring_domain"],(S=>{S in g&&delete m[S]}));var v={};if(this._n.length>0)for(var x of this._n.slice())try{me(v,x())}catch(S){A.error("Failed to produce browser extension event properties",S)}(a=me({},c,g,m,k({},v,a))).$is_identified=this._isIdentified(),U(this.config.property_denylist)?ae(this.config.property_denylist,(function(S){delete a[S]})):A.error(Eh+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var E=this.config.sanitize_properties;E&&(A.error(Fu),a=E(a,e));var y=this.Zn();return a.$process_person_profile=y,y&&!s&&this.Gn("_calculate_event_properties"),a}Vn(e,n,i){var r;if(n===void 0&&(n=!0),i===void 0&&(i=!1),!this.persistence||!this.Zn()||this.mn&&!i)return e;var s=this.persistence.get_initial_props(),o=(r=this.sessionPropsManager)==null?void 0:r.getSetOnceProps(),a=me({},s,o||{},e||{}),l=this.config.sanitize_properties;return l&&(A.error(Fu),a=l(a,"$set_once")),n&&(this.mn=!0),rn(a)?void 0:a}register(e,n){var i;(i=this.persistence)==null||i.register(e,n)}register_once(e,n,i){var r;(r=this.persistence)==null||r.register_once(e,n,i)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((i=>this.yn.add(i))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!xe.N())xe.q(this.bn);else{var n=[];this.yn.forEach((i=>n.push(i))),n.length>0?xe.F(this.bn,n):xe.q(this.bn)}}getFeatureFlag(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var i;return(i=this.featureFlags)==null?void 0:i.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var i,r;return(i=(r=this.featureFlags)==null?void 0:r.isFeatureEnabled(e,n))!==null&&i!==void 0?i:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,i){var r;(r=this.featureFlags)==null||r.updateFlags(e,n,i)}updateEarlyAccessFeatureEnrollment(e,n,i){var r;(r=this.featureFlags)==null||r.updateEarlyAccessFeatureEnrollment(e,n,i)}getEarlyAccessFeatures(e,n,i){var r;return n===void 0&&(n=!1),(r=this.featureFlags)==null?void 0:r.getEarlyAccessFeatures(e,n,i)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Ni}),()=>{})}onSessionId(e){var n,i;return(n=(i=this.sessionManager)==null?void 0:i.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:Ni})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:Ni})}renderSurvey(e,n){var i;(i=this.surveys)==null||i.renderSurvey(e,n)}displaySurvey(e,n){var i;n===void 0&&(n=cv),(i=this.surveys)==null||i.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,i;return(n=(i=this.surveys)==null?void 0:i.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:Ni}}canRenderSurveyAsync(e,n){var i,r;return n===void 0&&(n=!1),(i=(r=this.surveys)==null?void 0:r.canRenderSurveyAsync(e,n))!==null&&i!==void 0?i:Promise.resolve({visible:!1,disabledReason:Ni})}Jn(e){return!e||pa(e)?(A.critical("Unique user id has not been set in posthog.identify"),!1):e===Mr?(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(A.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,i){if(!this.__loaded||!this.persistence)return A.uninitializedWarning("posthog.identify");if(Pe(e)&&(e=e.toString(),A.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var r=this.get_distinct_id();this.register({$user_id:e}),this.get_property(ar)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),e!==r&&e!==this.get_property(Hi)&&(this.unregister(Hi),this.register({distinct_id:e}));var s,o=(this.persistence.get_property(pt)||Zn)===Zn,a=e!==r,l=!a&&o;if(a&&o)this.persistence.set_property(pt,kn),this.setPersonPropertiesForFlags({$set:n||{},$set_once:i||{}},!1),this.capture(Do,{distinct_id:e,$anon_distinct_id:r},{$set:n||{},$set_once:i||{}}),this.Sn=Jo(e,n,i),(s=this.featureFlags)==null||s.setAnonymousDistinctId(r);else if(l){this.persistence.set_property(pt,kn);var u=n||{},c=i||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=Jo(e,n,i)}else(n||i)&&this.setPersonProperties(n,i);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Nn)):l&&(n||i)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var i=Jo(this.get_distinct_id(),e,n);this.Sn!==i?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=i):A.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,i=(U(e)?e:[e]).filter((r=>Q(r)&&r.length>0));i.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(i,!0),this.capture("$set",{$unset:i}),this.Sn=null)}group(e,n,i){if(e&&n){var r=this.getGroups(),s=r[e]!==n;if(s&&this.resetGroupPropertiesForFlags(e),this.register({$groups:k({},r,{[e]:n})}),s||i){var o={$group_type:e,$group_key:n};i&&(o.$group_set=i),this.capture(tu,o)}i&&this.setGroupPropertiesForFlags({[e]:i}),s&&!i&&this.reloadFeatureFlags()}else A.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),(i=this.featureFlags)==null||i.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var i;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((i=this.featureFlags)==null||i.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var i,r,s,o,a,l,u,c,d,f;if(n===void 0&&(n=!1),A.info("reset"),!this.__loaded)return A.uninitializedWarning("posthog.reset");var p,h=this.get_property(ar),g=this.get_property(Oo),m=this.get_property(On),v=this.is_capturing();if(this.consent.reset(),n||!v||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(i=this.persistence)==null||i.clear(),(r=this.sessionPersistence)==null||r.clear(),this.yn.clear(),this.Qn(),C(m)||(p=this.persistence)==null||p.register({[On]:m}),(s=this.surveys)==null||s.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(pt,Zn),(f=this.sessionManager)==null||f.resetSessionId(),this.Sn=null,this.config.cookieless_mode===Xt)this.register_once({distinct_id:Mr,$device_id:null},"");else{var x=this.config.get_device_id(Yt());this.register_once({distinct_id:x,$device_id:e?x:h},""),e||C(g)||this.register({[Oo]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return ce((function*(){var i,r,s,o,a,l,u;if(n.__loaded){(i=n.Un)==null||i.stop(),(r=n.jn)==null||r.dispose(),(s=n.sessionRecording)==null||s.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){A.error("Error while destroying feature flags",d)}}else A.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var i;this.config.identity_distinct_id=e,this.config.identity_hash=n,this.alias(e),(i=this.conversations)==null||i.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&i){var s,o=(s=e.timestampLookBack)!==null&&s!==void 0?s:10;if(!i)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-i)/1e3)-o,0)}return r}alias(e,n){return e===this.get_property(Sf)?(A.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(C(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(Hi,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(A.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=k({},this.config);if(ve(e)){var i,r,s,o,a,l,u,c,d,f,p,h;me(this.config,Ru(e));var g=this.En();(i=this.persistence)==null||i.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new qo(k({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);St(m)&&(this.config.debug=m),St(this.config.debug)&&(this.config.debug?(oe.DEBUG=!0,de.N()&&de.F("ph_debug",!0),A.info("set_config",{config:e,oldConfig:n,newConfig:k({},this.config)})):(oe.DEBUG=!1,de.N()&&de.q("ph_debug"))),(r=this.featureFlags)==null||r.updateConfig==null||r.updateConfig(this.config,this.Qi()),(s=this.exceptionObserver)==null||s.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(f=this.deadClicksAutocapture)==null||f.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(h=this.externalIntegrations)==null||h.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){oe.LIB_NAME=e,oe.LIB_VERSION=n}startSessionRecording(e){var n,i,r,s,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((i=this.sessionRecording)==null||i.overrideSampling()),l.linked_flag&&((r=this.sessionRecording)==null||r.overrideLinkedFlag()),l.url_trigger&&((s=this.sessionRecording)==null||s.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var i=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:i});return this.exceptions.sendExceptionEvent(k({},r,n))}}addExceptionStep(e,n){var i;(i=this.exceptions)==null||i.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:rt.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,i;return(n=(i=this.toolbar)==null?void 0:i.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:ii;return n!==ii&&(n=ii+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(pt))===kn||((n=this.sessionPersistence)==null?void 0:n.get_property(pt))===kn}Zn(){var e,n;return!(this.config.person_profiles==="never"||this.config.person_profiles===Ma&&!this._isIdentified()&&rn(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Hi])&&((n=this.persistence)==null||(n=n.props)==null||!n[_s]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(A.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(_s,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Ln)}es(){var e,n,i,r,s=this.En();return((e=this.persistence)==null?void 0:e.xi)!==s&&((i=this.persistence)==null||i.set_disabled(s)),((n=this.sessionPersistence)==null?void 0:n.xi)!==s&&((r=this.sessionPersistence)==null||r.set_disabled(s)),s&&(this.yn.clear(),this.Qn()),s}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==Xt){if(this.gn()){var i,r,s,o,a;this.Yn(!0,!0),(i=this.sessionManager)==null||i.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=new ku(this),this.pageViewManager=new mu(this),this.persistence&&(this.sessionPropsManager=new Iu(this,this.sessionManager,this.persistence));var l,u=(s=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&s!==void 0?s:(a=rt.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==Ln&&((c=this.surveys)==null||c.loadIfEnabled()),(C(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else A.warn(Pu)}opt_out_capturing(){var e,n,i;this.config.cookieless_mode!==Xt?(this.config.cookieless_mode===Ln&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Ln&&(this.register({distinct_id:Mr,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):A.warn(Pu)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===Xt||(this.config.cookieless_mode===Ln?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return Ve?gh(Ve,this.config.custom_blocked_useragents):void 0}Hn(){F&&(F.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(ni,{title:F.title},{send_instantly:!0}),this.kn&&(F.removeEventListener(ws,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),we(F,ws,this.kn)))}debug(e){e===!1?(w?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(w?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(A.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,i,r,s,o){var a=i in n&&!z(n[i]),l=r in n&&!z(n[r]);return a?n[i]:!!l&&(o&&o.warn("Config field '"+r+"' is deprecated. Please use '"+i+"' instead. The old field will be removed in a future major version."),n[r])})(e,"advanced_disable_flags","advanced_disable_decide",0,A)}Pt(e){var n;if(z(this.config.before_send))return e;var i=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(Cg),r=U(this.config.before_send)?this.config.before_send:[this.config.before_send],s=e;for(var o of r){if(s=o(s),z(s)){var a="Event '"+e.event+"' was rejected in beforeSend function";return kg(e.event)?A.warn(a+". This can cause unexpected behavior."):A.info(a),null}s.properties&&!rn(s.properties)||A.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of i)if(s.properties&&z(s.properties[l]))return A.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return s}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,i){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(i)})}Cn(e){var n=St(e)&&!e,i=de.N()&&de.P("ph_debug")==="true";return!n&&(!!i||e)}}rt.__defaultExtensionClasses={},rt.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var n=0;e.length>n;n++)t.prototype[e[n]]=gm(t.prototype[e[n]])})(rt,["identify"]);class Tu{constructor(e){this.disabled=e===!1;var n=ve(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,i){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(n-r.y)i-r.timestamp){if(this.clicks.push({x:e,y:n,timestamp:i}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:i}];return!1}}var Qo="$copy_autocapture",ea=ye("[AutoCapture]");function ta(t,e){return e.length>t?e.slice(0,t)+"...":e}function _v(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!bn(e));return e}function wv(t,e){var n,i,r=e.e,s=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!bn(t))return{props:{}};for(var c=[t],d=new Set([t]),f=t;f.parentNode&&!at(f,"body")&&Df>c.length;)if(Bf(f.parentNode)){var p=f.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),f=p}else{if(!bn(f.parentNode)||d.has(f.parentNode))break;d.add(f.parentNode),c.push(f.parentNode),f=f.parentNode}var h,g,m=[],v={},x=!1,E=!1;if(ae(c,(b=>{var P=Oa(b);if(at(b,"a")){var T=b.getAttribute("href");x=!!(P&&T&&Qi(T))&&(u?wn(T):T)}j(Ss(b),"ph-no-capture")&&(E=!0),m.push((function(L,B,Y,G,$){$===void 0&&($=!1);var q=L.tagName.toLowerCase(),se={tag_name:q};Tl.indexOf(q)>-1&&!Y&&(se.$el_text=q.toLowerCase()==="a"||q.toLowerCase()==="button"?ta(1024,hu(L)):ta(1024,lr(L)));var Fe=Ss(L);Fe.length>0&&(se.classes=Fe.filter((function(ie){return ie!==""}))),ae(L.attributes,(function(ie){var he;if((!qf(L)||["name","id","class","aria-label"].indexOf(ie.name)!==-1)&&(G==null||!G.includes(ie.name))&&!B&&Qi(ie.value)&&(!Q(he=ie.name)||he.substring(0,10)!=="_ngcontent"&&he.substring(0,7)!=="_nghost")){var ue=ie.value;ie.name==="class"&&(ue=Rl(ue).join(" ")),se["attr__"+ie.name]=ta(1024,ie.name==="href"&&$?wn(ue):ue)}}));for(var ee=1,Ee=1,Me=L;Me=_v(Me);)ee++,Me.tagName===L.tagName&&Ee++;return se.nth_child=ee,se.nth_of_type=Ee,se})(b,s,o,a,u));var M=(function(L){if(!Oa(L))return{};var B={};return ae(L.attributes,(function(Y){if(Y.name&&Y.name.indexOf("data-ph-capture-attribute")===0){var G=Y.name.replace("data-ph-capture-attribute-",""),$=Y.value;G&&$&&Qi($)&&(B[G]=$)}})),B})(b);me(v,M)})),E)return{props:{},explicitNoCapture:E};if(o||(m[0].$el_text=at(t,"a")||at(t,"button")?hu(t):lr(t)),x){var y,S;m[0].attr__href=x;var I=(y=xs(x))==null?void 0:y.host,R=w==null||(S=w.location)==null?void 0:S.host;I&&R&&I!==R&&(h=x)}return{props:me({$event_type:r.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(b){return b.map((P=>{var T,M,L="";if(P.tag_name&&(L+=P.tag_name),P.attr_class)for(var B of(P.attr_class.sort(),P.attr_class))L+="."+B.replace(/"/g,"");var Y=k({},P.text?{text:P.text}:{},{"nth-child":(T=P.nth_child)!==null&&T!==void 0?T:0,"nth-of-type":(M=P.nth_of_type)!==null&&M!==void 0?M:0},P.href?{href:P.href}:{},P.attr_id?{attr_id:P.attr_id}:{},P.attributes),G={};return Zr(Y).sort((($,q)=>$[0].localeCompare(q[0]))).forEach(($=>{var q=$[1];return G[pu($[0].toString())]=pu(q.toString())})),(L+=":")+Zr(G).map(($=>$[0]+'="'+$[1]+'"')).join("")})).join(";")})((function(b){return b.map((P=>{var T,M,L={text:(T=P.$el_text)==null?void 0:T.slice(0,400),tag_name:P.tag_name,href:(M=P.attr__href)==null?void 0:M.slice(0,2048),attr_class:Mm(P),attr_id:P.attr__id,nth_child:P.nth_child,nth_of_type:P.nth_of_type,attributes:{}};return Zr(P).filter((B=>B[0].indexOf("attr__")===0)).forEach((B=>L.attributes[B[0]]=B[1])),L}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(i=m[0])==null?void 0:i.$el_text}:{},h&&r.type==="click"?{$external_click_url:h}:{},v)}}var Oi=ye("[ExceptionAutocapture]"),$u=()=>{},bv=ye("[TracingHeaders]"),Pn=ye("[Web Vitals]"),Mu=9e5,Lu="disabled",Nu="lazy_loading",Bi="awaiting_config",Ur="missing_config";ye("[SessionRecording]"),ye("[SessionRecording]");var za="[SessionRecording]",zt=ye(za),Ev=ye("[Heatmaps]");function na(t){return ve(t)&&"clientX"in t&&"clientY"in t&&Pe(t.clientX)&&Pe(t.clientY)}var Hr=ye("[Product Tours]"),ia=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Cl))},Sv=["$set_once","$set"],kt=ye("[SiteApps]"),Ou="Error while initializing PostHog app with config id ";function ei(t,e,n){if(z(t))return!1;switch(n){case"exact":return t===e;case"contains":var i=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(i,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class xv{constructor(e){this.ns=new Nl,this.ss=(n,i)=>this.os(n,i)&&this.ls(n,i)&&this.us(n,i)&&this.hs(n,i),this.os=(n,i)=>i==null||!i.event||n?.event===i?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;C((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((i,r)=>{this.on(i,r)}))}register(e){var n,i;if(!C((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(i=this._instance)!=null&&i.autocapture)){var r,s=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&s.add(l?.selector)}))})),(r=this._instance)==null||r.autocapture.setElementSelectors(s)}}on(e,n){var i;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((i=this.vs)==null?void 0:i.size)>0&&this.vs.forEach((r=>{this.cs(n,r)&&this.ns.emit("actionCaptured",r.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var i of n.steps)if(this.ss(e,i))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var i,r=e==null||(i=e.properties)==null?void 0:i.$current_url;if(!r||typeof r!="string"||!ei(r,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var i;if(n==null||!n.href)return!0;var r=this.bs(e);if(r.length>0)return r.some((a=>ei(a.href,n.href,n.href_matching||"exact")));var s,o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!o&&ei((s=o.match(/(?::|")href="(.*?)"/))?s[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var i;if(n==null||!n.text)return!0;var r=this.bs(e);if(r.length>0)return r.some((u=>ei(u.text,n.text,n.text_matching||"exact")||ei(u.$el_text,n.text,n.text_matching||"exact")));var s,o,a,l=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";return!!l&&(s=(function(u){for(var c,d=[],f=/(?::|")text="(.*?)"/g;!z(c=f.exec(u));)d.includes(c[1])||d.push(c[1]);return d})(l),o=n.text,a=n.text_matching||"exact",s.some((u=>ei(u,o,a))))}ys(e,n){var i,r;if(n==null||!n.selector)return!0;var s=e==null||(i=e.properties)==null?void 0:i.$element_selectors;if(s!=null&&s.includes(n.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||yh(n.properties.reduce(((i,r)=>{var s=U(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return i[r.key]={values:s,operator:r.operator||"exact"},i}),{}),e?.properties)}}class Iv{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((i=>this.Ss(i)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&yh(e.propertyFilters,n?.properties)}Ps(e,n){var i=new Map;return e.forEach((r=>{var s;(s=r.conditions)==null||(s=s[n])==null||(s=s.values)==null||s.forEach((o=>{if(o!=null&&o.name){var a=i.get(o.name)||[];a.push(r.id),i.set(o.name,a)}}))})),i}Rs(e,n,i){var r=(i===Ti.Activation?this.ws:this.ks).get(e),s=[];return this.As((o=>{s=o.filter((a=>r?.includes(a.id)))})),s.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[i])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,n)}))}register(e){var n;C((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((i=>{var r,s;return((r=i.conditions)==null?void 0:r.actions)&&((s=i.conditions)==null||(s=s.actions)==null||(s=s.values)==null?void 0:s.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new xv(this._instance),this.Os.init(),this.Os.fs((i=>{this.onAction(i)}))),n.forEach((i=>{var r,s,o,a,l;i.conditions&&(r=i.conditions)!=null&&r.actions&&(s=i.conditions)!=null&&(s=s.actions)!=null&&s.values&&((o=i.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(i.conditions.actions.values),(l=i.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach((u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(i.id),this.xs.set(u.name,c||[i.id])}})))})))}Fs(e){var n,i=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.events)&&((a=s.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),r=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.cancelEvents)&&((a=s.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));i.length===0&&r.length===0||((n=this._instance)==null||n._addCaptureHook(((s,o)=>{this.onEvent(s,o)})),this.ws=this.Ps(e,Ti.Activation),this.ks=this.Ps(e,Ti.Cancellation))}onEvent(e,n){var i,r,s=this.Ds(),o=(n==null||(i=n.properties)==null?void 0:i.$survey_id)||(n==null||(r=n.properties)==null?void 0:r.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return s.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return s.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,Ti.Cancellation);l.length>0&&(s.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){s.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,Ti.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var i=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),r=[];for(var s of e)i&&this.Cs(s)?this.qs(s)&&this.Us(s):r.push(s);r.length>0&&(this._s=[...new Set([...this._s,...r])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((i=>i!==e));var n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((s=>!n.has(s)));var i=this.Zs(),r=i.filter((s=>!n.has(s)));r.length!==i.length&&(this.Ws(r),r.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return i&&typeof i=="object"?i:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(k({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),i={},r=!1;for(var s of Object.entries(n)){var o=s[0],a=s[1];e.includes(o)?r=!0:i[o]=a}r&&(rn(i)?this.Es():this.Ts(i))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return Pe(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,i=this.Zs();if(i.length===0)return[];var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],s=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return s&&r===s?i:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,i=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(i&&i!==e){var r=this.Zs(),s=this.Qs();r.length>0&&(this.Ws([]),r.filter((o=>Pe(s[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class kv extends Iv{constructor(e){super(e)}Js(){return Pa}Ys(){return Kr}Ms(){return Yr}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Yr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Yr)}Cs(e){var n,i;this.As((s=>{i=s.find((o=>o.id===e))}));var r=(n=i)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return Pe(r)&&r>0}ra(){return en.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return te}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Pa]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Kr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Kr)}ea(){return!1}$s(e,n){var i;this.As((s=>{i=s.find((o=>o.id===n))}));var r=!i||(function(s){var o;return _h(s)&&!((o=s.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||s.schedule==="always"})(i);return r?e===en.SHOWN?"consume":"ignore":e===en.SHOWN?"persist":e===en.DISMISSED||e===en.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Wr="SDK is not enabled or survey functionality is not yet loaded",Bu="Disabled. Not loading surveys.",Cv=w!=null&&w.location?Is(w.location.hash,"__posthog")||Is(location.hash,"state"):null,Du="_postHogToolbarParams",ju=ye("[Toolbar]"),Uu=ye("[FeatureFlags]");class Av{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((i,r)=>{var s,o,a,l;return{bootstrap:{featureFlags:(s=i.bootstrap)==null?void 0:s.featureFlags,featureFlagPayloads:(o=i.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:r,featureFlagsDisabled:!!i.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!i.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!i.advanced_feature_flags_dedup_per_session,cacheTtlMs:i.feature_flag_cache_ttl_ms,requestTimeoutMs:i.feature_flag_request_timeout_ms,compression:i.disable_compression?"none":"base64",evaluationContexts:(a=(l=i.evaluation_contexts)!==null&&l!==void 0?l:i.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:U(i.flag_keys)?i.flag_keys:void 0}})(e,n),!e.evaluation_environments||e.evaluation_contexts||this.na||(Uu.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),C(e.flag_keys)||U(e.flag_keys)||Uu.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var Hu=ye("[FeatureFlags]"),Fn=ye("[FeatureFlags]",{debugEnabled:!0}),ra=`" failed. Feature flags didn't load in time.`,Wu="connection_error",qu=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},zu=t=>{var e={};for(var n of Zr(t||{})){var i=n[1];i&&(e[n[0]]=i)}return e},Ct=ye("[Error tracking]"),Vu="Refusing to render web experiment since the viewer is a likely bot",Pv={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>As(e,t),not_regex:(t,e)=>!As(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class je{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(i){i===void 0&&(i=!1),n.getWebExperiments((r=>{je.aa("retrieved web experiments from the server"),n.oa=new Map,r.forEach((s=>{if(s.feature_flag_key){var o;n.oa&&(je.aa("setting flag key ",s.feature_flag_key," to web experiment ",s),(o=n.oa)==null||o.set(s.feature_flag_key,s));var a=n._instance.getFeatureFlag(s.feature_flag_key);Q(a)&&s.variants[a]&&n.la(s.name,a,s.variants[a].transforms)}else if(s.variants)for(var l in s.variants){var u=s.variants[l];je.ua(u,n._instance)&&n.la(s.name,l,u.transforms)}}))}),i)},this._instance=e,this._instance.onFeatureFlags((i=>{this.onFeatureFlags(i)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())je.aa(Vu);else if(!this.Ne.disable_web_experiments){if(z(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();je.aa("applying feature flags",e),e.forEach((n=>{var i;if(this.oa&&(i=this.oa)!=null&&i.has(n)){var r,s=this._instance.getFeatureFlag(n),o=(r=this.oa)==null?void 0:r.get(n);s&&o!=null&&o.variants[s]&&this.la(o.name,s,o.variants[s].transforms)}}))}}previewWebExperiment(){var e=je.getWindowLocation();if(e!=null&&e.search){var n=gi(e?.search,"__experiment_id"),i=gi(e?.search,"__experiment_variant");n&&i&&(je.aa("previewing web experiments "+n+" && "+i),this.getWebExperiments((r=>{this.ha(parseInt(n),i,r)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,i){if(this.Ne.disable_web_experiments&&!i)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!n)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:s=>e(s.statusCode===200&&s.json&&s.json.experiments||[])})}ha(e,n,i){var r=i.filter((s=>s.id===e));r&&r.length>0&&(je.aa("Previewing web experiment ["+r[0].name+"] with variant ["+n+"]"),this.la(r[0].name,n,r[0].variants[n].transforms))}static ua(e,n){return!z(e.conditions)&&je.da(e,n)&&je.va(e)}static da(e,n){var i;if(z(e.conditions)||z((i=e.conditions)==null?void 0:i.url))return!0;var r=je.getWindowLocation();if(r){var s,o,a,l=Lf(n,r.href);return(s=e.conditions)==null||!s.url||Pv[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return w?.location}static va(e){var n;if(z(e.conditions)||z((n=e.conditions)==null?void 0:n.utm))return!0;var i=Jf();if(i.utm_source){var r,s,o,a,l,u,c,d,f=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((s=e.conditions)==null||(s=s.utm)==null?void 0:s.utm_campaign)==i.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==i.utm_source,h=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((u=e.conditions)==null||(u=u.utm)==null?void 0:u.utm_medium)==i.utm_medium,g=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==i.utm_term;return f&&h&&g&&p}return!1}static aa(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;n>r;r++)i[r-1]=arguments[r];A.info("[WebExperiments] "+e,i)}la(e,n,i){this._is_bot()?je.aa(Vu):n!=="control"?i.forEach((r=>{if(r.selector){var s;je.aa("applying transform of variant "+n+" for experiment "+e+" ",r);var o=(s=document)==null?void 0:s.querySelectorAll(r.selector);o?.forEach((a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)}))}})):je.aa("Control variants leave the page unmodified.")}_is_bot(){return Ve&&this._instance?gh(Ve,this.Ne.custom_blocked_useragents):void 0}}var ht=ye("[Conversations]"),Rn="Conversations not available yet.",Gu="console",xh="__posthogHandledLogsRequestError",sa=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[xh]=!0,n},Ku=t=>!!t&&typeof t=="object"&&t[xh]===!0,Ys={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=Hu,this.fa={},this.pa={},this.ga=[],this.ma=!1,this.ya=!1,this.ba=0,this._a=!1,this.wa=!1,this.ka=!1,this.xa=!1,this.Sa=0,this.Ca=()=>{var e=this.Ma();this.Sa=0,e&&this.reloadFeatureFlags()},"get"in t?this.Ta=t:(this.Ea=new Av(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return w&&we(w,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){w?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],w?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[qi,zi,Gr,Pt]){var n=this.Oa(e);C(n)||(t[e]=n)}this.fa=t;var i=k({},t),r=this.Oa(Tn);if(r)for(var s of Object.entries(r))i["$feature/"+s[0]]=s[1];this.pa=i}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Xi);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!C(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,i=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(i).length){var r,s,o=(r=(s=n.bootstrap)==null?void 0:s.featureFlagPayloads)!==null&&r!==void 0?r:{},a=Object.keys(i).filter((u=>!!i[u])).reduce(((u,c)=>(u[c]=i[c]||!1,u)),{}),l=Object.keys(o).filter((u=>a[u])).reduce(((u,c)=>(o[c]&&(u[c]=o[c]),u)),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,n){var i,r,s=n!=null&&n.merge&&(i=this.Oa(Tn))!==null&&i!==void 0?i:{},o=n!=null&&n.merge&&(r=this.Oa(zi))!==null&&r!==void 0?r:{},a=k({},s,t),l=k({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],f=c[1];u[d]={key:d,enabled:jc(f),variant:Uc(f),reason:void 0,metadata:C(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(Ca),e=this.Oa(Pt),n=this.Oa($n);if(!n&&!e)return t||{};var i=me({},t||{}),r=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var s of r){var o,a,l=i[s],u=e?.[s],c=C(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=C(u)?l?.variant:typeof u=="string"?u:void 0,f=n?.[s],p=k({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),f&&(p.metadata=k({},l?.metadata,{payload:f,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),i[s]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:i}),this.ca=!0),i}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var i=t[n];return{key:n,enabled:jc(i),variant:Uc(i),payload:Dc(e[n])}}))}getFlagVariants(){var t=this.Oa(Tn),e=this.Oa(Pt);if(!e)return t||{};for(var n=me({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(zi),e=this.Oa($n);if(!e)return t||{};for(var n=me({},t||{}),i=Object.keys(e),r=0;i.length>r;r++)n[i[r]]=e[i[r]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Nn)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:k({},e.initialPersonProperties,this.Oa(Gt)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Mn),timezone:nh()};C(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var i=this.Na();i.length&&(n.evaluation_contexts=i);var r=this.qa();C(r)||(n.flag_keys=r);var s=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(s?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Jr]:[Wu]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?ze.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,f,p=(d=c.json)!==null&&d!==void 0?d:{},h=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),h||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!h;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?Wu:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((f=p.quotaLimited)==null||!f.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[Jr]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,h,{partialResponse:s}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Kf(this.Sa,3)}Ua(t){this.Sa=Yf(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var i=this.getFeatureFlagResult(t,e);return(n=i?.variant)!==null&&n!==void 0?n:i?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+ra)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,i=this.getFlagVariants(),r=t in i,s=i[t],o=this.getFlagPayloads()[t],a=String(s),l=this.Oa(Gr)||void 0,u=this.Oa(Xi)||void 0,c=this.Oa(Nn)||{};if(this.Ne.deduplicateCallsPerSession){var d,f=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(Gi);f&&f!==p&&(c={},n=f)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Nn]:c,[Gi]:n});else{var h,g,m,v,x,E,y,S,I,R;U(c[t])?c[t].push(a):c[t]=[a],this.F(k({[Nn]:c},n?{[Gi]:n}:{}));var b=this.getFeatureFlagDetails(t),P=[...(h=this.Oa(Jr))!==null&&h!==void 0?h:[]];C(s)&&P.push("flag_missing");var T={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};C(b==null||(v=b.metadata)==null?void 0:v.has_experiment)||(T.$feature_flag_has_experiment=b.metadata.has_experiment),C(b==null||(x=b.metadata)==null?void 0:x.version)||(T.$feature_flag_version=b.metadata.version);var M,L=(E=b==null||(y=b.reason)==null?void 0:y.description)!==null&&E!==void 0?E:b==null||(S=b.reason)==null?void 0:S.code;L&&(T.$feature_flag_reason=L),b!=null&&(I=b.metadata)!=null&&I.id&&(T.$feature_flag_id=b.metadata.id),C(b?.original_variant)&&C(b?.original_enabled)||(T.$feature_flag_original_response=C(b.original_variant)?b.original_enabled:b.original_variant),b!=null&&(R=b.metadata)!=null&&R.original_payload&&(T.$feature_flag_original_payload=b==null||(M=b.metadata)==null?void 0:M.original_payload),P.length&&(T.$feature_flag_error=P.join(",")),this.za(T)}else n&&this.F({[Nn]:c,[Gi]:n});if(r)return{key:t,enabled:!!s,variant:typeof s=="string"?s:void 0,payload:Dc(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+ra)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return ce((function*(){var i=n.nn;if(i){var r={distinct_id:i.distinctId,token:i.projectToken,person_properties:{$lib:i.library.name,$lib_version:i.library.version}},s=n.Na();s.length&&(r.evaluation_contexts=s);var o,a=n.qa();C(a)||(r.flag_keys=a);try{var l,u=(l=(yield i.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:r,compression:n.Ne.compression==="base64"?ze.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+ra),e.defaultValue;var n=this.getFeatureFlag(t,e);return C(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var i=(function(r,s,o,a,l,u){s===void 0&&(s={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=Hu);var c=((I,R)=>{var b=I.flags;return b?k({},I,{featureFlags:Object.fromEntries(Object.keys(b).map((P=>{var T;return[P,(T=b[P].variant)!==null&&T!==void 0?T:b[P].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(b).filter((P=>b[P].enabled)).filter((P=>{var T;return(T=b[P].metadata)==null?void 0:T.payload})).map((P=>{var T;return[P,(T=b[P].metadata)==null?void 0:T.payload]})))}):(I.featureFlags&&R.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),I)})(r,u),d=c.flags,f=c.featureFlags,p=c.featureFlagPayloads;if(f){var h=r.requestId,g=r.evaluatedAt;if(U(f)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var m={};if(f)for(var v=0;f.length>v;v++)m[f[v]]=!0;return{[qi]:f,[Tn]:m,[ms]:!1}}var x=f,E=p,y=d;if(l!=null&&l.partialResponse)x=k({},s,x),E=k({},o,E),y=k({},a,y);else if(r.errorsWhileComputingFlags)if(d){var S=new Set(Object.keys(d).filter((I=>{var R;return!((R=d[I])!=null&&R.failed)})));x=k({},s,Object.fromEntries(Object.entries(x).filter((I=>S.has(I[0]))))),E=k({},o,Object.fromEntries(Object.entries(E||{}).filter((I=>S.has(I[0]))))),y=k({},a,Object.fromEntries(Object.entries(y||{}).filter((I=>S.has(I[0])))))}else x=k({},s,x),E=k({},o,E),y=k({},a,y);return k({[qi]:Object.keys(zu(x)),[Tn]:x||{},[zi]:E||{},[Ca]:y||{},[ms]:r.minimalFlagCalledEvents===!0},h?{[Gr]:h}:{},g?{[Xi]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,this.rt);i&&this.F(i),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([Pt,$n]),this.Va(),void Fn.info("All overrides cleared");if(U(t))return this.F({[Pt]:qu(t)}),this.Va(),void Fn.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var i={},r=n.flags,s=n.payloads;return r&&(i[Pt]=U(r)?qu(r):r),s&&(i[$n]=s),Object.keys(i).length&&this.F(i),r===!1&&s===!1?this.q([Pt,$n]):r===!1?this.q(Pt):s===!1&&this.q($n),this.Va(),r===!1?Fn.info("Flag overrides cleared"):r&&Fn.info("Flag overrides set",{flags:r}),void(s===!1?Fn.info("Payload overrides cleared"):s&&Fn.info("Payload overrides set",{payloads:s}))}if(t&&typeof t=="object")return this.F({[Pt]:t}),this.Va(),void Fn.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),n=e.flags,i=e.flagVariants;try{t(n,i)}catch(r){this.rt.error("Error while running feature flags callback",r)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var i=(this.Oa(Vr)||[]).find((l=>l.flagKey===t)),r={["$feature_enrollment/"+t]:e},s={$feature_flag:t,$feature_enrollment:e,$set:r};i&&(s.$early_access_feature_name=i.name),n&&(s.$feature_enrollment_stage=n);var o=k({},this.getFlagVariants(),{[t]:e});this.F({[qi]:Object.keys(zu(o)),[Tn]:o,[Gt]:k({},this.Oa(Gt)||{},r)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",s).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var i=this.Oa(Vr);!i||e?this.Qa(t,n):t(i)}Qa(t,e){var n=this;return ce((function*(){var i=n.nn;if(i){var r,s=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield i.sendRequest("/api/early_access_features/?token="+i.projectToken+s,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Vr]:r=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(r)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,i)=>(n[i]=e[i],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,i=e.flagVariants;this.featureFlagEventHandlers.forEach((r=>{try{r(n,i,{errorsLoading:t})}catch(s){this.rt.error("Error while running feature flags callback",s)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(Gt)||{},i=t?.$set||(t!=null&&t.$set_once?{}:t),r=t?.$set_once,s={};if(r)for(var o in r)({}).hasOwnProperty.call(r,o)&&(o in n||(s[o]=r[o]));this.F({[Gt]:k({},n,s,i)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=k({},this.Oa(Gt)||{});t.forEach((i=>{delete n[i]})),this.F({[Gt]:n}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(Gt),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=this.Oa(Mn)||{},i=k({},n);for(var r of Object.keys(t))i[r]=k({},n[r],t[r]);this.F({[Mn]:i}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Mn)||{};this.F({[Mn]:k({},e,{[t]:{}})})}else this.q(Mn)}reset(){this.ba++,this.wa=!1,this.Fa(),this.ma=!1,this._a=!1,this.ka=!1,this.$anon_distinct_id=void 0,this.La(),this.ca=!1,this.Sa=0}}},Fv={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===Bi||this.Ya===Ur?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=Lu,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(F==null||!F.visibilityState||F.visibilityState==="visible")return!0;var n=w==null||(e=w.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.some((i=>i.name==="visible"))})(),this.Ie=()=>{var e;F?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw zt.error("started without valid sessionManager"),new Error(za+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===Xt)throw new Error(za+' cannot be used with cookieless_mode="always"');F!=null&&F.addEventListener&&we(F,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,F==null||F.removeEventListener==null||F.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(On))==null||!t.enabled),n=!this.Ne.disable_session_recording,i=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return w&&e&&n&&!i}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!C(Object.assign)&&!C(Array.from);this.ro&&n?(this.no(t),zt.info("starting")):(this.Ya=Lu,this.stopRecording())}}no(t){var e,n,i;this.ro&&(this.Ya!==Bi&&this.Ya!==Ur&&(this.Ya=Nu),O!=null&&(e=O.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=O.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(i=O.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this._instance,this.ao,(r=>{if(r)return zt.error("could not load recorder",r);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(Al),(e=this.Mr)==null||e.unregister(xf)}uo(t,e){if(z(t))return null;var n,i=Pe(t)?t:parseFloat(t);return typeof(n=i)!="number"||!Number.isFinite(n)||0>n||n>1?(zt.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):i}ho(t){if(this.Mr){var e,n,i=this.Mr,r=()=>{var s,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((s=this.Ne.session_recording)==null?void 0:s.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;z(u)&&this.lo();var c=o?.minimumDurationMilliseconds;i.register({[On]:k({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:k({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:C(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};r(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.onSessionId(r)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Bi&&(this.Ya=Ur,zt.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):zt.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(On);return(n==null||(e=n.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(On);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(n){return zt.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!z(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,i;if(!this.eo){if((e=O.__PosthogExtensions__)==null||!e.initSessionRecording)return zt.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[Tf]:!0});var r;if(this.Ja||(this.Ja=(r=O.__PosthogExtensions__)==null?void 0:r.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Ur||this.Ya===Bi?void 0:(this.Ya=Bi,zt.info("persisted remote config is stale, requesting fresh config before starting"),void new ih(this._instance).load());this.Ya=Nu,(n=(i=this.Ja).setDocumentWasEverVisible)==null||n.call(i,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[kf]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[If]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?Cf:Af]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},Rv={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Tu(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,n=ve(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((i=>new RegExp(i))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((i=>new RegExp(i))),n}yo(){if(this.isBrowserSupported()){if(w&&F){var t=n=>{n=n||w?.event;try{this.bo(n)}catch(i){ea.error("Failed to capture event",i)}};if(we(F,"submit",t,{capture:!0}),we(F,"change",t,{capture:!0}),we(F,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||w?.event;try{this.bo(n,Qo)}catch(i){ea.error("Failed to capture copy/cut event",i)}};we(F,"copy",e,{capture:!0}),we(F,"cut",e,{capture:!0})}}}else ea.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;St(n)&&(this.instance.persistence&&this.instance.persistence.register({[wa]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((i=>{var r=F?.querySelectorAll(i);r?.forEach((s=>{t===s&&n.push(i)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[wa],i=this.co,r=this.instance.Qi()&&!this.fo;if(tt(i)&&!St(n)&&!r)return!1;var s=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!s}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,i=Uo(t);Of(i)&&(i=i.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&lu(i,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var r=e===Qo;if(i&&(function(d,f,p,h,g,m){var v;if(!w||$l(d)||p!=null&&p.url_allowlist&&!su(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&su(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var x=p.dom_event_allowlist;if(x&&!x.some((b=>f.type===b)))return!1}var E=Wf(d,h),y=E.parentIsUsefulElement,S=E.targetElementList;if(!(function(b,P){var T=P?.element_allowlist;if(C(T))return!0;var M,L=function(Y){if(T.some((G=>Y.tagName.toLowerCase()===G)))return{v:!0}};for(var B of b)if(M=L(B))return M.v;return!1})(S,p)||!Na(S,p?.css_selector_allowlist)||Na(S,(v=p?.css_selector_ignorelist)!==null&&v!==void 0?v:Am))return!1;try{var I=w.getComputedStyle(d);if(I&&I.getPropertyValue("cursor")==="pointer"&&f.type==="click")return!0}catch{}var R=d.tagName.toLowerCase();switch(R){case"html":return!1;case"form":return(g||["submit"]).indexOf(f.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(f.type)>=0;default:return y?(g||["click"]).indexOf(f.type)>=0:(g||["click"]).indexOf(f.type)>=0&&(Tl.indexOf(R)>-1||d.getAttribute("contenteditable")==="true")}})(i,t,this.Ne,r,r?["copy","cut"]:void 0,this.instance)){var s=wv(i,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=s.props;if(s.explicitNoCapture)return!1;var a=this.getElementSelectors(i);if(a&&a.length>0&&(o.$element_selectors=a),e===Qo){var l,u=jf(w==null||(l=w.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return qe(F?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(w==null||(e=w.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(A.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,A.info("History API monitoring stopped")}monitorHistoryChanges(){w&&w.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(w&&((e=w.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(i,r,s){try{if(!(r in i))return $u;var o={next:i[r]},a=s((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return qe(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),i[r]=a,()=>{if(i[r]!==a)for(var l=i[r];qe(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else i[r]=o.next}}catch{return $u}})(w.history,t,(i=>function(r,s,o){i.call(this,r,s,o),n.So(t)}))}}So(t){try{var e,n=w==null||(e=w.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(ni,{navigation_type:t}),this._o=n}catch(i){A.error("Error capturing "+t+" pageview",i)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};we(w,"popstate",t),this.wo=()=>{w&&w.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[ba]),this.rageclicks=new Tu(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return ve(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return z(this.Ne.capture_heatmaps)?z(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;Ev.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[ba]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){na(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=F?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){w&&F&&(this.Po=this.cr.bind(this),we(w,bs,this.Po),this.Ro=t=>this.ke(t||w?.event),we(F,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||w?.event),we(F,"mousemove",this.Ao,{capture:!0}),this.Lo=new gu(this.instance,Lm,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),we(F,ws,this.Oo),this.vo=!0)}Eo(){var t;w&&F&&(this.Po&&w.removeEventListener(bs,this.Po),this.Ro&&F.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&F.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&F.removeEventListener(ws,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),i=this.instance.scrollManager.scrollX(),r=this.instance.scrollManager.scrollElement(),s=(function(o,a,l){for(var u=o;u&&bn(u)&&!at(u,"body");){if(u===l)return!1;var c=void 0;try{var d,f,p;c=(d=(f=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&f!==void 0?f:w)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(j(a,c))return!0;u=Uf(u)}return!1})(Uo(t),["fixed","sticky"],r);return{x:t.clientX+(s?0:i),y:t.clientY+(s?0:n),target_fixed:s,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!ru(t.target)&&na(t)){var i=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&lu(Uo(t),this.instance.config.rageclick)&&this.Vt(k({},i,{type:"rageclick"})),this.Vt(i)}}Fo(t){!ru(t.target)&&na(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(w){var e=this.Ne.disable_capture_url_hashes?wn(w.location.href):w.location.href,n=this.Ne.custom_personal_data_properties,i=this.Ne.mask_personal_data_properties?[...mi,...n||[]]:[],r=cr(e,i,ur);this.R=this.R||{},this.R[r]||(this.R[r]=[]),this.R[r].push(t)}}cr(){this.R&&!rn(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:gu,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",k({$current_url:this.R.url},this.R.metrics.reduce(((n,i)=>k({},n,{["$web_vitals_"+i.name+"_event"]:k({},i),["$web_vitals_"+i.name+"_value"]:i.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var i;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},z(n?.name)||z(n?.value))Pn.error("Invalid metric received",n);else{var r=typeof n.navigationURL=="string"?n.navigationURL:void 0,s=this.Bo(r);if(!C(s)){var o=Pe(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+s;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),C(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=s),this.R.firstMetricTimestamp=C(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(i=this._instance.sessionManager)==null?void 0:i.checkAndGetSessionAndWindowId(!0),l=k({},n,r?{navigationURL:s}:{},{$current_url:s,timestamp:Date.now()});C(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Pn.error("Ignoring metric with value >= "+this.Ho,n)}}},this.Uo=()=>{if(!this.vo){var n,i,r,s,o=O.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&C(a)?o?.postHogWebVitalsCallbacks:void 0);if(C(l)||(n=l.onLCP,i=l.onCLS,r=l.onFCP,s=l.onINP),n&&i&&r&&s){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&s(this.jo.bind(this),u),this.vo=!0}else Pn.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Ia]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=ve(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return z(n)?((e=this._instance.persistence)==null?void 0:e.props[ka])||["CLS","FCP","INP","LCP"]:n}get flushToCaptureTimeoutMs(){return(ve(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=ve(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=ve(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=ve(this.Wo)&&Pe(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Mu;return t>0&&6e4>=t?Mu:t}get isEnabled(){var t=_e?.protocol;if(t!=="http:"&&t!=="https:")return Pn.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=ve(this.Wo)?this.Wo.web_vitals:St(this.Wo)?this.Wo:void 0;return St(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(Pn.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var n=ve(e.capturePerformance)&&!!e.capturePerformance.web_vitals,i=ve(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Ia]:n}),this._instance.persistence.register({[ka]:i})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=O.__PosthogExtensions__,n=this.zo,i=e?.postHogWebVitalsCallbacksByFlavor;i!=null&&i[n]||n==="web-vitals"&&C(i)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(r=>{r?Pn.error("failed to load script",r):t()}))}Bo(t){var e=t||w?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?wn(e):e,i=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[...mi,...i||[]]:[];return cr(n,r,ur)}Pn.error("Could not determine current URL")}}},Tv={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(w&&this.isEnabled&&(n=O.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var i=O.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=O.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=O.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=i(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=r(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=s(this.captureException.bind(this)))}catch(o){Oi.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Ea]),this.Jo=new Fg(k({},(function(n){var i,r,s,o;return n===void 0&&(n={}),{refillRate:(i=(r=n.exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:n.__exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:1,bucketSize:(s=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&s!==void 0?s:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Oi})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return ve(t)?e=k({},e,t):(C(t)?this.Ko:t)&&(e=k({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Oi.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(i=>{if(i)return Oi.error("failed to load script",i);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Ea]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,i,r=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(r)?Oi.info("Skipping exception capture because of client rate limiting.",{exception:r}):(i=this._instance.exceptions)==null||i.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,n;this.Xo=[],this.tl=new Gg([new tm,new um,new im,new nm,new lm,new am,new sm,new cm],(function(i){for(var r=arguments.length,s=new Array(r>1?r-1:0),o=1;r>o;o++)s[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(`
+`),d=l;c.length>d;d++){var f=c[d];if(1024>=f.length){var p=eu.test(f)?f.replace(eu,"$1"):f;if(!p.match(/\S*Error: /)){for(var h of s){var g=h(p,i);if(g){u.push(g);break}}if(u.length>=50)break}}}return(function(m){if(!m.length)return[];var v=Array.from(m);return v.reverse(),v.slice(0,50).map((x=>{return k({},x,{filename:x.filename||(E=v,E[E.length-1]||{}).filename,function:x.function||pi});var E}))})(u)}})("web:javascript",Zg,em)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(Sa))!==null&&e!==void 0?e:[],this.el=gs(this.il()),this.rl=new fm(this.el)}onConfigChange(){this.el=gs(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,i;if(t.ok){var r=t.config;if("errorTracking"in r){var s=(e=(n=r.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(i=r.errorTracking)==null?void 0:i.captureExtensionExceptions;this.Xo=s,this._instance.persistence&&this._instance.persistence.register({[Sa]:this.Xo,[xa]:o})}}}get nl(){var t,e=!!this._instance.get_property(xa),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!Q(t)||t.trim().length===0)return void Ct.warn("Ignoring exception step because message must be a non-empty string");var n=(function(s){if(!s)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(s).reduce(((a,l)=>dm.has(l)?(o.push(l),a):(a[l]=s[l],a)),{}),droppedKeys:o}})(this.sl(e)),i=n.sanitizedProperties,r=n.droppedKeys;r.length>0&&Ct.warn("Ignoring reserved exception step fields",{droppedKeys:r}),this.rl.add(k({[hs]:t,[ps]:new Date().toISOString()},i))}catch(s){Ct.error("Failed to add exception step. Ignoring breadcrumb.",s)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void Ct.info("Skipping exception capture because a suppression rule matched");if(!this.nl&&this.ul(e))return this.ll("Exception dropped: thrown by a browser extension"),void Ct.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.hl(e))return this.ll("Exception dropped: thrown by the PostHog SDK"),void Ct.info("Skipping exception capture because it was thrown by the PostHog SDK")}var n=this.el.enabled&&z(t.$exception_steps)?this.dl(t):t,i=typeof(s=globalThis._posthogReleaseId)=="string"&&s.length>0?s:void 0;i&&(n.$release_id=i);try{var r=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return r&&this.rl.clear(),r}catch(o){return Ct.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void Ct.error("Failed to process exception event. Ignoring this exception.",o)}var s}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:k({},t,{$exception_steps:e})}catch(n){return Ct.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[hs]:t,[ps]:new Date().toISOString()})}sl(t){return ve(t)?k({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,i)=>{var r=i.type,s=i.value;return Q(r)&&r.length>0&&n.$exception_types.push(r),Q(s)&&s.length>0&&n.$exception_values.push(s),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var i=n.values.map((r=>{var s=vh[r.operator],o=e[r.key];if(!s||!o)return!1;var a=U(r.value)?r.value:[r.value];return a.length>0&&s(a,o)}));return n.type==="OR"?i.some(Boolean):i.every(Boolean)}))}catch(n){return Ct.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,i;return(n=(i=e.stacktrace)==null?void 0:i.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,i,r,s=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=s[s.length-1];return(i=o==null||(r=o.filename)==null?void 0:r.includes("posthog.com/static"))!==null&&i!==void 0&&i}return!1}al(t){return!z(t)&&U(t)}}},$v=k({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,i;if(this.Mr&&this.Mr.register({[Cl]:!!e.productTours}),!ia(this._instance))return!this.vl&&z((n=this.Mr)==null?void 0:n.props[Vi])||Hr.info("product tours disabled; stopping and clearing cached tours"),(i=this.vl)==null||i.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&ia(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(i=>{i?Hr.error("Could not load product tours script",i):t()}))}fl(){var t;!this.vl&&(t=O.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=O.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!U(this.cl)||e){var n=this.Mr;if(n){var i=n.props[Vi];if(U(i)&&!e)return this.cl=i,void t(i,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",timestampMode:"query",callback:r=>{if(ia(this._instance)){var s=r.statusCode;if(s!==200||!r.json){var o="Product Tours API could not be loaded, status: "+s;return s===0?r.error||Hr.warn(o):Hr.error(o),void t([],{isLoaded:!1,error:o})}var a=U(r.json.product_tours)?r.json.product_tours:[];this.cl=a,n&&n.register({[Vi]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){z(this.vl)?t([],{isLoaded:!1,error:"Product tours not loaded"}):this.vl.getActiveProductTours(t)}showProductTour(t){var e;(e=this.vl)==null||e.showTourById(t)}previewTour(t){this.vl?this.vl.previewTour(t):this.ai((()=>{var e;this.fl(),(e=this.vl)==null||e.previewTour(t)}))}dismissProductTour(){var t;(t=this.vl)==null||t.dismissTour("user_clicked_skip")}nextStep(){var t;(t=this.vl)==null||t.nextStep()}previousStep(){var t;(t=this.vl)==null||t.previousStep()}clearCache(){var t;this.cl=null,(t=this.Mr)==null||t.unregister(Vi)}resetTour(t){var e;(e=this.vl)==null||e.resetTour(t)}resetAllTours(){var t;(t=this.vl)==null||t.resetAllTours()}cancelPendingTour(t){var e;(e=this.vl)==null||e.cancelPendingTour(t)}}},Ys),Mv={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=O._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,i,r,s,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var f=d[0];l[f]={id:u[f],type:f,properties:d[1]}}var p=t.$set_once,h=t.$set;return{event:k({},Ud(t,Sv),{properties:k({},t.properties,h?{$set:k({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},h)}:{},p?{$set_once:k({},(i=(r=t.properties)==null?void 0:r.$set_once)!==null&&i!==void 0?i:{},p)}:{}),elements_chain:(s=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&s!==void 0?s:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(kt.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(kt.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,i,r,s,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=F?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,f=new WeakSet,p=(m,v,x)=>{if(m!=null&&m[v]){var E=m[v];m[v]=x(E),c.push((()=>{m[v]=E}))}},h=m=>{if(f.has(m))return m;var v=d.bl(m);return v&&f.add(v),v},g=m=>m.map((v=>typeof v=="string"?v:h(v))).filter((v=>!tt(v)));return p(u,"appendChild",(m=>function(v){var x=h(v);return x?m.call(this,x):v})),p(u,"insertBefore",(m=>function(v,x){var E=h(v);return E?m.call(this,E,x):v})),p(u,"replaceChild",(m=>function(v,x){var E=h(v);return E?m.call(this,E,x):x})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(i=l.DocumentFragment)==null?void 0:i.prototype].forEach((m=>{p(m,"append",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))})),p(m,"prepend",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))}))})),[(r=l.Element)==null?void 0:r.prototype,(s=l.CharacterData)==null?void 0:s.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))})),p(m,"after",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];return v.apply(this,g(E))})),p(m,"replaceWith",(v=>function(){for(var x=arguments.length,E=new Array(x),y=0;x>y;y++)E[y]=arguments[y];var S=g(E);return E.length&&!S.length?void 0:v.apply(this,S)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(v,x){var E=h(x);return E?m.call(this,v,E):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var i=t(n);return e&&n(),i}catch(r){throw n(),r}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{var o;!e.errored&&this.gl.length&&(kt.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},i=!1,r=o=>{e.errored=!o,e.loaded=!0,kt.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),i&&n()};try{var s=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),r(a)}})),!1).processEvent;s&&(e.processEvent=s),i=!0}catch(o){kt.error(Ou+t.id,o),r(!1)}if(i&&e.loaded)try{n()}catch(o){kt.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),i=function(s){try{e.xl((()=>s.processEvent==null?void 0:s.processEvent(n)))}catch(o){kt.error("Error while processing event "+t.event+" for site app "+s.id,o)}};for(var r of Object.values(this.apps))i(r)}}onRemoteConfig(t){var e,n,i,r=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",(l=>this.Cl(l)))):void kt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((n=this.yl)==null||n.call(this),t.ok){var s=t.config;if((i=s.siteApps)!=null&&i.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;O["__$$ph_site_app_"+u]=r._instance,(l=O.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(r._instance,c,(d=>{if(d)return kt.error(Ou+u,d)}))};for(var a of s.siteApps)o()}else kt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},Lv={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,i=this.Il();i?(C(this.Ml)&&(this.Ml=(e=O.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),C(this.Tl)&&(this.Tl=(n=O.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(i,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=O.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=O.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(i=>{if(i)return bv.error("failed to load script",i);t()}))}Pl(){var t,e;return(t=(e=this._instance.config.tracing_headers)!==null&&e!==void 0?e:this._instance.config.addTracingHeaders)!==null&&t!==void 0?t:this._instance.config.__add_tracing_headers}Il(){var t=this.Pl();return U(t)?(U(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(U(this.El)&&this.El.splice(0),this.El=t||void 0,this.El)}Qo(){var t,e;(t=this.Ml)==null||t.call(this),(e=this.Tl)==null||e.call(this),this.Ml=void 0,this.Tl=void 0}startIfEnabledOrStop(){this.Il()?this.ai(this.Uo):this.Qo()}}},Nv=k({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return te.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(z(e))return te.warn("Flags not loaded yet. Not loading surveys.");var n=U(e);this.Rl=n?e.length>0:e,te.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],n=0;nlocalStorage.removeItem(r)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)te.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)te.info(Bu);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())te.info("Not loading surveys in cookieless mode without consent.");else{var t=O?.__PosthogExtensions__;if(t){if(!C(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var n=t.generateSurveys;if(n)return void this.Dl(n,e);var i=t.loadExternalDependency;if(!i)return void this.$l(Pl);i(this._instance,"surveys",(r=>{r||!t.generateSurveys?this.$l("Could not load surveys script",r):this.Dl(t.generateSurveys,e)}))}catch(r){throw this.$l("Error initializing surveys",r),r}finally{this.Al=!1}}}else te.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new kv(this._instance),te.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){te.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return te.info(Bu),t([]);var n,i=this._instance.get_property(Aa);if(i&&!e)return t(i,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((r=>t(r.surveys,r.context))):(typeof Promise<"u"&&(this.Ll=new Promise((r=>{n=r}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:r=>{var s;this.Ll=null;var o=r.statusCode;if(o!==200||!r.json){var a="Surveys API could not be loaded, status: "+o;o!==0?te.error(a):r.error||te.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=r.json.surveys||[],d=c.filter((p=>(function(h){return!(!h.start_date||h.end_date)})(p)&&(_h(p)||(function(h){var g;return!((g=h.conditions)==null||(g=g.actions)==null||(g=g.values)==null||!g.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(s=this._instance.persistence)==null||s.register({[Aa]:c,[vs]:Date.now()});var f={isLoaded:!0};t(c,f),n?.({surveys:c,context:f})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(vs);return Pe(t)&&Date.now()-t>3e5}Bl(){return Pe(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,i={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};bh(i);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(n){te.error("Error in survey callback",n)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!z(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);te.warn("init was not called")}Hl(t){var e=null;return this.getSurveys((n=>{var i;e=(i=n.find((r=>r.id===t)))!==null&&i!==void 0?i:null})),e}Ul(t){if(z(this._surveyManager))return{eligible:!1,reason:Wr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(z(this._surveyManager))return{eligible:!1,reason:Wr};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(z(this._surveyManager))return te.warn("init was not called"),{visible:!1,disabledReason:Wr};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return z(this._surveyManager)?(te.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:Wr})):new Promise((n=>{this.getSurveys((i=>{var r,s=(r=i.find((a=>a.id===t)))!==null&&r!==void 0?r:null;if(s){var o=this.zl(s);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var i;if(z(this._surveyManager))te.warn("init was not called");else{var r=typeof t=="string"?this.Hl(t):t;if(r!=null&&r.id)if(lv.includes(r.type)){var s=F?.querySelector(e);if(s)return(i=r.appearance)!=null&&i.surveyPopupDelaySeconds?(te.info("Rendering survey "+r.id+" with delay of "+r.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;te.info("Rendering survey "+r.id+" with delay of "+((o=r.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(r,s,n),te.info("Survey "+r.id+" rendered")}),1e3*r.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(r,s,n);te.warn("Survey element not found")}else te.warn("Surveys of type "+r.type+" cannot be rendered in the app");else te.warn("Survey not found")}}displaySurvey(t,e){var n;if(z(this._surveyManager))te.warn("init was not called");else{var i=this.Hl(t);if(i){var r=i;if((n=i.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(r=k({},i,{appearance:k({},i.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==Ba.Popover&&e.initialResponses&&te.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var s=this.Ul(i);if(!s.eligible)return void te.warn("Survey is not eligible to be displayed: ",s.reason)}e.displayType!==Ba.Inline?this._surveyManager.handlePopoverSurvey(r,e):this.renderSurvey(r,e.selector,e.properties)}else te.warn("Survey not found")}}cancelPendingSurvey(t){z(this._surveyManager)?te.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},Ys),Ov={toolbar:class{constructor(t){this.instance=t}Wl(t){O.ph_toolbar_state=t}Vl(){var t;return(t=O.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),La(this.instance.config)||!w||!F)return!1;t=t??w.location,n=n??w.history;try{if(!e){try{w.localStorage.setItem("test","test"),w.localStorage.removeItem("test")}catch{return!1}e=w?.localStorage}var i,r=Cv||Is(t.hash,"__posthog")||Is(t.hash,"state"),s=r?nu((()=>JSON.parse(atob(decodeURIComponent(r)))))||nu((()=>JSON.parse(decodeURIComponent(r)))):null;return s&&s.action==="ph_authorize"?((i=s).source="url",i&&Object.keys(i).length>0&&(s.desiredHash?t.hash=s.desiredHash:n?n.replaceState(n.state,"",t.pathname+t.search):t.hash="")):((i=JSON.parse(e.getItem(Du)||"{}")).source="localstorage",delete i.userIntent),!(!i.token||this.instance.config.token!==i.token||(this.loadToolbar(i),0))}catch{return!1}}Zl(t){var e=O.ph_load_toolbar||O.ph_load_editor;!z(e)&&qe(e)?e(t,this.instance):ju.warn("No toolbar load function found")}loadToolbar(t){var e=!(F==null||!F.getElementById(Nf));if(!w||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,i=k({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(w.localStorage.setItem(Du,JSON.stringify(k({},i,{source:void 0}))),this.Vl()===2)this.Zl(i);else if(this.Vl()===0){var r;this.Wl(1),(r=O.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"toolbar",(s=>{if(s)return ju.error("[Toolbar] Failed to load",s),void this.Wl(0);this.Wl(2),this.Zl(i)})),we(w,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(i)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},Bv=k({experiments:je},Ys),Dv={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;z(e)||(St(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||La(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=O?.__PosthogExtensions__;if(t&&!C(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(Pl);n(this._instance,"conversations",(i=>{i||!t.initConversations?this.eu("Could not load conversations script",i):this.tu(t.initConversations),this.Kl=!1}))}catch(i){this.eu("Error initializing conversations",i),this.Kl=!1}}else ht.error("Conversations enabled but missing token in remote config.")}}tu(t){if(this.Jl)try{this._conversationsManager=t(this.Jl,this._instance),this.Yl=!1,ht.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else ht.error("Cannot complete initialization: remote config is null")}eu(t,e){ht.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():ht.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!tt(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":La(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":C(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?z(this.Jl)||!this.Jl.token?"missing_token":O!=null&&O.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,n){var i=this;return ce((function*(){return i._conversationsManager?i._conversationsManager.sendMessage(t,e,n):(ht.warn(Rn),null)}))()}getMessages(t,e){var n=this;return ce((function*(){return n._conversationsManager?n._conversationsManager.getMessages(t,e):(ht.warn(Rn),null)}))()}markAsRead(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(ht.warn(Rn),null)}))()}getTickets(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(ht.warn(Rn),null)}))()}requestRestoreLink(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(ht.warn(Rn),null)}))()}restoreFromToken(t){var e=this;return ce((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(ht.warn(Rn),null)}))()}restoreFromUrlToken(){var t=this;return ce((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(ht.warn(Rn),null)}))()}getCurrentTicketId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getCurrentTicketId())!==null&&t!==void 0?t:null}getWidgetSessionId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getWidgetSessionId())!==null&&t!==void 0?t:null}Xn(){var t;(t=this._conversationsManager)==null||t.setIdentity()}ts(){var t;(t=this._conversationsManager)==null||t.clearIdentity()}}},jv={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ye("[logs]"),this.nu=k({},this.rt,{error(){for(var i=arguments.length,r=new Array(i),s=0;i>s;s++)r[s]=arguments[s];r.some(Ku)||n.rt.error(...r)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var i,r;this.Sa=0,(i=this.ou)==null||i.onReconnect(),(r=this.lu)==null||r.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),w&&we(w,"online",this.au)}uu(t,e,n,i){var r,s=(function(o,a){var l,u,c,d,f,p,h,g=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,v=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,x=C(v)?Math.max(m,2048):Math.max(m,v),E=o?.resourceAttributes;return{serviceName:(d=(f=E?.["service.name"])!==null&&f!==void 0?f:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=E?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(h=E?.["deployment.environment"])!==null&&h!==void 0?h:o?.environment,resourceAttributes:E,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:x,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:v,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((r=this._instance)==null||(r=r.config)==null?void 0:r.logs,n);return[new qg(this.hu(t,e),s,this.nu,(()=>this.du()),(o=>o()),void 0,i),s]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var i=this.uu((()=>this.tr),(r=>{this.tr=r}));this.ou=i[0],this.fu=i[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var n;(n=this.lu)==null||n.reset(),this.gu=e;var i=this.uu((()=>this.su),(r=>{this.su=r}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},Gu);this.lu=i[0],this.mu=i[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!z(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){Ku(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=O?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(n=>{var i;n||(i=t.logs)==null||!i.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(Pl)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:i=>i===Kt.LogsQueue?t():void 0,setPersistedProperty(i,r){var s;i===Kt.LogsQueue&&e((s=r)!==null&&s!==void 0?s:[])},Ot:i=>this.Ot(i),getLibraryId:()=>oe.LIB_NAME,getLibraryVersion:()=>oe.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Kf(this.Sa,3))e({kind:"fatal",error:sa(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,i=s=>{n||(n=!0,clearTimeout(r),e(s))},r=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),i({kind:"retry-later",error:sa(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:s=>{var o=s.statusCode;if(this.ku(o),o>=200&&300>o)i({kind:"ok"});else if(o===413)i({kind:"too-large"});else if(o!==0&&o!==429&&500>o)i({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(s.error||this.rt.warn("Logs request failed before receiving an HTTP response"),i({kind:"retry-later",error:sa(s.error,"logs request failed before receiving an HTTP response")})):i({kind:"retry-later",error:(a=s.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Yf(t,this.Sa,3,(()=>this.rt.warn("Log requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped sending logs; will try again when connectivity changes."))))}bu(t){this.tr.length>0&&this.xu(t,this.tr,this.fu,oe.LIB_NAME,(e=>{this.tr=e})),this.su.length>0&&this.xu(t,this.su,this.mu,Gu,(e=>{this.su=e}))}xu(t,e,n,i,r){if(e.length!==0){var s=e.map((a=>a.record));r([]);var o=_f(s,yf(n,oe.LIB_NAME,oe.LIB_VERSION),i,oe.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),i=n.windowId,r=n.sessionStartTimestamp,s=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=i,z(r)||(e.sessionStartTimestamp=r),z(s)||(e.lastActivityTimestamp=s)}if(O!=null&&(t=O.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?wn(O.location.href):O.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Uv={metrics:class{constructor(t){this.rt=ye("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new zg(this.hu(),(function(i){var r,s,o,a,l,u=i?.resourceAttributes;return{serviceName:(r=u?.["service.name"])!==null&&r!==void 0?r:i?.serviceName,serviceVersion:(s=u?.["service.version"])!==null&&s!==void 0?s:i?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:i?.environment,resourceAttributes:u,beforeSend:i?.beforeSend,flushIntervalMs:(a=i?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=i?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>oe.LIB_NAME,getLibraryVersion:()=>oe.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var i=!1,r=o=>{i||(i=!0,clearTimeout(s),n(o))},s=setTimeout((()=>r({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(k({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)r({kind:"ok"});else if(a===413)r({kind:"too-large"});else if(a!==0&&a!==429&&500>a)r({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;r({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},Hv=k({},Ys,Fv,Rv,Tv,$v,Mv,Nv,Lv,Ov,Bv,Dv,jv,Uv);rt.__defaultExtensionClasses=k({},Hv);(function(){oe.SDK_DIST_CHANNEL="npm";var t=tr[ii]=new rt;return(function(){function e(){e.done||(e.done=!0,Sh=!1,ae(tr,(function(n){n._dom_loaded()})))}F!=null&&F.addEventListener?F.readyState==="complete"?e():we(F,"DOMContentLoaded",e,{capture:!1}):w&&A.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const Wv=["a[href]","button:not([disabled])","input:not([disabled]):not([type='hidden'])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");let Qe=null,Fs=null,Ih="";const Va=new Map;function kh(t){return[...t.querySelectorAll(Wv)].filter(e=>!e.hidden&&e.getAttribute("aria-hidden")!=="true"&&e.getClientRects().length>0)}function qv(t){for(const e of document.body.children)e===t||e.tagName==="SCRIPT"||(Va.set(e,{inert:e.inert,ariaHidden:e.getAttribute("aria-hidden")}),e.inert=!0,e.setAttribute("aria-hidden","true"))}function zv(){for(const[t,e]of Va)t.inert=e.inert,e.ariaHidden===null?t.removeAttribute("aria-hidden"):t.setAttribute("aria-hidden",e.ariaHidden);Va.clear()}function Ch(t){return t?.dataset.modalDismissible!=="false"&&t?.getAttribute("aria-busy")!=="true"}function Ke(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n)return!1;const i=Qe&&Qe!==n?Qe:null,r=Fs;if(i&&Ye(i,{restoreFocus:!1,force:!0}),Qe!==n){let a=e.trigger||document.activeElement;a&&(i?.contains(a)||n.contains(a))&&(a=r),Fs=a,Ih=document.body.style.overflow,qv(n),document.body.style.overflow="hidden"}Qe=n,n.classList.add("open"),n.setAttribute("aria-hidden","false");const s=n.querySelector(".modal-content");s&&(s.style.transform="scale(1) translateY(0)");const o=()=>{if(Qe!==n)return;((e.initialFocus?n.querySelector(e.initialFocus):n.querySelector("[data-modal-initial-focus]"))||kh(n)[0]||n.querySelector(".modal-content")||n).focus({preventScroll:!0})};return requestAnimationFrame(o),setTimeout(o,260),!0}function Ye(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n||!e.force&&!Ch(n))return!1;if(n.classList.remove("open"),n.setAttribute("aria-hidden","true"),n!==Qe)return!0;zv(),document.body.style.overflow=Ih,Qe=null;const i=Fs;return Fs=null,e.restoreFocus!==!1&&i?.isConnected&&i.focus({preventScroll:!0}),!0}function Vv(){return!!Qe}function Yu(t,e,n="Operation in progress"){const i=typeof t=="string"?document.getElementById(t):t;i&&(i.dataset.modalDismissible=e?"false":"true",i.setAttribute("aria-busy",String(!!e)),e?i.setAttribute("aria-label",n):i.removeAttribute("aria-label"))}function Gv(t){if(!Ch(t))return;const e=t.dataset.modalCloseHandler;e&&typeof window[e]=="function"?window[e]():Ye(t)}document.addEventListener("keydown",t=>{if(!Qe)return;if(t.key==="Escape"){t.preventDefault(),t.stopImmediatePropagation(),Gv(Qe);return}if(t.key!=="Tab"){t.stopPropagation();return}const e=kh(Qe);if(!e.length){t.preventDefault(),(Qe.querySelector(".modal-content")||Qe).focus();return}const n=e[0],i=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),n.focus())},!0);function Kv(){document.querySelectorAll(".modal-overlay").forEach(t=>{t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-hidden",t.classList.contains("open")?"false":"true");const e=t.querySelector(".modal-content");e&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1);const n=t.querySelector("h1, h2, h3");n&&(n.id||(n.id=`${t.id}-title`),t.setAttribute("aria-labelledby",n.id)),t.querySelectorAll(".modal-close").forEach(i=>{i.getAttribute("aria-label")||i.setAttribute("aria-label","Close dialog")})})}const Ol=Object.freeze({free:"Free",professional:"Pro",power:"Power"}),Yv=Object.freeze({free:2,professional:50,power:2e3}),Jv="(contact us)",Zv=Object.freeze({free:Object.freeze(["2 generations/month","Gemini model only","Code Review"]),professional:Object.freeze(["50 generations/month","All models","Code Regeneration","Code Review"]),power:Object.freeze(["2000 generations/month","All models","Code Regeneration","Bring your own key (BYOK)","Code Review","All models + early access",`API & MCP access ${Jv}`])}),Ah="CodeFile",Ph="GeneratedCode",Xv={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function vn(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function Ga(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Qv(t={},e=0){const n=Ga(t.artifactType||t.type||Ah),i=Ga(t.artifactName||t.name||t.fileName||`${Ph}-${e+1}`);return`${n||"artifact"}-${i||e+1}`}function Fh(t={},e=0){const n=vn(t),i=n.artifactType||n.type||Ah,r=n.artifactName||n.name||Ph;let s=n.fileName||r;return s.endsWith(".dart")||(s+=".dart"),{id:Ga(n.id)||Qv({...n,artifactType:i,artifactName:r,fileName:s},e),artifactType:i,artifactName:r,fileName:s,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:Rh(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:Th(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:vn(n.metadata),codeType:n.codeType||Xv[i]||"O"}}function Rh(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=vn(e),i=n.name||n.package;return i?{name:i,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(vn(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function Th(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=vn(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function Ka(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function dr(t,e={}){const n=[],i=typeof t=="string"?Ka(t):t,s=vn(i||{});!i&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(s.artifacts)?s.artifacts:[{artifactType:s.artifactType||e.artifactType,artifactName:s.artifactName||e.artifactName,fileName:s.fileName||e.fileName,description:s.description,code:s.code||e.code||(typeof t=="string"?t:""),dependencies:s.dependencies||e.dependencies,relationships:s.relationships||e.relationships}];o.forEach((d,f)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${f+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,f)=>Fh(d,f)),l=new Map(o.map((d,f)=>[vn(d).id,a[f]?.id]).filter(([d,f])=>d&&f)),u=d=>l.get(d)||d,c=Th(s.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:s.schemaVersion||e.schemaVersion||null,id:s.id||e.id||"bundle-current",title:s.title||s.name||e.title||"Generated artifact bundle",description:s.description||e.description||"",artifacts:a,dependencies:Rh(s.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(s.deployOrder)?s.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(s.warnings)?s.warnings:[]],metadata:vn(s.metadata)}}function yi(t){return dr(t).artifacts[0]||Fh()}function an(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function _i(t){return JSON.stringify(t,null,2)}function ey(t){return _i({task:"architect",userRequest:String(t??"")})}function ty(t){const e=an(t);return e&&typeof e=="object"&&typeof e.task=="string"?_i(e):_i({task:"generate_bundle",bundleSpec:e})}function ny(t){return _i({task:"review_bundle",generatedBundle:an(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function Bl(t,e=null){const n={stage:t};return e!=null&&(n.bundle=an(e)),n}function iy({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:i,userFeedback:r}){return _i({task:"regenerate_artifact",artifactId:i,bundleSpec:an(t),artifactBundle:an(e),bundleReview:an(n),userFeedback:String(r)})}function $h({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:i}){return _i({task:"regenerate_bundle",bundleSpec:an(t),artifactBundle:an(e),bundleReview:an(n),userFeedback:String(i??"")})}const Ju={csam:"child-safety content",dangerous:"dangerous content",harassment:"harassment",hate_speech:"hate speech",maliciousUrls:"a potentially malicious URL",malicious_uris:"a potentially malicious URL",pi_and_jailbreak:"prompt-injection or jailbreak instructions",promptInjection:"prompt-injection or jailbreak instructions",rai:"restricted content",sdp:"sensitive personal data",sexually_explicit:"sexually explicit content",virus_scan:"potentially malicious file content"},ry=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function lt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function sy(t){return lt(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||lt(t.filterSummary)||lt(t.filterResults):!1}function Mh(t,e=0){if(!lt(t)||e>3)return null;if(sy(t))return t;for(const n of ry){const i=t[n];if(lt(i)){const r=Mh(i,e+1);if(r)return r}}return null}function Rs(t){return Array.isArray(t)?t.some(Rs):lt(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(Rs):!1}function Ya(t){return Array.isArray(t)?t.some(Ya):lt(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(Ya):!1}function Lh(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function oy(t,e){if(lt(t))for(const[n,i]of Object.entries(t)){if(!lt(i))continue;const r=lt(i.categories)?i.categories:{},s=Object.entries(r).filter(([,o])=>lt(o)&&o.matched===!0).map(([o])=>o);s.length>0?s.forEach(o=>e.add(o)):i.matched===!0&&e.add(Lh(n))}}function ay(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(i=>lt(i)?Object.entries(i):[]):Object.entries(t);for(const[i,r]of n){if(!Rs(r))continue;const s=Lh(i),o=r?.raiFilterResult?.raiFilterTypeResults||(s==="rai"?r?.raiFilterTypeResults:null),a=lt(o)?Object.entries(o).filter(([,l])=>Rs(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(s)}}function ly(t){return Ju[t]?Ju[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Zu(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function cy(t){const e=Mh(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);oy(e.filterSummary,n),ay(e.filterResults,n);const i=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,r=e.invocationResult||null,s=Ya(e.filterSummary||e.filterResults);return!i&&!s&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:i?"blocked":"unavailable",invocationResult:r,matchedFilters:[...n]}}function uy(t,e){const n=cy(t);if(!n)return null;const i=[...new Set(n.matchedFilters.map(ly))],r=n.kind==="blocked",s=new Error(r?`Safety screening blocked this pipeline step for ${Zu(i)}.`:"Safety screening could not be completed. Please try again.");return s.name="ModelArmorError",s.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",s.isModelArmor=!0,s.pipelineStep=e,s.userTitle=r?"Request blocked for safety":"Safety check unavailable",s.userMessage=r?`The safety check detected ${Zu(i)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",s.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",s.matchedFilters=n.matchedFilters,s}function dy(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Xu(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,n=[];for(const i of dy(t).split(`
+`)){if(!/^[A-Za-z_$]/.test(i)||e.test(i))continue;const r=i.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);r&&n.push(r[1])}return n}function Dl(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(i,r,s)=>s.toUpperCase());if(e==="A"){const i=n.replace(/(^|_)(\w)/g,(r,s,o)=>o.toUpperCase());return i.charAt(0).toLowerCase()+i.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function Qu(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),i=>i.toString(16).padStart(2,"0")).join("")}async function fy(t,e=new Map){const n={},i=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=Dl(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Qu(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Qu(c)),n[o]=u,a.type==="F"){const d=Xu(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>i.add(p))}}const r=new Set(Xu(e.get("lib/flutter_flow/custom_functions.dart")||"")),s={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(i).filter(o=>!r.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(s)}}const hy=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),ed={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},py=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),gy=["Struct","Record"],my=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>oa(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; }
+class W extends StatefulWidget { const W({this.value}); final double? value; }`},{id:"non-nullable-public-field",severity:"error",message:"CustomWidget declares a non-nullable field with no constructor default. FlutterFlow omits unset Define Parameters fields, so the emitted call cannot supply it. Make the field nullable (`final double? value`) or give the parameter a default (`this.value = 0.0`).",detect:t=>oa(t).some(e=>{const n=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let i;for(;(i=n.exec(e))!==null;){const r=i[1];if(!(new RegExp(`this\\.${r}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${r}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget {
+ const W({required this.value});
+ final double value;
+}`,neg:`class _P {
+ const _P({required this.t});
+ final double t;
+}
+class W extends StatefulWidget {
+ const W({this.value = 1.0});
+ final double value;
+}`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; }
+var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; }
+var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>oa(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget {
+ const W({this.textStyle});
+ final TextStyle? textStyle;
+ @override _S createState() => _S();
+}
+class _S extends State { @override Widget build(BuildContext c) => const SizedBox(); }`,neg:`class W extends StatefulWidget {
+ const W({this.width});
+ final double? width;
+ @override _S createState() => _S();
+}
+class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function At(t,e,n){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:n}}function fr(t){let e="",n=0;for(;n"&&(n--,n===0))return{inner:t.slice(e+1,i),end:i+1};return null}function yy(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let i=0;for(let r=n.index+n[0].length-1;r_y(t).usable);function by(t=""){const e=fr(t);return wy.filter(n=>n.detect(e)).map(({id:n,severity:i,message:r})=>({id:n,severity:i,message:r}))}function Ey(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const i of n){let r=i.index+6,s=null;const o=r;for(;ro;if(t[r]==="<"){const u=vy(t,r);if(!u||(s=u.inner.replace(/\s+/g," ").trim(),r=u.end,!/\s/.test(t[r]||"")))continue;for(;rtd(o.functionName)===i);if(r)return r;const s=o=>!o.functionName.startsWith("_");return n.find(s)||n[0]}function Js(t=""){return Array.from(fr(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function Sy(t="",e=""){return jl(t,e)?.returnType||null}function nd(t){return String(t||"").replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").toLowerCase()}function xy(t,e){const n=Js(e);if(n.length===0)return null;const r=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>nd(l)===r)||n.length>1)return null;const[o]=n,a=`${nd(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function Ul(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function Iy(t,e,n=""){const i=jl(e,n)?.functionName;if(!i)return null;const r=String(t||"").split("/").pop(),s=Dl(r,"A");if(s===i)return null;const o=`${Ul(i)}.dart`;return`File name "${r}" does not match Action "${i}". FlutterFlow derives the action from the file name, so it looks for "${s}" and reports Action "${s}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${s}".`}function ky(t="",e=""){return jl(t,e)!==null}function Cy(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(i=>py.has(i)?!1:!gy.some(s=>i.endsWith(s))||e.has(i))}function Ay(t,{functionName:e="",declaredTypes:n=new Set}={}){const i=Sy(t,e),r=Cy(i,n);if(r.length===0)return null;const[s]=r;let o;return n.has(s)?o=`uses Code File type "${s}", which FlutterFlow cannot process as an Action Return Value`:i===s?o="is not a FlutterFlow Action Return Value":o=`uses type "${s}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${i}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function Py(t,e={}){const n=[],i=t.fileName||"",r=t.code||"";if(hy.has(t.artifactType)||n.push(At(t,"error",`Unsupported artifact type "${t.artifactType}".`)),i.endsWith(".dart")||n.push(At(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return n.push(At(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)||n.push(At(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const s of by(r))n.push(At(t,s.severity,s.message))}if(t.artifactType==="CustomAction"&&!ky(r,t.artifactName)&&n.push(At(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const s=e.declaredTypes||new Set(Js(r)),o=Ay(r,{functionName:t.artifactName,declaredTypes:s});o&&n.push(At(t,"error",o));const a=Iy(i,r,t.artifactName);a&&n.push(At(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&n.push(At(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const s=xy(i,r);s&&n.push(At(t,"info",s))}return n}function Fy(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(s=>Js(s.code||""))),i=e.flatMap(s=>Py(s,{declaredTypes:n})),r=e.map(s=>({artifactId:s.id,fileName:s.fileName,pathHint:ed[s.artifactType]||ed.CodeFile}));return{valid:i.every(s=>s.severity!=="error"),findings:i,deployHints:r}}const id="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function rd(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function Ry(t=""){const e=t.indexOf(id);return e===-1?t:t.slice(e+id.length).replace(/^\s*\n/,"")}const Ty=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function $y(t="",e=""){const n=Ry(t),i=new Set((e.match(/^\s*import .*$/gm)||[]).map(rd).filter(Boolean)),r=n.split(`
+`).filter(s=>{const o=rd(s);return o===null||!i.has(o)?!0:!Ty.test(s)}).join(`
+`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+r}const My=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations","flutter_web_plugins","integration_test","sky_engine"]);function Ly(t){let e="",n=0;for(;n{const i=n.name||n.package;if(!i||i==="flutter")return e;const r=n.versionRequired||n.required;return e[i]=r&&n.version||"",e},{})}function Wy(t){const e=new Map,n=new Map,i=[];for(const r of t)e.has(r.fileName)?i.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?i.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return i}function qy(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(h=>h.id===p)).filter(Boolean),s=[...t?.warnings||[]];let o=[];r.forEach(p=>{const h=Hy(p),g=p.fixedCode||p.code||"",m=p.codeType||jy[p.artifactType]||st.OTHER;g.trim()||s.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:h,content:g,type:m,path:p.deployPath||Uy(h,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,h)=>({entry:p,index:h})).filter(({entry:p})=>p.type===st.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],h={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId}
+${m.content}`).join(`
+
+`)},g=new Set(l.slice(1).map(({index:m})=>m));o=o.filter((m,v)=>!g.has(v)),o[p.index]=h}const u={...sd(t?.dependencies),...r.reduce((p,h)=>({...p,...sd(h.dependencies)}),{})},c={};r.forEach(p=>{Hl(p.fixedCode||p.code||"").forEach(h=>{h in u||(c[h]="")})});const d={...c,...u},f=Wy(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:s,errors:f}}function zy(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Vy(t){return String(t||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function Gy(t,e){const i=[Vy(t),zy(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!i)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return i}function Ky(t,e=new Map){const n=[];for(const[i,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||i,className:Gy(i,r),content:r.content,fileName:i,path:r.path});return n}function Yy(t,e){const n=new Set(e.map(i=>i.path));return new Map(Array.from(t.entries()).filter(([,i])=>!n.has(i.path)))}const od={pass:0,warning:1,fail:2},Jy=["manualActions"];function ft(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function tn(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const n=e.filter(i=>typeof i=="string").join(`
+`);if(n)return n}}return""}function Ft(t){return t==null?[]:Array.isArray(t)?t:[t]}function Zy(t){const e=ft(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return ad(n);const i=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return i?ad(Number(i[1])):null}function ad(t){return t>=0&&t<=100?t:null}function gt(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Wl(t){const e=String(t||"").toLowerCase();return/(fail|error|critical|block|reject|invalid)/.test(e)?"fail":/(warn|attention|manual|partial|incomplete|concern)/.test(e)?"warning":/(pass|success|ready|approve|valid|clean|info|notice)/.test(e)?"pass":null}function Ja(...t){return t.filter(Boolean).reduce((e,n)=>od[n]>od[e]?n:e,"pass")}function Bh(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const i=ft(t),r=tn(i.message,i.title,i.issue,i.description,i.summary);return r?{severity:Wl(i.severity||i.status||i.level)||e,message:r,suggestion:tn(i.suggestion,i.fix,i.recommendation,i.action),source:i.source||n}:null}function Za(t,e="review"){const n=ft(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,s])=>Ft(n[r]).map(o=>Bh(o,s,e)).filter(Boolean))}function Xy(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const i=ft(t),r=tn(i.title,i.action,i.step,i.message,i.name,i.description);return r?{id:i.id||`${n||"bundle"}-manual-${e+1}`,title:r,detail:tn(i.detail,i.instructions,i.description),location:tn(i.location,i.flutterFlowPath,i.path),timing:tn(i.timing,i.phase)||"unspecified",artifactId:n,source:tn(i.source)||"Code Review"}:null}function Xa(t,e=null){const n=ft(t);return Jy.flatMap(i=>Ft(n[i])).map((i,r)=>Xy(i,r,e)).filter(Boolean)}function Qy(t){let e=typeof t=="string"?Ka(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=ft(e);typeof n.content=="string"&&(e=Ka(n.content)||e);const i=ft(e),r=ft(i.reviewResult||i.codeReview||i.result);return{rawText:"",root:Object.keys(r).length?r:i}}function e_(t,e){const n=[e.id,e.fileName,e.artifactName].map(gt);return t.find(i=>{const r=ft(i);return[r.id,r.fileName,r.artifactName,r.name].map(gt).some(s=>s&&n.includes(s))})||null}function t_(t,e){return Ft(t?.metadata?.compatibility?.deployHints).find(r=>gt(r?.artifactId)===gt(e.id)||gt(r?.fileName)===gt(e.fileName))?.pathHint||""}function n_(t,e){return Ft(t?.relationships).filter(n=>gt(n?.from)===gt(e.id)||gt(n?.to)===gt(e.id))}function i_(t,e){return Ft(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||gt(n.artifactId)===gt(e.id)).map(n=>Bh(n,"warning","Compatibility check")).filter(Boolean)}function r_(t,e,n,i){const r=e_(e,n),s=ft(r?.review||r||n.review),o=Object.keys(s).length>0,a=[...Za(s),...i_(t,n)],l=Xa(s,n.id),u=Wl(s.status||s.verdict||s.outcome||s.result),c=a.length?Ja(...a.map(f=>f.severity)):null,d=Ja(u,c,o?null:"warning");return{...n,index:i,status:d,statusReason:o?tn(s.summary,s.overview,s.assessment,s.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof s.fixedSource=="string"&&s.fixedSource.trim()?s.fixedSource.trim():null,pathHint:t_(t,n),relationships:n_(t,n)}}function s_({status:t,score:e,artifactPresentations:n,manualSteps:i}){const r=n.length;if(r===0&&i.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const s=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),r&&o.push(`${r} artifact${r===1?"":"s"}: ${s.pass} pass, ${s.warning} warn, ${s.fail} fail.`),i.length&&o.push(`Do before deploy: ${i.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function o_({bundle:t,reviewResult:e}){const n=ft(t),i=Ft(n.artifacts),{root:r,rawText:s}=Qy(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(ft).find(E=>Object.keys(E).length)||{},a=Ft(r.artifacts||r.files||r.reviews),l=i.map((E,y)=>r_(n,a,E,y)),u=Za(r),d=[...Za(o),...u],f=[...Xa(o),...Xa(r),...l.flatMap(E=>E.manualSteps)].filter((E,y,S)=>S.findIndex(I=>I.title===E.title&&I.artifactId===E.artifactId)===y),p=Wl(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),h=Ja(p,...d.map(E=>E.severity),...l.map(E=>E.status)),g=o.score??r.score??r.overallScore??s,m=Zy(g),v=tn(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,r.overallSummary,r.headline,r.summary,r.executiveSummary,r.overview,r.assessment,r.conclusion,s)||s_({status:h,score:m,artifactPresentations:l,manualSteps:f}),x=l.reduce((E,y)=>(E[y.status]+=1,E),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:h,score:m,summary:v,findings:d,manualSteps:f,artifacts:l,counts:x,reviewCoverage:{reviewed:l.filter(E=>E.reviewComplete).length,total:l.length},deployOrder:Ft(n.deployOrder),relationships:Ft(n.relationships),warnings:Ft(n.warnings),compatibility:ft(n.metadata?.compatibility)}}const a_=/^\uFEFF/;function Di(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(`
+`)}function l_(t){const e=String(t??"").replace(a_,"");if(!e.trim())return"";const n=e.split(`
+`),i=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let r=0,s=-1;const o=[];{let c=0;for(let d=0;d=0&&(r++,s<0&&(s=d),o.push(c+f)),c+=n[d].length+1}}if(r===0)return Di(n);{const c=Qa(e);if(!c.error&&o.every(f=>cd(f,c.commentAndStringRanges)))return Di(n)}if(r===1){const c=Di(n.slice(0,s)),d=Di(n.slice(s+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(`
+
+`)}function c_(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function Dh(t){const e=c_(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),n=>n[1])}function jh(t){return`${Ul(t)}.dart`}function u_(t){return Dl(t,"W")}const ld={"(":")","[":"]","{":"}"},d_={")":"(","]":"[","}":"{"},f_=/[A-Za-z0-9_]/;function Qa(t){const e=[{kind:"code",opener:null,openedLine:0}],n=[];let i=1,r=0;const s=(c,d)=>{(c===`
+`||c==="\r"&&d!==`
+`)&&i++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&n.push({start:c.startIndex,end:t.length})};for(;r0?t[r-1]:"",h=r>1?t[r-2]:"",g=(p==="r"||p==="R")&&!f_.test(h);e.push({kind:"string",quote:c,triple:f,raw:g,startIndex:r,openedLine:i}),r+=f?3:1;continue}if(ld[c]){e.push({kind:"code",opener:c,openedLine:i}),r++;continue}if(d_[c]){if(d.interpolation&&c==="}"){e.pop(),r++;continue}if(d.opener&&ld[d.opener]===c){e.pop(),r++;continue}return d.opener?(a(),{error:o??`line ${i}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${i}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}s(c,t[r+1]),r++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function h_(t){return Qa(String(t??"")).error}function cd(t,e){return e.some(({start:n,end:i})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const p_=["gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com"],g_="MAGIC_LINK_SENT",m_="PLUS_ALIAS_REJECTED",v_="Please enter your primary email address. Plus aliases (such as {email}) are not allowed for {domain} accounts.",Zs={allowlistedDomains:p_,successCode:g_,validationCode:m_,messageTemplate:v_},y_=new Set(Zs.allowlistedDomains),__=Zs.successCode,w_=Zs.validationCode;function Xs(t){return typeof t=="string"?t.trim():""}function b_(t){const e=Xs(t),n=e.lastIndexOf("@");if(n<=0||n===e.length-1)return!1;const i=e.slice(0,n),r=e.slice(n+1).toLowerCase();return y_.has(r)?i.includes("+"):!1}function E_(t,e){return Zs.messageTemplate.replaceAll("{email}",t).replaceAll("{domain}",e)}function Uh(t){if(!b_(t))return null;const e=Xs(t),n=e.lastIndexOf("@"),i=e.slice(n+1).toLowerCase();return E_(e,i)}function zl(t){return!t||typeof t!="object"||Array.isArray(t)||t.success===!1||t.error?!1:t.code?t.code===__:t.success===!0||typeof t.message=="string"}function Hh(t,e){return t?.code===w_?t.message||Uh(e)||"Please enter your primary email address.":zl(t)?`Check your email — we sent a link to ${Xs(e)}`:t?.message||"Something went wrong. Please try again."}const S_="ccc_auth_session",x_="ccc_subscription",I_=Object.freeze(["hasSeenWalkthrough"]);function k_(t){const e=[];for(const n of I_)t.getItem(n)!==null&&(t.removeItem(n),e.push(n));return e}function C_(){return[S_,x_]}function A_({storage:t,onIdentityChanged:e,onPlanChanged:n}){for(const i of C_())t.removeItem(i);typeof e=="function"&&e(),typeof n=="function"&&n()}function P_(t){const e=t?.message||t?.error;return typeof e=="string"&&e.trim()?e.trim():"The server could not send the link."}function F_({sendLink:t,getEmail:e,onState:n}){let i=!1;return async function(){if(i)return{status:"busy"};i=!0;let s;try{n({status:"pending",error:null});const o=await t(e());if(!zl(o))throw new Error(P_(o));return s={status:"sent",data:o},n({status:"sent",data:o}),s}catch(o){return s={status:"error",error:o},n({status:"error",error:o}),s}finally{i=!1}}}const R_=/^dependencies\s*:\s*(?:#.*)?$/,T_=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function br(t){const e=t.match(T_);return e?e[1]??e[2]??e[3]:null}function Er(t){const e=t.trim();return e===""||e.startsWith("#")}function En(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function Vl(t,e){const n=t.findIndex(s=>e.test(s));if(n===-1)return null;let i=n,r=null;for(let s=n+1;su&&/\s/.test(s[c-1]);)c-=1}return t[r]=s.slice(0,u)+Kl(n)+s.slice(c),!0}return!1}function ud(t,e,n){if(n&&typeof n=="object"&&n.sdk)return[`${t}${e}:`,`${t} sdk: ${n.sdk}`];const i=String(n||"").trim();return[`${t}${e}: ${i?Kl(i):">=0.0.0"}`]}function N_(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(i.length===0)return{yaml:n,added:[],alreadyPresent:[]};const r=n.split(`
+`),s=new Set(Kh(n)),o=[],a=[];for(const[u,c]of i)s.has(u)?a.push(u):(o.push([u,c]),s.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=Gl(r);if(l){const u=o.flatMap(([c,d])=>ud(l.childIndent,c,d));r.splice(l.endIndex,0,...u)}else r.length>0&&r[r.length-1].trim()!==""&&r.push(""),r.push("dependencies:"),o.forEach(([u,c])=>{r.push(...ud(" ",u,c))});return{yaml:r.join(`
+`),added:o.map(([u])=>u),alreadyPresent:a}}function O_(t,e={}){const n=String(t||""),i=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(i.length===0)return{yaml:n,overridden:[],skipped:[]};const r=n.split(`
+`),s=Qs(n),o=[],a=[];for(const[l,u]of i){const c=s.get(l),d=c&&!c.isScalar&&c.sourceKey===null&&c.version!==null;if(!c||!c.isScalar&&!d||!String(u||"").trim()){a.push(l);continue}if(d){L_(r,c,String(u).trim())?o.push({name:l,from:c.version,to:u}):a.push(l);continue}const f=" ".repeat(En(r[c.lineIndex]));r[c.lineIndex]=`${f}${l}: ${Kl(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:r.join(`
+`),overridden:o,skipped:a}}function Jh(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),Gl(e.split(`
+`))||n.push("pubspec.yaml missing dependencies section"),Kh(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const B_=">=3.0.0 <4.0.0";function el(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function D_(t=""){const e=Dy(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function dd(t,e,n){const i=[];for(const[r,s]of t){if(s.isScalar){e[r]=el(s.constraint);continue}if(s.sourceKey==="sdk"){n.add(r);continue}if(s.sourceKey===null&&s.version){e[r]=el(s.version);continue}i.push(r)}return i}function j_(t){const e=new Set,n=new Set,i={},r={},s=dd(Qs(t),i,e),o=dd($_(t,"dependency_overrides"),r,n),a=[...s,...o],l=new Set([...Object.keys(i),...e]),{sdk:u}=Yh(t);return{sdkConstraint:el(u)||B_,dependencies:i,dependencyOverrides:r,sdkPackages:[...e].sort(),sdkOverrides:[...n].sort(),availablePackages:l,unrepresentable:a,unrepresentableOverrides:o}}function U_(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function H_(t,e){const{sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o,availablePackages:a,unrepresentable:l}=j_(e),u={sdkConstraint:n,dependencies:i,dependencyOverrides:r,sdkPackages:s,sdkOverrides:o},c=[],d=[],f=l.map(p=>`Your project declares ${p} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${p}. Classes that do not import ${p} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const p of t){const{className:h,content:g}=p,m=Hl(g),v=m.filter(y=>l.includes(y));if(v.length>0){d.push({className:h,reason:`${h} was not compiled before deploying: it imports ${v.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:x}=D_(g),E=m.filter(y=>!a.has(y));if(x.length>0||E.length>0){d.push({className:h,reason:U_(h,x,E)});continue}c.push({fileName:`${Ul(h)}.dart`,content:g})}return{manifest:u,sources:c,skipped:d,approximate:f}}function fd(t,e){const n=`${t}${e}`.split(`
+`),i=n.pop()??"",r=[];for(const s of n){const o=Zh(s);o&&r.push(o)}return{events:r,buffer:i}}function W_(t){const e=Zh(t);return e?[e]:[]}function Zh(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}const De=Object.freeze({COMMITTED:"committed",PARTIAL:"partial",FAILED:"failed",UNCONFIRMED:"unconfirmed"}),Xh=12e4,Qh=1e4;function ep(t){return t?.unconfirmed===!0||t?.outcome===De.UNCONFIRMED?De.UNCONFIRMED:t?.partial===!0||t?.outcome===De.PARTIAL?De.PARTIAL:t?.success===!0?De.COMMITTED:De.FAILED}class ot extends Error{constructor(e){super(e),this.name="UnconfirmedDeployError",this.outcome=De.UNCONFIRMED}}function hd({httpStatus:t}={}){return new ot(`Every FlutterFlow sync endpoint lost its response or ended in a server error${t?` (last: HTTP ${t})`:""} — neither can prove the push was refused, so it may already have been applied. Open the FlutterFlow project to reconcile before retrying.`)}async function q_(t,e={}){const{onPhase:n,onLog:i}=e;let r=null,s=null,o="";const a=u=>{if(u.event==="phase"){u.phase&&(s=u.phase),u.message&&n&&n(u.message);return}if(u.event==="log"){u.message&&i&&i(u.message);return}r=u};let l=null;try{if(t.body?.getReader){const u=t.body.getReader(),c=new TextDecoder;for(;;){const{done:d,value:f}=await u.read();if(d)break;const p=fd(o,c.decode(f,{stream:!0}));o=p.buffer,p.events.forEach(a)}}else{const u=fd("",await t.text());o=u.buffer,u.events.forEach(a)}}catch(u){l=u}return W_(o).forEach(a),r?{...r,success:r.success===!0||r.success===void 0&&t.ok,finalResultReceived:!0,runnerPhase:s,httpStatus:t.status}:{success:!1,finalResultReceived:!1,httpRejected:!t.ok,httpStatus:t.status,runnerPhase:s,error:t.ok?l?"The connection to the FlutterFlow deploy runner dropped before it reported a result.":"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}const z_=new Set(["connected","workspace_init","workspace_ready","verifying"]);function tp(t){return t?.preWrite===!0||Array.isArray(t?.analyzerErrors)&&t.analyzerErrors.length>0?!0:typeof t?.runnerPhase=="string"?z_.has(t.runnerPhase):typeof t?.httpStatus=="number"?t.httpStatus>=400&&t.httpStatus<500:!1}function pd(t){if(t?.finalResultReceived){const e=ep(t);return e===De.FAILED&&!tp(t)?De.UNCONFIRMED:e}return t?.httpRejected&&typeof t.httpStatus=="number"&&t.httpStatus>=400&&t.httpStatus<500?De.FAILED:De.UNCONFIRMED}function V_(){let t=document.getElementById("fx-grid");if(!t)return null;const e=window.matchMedia("(prefers-reduced-motion: reduce)"),n=window.matchMedia("(pointer: none)");let i=t.getContext("webgl2",{alpha:!0,antialias:!1,depth:!1,stencil:!1,premultipliedAlpha:!0,powerPreference:"low-power"}),r=i?null:t.getContext("2d");if(!i&&!r)return null;const s='',o=`#version 300 es
+in vec2 p; void main(){ gl_Position = vec4(p, 0.0, 1.0); }`;function a(){return["#version 300 es","precision highp float;","out vec4 o;","uniform vec2 res;","uniform vec2 design;","uniform vec2 mouse;","uniform float energy;","uniform float parallax;","uniform float t;","uniform vec3 ink;","uniform sampler2D mark;","uniform vec2 rot;","const float WARP_A = 0.0032;","void main(){"," vec2 px = gl_FragCoord.xy * (design / res);"," vec2 p = vec2(px.x, design.y - px.y);"," vec2 off = vec2(0.0, -parallax) + vec2(sin(t * 0.11), cos(t * 0.09)) * 7.0;"," vec2 g = p + off;"," vec2 gm = mouse + off;"," float base = min(design.x, design.y);"," float spacing = clamp(base / 10.0, 64.0, 118.0);"," vec2 rel = g - gm;"," float rho = length(rel) + 1e-5;"," vec2 dir = rel / rho;"," vec2 pw = gm + dir * (rho + WARP_A * rho * rho);"," vec2 cell = floor(pw / spacing);"," vec2 cw = (cell + 0.5) * spacing - gm;"," float Rc = length(cw) + 1e-5;"," float rhoC = (-1.0 + sqrt(1.0 + 4.0 * WARP_A * Rc)) / (2.0 * WARP_A);"," vec2 c = gm + (cw / Rc) * rhoC;"," float cellSize = spacing / (1.0 + 2.0 * WARP_A * rhoC);"," float sigma = spacing * 2.9;"," float f = exp(-(rhoC * rhoC) / (2.0 * sigma * sigma));"," float scale = mix(0.32, 1.42, f);"," float weight = smoothstep(0.06, 0.80, f);"," float hs = cellSize * 0.26 * scale;"," vec2 uv = (g - c) / hs;"," vec2 ruv = mat2(rot.x, rot.y, -rot.y, rot.x) * uv;"," float cov = 0.0;"," if (abs(ruv.x) <= 1.0 && abs(ruv.y) <= 1.0) cov = texture(mark, ruv * 0.5 + 0.5).a;"," float s = cov * weight * energy * 0.26;"," o = vec4(ink * s, s);","}"].join(`
+`)}let l=null,u,c,d,f,p,h,g,m,v;function x(J,V){if(!i)return null;const D=i.createShader(J);return i.shaderSource(D,V),i.compileShader(D),i.getShaderParameter(D,i.COMPILE_STATUS)?D:(window.console&&console.warn("fx-grid shader: "+i.getShaderInfoLog(D)),null)}if(i){const J=x(i.VERTEX_SHADER,o),V=x(i.FRAGMENT_SHADER,a());if(J&&V&&(l=i.createProgram(),i.attachShader(l,J),i.attachShader(l,V),i.linkProgram(l),i.getProgramParameter(l,i.LINK_STATUS)||(window.console&&console.warn("fx-grid link: "+i.getProgramInfoLog(l)),l=null)),l){i.useProgram(l),i.bindBuffer(i.ARRAY_BUFFER,i.createBuffer()),i.bufferData(i.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),i.STATIC_DRAW);const D=i.getAttribLocation(l,"p");i.enableVertexAttribArray(D),i.vertexAttribPointer(D,2,i.FLOAT,!1,0,0),u=i.getUniformLocation(l,"res"),c=i.getUniformLocation(l,"design"),d=i.getUniformLocation(l,"mouse"),f=i.getUniformLocation(l,"energy"),p=i.getUniformLocation(l,"parallax"),h=i.getUniformLocation(l,"t"),g=i.getUniformLocation(l,"ink"),m=i.getUniformLocation(l,"mark"),v=i.getUniformLocation(l,"rot"),i.enable(i.BLEND),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),i.clearColor(0,0,0,0)}else{i=null;const D=t.cloneNode(!1);if(t.parentNode.replaceChild(D,t),t=D,r=t.getContext("2d"),!r)return null}}function E(J){if(!J)return null;const V=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(J);if(V){let D=V[1];return D.length===3&&(D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]),[parseInt(D.slice(0,2),16)/255,parseInt(D.slice(2,4),16)/255,parseInt(D.slice(4,6),16)/255]}try{const D=document.createElement("canvas");D.width=1,D.height=1;const pe=D.getContext("2d");pe.fillStyle="rgb(9, 8, 7)";const Ce=String(pe.fillStyle);pe.fillStyle=J;const Le=String(pe.fillStyle);if(Le===Ce)return null;const _t=/^#([0-9a-f]{6})$/i.exec(Le);if(_t){const wt=_t[1];return[parseInt(wt.slice(0,2),16)/255,parseInt(wt.slice(2,4),16)/255,parseInt(wt.slice(4,6),16)/255]}const Wt=/rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)/i.exec(Le);if(Wt)return[Number(Wt[1])/255,Number(Wt[2])/255,Number(Wt[3])/255]}catch{}return null}function y(){let J="";try{const V=getComputedStyle(document.documentElement);J=(V.getPropertyValue("--fx-ink")||"").trim()||(V.getPropertyValue("--fg")||"").trim()}catch{}return E(J)||[.56,.68,.88]}const S=y();let I=1920,R=1080,b=960,P=540,T=960,M=540,L=.66,B=0,Y=-1e9,G=!1,$=0,q=0,se=null,Fe=!1,ee=!1,Ee=!1;const Me=64,ie=15.2;let he=0,ue=0;const Oe=.0032,N=0,Z=.56,Re=.26,Be=.32,nt=.16,Te=.349;let Ae=N;function it(){const J=t.getBoundingClientRect(),V=t.clientWidth,D=t.clientHeight;if(!J.width||!V||!D)return;const pe=Math.min(window.devicePixelRatio||1,2),Ce=Math.max(.2,Math.min(2,J.width/V*pe)),Le=Math.max(2,Math.round(V*Ce)),_t=Math.max(2,Math.round(D*Ce));(Le!==t.width||_t!==t.height)&&(t.width=Le,t.height=_t,i&&i.viewport(0,0,Le,_t)),I=V,R=D,G||(b=T=I/2,P=M=R/2,G=!0)}function Kn(J){!l||!Fe||!i||(i.uniform2f(u,t.width,t.height),i.uniform2f(c,I,R),i.uniform2f(d,b,P),i.uniform1f(f,L),i.uniform1f(p,B),i.uniform2f(v,Math.cos(Ae),Math.sin(Ae)),i.uniform1f(h,J),i.uniform3f(g,S[0],S[1],S[2]),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLES,0,3))}function Je(J,V,D){const pe=Math.max(0,Math.min(1,(D-J)/(V-J)));return pe*pe*(3-2*pe)}function Yn(J){if(!se||!r)return;const V=r;V.setTransform(1,0,0,1,0,0),V.clearRect(0,0,t.width,t.height);const D=t.width/I;V.setTransform(D,0,0,D,0,0),V.globalAlpha=1;const pe=Math.min(I,R),Ce=Math.max(64,Math.min(118,pe/10)),Le=Ce*2.9,_t=2*Le*Le,Wt=Math.sin(J*.11)*7,wt=Math.cos(J*.09)*7-B,Pr=b+Wt,Fr=P+wt,So=Le*Math.sqrt(2*Math.log(1/.06)),Ai=So+Oe*So*So+Ce,pg=Math.floor((Pr-Ai)/Ce)-1,gg=Math.ceil((Pr+Ai)/Ce)+1,mg=Math.floor((Fr-Ai)/Ce)-1,vg=Math.ceil((Fr+Ai)/Ce)+1;for(let xo=mg;xo<=vg;xo++){const yg=(xo+.5)*Ce;for(let Io=pg;Io<=gg;Io++){const ko=(Io+.5)*Ce-Pr,Co=yg-Fr,Ao=Math.sqrt(ko*ko+Co*Co)+1e-5;if(Ao>Ai)continue;const Rr=(-1+Math.sqrt(1+4*Oe*Ao))/(2*Oe),Mc=Math.exp(-(Rr*Rr)/_t),Lc=Je(.06,.8,Mc)*L*.26;if(Lc<.004)continue;const gn=Ce/(1+2*Oe*Rr)*.26*(.32+1.1*Mc),Nc=Rr/Ao,Po=Pr+ko*Nc,Fo=Fr+Co*Nc;Po<-gn*1.6||Po>I+gn*1.6||Fo<-gn*1.6||Fo>R+gn*1.6||(V.globalAlpha=Lc,V.save(),V.translate(Po,Fo),V.rotate(Ae),V.drawImage(se,-gn,-gn,gn*2,gn*2),V.restore())}}V.globalAlpha=1}function Ut(J){if(!ee)return;const V=q?Math.min(.05,(J-q)/1e3):.016;q=J;const pe=J-Y>2400?.6:1;L+=(pe-L)*Math.min(1,V*3.2);const Ce=Math.min(.05,V);he+=((T-b)*Me-he*ie)*Ce,ue+=((M-P)*Me-ue*ie)*Ce,b+=he*Ce,P+=ue*Ce,B=(window.scrollY||window.pageYOffset||0)*.55;const Le=J/1e3,_t=b/(I||1)-.5,Wt=P/(R||1)-.5;let wt=_t*(_t>=0?Z:Re)+Wt*(Wt>=0?Be:nt);wt>Te?wt=Te:wt<-Te&&(wt=-Te),Ae=N+wt-B*6e-4,it(),i?Kn(Le):Yn(Le),$=requestAnimationFrame(Ut)}function Ht(J){if(!ee)return;const V=t.getBoundingClientRect();!V.width||!I||!R||(T=(J.clientX-V.left)/V.width*I,M=(J.clientY-V.top)/V.height*R,Y=performance.now())}function yt(){ee||Eo||e.matches||n.matches||!Ee||document.hidden||(ee=!0,q=0,$=requestAnimationFrame(Ut))}function pn(){ee=!1,$&&(cancelAnimationFrame($),$=0),q=0}function Ci(){e.matches?(pn(),t.classList.remove("is-ready")):Ee&&yt()}function Jn(){n.matches?pn():Ee&&yt()}function Rc(){document.hidden?pn():Ee&&yt()}const Tc=new IntersectionObserver(J=>{Ee=J[0]?.isIntersecting||!1,Ee?yt():pn()},{threshold:0});Tc.observe(t),window.addEventListener("pointermove",Ht,{passive:!0,capture:!0}),window.addEventListener("resize",it),e.addEventListener("change",Ci),n.addEventListener("change",Jn),document.addEventListener("visibilitychange",Rc);function hg(){const J=(s.match(/\sd="([^"]+)"/)||[])[1],V=document.createElement("canvas");V.width=256,V.height=256;const D=V.getContext("2d");if(J&&window.Path2D){const pe=Math.min(8.533333333333333,8.421052631578947);D.setTransform(pe,0,0,pe,pe+(256-30*pe)/2,-6.4*pe),D.fillStyle="rgb(255,255,255)",D.fill(new Path2D(J),"evenodd"),D.setTransform(1,0,0,1,0,0)}try{const pe=D.getImageData(0,0,256,256),Ce=pe.data;for(let Le=3;Leee}}const G_=120;function K_(t,e,n){return tn?n:t}function ge(t,e,n){return K_((t-e)/(n-e),0,1)}function Y_(t){return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2}function aa(t){return 1-Math.pow(1-t,3)}function Ze(t,e){return e=e===void 0?1.7:e,1+(e+1)*Math.pow(t-1,3)+e*Math.pow(t-1,2)}function gd(t){return 1-Math.pow(2,-9*t)*Math.cos(t*15)}function re(t,e){if(t<=e[0].t)return e[0].v;for(let n=1;n8.2&&y<9.4&&(s*=1-.07*Math.sin(ge(y,8.2,9.4)*Math.PI))}else if(t<53){const y=t-42;g=re(y,[{t:0,v:1},{t:2,v:0},{t:4.2,v:0},{t:4.6,v:1},{t:6.8,v:1},{t:7.4,v:0},{t:9.4,v:0},{t:10.6,v:1}]),h=re(y,[{t:0,v:1},{t:2,v:.3},{t:4.6,v:1,e:Ze}]),d=re(y,[{t:0,v:0},{t:2,v:.3},{t:4.6,v:.16,e:Ze},{t:10.6,v:0}]),p=re(y,[{t:0,v:0},{t:2,v:-40},{t:4.6,v:0,e:Ze}]),o=re(y,[{t:0,v:0},{t:4.6,v:-.12},{t:10.6,v:0}])}else if(t<60){const y=t-53;c=re(y,[{t:0,v:1},{t:.35,v:0},{t:.45,v:0},{t:.7,v:1}]);const S=ge(y,.45,2.2);a=S>0?-2.6*(1-gd(S)):0,g=re(y,[{t:0,v:1},{t:.57,v:0},{t:.67,v:0},{t:.92,v:1}]);const I=ge(y,.67,2.42);f=I>0?-2.6*(1-gd(I)):0,s=1-.05*(Math.sin(ge(y,1.9,2.5)*Math.PI)+Math.sin(ge(y,2.5,3.1)*Math.PI))}else if(t<74){let S=function(P){return[re(P,[{t:0,v:0},{t:.25,v:1},{t:.5,v:1},{t:.72,v:.14},{t:.82,v:.14},{t:1,v:0}]),re(P,[{t:0,v:0},{t:.08,v:-.62},{t:.25,v:-.62},{t:.33,v:.62},{t:.7,v:.62},{t:.82,v:-.62},{t:1,v:-.62}])]};var E=S;const y=t-60,I=1-ge(y,12,14),R=S(ge(y,0,12)),b=S(ge(y-.5,0,12));n=R[0]*I,i=(R[1]+.05*Math.sin(y*7))*I,o=(b[0]-R[0])*.6*I,a=(b[1]-R[1])*.6*I,p=(b[0]-R[0])*30*I,x=ge(y,0,.4)*I}else if(t<85.4){const y=t-74,S=re(y,[{t:0,v:0},{t:4,v:1},{t:8,v:.24},{t:9.6,v:1,e:Ze},{t:11.4,v:0}]);o=S*.5,d=-S*.5,l=re(y,[{t:0,v:0},{t:4,v:6},{t:8,v:20},{t:9.6,v:38,e:Ze},{t:11.4,v:0}]),p=-l*.7,a=re(y,[{t:0,v:0},{t:8,v:0},{t:9.6,v:.4},{t:11.4,v:0}])}else if(t<96.4){const y=t-85.4,S=ge(y,0,5.6),I=ge(y,5.6,7.6),R=.72*Math.min(1,y/.6)*(1-I);d=Math.cos(S*Math.PI*2)*R,f=Math.sin(S*Math.PI*2)*R*.55,p=S*360*(1-I);const b=re(y,[{t:0,v:0},{t:7.6,v:0},{t:8.2,v:1,e:aa},{t:8.6,v:.55},{t:9.4,v:0}]);o=-.16*b,d+=.16*b,l=-6*b,p+=6*b,s=1+.05*b,m=1+.9*b}else if(t<108.6){const y=t-96.4,S=ge(y,9.6,12.2);n=re(y,[{t:0,v:0},{t:2.1,v:1},{t:4.8,v:.08},{t:7.5,v:1},{t:9.6,v:0}])*(1-S),i=-.35*Math.abs(Math.sin(ge(y,0,9.6)*Math.PI*3))*(1-S);const I=Math.sin(y*6.2)*(1-S);u=1+.12*I,h=1-.12*I,l=I*8,p=-I*8,o=.06*I,d=-.06*I,x=ge(y,0,.4)*(1-S)}else{const y=t-108.6,S=Math.sin(ge(y,0,8)*Math.PI),I=1-ge(y,8,11.4);s=1+.04*S*I,i=-.1*S*I,r=2*S*I,m=1+.5*Math.sin(ge(y,0,6)*Math.PI),v=1+.1*Math.sin(ge(y,0,6)*Math.PI)}return e.x=n,e.y=i,e.rot=r,e.scale=s,e.ax=o,e.ay=a,e.ar=l,e.asc=u,e.afade=c,e.bx=d,e.by=f,e.br=p,e.bsc=h,e.bfade=g,e.hfade=m,e.hsc=v,e.shd=x,e}function J_(t={}){const e=t.arena||document.querySelector(".pipeline-glyph.logo-loop");if(!e)return null;const n=e.querySelector(".loop-mark"),i=e.querySelector(".loop-piece-a"),r=e.querySelector(".loop-piece-b"),s=e.querySelector(".loop-halo"),o=e.querySelector(".loop-shadow");if(!n||!i||!r||!s||!o)return null;const a=t.reducedMotion||window.matchMedia("(prefers-reduced-motion: reduce)"),l=G_;let u=34,c=0,d=0;function f(){u=n.offsetWidth||34,c=Math.max(0,e.offsetWidth-u-4),d=Math.max(0,(e.offsetHeight-u)/2-2),e.style.setProperty("--mark-c",u/2+"px")}function p($){const q=Math.min(1,Math.max(0,$.x))*c,se=$.y*d;n.style.transform="translate3d("+q.toFixed(2)+"px,"+se.toFixed(2)+"px,0) rotate("+$.rot.toFixed(2)+"deg) scale("+$.scale.toFixed(3)+")",i.style.transform="translate3d("+($.ax*u).toFixed(2)+"px,"+($.ay*u).toFixed(2)+"px,0) rotate("+$.ar.toFixed(2)+"deg) scale("+$.asc.toFixed(3)+")",i.style.opacity=$.afade.toFixed(3),r.style.transform="translate3d("+($.bx*u).toFixed(2)+"px,"+($.by*u).toFixed(2)+"px,0) rotate("+$.br.toFixed(2)+"deg) scale("+$.bsc.toFixed(3)+")",r.style.opacity=$.bfade.toFixed(3),s.style.transform="scale("+$.hsc.toFixed(3)+")",s.style.opacity=(.09*$.hfade).toFixed(3),o.style.transform="translateX("+q.toFixed(2)+"px) scaleX("+(.75+.4*Math.abs($.x)).toFixed(3)+")",o.style.opacity=($.shd*.5).toFixed(3)}let h=0,g=0,m=0,v=!1,x=!1,E=!1,y=0;function S(){return E||a.matches||document.hidden||!e.offsetParent?!1:x}function I($){if(!v)return;if(m=requestAnimationFrame(I),!S()){b();return}const q=g?($-g)/1e3:0;g=$,h=(h+Math.min(q,.1))%l,y+=1,p(ji(h))}function R(){v||E||S()&&(v=!0,g=0,m=requestAnimationFrame(I))}function b(){v=!1,m&&(cancelAnimationFrame(m),m=0),g=0}function P(){S()?R():b()}function T(){a.matches?(b(),p(ji(0))):P()}function M(){f(),v&&p(ji(h))}function L(){g=0,P()}const B=new IntersectionObserver($=>{x=$[0]?$[0].isIntersecting:!1,P()},{threshold:0});B.observe(e),window.addEventListener("resize",M),a.addEventListener("change",T),document.addEventListener("visibilitychange",L);function Y(){E||(E=!0,b(),B.disconnect(),window.removeEventListener("resize",M),a.removeEventListener("change",T),document.removeEventListener("visibilitychange",L))}window.addEventListener("pagehide",Y);function G($){h=($%l+l)%l,p(ji(h))}return f(),p(ji(0)),P(),{isRunning:()=>v,currentTime:()=>h,frameCount:()=>y,seek:G,dispose:Y}}const Z_=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function ln(t){const e=String(t||"").trim().match(Z_);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function X_(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function e0(t){const e=ln(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function Yl(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return ln(o)?{min:o,minInclusive:!0,max:e0(o),maxInclusive:!1}:null}if(ln(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},i=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let r=!1,s;for(;(s=i.exec(e))!==null;){const[,o,a]=s;if(!ln(a))return null;r=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return r?n:null}function md(t,e){const n=Yl(t);if(!n||!ln(e))return!1;if(n.min!==null){const i=Ts(e,n.min);if(i<0||i===0&&!n.minInclusive)return!1}if(n.max!==null){const i=Ts(e,n.max);if(i>0||i===0&&!n.maxInclusive)return!1}return!0}function t0(t,e){const n=Yl(t);if(!n||!ln(e))return!1;if(n.max===null)return!0;const i=Ts(n.max,e);return i>0?!0:i===0&&n.maxInclusive}function ti(t){const e=Yl(t);return e?e.min:null}const n0="https://pub.dev/api/packages/",i0=8e3;function r0(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null}=e,r=Array.isArray(t?.versions)?t.versions:[];let s=null;for(const o of r){const a=o?.version;if(!a||o.retracted||Q_(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!md(l.sdk,n)||i&&l.flutter&&!md(l.flutter,i)||(!s||Ts(a,s)>0)&&(s=a)}return s?{version:s,constraint:`^${s}`}:null}async function s0(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:i=null,fetchImpl:r=fetch}=e;let s;try{const a=await r(`${n0}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(i0)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};s=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=r0(s,{dartSdkFloor:n,flutterSdkFloor:i});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function o0(t,e={}){const n=await Promise.all(t.map(i=>s0(i,e)));return new Map(n.map(({name:i,...r})=>[i,r]))}async function a0(t,e={},n={}){const{resolveVersions:i=o0}=n,r=Object.entries(e).filter(([d])=>d&&d!=="flutter"),s=Yh(t),o={dartSdkFloor:ti(s.sdk),flutterSdkFloor:ti(s.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(r.length===0)return a;const l=Qs(t),u=[],c=[];for(const[d,f]of r){const p=l.get(d);if(!p){(My.has(d)?c:u).push(d);continue}const h=ti(f);if(!h){a.kept.push({name:d,constraint:p.constraint});continue}const g=p.isScalar?p.constraint:p.sourceKey===null?p.version:null;if(g===null){a.warnings.push(`"${d}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${h}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:d,constraint:p.constraint});continue}if(t0(g,h)){a.kept.push({name:d,constraint:g});continue}a.overrides[d]=`^${h}`,a.warnings.push(`"${d}" was pinned to ${g} in your project, which cannot resolve the ${h} the generated code needs. Raising it to ^${h} — this changes a dependency the rest of your app also uses.`)}for(const d of c)a.additions[d]={sdk:"flutter"};if(u.length>0){const d=await i(u,o);for(const f of u){const p=d.get(f);if(p?.constraint){a.additions[f]=p.constraint;continue}const h=e[f]||"";if(ti(h)){a.additions[f]=`^${ti(h)}`,a.warnings.push(`Could not confirm "${f}" version on pub.dev (${p?.error||"lookup failed"}). Using ^${ti(h)} from the AI's recommendation — verify this is current.`);continue}a.additions[f]=">=0.0.0",a.warnings.push(`Could not determine a version for "${f}" (${p?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const l0={"&":"&","<":"<",">":">",'"':""","'":"'"};function cn(t){return String(t??"").replace(/[&<>"']/g,e=>l0[e])}function W(t){return t?cn(t).replace(/\n/g,"
"):""}function on(t){return cn(t).replace(/\r?\n/g," ")}function eo(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const i=t?.message||"";return i.includes("Code Generator")?2:i.includes("Code Review")?3:1}function ip(t){if(!t)return{kind:"generic",title:"Generation failed",message:"An unknown error occurred. Please try again.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1};if(t.isModelArmor){const n=t.code==="MODEL_ARMOR_BLOCKED";return{kind:"safety",title:t.userTitle||"Request blocked for safety",message:t.userMessage||t.message,detail:t.retryExplanation||"",canRetry:!n,canEdit:!0,canUpgrade:!1}}if(t.isUsageLimit)return{kind:"quota",title:"Monthly limit reached",message:t.message||"You've used all your generations for this period.",detail:"",canRetry:!1,canEdit:!1,canUpgrade:!0};const e=t.message||"";return/timed out after/i.test(e)?{kind:"timeout",title:"Request timed out",message:"The generation service took too long to respond.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:/unreachable|failed to fetch|load failed|cors/i.test(e)?{kind:"network",title:"Connection problem",message:"We couldn't reach the generation service. Check your connection and try again.",detail:e,canRetry:!0,canEdit:!0,canUpgrade:!1}:{kind:"generic",title:"Generation failed",message:e||"An unexpected error occurred.",detail:"",canRetry:!0,canEdit:!0,canUpgrade:!1}}function c0(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📄"}function u0(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,i]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return i;return"📝"}function d0(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function wi(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function vd(t){return t=cn(t),t=t.replace(/\*\*(.*?)\*\*/g,'$1'),t=t.replace(/\*(.*?)\*/g,'$1'),t=t.replace(/`(.*?)`/g,'$1'),t=t.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),t=t.replace(/\b(WARN|WARNING)\b/g,'$1'),t=t.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),t}function rp(t,e="dart",n=globalThis.hljs){if(!t)return"";const i=wi(t);try{return n.highlight(i,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return n.highlight(i,{language:"json"}).value}catch{return cn(i)}}}function to(t,e={}){const{highlighter:n=globalThis.hljs}=e;let i='';const r=String(t??"").split(`
+`);let s=!1,o="";for(const a of r){if(a.startsWith("```")){if(s){const l=d0(o),u=rp(o.trim(),l,n);i+=`
`,o="",s=!1}else s=!0;continue}if(s){o+=a+`
+`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();i+=``;continue}if(a.startsWith("## ")){const l=a.substring(3).trim();i+=`
+
+ ${u0(l)}
+ ${cn(l)}
+
+ `;continue}if(/^[-*+]\s+/.test(a)||/^\d+\.\s+/.test(a)){const l=a.replace(/^([-*+]|\d+\.)\s+/,"").trim();i+=`
+ •
+ ${vd(l)}
+
`;continue}a.trim()!==""&&(i+=`
${vd(a)}
`)}return i+="
",`
+
+ `}const f0=[[/gradient stroke\s*$/i," and an animated percentage label"],[/gauge\s*$/i," with a gradient stroke and animated fill"],[/rating\s*(bar|widget)?\s*$/i," with half-star support and haptic feedback"],[/list\s*$/i," with swipe-to-delete and an undo snackbar"],[/pad\s*$/i," that exports a transparent PNG"],[/carousel\s*$/i," with parallax cards and page indicators"],[/(button|cta)\s*$/i," with a loading spinner and success state"],[/(chart|graph)\s*$/i," that animates from a Firestore stream"],[/action\s*(that|to)?\s*$/i," uploads an image to Firebase Storage and returns the URL"],[/timer\s*$/i," with pause, resume and a completion callback"],[/map\s*$/i," with clustered markers and a custom info window"],[/^a\s+\w*$/i," widget that"],[/(picker|selector)\s*$/i," with search and multi-select"]],h0=220,p0=6,g0=5200,m0=73;function yd(t,e){return!!(t&&t.trim())&&!e}function v0(t,e=""){if(typeof t!="string"||!t||t===e||t.trim().lengthi.test(t));return n?n[1]:null}function y0(){let t="",e="";return{get active(){return t},resolve(n){return t=v0(n,e)??"",t},dismiss(){t=""},accept(n){if(!t)return null;const i=n+t;return e=i,t="",i}}}function _0({onSubmit:t}){const e=document.getElementById("composer"),n=document.getElementById("pipeline-input"),i=document.getElementById("hero-send");if(!e||!n||!i||typeof t!="function")return;const r=e.querySelector(".ghost .typed"),s=e.querySelector(".ghost .suggest"),o=document.getElementById("tab-hint"),a=document.getElementById("suggest-status"),l=Array.from(document.querySelectorAll("#example-chips .chip")),u=document.getElementById("btn-add-images"),c=document.getElementById("prompt-image-input"),d=window.matchMedia("(prefers-reduced-motion: reduce)"),f=y0();let p=!1,h=!1,g=!1,m=!1,v=!1,x=null,E=null,y=null;const S=n.value;function I(){return h||g||m||v}function R(){i.disabled=!yd(n.value,I())}function b(){r&&(r.textContent=n.value)}function P(){s&&(s.textContent=""),b(),e.classList.remove("has-suggest"),o&&(o.hidden=!0,o.tabIndex=-1),a&&(a.textContent="")}function T(N){s&&(s.textContent=N),b(),e.classList.add("has-suggest"),o&&(o.hidden=!1,o.tabIndex=0,o.setAttribute("aria-label","Accept suggestion: "+N.trim())),a&&(a.textContent="Suggestion: "+N+". Press Tab to accept.")}function M(){f.dismiss(),P()}function L(){if(p||h)return;const N=f.resolve(n.value);N&&T(N)}function B(){clearTimeout(x),!p&&(x=setTimeout(L,h0))}function Y(){const N=f.accept(n.value);return N===null?!1:(n.value=N,P(),R(),!0)}function G(N){h=N,e.classList.toggle("is-busy",N),i.classList.toggle("is-busy",N),i.setAttribute("aria-label",N?"Generating":"Generate"),n.readOnly=N,l.forEach(Z=>{Z.disabled=N}),u&&(u.disabled=N),c&&(c.disabled=N),R()}async function $(){if(yd(n.value,I())){M(),G(!0);try{await t()}finally{G(!1)}}}function q(){m&&(m=!1,y&&(clearTimeout(y),y=null),e.classList.remove("is-demo-typing"),e.classList.remove("is-demo-streaming"),n.placeholder="Describe the widget or action you need",R())}function se(){if(d.matches||!S.trim())return;const N=window.location.hash.replace(/^#/,"");if(N&&N!=="home")return;m=!0,n.placeholder="",n.value="",b(),R(),e.classList.add("is-demo-typing");let Z=0;const Re=()=>{m&&(Z+=1,n.value=S.slice(0,Z),b(),Z>=S.length?(e.classList.remove("is-demo-typing"),y=setTimeout(()=>{const Be=f.resolve(n.value);if(!Be){q();return}T(Be),e.classList.add("is-demo-streaming"),s.textContent="";const nt=Be.split(/(?=\s)/).filter(Boolean);let Te=0;const Ae=()=>{if(!m)return;const it=document.createElement("span");it.textContent=nt[Te++],s.appendChild(it),it.animate?.([{opacity:0},{opacity:1}],{duration:240,easing:"cubic-bezier(0.4,0,0.2,1)"}),TeN.classList.contains("is-active"))?.dataset.prompt||n.value,b(),ee()))}function ee(){g=!1,E&&(clearInterval(E),E=null),e.classList.remove("is-demo-typing"),R()}function Ee(){l.forEach(N=>{N.classList.remove("is-active"),N.setAttribute("aria-pressed","false")})}function Me(){try{n.focus({preventScroll:!0}),n.setSelectionRange(n.value.length,n.value.length)}catch{}}function ie(N){const Z=N.dataset.prompt||"";if(q(),ee(),clearTimeout(x),x=null,M(),l.forEach(Be=>{const nt=Be===N;Be.classList.toggle("is-active",nt),Be.setAttribute("aria-pressed",String(nt))}),d.matches||!Z){n.value=Z,b(),R(),Me();return}n.value="",b(),g=!0,R(),e.classList.add("is-demo-typing");let Re=0;E=setInterval(()=>{Re+=1,n.value=Z.slice(0,Re),b(),Re>=Z.length?(ee(),Me()):R()},22)}l.forEach(N=>{N.setAttribute("aria-pressed","false"),N.addEventListener("click",()=>ie(N))}),n.addEventListener("keydown",N=>{if((m||g)&&N.key==="Enter"&&!N.shiftKey&&!N.isComposing&&!p){N.preventDefault();return}q(),ee(),N.key==="Tab"&&!N.shiftKey&&f.active?(N.preventDefault(),Y()):N.key==="Escape"?(clearTimeout(x),x=null,M()):N.key==="Enter"&&!N.shiftKey&&!N.isComposing&&!p&&(N.preventDefault(),$())}),n.addEventListener("input",()=>{q(),ee(),Ee(),M(),R(),B()}),n.addEventListener("compositionstart",()=>{p=!0}),n.addEventListener("compositionend",()=>{p=!1,M(),R(),B()}),n.addEventListener("scroll",()=>{r&&r.parentNode&&(r.parentNode.scrollTop=n.scrollTop)}),o&&o.addEventListener("click",()=>{Y(),n.focus({preventScroll:!0})}),i.addEventListener("click",$),n.addEventListener("pointerdown",()=>{q(),ee(),Ee()}),n.addEventListener("focus",()=>{q()}),d.addEventListener("change",Fe);function he(){ue(),d.removeEventListener("change",Fe),document.removeEventListener("visibilitychange",Oe),window.removeEventListener("pagehide",he)}function ue(){q(),ee(),clearTimeout(x)}function Oe(){document.hidden&&ue()}return document.addEventListener("visibilitychange",Oe),window.addEventListener("pagehide",he),b(),R(),se(),{setAttachmentsPending(N){v=!!N,R()},dispose:he,cancelTyping:ue}}const hr=window.matchMedia("(prefers-reduced-motion: reduce)");let ci=null,Jt=null;const $s=new Map;function sp(){for(const[t,e]of $s)t.removeEventListener("animationend",e),t.classList.remove("panel-in"),t.style.animationDelay="";$s.clear(),document.querySelectorAll(".code-line.is-in").forEach(t=>t.classList.remove("is-in"))}function Wn(){if(sp(),ci){const t=ci;ci=null,t.animation?.cancel(),t.ghost.remove(),t.panel.style.visibility="",delete t.panel.dataset.morphing,t.panel.inert=!1}Jt&&(Jt.animation.cancel(),Jt.hero.classList.remove("is-exiting"),Jt.hero.style.cssText=Jt.style,Jt=null)}function w0(t){return(ci?.ghost||t)?.getBoundingClientRect()}function b0(t){sp(),t.filter(Boolean).forEach((e,n)=>{if(e.classList.remove("panel-in"),e.style.animationDelay="",hr.matches||document.hidden)return;e.offsetWidth,e.style.animationDelay=`${n*80}ms`,e.classList.add("panel-in");function i(r){r.target===e&&(e.classList.remove("panel-in"),e.style.animationDelay="",e.removeEventListener("animationend",i),$s.delete(e))}$s.set(e,i),e.addEventListener("animationend",i)})}function E0(t,e){if(!t||!e||hr.matches||document.hidden||!t.animate)return;const n=t.style.cssText;t.classList.add("is-exiting"),innerWidth<=920&&(t.style.cssText=`position:absolute;left:0;top:64px;width:${e.width}px;height:${e.height}px;transform:none;`);const i=t.animate([{opacity:1},{opacity:0}],{duration:460,easing:"cubic-bezier(0.4,0,0.2,1)",fill:"both"});Jt={hero:t,animation:i,style:n},i.onfinish=()=>{Jt?.animation===i&&(t.classList.remove("is-exiting"),t.style.cssText=n,i.cancel(),Jt=null)}}function op(t,e,n,{results:i=!1}={}){if(Wn(),!e)return;const r=e.getBoundingClientRect(),s=()=>{e.style.visibility="",delete e.dataset.morphing,e.inert=!1,b0(n),(document.activeElement===document.body||document.getElementById("hero")?.contains(document.activeElement))&&e.querySelector(i?"#results-summary-tab":"#pipeline-edit-prompt")?.focus({preventScroll:!0})};if(hr.matches||document.hidden||!e.animate||!t?.width||!r.width||i&&innerWidth<=920){s();return}e.style.visibility="hidden",e.dataset.morphing="true",e.inert=!0;const o=document.createElement("div");o.className="composer-morph",o.setAttribute("aria-hidden","true");const a=innerWidth>920?Math.min(1,innerWidth/1920):1;o.style.cssText=`left:${r.left}px;top:${r.top}px;width:${r.width}px;height:${r.height}px;border-width:${2*a}px;border-radius:${20*a}px;`,document.body.appendChild(o);const l=t.left+t.width/2-r.left-r.width/2,u=t.top+t.height/2-r.top-r.height/2,c=t.width/r.width,d=t.height/r.height,f=`translate(${l}px,${u}px) scale(${c},${d})`,p=o.animate([{transform:f,opacity:0,offset:0,easing:"cubic-bezier(.2,0,0,1)"},{transform:f,opacity:1,offset:.14,easing:"cubic-bezier(.4,0,.2,1)"},{transform:`translate(${l}px,${u}px) scale(${c*.93},${d*.93})`,opacity:1,offset:.28,easing:"cubic-bezier(.32,1.38,.5,1)"},{transform:"translate(0px,0px) scale(1,1)",opacity:1,offset:1}],{duration:1120,fill:"both"}),h={panel:e,ghost:o,animation:p};ci=h,p.onfinish=()=>{ci===h&&(Wn(),s())}}window.addEventListener("resize",Wn);window.addEventListener("pagehide",Wn);document.addEventListener("visibilitychange",()=>{document.hidden&&Wn()});hr.addEventListener("change",()=>{hr.matches&&Wn()});const S0="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const It="https://4tgke4.buildship.run",ap={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},Ms="ccc_auth_session",tl="ccc_signin_return",x0=1800*1e3,_d=new WeakSet;let H={email:null,sessionToken:null,isVerified:!1};function qn(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=qn({isResolved:!0}),nl=Promise.resolve();const I0=`${It}/service/runpipeline`,k0="bs_user_id",C0="bs_identity_token",A0=`${It}/authUserCheck`;let bt={userId:null,token:null,status:null,resolved:!1};const Ls=Yv,Ns="ccc_subscription",wd=3,P0=new Set(["active","trialing","paid"]),Os="google/gemini-3.7-flash",es=["anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta","openrouter/free","openrouter/deepseek/deepseek-v4-pro"],F0={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function nn(t){return F0[t]||t}const R0=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function lp(t){return R0.has(t)}const il=4,la=8*1024*1024,T0="https://4tgke4.buildship.run/service/runpipeline-image";let He=[];const Sn=[],$0=3e4;let Jl=null;function M0(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function L0(t,e){const n=new FormData;return n.append("file",t),(await fetch(T0,{method:"POST",body:n,signal:e})).json()}function N0(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const i=e[n];if(i&&typeof i=="object"){if(typeof i.file=="string")return i.file;if(typeof i.url=="string")return i.url}if(typeof i=="string")return i}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function O0(t,e,n){const i=await M0(t);i&&He.includes(e)&&(e.dataUrl=i,yn());let r="";if(i)try{r=N0(await L0(t,n))}catch{r=""}return He.includes(e)?!i||!r?(He.splice(He.indexOf(e),1),yn(),"failed"):(e.url=r,yn(),"added"):"dropped"}function cp(t){const e=Sn.indexOf(t);e>=0&&Sn.splice(e,1),dp()}function up(t){t.controller.abort(),cp(t);const e=He.indexOf(t.slot);e>=0&&(He.splice(e,1),yn())}function dp(){Jl?.setAttachmentsPending(Sn.length>0)}async function B0(t){const e=Array.from(t.target.files||[]);if(!e.length)return;if(t.target.value="",_.isRunning){ke("Wait for the current generation to finish before attaching images.","info");return}const n=e.filter(u=>u.size>la);n.length&&ke(`Skipped ${n.length} image(s) over the ${(la/1024/1024).toFixed(0)} MB limit.`,"warning");const i=e.filter(u=>u.size<=la);if(!i.length)return;const r=il-He.length,s=i.slice(0,r);if(i.length>r&&ke(`You can attach up to ${il} images.`,"info"),!s.length)return;const o=s.map(u=>{const c={dataUrl:null,name:u.name,url:null};He.push(c);const d={slot:c,controller:new AbortController},f=setTimeout(()=>d.controller.abort(),$0);return d.job=O0(u,c,d.controller.signal),Sn.push(d),d.job.finally(()=>{clearTimeout(f),cp(d)}),d.job});yn(),dp();const l=(await Promise.all(o)).filter(u=>u==="failed").length;l&&ke(`${l} image(s) could not be uploaded and were not attached.`,"error")}function D0(t){const e=He[t],n=Sn.find(i=>i.slot===e);if(n){up(n);return}He.splice(t,1),yn()}function yn(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",He.forEach((n,i)=>{const r=document.createElement("div");r.className="prompt-img-thumb"+(n.url?"":" is-pending"),r.innerHTML=(n.dataUrl?`
`:"")+``,t.appendChild(r)}),e&&(e.textContent=He.length>=il?"Image limit reached":"Add images"))}function Zl(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=lp(e?.value);t.classList.toggle("hidden",!n),!n&&He.length&&(Sn.slice().forEach(up),He=[],yn())}const jn="ccc_usage",fp="google/gemini-3.7-flash",hp="google/gemini-3.7-flash",qr="google/gemini-3.7-flash",Ki={professional:11,power:49},rl={en_US:"USD",en_GB:"GBP",en_AU:"AUD",en_NZ:"NZD",en_CA:"CAD",en_IN:"INR",en_SG:"SGD",en_HK:"HKD",en_PH:"PHP",en_ZA:"ZAR",en:"USD",de:"EUR",fr:"EUR",es:"EUR",it:"EUR",nl:"EUR",pt_PT:"EUR",pt_BR:"BRL",pt:"BRL",ja:"JPY",ko:"KRW",zh_CN:"CNY",zh_TW:"TWD",zh:"CNY",th:"THB",vi:"VND",id:"IDR",ms_MY:"MYR",ms:"MYR",sv:"SEK",nb:"NOK",da:"DKK",pl:"PLN",cs:"CZK",hu:"HUF",ro:"RON",tr:"TRY",ar:"AED",he:"ILS",ru:"RUB",uk:"UAH"},ts={AUD:1,USD:.65,EUR:.6,GBP:.52,CAD:.88,NZD:1.08,JPY:97,KRW:870,INR:54,SGD:.87,HKD:5.08,BRL:3.18,CNY:4.7,TWD:20.5,THB:22.5,VND:16200,IDR:10200,MYR:2.88,SEK:6.8,NOK:6.95,DKK:4.48,PLN:2.6,CZK:15.2,HUF:238,RON:2.98,TRY:20.9,AED:2.39,ILS:2.38,PHP:36.4,ZAR:11.8,RUB:58,UAH:26.8,CHF:.57,MXN:11.1,ARS:580,CLP:610,COP:2700,PEN:2.44};let ns={...ts};async function j0(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const i=await n.json();if(i.result!=="success"||!i.rates)return;const r=i.rates,s={AUD:1},o=new Set([...Object.keys(ts),...Object.values(sl),...Object.values(rl)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?s[a]=r[a]:ts[a]&&(s[a]=ts[a]));ns=s}catch{}finally{clearTimeout(e)}}const sl={"America/Sao_Paulo":"BRL","America/Fortaleza":"BRL","America/Recife":"BRL","America/Bahia":"BRL","America/Belem":"BRL","America/Manaus":"BRL","America/Cuiaba":"BRL","America/Campo_Grande":"BRL","America/Araguaina":"BRL","America/Noronha":"BRL","America/Rio_Branco":"BRL","America/Porto_Velho":"BRL","America/Boa_Vista":"BRL","America/Maceio":"BRL","America/Santarem":"BRL","America/Eirunepe":"BRL","Europe/London":"GBP","Europe/Paris":"EUR","Europe/Berlin":"EUR","Europe/Madrid":"EUR","Europe/Rome":"EUR","Europe/Amsterdam":"EUR","Europe/Brussels":"EUR","Europe/Vienna":"EUR","Europe/Lisbon":"EUR","Europe/Dublin":"EUR","Europe/Helsinki":"EUR","Europe/Athens":"EUR","Europe/Bucharest":"RON","Europe/Budapest":"HUF","Europe/Warsaw":"PLN","Europe/Prague":"CZK","Europe/Copenhagen":"DKK","Europe/Stockholm":"SEK","Europe/Oslo":"NOK","Europe/Zurich":"CHF","Europe/Istanbul":"TRY","Europe/Moscow":"RUB","Europe/Kiev":"UAH","Europe/Kyiv":"UAH","Asia/Tokyo":"JPY","Asia/Seoul":"KRW","Asia/Shanghai":"CNY","Asia/Taipei":"TWD","Asia/Hong_Kong":"HKD","Asia/Singapore":"SGD","Asia/Kolkata":"INR","Asia/Calcutta":"INR","Asia/Bangkok":"THB","Asia/Ho_Chi_Minh":"VND","Asia/Jakarta":"IDR","Asia/Kuala_Lumpur":"MYR","Asia/Dubai":"AED","Asia/Jerusalem":"ILS","Asia/Tel_Aviv":"ILS","Asia/Manila":"PHP","Pacific/Auckland":"NZD","Australia/Sydney":"AUD","Australia/Melbourne":"AUD","Australia/Brisbane":"AUD","Australia/Perth":"AUD","Australia/Adelaide":"AUD","Australia/Hobart":"AUD","Australia/Darwin":"AUD","Australia/Lord_Howe":"AUD","America/Toronto":"CAD","America/Vancouver":"CAD","America/Edmonton":"CAD","America/Winnipeg":"CAD","America/Halifax":"CAD","America/St_Johns":"CAD","America/Regina":"CAD","America/New_York":"USD","America/Chicago":"USD","America/Denver":"USD","America/Los_Angeles":"USD","America/Phoenix":"USD","America/Anchorage":"USD","Pacific/Honolulu":"USD","America/Mexico_City":"MXN","America/Cancun":"MXN","America/Tijuana":"MXN","America/Argentina/Buenos_Aires":"ARS","America/Santiago":"CLP","America/Bogota":"COP","America/Lima":"PEN","Africa/Johannesburg":"ZAR"};function Xl(){try{const s=Intl.DateTimeFormat().resolvedOptions().timeZone;if(s&&sl[s])return sl[s]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=rl[e];if(n)return n;const i=e.split("_")[0],r=rl[i];return r||"USD"}function Yi(t,e){const n=ns[e]??ns.USD,i=t*n,r=Math.round(i*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:r>=100||r%1===0?0:2}).format(r)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*ns.USD)}}const Et="ccc_api_key_",$t="ccc_session_api_key_",Bt="ccc_encryption_key",pr="ccc_encryption_key_scope",U0="ccc_keystore",Bs="keys",gr="ccc_encryption_key_version";let ol=null,Ds=null,mr=!1,js=!1,bd=!1;class Us extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function Ed(){if(bd)return;bd=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&ke(t,"warning")}function pp(){return localStorage.getItem(gr)||""}function al(){return crypto.randomUUID?.()||mp(crypto.getRandomValues(new Uint8Array(16)))}function H0(){const t=pp();if(t)return t;const e=al();return localStorage.setItem(gr,e),e}function bi(){ol=null,Ds=null,mr=!1,js=!1}window.addEventListener("storage",t=>{t.key===gr&&bi()});function W0(){return new Promise((t,e)=>{const n=indexedDB.open(U0,1);n.onupgradeneeded=()=>{const i=n.result;i.objectStoreNames.contains(Bs)||i.createObjectStore(Bs)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function Ql(t,e){const n=await W0();return new Promise((i,r)=>{const s=n.transaction(Bs,t);let o;try{o=e(s.objectStore(Bs))}catch(l){n.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),s.oncomplete=()=>{n.close(),i(a)},s.onerror=()=>{n.close(),r(s.error||new Error("Encryption key transaction failed."))},s.onabort=()=>{n.close(),r(s.error||new Error("Encryption key transaction aborted."))}})}function q0(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function z0(){const t=await Ql("readonly",e=>e.get(Bt));return q0(t)?t:null}async function gp(t){await Ql("readwrite",e=>e.put(t,Bt))}async function V0(){bi();try{await Ql("readwrite",t=>t.delete(Bt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function G0(){const t=sessionStorage.getItem(Bt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await gp(e),sessionStorage.removeItem(Bt),sessionStorage.removeItem(pr),localStorage.removeItem(Et+"salt"),e}async function Sd(t){const e=sessionStorage.getItem(Bt);if(e)return js=sessionStorage.getItem(pr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Us;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),i=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(Bt,JSON.stringify(i)),sessionStorage.setItem(pr,"session"),js=!1,crypto.subtle.importKey("jwk",i,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function K0(t){if(sessionStorage.getItem(pr)==="session"&&sessionStorage.getItem(Bt))return Ed(),mr=!0,Sd(t);try{const e=await z0();if(e)return e;const n=await G0();if(n)return n;const i=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await gp(i),i}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),Ed(),mr=!0,Sd(t)}}async function ec(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=H0();Ds!==n&&bi();const i=ol||K0(e);ol=i,Ds=n;try{return await i}catch(r){throw bi(),r}}async function Y0(t){const e=await ec(),n=Ds,i=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,i.encode(t)),o=new Uint8Array(r.length+s.byteLength);return o.set(r),o.set(new Uint8Array(s),r.length),{ciphertext:mp(o),keyVersion:n,sessionFallback:mr}}async function J0(t,e={}){const{isSessionCredential:n=!1}=e;try{const i=await ec({allowSessionFallbackCreation:!1});if(mr&&!n&&!js)throw new Us;const r=Z0(t),s=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},i,o);return new TextDecoder().decode(a)}catch(i){if(i instanceof Us)throw i;return console.error("Decryption failed:",i),null}}function mp(t){const e=new Uint8Array(t);let n="";for(let i=0;i0}let Ie="",Mt="",nr=null,Id=0,ct="not-configured",vt=0,ll=0,cl=0,no=0,Zt=0,un=0,Lt=null,Nt=null,vr=null;function Q0(){return ll+=1,ll}function ew(){return cl+=1,cl}function yr(t,e,n){Lt=t?{projectId:t,key:e,generation:n}:null}function vp(t,e=Ie){if(!t)return!1;const n=Lt;return n?n.projectId===t&&n.key===e&&n.generation===vt:!1}function tc(t,e,n){if(!Mt||Lt&&Lt.projectId!==Mt)return;(t||[]).some(r=>(r.id||r.projectId)===Mt)?yr(Mt,e,n):Lt&&yr("",null,null)}function yp({seq:t,currentSeq:e,generation:n,storedKeyAtStart:i,requestKey:r}){return t!==e||n!==vt?!1:i===Ie||r===Ie}async function nc(){sessionStorage.getItem(Bt)&&await ec(),Ie=await Ne("flutterflow"),Mt=await Ne("flutterflow_project_id"),ow(),hn(),Ie?oc():(ct="not-configured",xt())}let _r=!1;function _p(){const t=document.getElementById("api-keys-modal");Ke(t),sc(),Ie&&so(Ie)}function ic(){_r=!1,_p()}function tw(){_r=!0;const t=document.getElementById("walkthrough-modal");t&&Ye(t),_p()}let kd=!1;function Cd(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-settings-model");if(!t||!e)return;e.value=t.value;const n=Array.from(t.options);Array.from(e.options).forEach((r,s)=>{const o=n[s];o&&(r.textContent=o.textContent)});const i=document.getElementById("composer-settings-free-notice");i&&(document.getElementById("model-selector-free-notice")?(i.hidden=!1,i.innerHTML='Free plan — Gemini only. '):i.hidden=!0)}function Ad(){const t=document.getElementById("code-generator-model"),e=document.getElementById("composer-image-capability"),n=document.getElementById("composer-image-capability-note");if(!t)return;const i=nn(t.value),r=lp(t.value);e&&(e.textContent=r?"Supported":"Not supported"),n&&(n.textContent=r?`${i} accepts reference images you attach to the prompt.`:`Images can't be attached with ${i}. Attached images are removed when you switch to it.`),Zl()}function wp(){if(_r=!1,Cd(),Ad(),!kd){const e=document.getElementById("composer-settings-model");e&&e.addEventListener("change",()=>{const n=document.getElementById("code-generator-model");n.value=e.value,n.dispatchEvent(new Event("change")),Cd(),Ad()}),kd=!0}const t=document.querySelector('.composer [aria-label="Generation settings"]');Ke("composer-settings-modal",{trigger:t})}function nw(t){t&&t.target!==t.currentTarget||Ye("composer-settings-modal")}function bp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&Ye(e);const n=_r;if(_r=!1,n){const i=document.getElementById("walkthrough-modal");i&&(ct==="connected"&&rc(),Ke(i))}}let dn=1;function Ep(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function io(){const t=Ep();t.length&&t.forEach((e,n)=>{const i=n+1;e.classList.remove("wt-current","wt-done","wt-pending");const r=e.querySelector(".wt-step-num");i===dn?(e.classList.add("wt-current"),r&&(r.textContent=i)):i0&&dn<=t&&(dn++,io())}function iw(){const t=document.getElementById("walkthrough-modal");t&&(dn=1,io(),Ke(t))}function rw(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&Ye(e);const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function Sp(){if(H.isVerified&&Dt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(dn=1,io(),Ke(e))}}async function sc(){const t=document.getElementById("flutterflow-api-key-input");Ie?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",sw()}function sw(){Pd("flutterflow","flutterflow-key-status"),Pd("flutterflow_project_id","flutterflow-project-status")}function Pd(t,e){const n=document.getElementById(e);if(!n)return;const i=n.querySelector(".key-status-dot"),r=n.querySelector("span");Rt(t)?(i.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(i.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function hn(){const t=_.step2Result&&_.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff");e&&e.classList.toggle("hidden",!t)}function ow(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((i,r)=>{const s=n[r];s==="flutterflow"?Rt("flutterflow")&&Rt("flutterflow_project_id")?(i.className="key-status-dot configured",i.title="FlutterFlow (Fully configured)"):Rt("flutterflow")||Rt("flutterflow_project_id")?(i.className="key-status-dot env",i.title="FlutterFlow (Partially configured)"):(i.className="key-status-dot missing",i.title="FlutterFlow (Not configured)"):Rt(s)?(i.className="key-status-dot configured",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (User key)"):(i.className="key-status-dot missing",i.title=s.charAt(0).toUpperCase()+s.slice(1)+" (Not configured)")}),hn()}async function aw(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select"),n=t.value.trim(),i=!!n&&n!==Ie,r=e?.value.trim()||"";if(n){const l=await Ne("flutterflow").catch(()=>"");await xd("flutterflow",n),n!==l&&!r&&is()}const s=n||Ie;if(r){if(!ro(r)){ke("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}vp(r,s)?await xd("flutterflow_project_id",r):(i?is():Lt=null,e.value="",s&&!(Nt&&Nt.key===s&&Nt.generation===vt)&&so(s))}else i&&is();await nc(),n&&await oc(),sc();const o=document.querySelector("#api-keys-modal .bg-blue-500"),a=o.textContent;o.textContent="Saved!",o.classList.remove("bg-blue-500","hover:bg-blue-600"),o.classList.add("bg-green-500"),setTimeout(()=>{o.textContent=a,o.classList.remove("bg-green-500"),o.classList.add("bg-blue-500","hover:bg-blue-600"),bp()},1e3)}async function lw(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(gr,al()),bi(),localStorage.removeItem(Et+"flutterflow"),localStorage.removeItem(Et+"flutterflow_project_id"),sessionStorage.removeItem($t+"flutterflow"),sessionStorage.removeItem($t+"flutterflow_project_id"),sessionStorage.removeItem(Bt),sessionStorage.removeItem(pr),localStorage.removeItem(Et+"salt"),await V0(),localStorage.setItem(gr,al()),localStorage.removeItem(Et+"flutterflow"),localStorage.removeItem(Et+"flutterflow_project_id"),sessionStorage.removeItem($t+"flutterflow"),sessionStorage.removeItem($t+"flutterflow_project_id"),Lt=null,Nt=null,vr=null,await nc();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),sc()}function ro(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function xt(){const t=document.getElementById("acct-ff-dot"),e=document.getElementById("acct-ff-status"),n=document.getElementById("acct-ff-endpoint"),i=document.getElementById("acct-ff-project");if(n){const o=Ge();n.textContent=o.includes("staging")?"Staging":"Production"}if(i&&(i.textContent=Mt||"—"),!e)return;let r,s;if(!Rt("flutterflow"))r="Not connected — add your FlutterFlow API key",s="";else switch(ct){case"connected":r="Connected to FlutterFlow",s="ok";break;case"no-projects":r="Key accepted — no projects found",s="warn";break;case"unauthorized":r="API key rejected (401/403) — re-enter your key",s="bad";break;case"network-error":r="Could not reach FlutterFlow — check your network",s="bad";break;default:r="Checking connection…",s="warn";break}e.textContent=r,t&&(t.className=`acct-dot${s?" "+s:""}`)}async function oc(){const t=ew(),e=++no,n=vt,i=Ie,r=await Ne("flutterflow"),s=()=>yp({seq:t,currentSeq:cl,generation:n,storedKeyAtStart:i,requestKey:r});if(!s()||e<=Zt)return null;const o=()=>{un=Math.max(un,e)};if(!r||!Rt("flutterflow"))return Zt=e,o(),ct="not-configured",xt(),null;ct="validating",xt();try{const l=await new Gn(r,"","main",Ge()).listProjects();return!s()||e<=Zt?null:(Zt=e,o(),ct=l&&l.length>0?"connected":"no-projects",e>=un&&tc(l,r,n),xt(),l)}catch(a){if(!s()||e<=Zt)return null;Zt=e,o();const l=String(a&&a.message||"");return ct=/(401|403)|denied|unauthorized|scoped|list permission/i.test(l)?"unauthorized":"network-error",xt(),null}}function is(){Mt="",Lt=null,localStorage.removeItem(Et+"flutterflow_project_id"),sessionStorage.removeItem($t+"flutterflow_project_id")}function cw(){vt+=1,Nt=null,vr=null,is();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML='',t.value=""),Rt("flutterflow")?(ct="validating",so(Ie)):ct="not-configured",xt()}function uw(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function dw(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",n=>{const i=n.target.value.trim().length>0;uw("flutterflow-api-key-input",i)}),t.addEventListener("blur",fw(async n=>{const i=n.target.value.trim();i&&await so(i)},500)));const e=document.getElementById("flutterflow-projects-select");e&&e.addEventListener("change",()=>{const n=e.value.trim();n&&Nt?yr(n,Nt.key,Nt.generation):yr("",null,null)})}function fw(t,e){let n;return function(...r){const s=()=>{clearTimeout(n),t(...r)};clearTimeout(n),n=setTimeout(s,e)}}async function so(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}const i=Q0(),r=++no,s=vt,o=Ie,a=()=>yp({seq:i,currentSeq:ll,generation:s,storedKeyAtStart:o,requestKey:t}),l=()=>r>Zt,u=()=>{Zt=Math.max(Zt,r)};Nt=null,e.innerHTML='',n&&n.classList.add("hidden"),l()&&t===Ie&&(Rt("flutterflow")||t)&&(ct="validating"),xt();try{const d=await new Gn(t,"","main",Ge()).listProjects();if(!a())return;Nt={key:t,generation:s};const f=t===Ie,p=l()&&f;if(p&&u(),r>un&&f&&(un=r,tc(d,t,s)),!d||d.length===0){p&&(ct="no-projects",xt()),e.innerHTML='';return}p&&(ct="connected",xt()),e.innerHTML='',d.forEach(h=>{const g=document.createElement("option");g.value=h.id||h.projectId||"",g.textContent=h.name||h.projectName||`Project ${h.id}`,e.appendChild(g)}),Mt&&(e.value=Mt)}catch(c){if(!a())return;console.error("Failed to fetch projects:",c);const d=String(c&&c.message||"");l()&&t===Ie&&(u(),ct=/(401|403)|denied|unauthorized|scoped|list permission/i.test(d)?"unauthorized":"network-error",xt()),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${c.message}`,n.classList.remove("hidden"))}}function hw(t){const e=document.getElementById(t),i=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",i.innerHTML=`
+
+ `):(e.type="password",i.innerHTML=`
+
+
+ `)}let _={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1,runId:0,submittedPrompt:"",submittedImages:[]};function pw(){_.step1Result=null,_.step2Result=null,_.step3Result=null,_.bundleSpec=null,_.artifactBundle=null,_.bundleReview=null,_.selectedArtifactId=null,_.resultsViewMode="summary"}function gw(){_.bundleSpec=dr(_.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function oo(){const t=yi(_.bundleSpec);_.artifactBundle=dr(_.step2Result,{id:_.bundleSpec?.id,title:_.bundleSpec?.title,description:_.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:_.bundleSpec?.relationships,code:_.step2Result||""});const e=Fy(_.artifactBundle);_.artifactBundle={..._.artifactBundle,warnings:[..._.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{..._.artifactBundle.metadata,compatibility:e}},_.selectedArtifactId=yi(_.artifactBundle).id}function ao(){const t=dr(_.step3Result,{id:_.artifactBundle?.id,title:_.artifactBundle?.title}),e=new Map(t.artifacts.map(i=>[i.id,i.review])),n=new Map(t.artifacts.filter(i=>{const r=i.review;return r&&typeof r.fixedSource=="string"&&r.fixedSource.trim()}).map(i=>[i.id,i.review.fixedSource.trim()]));_.bundleReview=dr({id:_.artifactBundle?.id,title:_.artifactBundle?.title,artifacts:_.artifactBundle?.artifacts?.map(i=>{const r=n.get(i.id)||null;return{...i,review:e.get(i.id)||i.review||_.step3Result||null,...r?{fixedCode:r}:{}}})||[],relationships:_.artifactBundle?.relationships,warnings:_.artifactBundle?.warnings})}function xp(){const t=ac();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ac(){const t=_.artifactBundle||_.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(n=>n.id===_.selectedArtifactId)||yi(t)}function lc(){return ac().code||_.step2Result||""}async function mw(){try{await nc()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const rs={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function vw(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class Gn{constructor(e,n,i="main",r=rs.production){this.apiKey=e,this.baseUrl=r,this._projectId=n,this._branchName=i,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const i of e)try{const r=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(i)});if(!r.ok){const a=await r.text();n=new Error(`Export failed: ${r.status} - ${a}`);continue}const s=await r.json(),o=s?.value?.project_zip||s?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(r){n=r}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),i=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!i)throw new Error("Export did not contain a pubspec.yaml.");const r=i.slice(0,i.length-12),s=new Map,o=Object.keys(n.files).filter(a=>{if(n.files[a].dir||!a.startsWith(r))return!1;const l=a.slice(r.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{s.set(a.slice(r.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[i].async("string"),files:s}}async pushCodeWithRetry(e,n=3,i=null){const r=[rs.production,rs.staging],s=Math.max(0,r.indexOf(this._endpoint));let o=!1,a=null;for(let l=0;lsetTimeout(h,1e3*(l+1)));continue}if(d.ok)return console.log(`Push to ${c} succeeded!`),d;a=d.status;const f=d.status<500&&!o;if(ul(f?d.clone():d,Qh).then(p=>console.log(`Push to ${c} returned ${d.status}: ${p}`),()=>console.log(`Push to ${c} returned ${d.status} (unreadable response body)`)),d.status>=500&&(o=!0),d.status===500){console.warn(`Endpoint ${c} returned 500, trying next...`),await new Promise(p=>setTimeout(p,1e3*(l+1)));continue}if(d.status>=500)throw new ot(`FlutterFlow reported a server error (HTTP ${d.status}), which cannot prove the push was refused — the write may have been applied before the failure. Open your FlutterFlow project to reconcile before retrying.`);if(o)throw new ot(`The push was refused (HTTP ${d.status}), but an earlier sync attempt may already have applied it — server errors and dropped responses cannot prove a refusal. Open your FlutterFlow project to reconcile before retrying.`);return d}throw hd({httpStatus:a})}async pushCode(e,n=null){return this.pushCodeWithRetry(e,3,n)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const i=JSON.parse(e.value);if(i&&Array.isArray(i.entries))return i.entries.map(r=>({id:r.id,name:r.project?.name||r.id}))}catch(i){console.error("Failed to parse stringified project value:",i)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,i="";for(const r of e){const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(s.ok)return r!==e[0]&&console.log(`listProjects answered on legacy path ${r}`),this.parseProjectsResponse(await s.json());if(n=s.status,i=await s.text(),console.warn(`listProjects via ${r} returned ${n}: ${i}`),s.status===401||s.status===403)throw new Error(vw(s.status,i));if(s.status!==404)throw new Error(`List projects failed: ${s.status} - ${i}`)}throw new Error(`List projects failed: ${n} - ${i}`)}}function ul(t,e){const n=t.body?.getReader?.(),i=n?(async()=>{const r=new TextDecoder;let s="";for(;;){const{done:o,value:a}=await n.read();if(o)break;s+=r.decode(a,{stream:!0})}return s+r.decode()})():Promise.resolve("");return dc(i,e,(r,s)=>{try{n?.cancel()?.catch?.(()=>{})}catch{}s(new Error("The response body stalled before it finished."))})}async function yw(t,e=Qh){const n=t.clone();let i;try{i=JSON.parse(await ul(t,e))}catch{let o="";try{o=await ul(n,e)}catch{}if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:o||`HTTP ${t.status}`,errorMap:new Map};throw new ot(`FlutterFlow accepted the sync but returned an unreadable response${o?`: ${o.slice(0,200)}`:"."}`)}if(!t.ok){let s=i.message||`HTTP ${t.status}`,o=new Map;if(i.errors)o=new Map(Object.entries(i.errors));else if(!i.message&&typeof i=="object"){const a=Object.keys(i).filter(l=>l.endsWith(".dart")&&Array.isArray(i[l]));a.length>0&&(o=new Map(Object.entries(i)),s=a.flatMap(u=>i[u].map(c=>`${u}: ${c.errorMessage}`)).join(`
+`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:s,errorMap:o}}let r={};if(i.value)try{r=typeof i.value=="string"?JSON.parse(i.value):i.value}catch(s){console.warn("Ignoring malformed push response value:",s)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function cc(t,e){return{401:"Authentication failed. Please check your FlutterFlow API key.",403:"Access denied. You may not have permission to modify this project.",404:"Project not found. Please check your Project ID.",409:"Conflict detected. The project may have been modified elsewhere.",422:"Validation failed: Invalid request format",429:"Rate limit exceeded. Please try again in a few minutes.",500:"FlutterFlow server error. Please try again later.",503:"FlutterFlow service temporarily unavailable."}[t]||`FlutterFlow API error: ${`HTTP ${t}`}`}const X={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},Ip=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,kp=/extends\s+State<\w+>/;function _w(t,e=""){if(t==="pubspec.yaml")return X.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return X.OTHER;if(t==="custom_functions.dart")return X.FUNCTION;if(e){const n=Ip.test(e),i=kp.test(e);if(n||i)return X.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return X.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return X.FUNCTION}return X.CODE_FILE}function Cp(t,e){switch(e){case X.ACTION:return`lib/custom_code/actions/${t}`;case X.WIDGET:return`lib/custom_code/widgets/${t}`;case X.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case X.CODE_FILE:return`lib/custom_code/${t}`;case X.DEPENDENCIES:return"pubspec.yaml";case X.OTHER:return`lib/custom_code/${t}`;default:return t}}async function uc(t,e=new Map){return fy(t,e)}const dl=new Map,ui=new Map,di=new Map;function xr(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Ei(t){dl.delete(xr(t))}function ss(t,e,n){const i=xr(t),r=ui.get(i)??new Map;for(const{path:s,content:o}of e){const a=r.get(s)??new Map,l=a.get(o)??{uncertain:0,verified:0};n.uncertain&&(l.uncertain+=n.uncertain),n.verified&&(l.verified+=n.verified),l.uncertain<=0&&l.verified<=0?a.delete(o):a.set(o,l),a.size===0?r.delete(s):r.set(s,a)}r.size===0?ui.delete(i):ui.set(i,r)}function ww(t,e){ss(t,e,{uncertain:1})}function bw(t){const e=xr(t);di.set(e,(di.get(e)??0)+1)}function Fd(t){const e=xr(t),n=(di.get(e)??0)-1;n<=0?di.delete(e):di.set(e,n)}function dc(t,e,n){return new Promise((i,r)=>{let s=!1;const o=(l,u,c)=>{s||(s=!0,c==="resolve"?i(u):r(u))},a=setTimeout(()=>{s||(s=!0,n(i,r))},e);t.then(l=>{clearTimeout(a),o(i,l,"resolve")},l=>{clearTimeout(a),o(r,l,"reject")})})}async function fc(t,e,n=Xh){const i={stop:!1},r=(async()=>{const s=await t.pushCode(e,i);return yw(s)})();return dc(r,n,(s,o)=>{i.stop=!0,Ei(t),bw(t),r.then(()=>Fd(t),()=>Fd(t)),o(new ot("FlutterFlow did not answer the sync in time — the push may still have been applied. The outcome is not yet known: open your FlutterFlow project to reconcile before retrying the deploy."))})}async function hc(t,e,n,i,r="",s=Xh){const o=Ky(e,n);if(o.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[],approximate:[]};const a=H_(o,r),l={...a.manifest,sources:a.sources},u=a.skipped.map(h=>h.reason);u.forEach(h=>console.warn(`[custom class deploy] ${h}`));const c=a.approximate;c.forEach(h=>console.warn(`[custom class deploy] ${h}`)),console.log(`Provisioning ${o.length} new FlutterFlow custom code file(s) before sync.`),We.set("provision");let d=!0,f,p;try{if(p=(async()=>{let h;try{h=await fetch(S0,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:i,customClasses:o,verification:l,stream:!0})})}catch{throw new ot("The provisioning request did not return a response. The deploy may have reached the FlutterFlow server — open your FlutterFlow project to reconcile before retrying.")}return q_(h,{onPhase:g=>{d&&We.setSubstatus(g)},onLog:g=>{d&&console.log(`[custom class deploy] ${g}`)}})})(),f=await dc(p,s,(h,g)=>{d=!1,g(new ot("The deploy is still working on the FlutterFlow server, but this browser tab has stopped waiting. Your custom classes may or may not have been written — the outcome is not yet known. Open your FlutterFlow project to reconcile before retrying the deploy."))}),!f.finalResultReceived){if(pd(f)===De.FAILED)throw new Error(f.error||`FlutterFlow custom class provisioning failed (HTTP ${f.httpStatus}).`);const h=f.httpRejected&&typeof f.httpStatus=="number"?`The FlutterFlow deploy runner returned HTTP ${f.httpStatus} without reporting a result.`:"The connection to the FlutterFlow deploy runner dropped before it reported a result.";throw new ot(`${h} The deploy may still be finishing on the server; open your FlutterFlow project to reconcile before retrying.`)}if(!f.success){const h=f.details?` ${f.details}`:"",g=`${f.error||"FlutterFlow custom class provisioning failed."}${h}`;throw pd(f)===De.UNCONFIRMED?new ot(`${g} The failure arrived after the deploy began — custom classes may already be written. Open your FlutterFlow project to reconcile before retrying.`):new Error(g)}}catch(h){throw h instanceof ot&&(Ei(t),ww(t,o),p?.then(g=>{g?.finalResultReceived&&g.success?ss(t,o,{uncertain:-1,verified:1}):g?.finalResultReceived&&tp(g)&&ss(t,o,{uncertain:-1})},()=>{})),h}return Ei(t),ss(t,o,{verified:1}),f.verificationSkipped&&(console.warn(`[custom class deploy] ${f.verificationSkipped}`),u.push(f.verificationSkipped)),{remoteFiles:n,syncFileMap:Yy(e,o),unverified:u,approximate:c,provisionSucceeded:!0}}async function pc(t,e={}){const n=xr(t);let i=dl.get(n);if(i===void 0){try{i=await t.fetchProjectSource()}catch(u){throw new Error(`Could not read your project's pubspec.yaml (${u.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const a=Jh(i.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);const l=ui.get(n);if(l){for(const[u,c]of[...l]){const d=i.files.get(u);if(d!==void 0){const f=c.get(d);f&&(f.verified>0?(f.verified-=1,f.explainedByVerified=!0):f.explainedByVerified||(f.uncertain-=1),f.uncertain<=0&&f.verified<=0&&c.delete(d))}c.size===0&&l.delete(u)}l.size===0&&ui.delete(n)}!ui.has(n)&&!di.has(n)&&dl.set(n,i)}const r=await a0(i.pubspecYaml,e),s=O_(i.pubspecYaml,r.overrides),o=N_(s.yaml,r.additions);return r.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>{const l=r.additions[a],u=l?.sdk?`sdk: ${l.sdk}`:l||"any";return`${a}: ${u}`}).join(", "),r.sdk.dartSdkFloor?`(resolved for Dart ${r.sdk.dartSdkFloor})`:""),r.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:s.overridden,warnings:r.warnings,remoteFiles:i.files}}function Ew(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const i=t.content.split(`
+`).length;i>500&&n.push(`Code has ${i} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===X.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const r=t.content.match(/print\s*\(/g);r&&r.length>3&&n.push(`Code contains ${r.length} print statements. Consider removing debug prints before committing.`);const s=h_(t.content);if(s&&e.push(`FlutterFlow cannot format this code - ${s}. Fix or regenerate before committing.`),t.codeType===X.WIDGET){const o=Dh(t.content),a=u_(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${jh(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function Ap(t,e={}){const{artifactType:n="CustomWidget",artifactName:i="GeneratedCode",fileName:r}=e,s=l_(t);let o=r||i;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=Dh(s)[0],c=u?jh(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=X.CODE_FILE;switch(n){case"CustomAction":a=X.ACTION;break;case"CustomWidget":a=X.WIDGET;break;case"CustomFunction":a=X.FUNCTION;break;case"CustomClass":case"CodeFile":a=X.CODE_FILE;break}let l="";return a===X.WIDGET?l=`// Automatic FlutterFlow imports
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import 'package:flutter/material.dart';
+// Begin custom widget code
+// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
+
+`:a===X.ACTION?l=`// Automatic FlutterFlow imports
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import 'package:flutter/material.dart';
+// Begin custom action code
+// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
+
+`:a===X.FUNCTION&&(l=`// Automatic FlutterFlow imports
+import 'dart:convert';
+import 'dart:math' as math;
+
+import 'package:flutter/material.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:intl/intl.dart';
+import 'package:timeago/timeago.dart' as timeago;
+import '/flutter_flow/lat_lng.dart';
+import '/flutter_flow/place.dart';
+import '/flutter_flow/uploaded_file.dart';
+
+`),{content:$y(s,l),fileName:o,codeType:a,artifactType:n,artifactName:i}}function Sw(t){const e={};for(const n of Hl(t))e[n]="";return e}function xw(t,e={}){return{timestamp:new Date().toISOString(),artifactType:t.artifactType,artifactName:t.artifactName,codeType:t.codeType,fileName:t.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:t.content.length}}function Iw(t,e,n,i=new Set,r=""){const s=[],o=Ip.test(e),a=kp.test(e);return n===X.WIDGET&&!o&&!a&&s.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:s.length===0,errors:s}}function lo(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const i=new Set(Array.from(t.values()).flatMap(r=>Js(r.content||"")));for(const[r,s]of t.entries()){if((!s.content||s.content.trim().length===0)&&e.push(`File ${r} is empty`),s.content&&s.content.length>1e5&&n.push(`File ${r} is very large (>100KB)`),r.endsWith(".dart")){const o=Iw(r,s.content,s.type,i,s.artifactName);o.valid||e.push(...o.errors.map(a=>`${r}: ${a}`))}if(r==="pubspec.yaml"){const o=Jh(s.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}const ne={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:ne.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=ne.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(ne).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===ne.PREPARING&&(this.startTime=Date.now()),(t===ne.SUCCESS||t===ne.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:t,commitState:this}})),console.log(`Commit state changed to: ${t}`)},setError(t){this.error=t,this.setState(ne.ERROR)},setSuccess(t){this.result=t,this.setState(ne.SUCCESS)},setProgress(t,e){this.filesProcessed=t,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===ne.PREPARING||this.currentState===ne.VALIDATING||this.currentState===ne.PUSHING}};async function gc(t){const e=t!==void 0?t:await Ne("flutterflow"),n=await Ne("flutterflow_project_id");if(!e||!n)return"";if(vp(n,e))return n;const i=++no,r=vt;let s=!1;try{s=(await new Gn(e,"","main",Ge()).listProjects()||[]).some(l=>(l.id||l.projectId)===n)}catch(o){const a=String(o&&o.message||"");if(!/denied \(403\)|without list permission/i.test(a))return"";s=!0}return r!==vt||e!==Ie||i<=un||(un=i,!s)?"":((!Lt||Lt.projectId===n)&&yr(n,e,r),n)}async function kw(t,e,n={}){let{codeType:i="W"}=n;const{pubspecDeps:r={},artifactName:s=e}=n;i==="CustomWidget"&&(i=X.WIDGET),i==="CustomAction"&&(i=X.ACTION),i==="CustomFunction"&&(i=X.FUNCTION),i==="CustomClass"&&(i=X.CODE_FILE),i==="CodeFile"&&(i=X.CODE_FILE),K.reset(),K.setState(ne.PREPARING);try{const o=await Ne("flutterflow"),a=Ge();let l=await gc(o);if((o!==Ie||a!==Ge())&&(l=""),!o)throw new Error("FlutterFlow API Key not configured. Please set your API key in the API Keys settings.");if(!l)throw new Error("No confirmed FlutterFlow project target. Choose a project from the loaded list in API Keys settings.");if(!ro(l))throw new Error("Invalid FlutterFlow Project ID format.");const u=new Gn(o,l,"main",a);K.setState(ne.VALIDATING);const c=new Map,d=i||_w(e,t),f=Cp(e,d);c.set(e,{artifactName:s,content:t,type:d,path:f}),K.setProgress(0,c.size);const p=lo(c);if(!p.valid)throw new Error(`Validation failed:
+${p.errors.join(`
+`)}`);const h=await pc(u,r),g=h.yaml,m=await hc(u,c,h.remoteFiles,`Provision ${s} custom class`,g),v=await uc(m.syncFileMap,m.remoteFiles),x=new Map(m.syncFileMap);x.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),We.set("package");const E=await mc(x),y={project_id:l,zipped_custom_code:E,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:v.fileMapContents,functions_map:v.functionsMapContents};K.setState(ne.PUSHING),K.setProgress(1,c.size),Ei(u),We.set("push");const S=await fc(u,y);if(S.success)K.setSuccess({fileCount:c.size,projectId:l,warnings:S.errorMap&&S.errorMap.size>0?Array.from(S.errorMap.entries()):[]});else{const I=S.errorMessage||cc(S.responseCode),R=new Error(I);throw R.remoteRefusal=!0,R}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${l}`,addedDependencies:h.added,unverified:m.unverified,approximate:m.approximate,warnings:S.errorMap?Array.from(S.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),o instanceof ot?{success:!1,unconfirmed:!0,error:o.message,state:K.currentState}:{success:!1,error:o.message,remoteRefusal:o.remoteRefusal===!0,state:K.currentState}}}async function mc(t){const e=new JSZip;for(const[n,i]of t.entries())e.file(n,i.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function Cw(t,e={}){const{artifactType:n,artifactName:i,fileName:r,pipelineResult:s}=e;console.log(`Starting commit for ${i} (${n})`);let o=!1;const a={projectId:null,endpoint:Ge(),artifactType:n,artifactName:i,fileName:r};try{K.setState(ne.PREPARING);const l=Ap(t,{artifactType:n,artifactName:i,fileName:r}),u=Sw(l.content);console.log("Detected dependencies:",u),K.setState(ne.VALIDATING);const c=await Ne("flutterflow"),d=Ge(),f=await Ne("flutterflow_project_id");let p=nr||await gc(c);if((c!==Ie||d!==Ge())&&(p=""),!c)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!p)throw new Error(f?"The FlutterFlow project target is not confirmed for your current API key. Reopen the deploy dialog and choose a project from the loaded list.":"FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!ro(p))throw new Error("Invalid FlutterFlow Project ID format.");a.projectId=p;const h=new Map;h.set(l.fileName,{artifactName:i,content:l.content,type:l.codeType,path:Cp(l.fileName,l.codeType),functionName:l.codeType===X.FUNCTION?i:void 0}),K.setProgress(0,h.size);const g=lo(h);if(!g.valid)throw new Error(`File validation failed:
+${g.errors.join(`
+`)}`);g.warnings.length>0&&console.warn("Validation warnings:",g.warnings),K.setState(ne.PUSHING);const m=new Gn(c,p,"main",d),v=await pc(m,u),x=v.yaml,E=await hc(m,h,v.remoteFiles,`Provision ${i} custom class`,x);o=E.provisionSucceeded===!0;const y=await uc(E.syncFileMap,E.remoteFiles),S=new Map(E.syncFileMap);S.set("pubspec.yaml",{content:x,type:X.DEPENDENCIES,path:"pubspec.yaml"}),We.set("package");const I=await mc(S),R={project_id:p,zipped_custom_code:I,uid:`web_${Date.now()}`,branch_name:m.branchName,serialized_yaml:x,file_map:y.fileMapContents,functions_map:y.functionsMapContents};K.setProgress(1,h.size),Ei(m),We.set("push");const b=await fc(m,R);if(b.success){const P={...xw(l,s),projectId:p};return K.setSuccess({...P,fileCount:h.size,warnings:b.errorMap?Array.from(b.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${l.fileName} to FlutterFlow`,metadata:P,targetIdentity:a,addedDependencies:v.added,unverified:E.unverified,approximate:E.approximate,warnings:b.errorMap?Array.from(b.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const P=b.errorMessage||cc(b.responseCode),T=new Error(P);throw T.errorMap=b.errorMap,T.remoteRefusal=!0,T}}catch(l){console.error("Commit execution failed:",l),K.setError(l);let u=new Map;if(l.errorMap)u=l.errorMap;else if(l.message&&l.message.includes("{"))try{const c=l.message.match(/\{[\s\S]*\}/);if(c){const d=JSON.parse(c[0]);u=new Map(Object.entries(d))}}catch(c){console.warn("Failed to parse error map from commit response:",c)}return l instanceof ot?{success:!1,unconfirmed:!0,error:l.message,errorMap:u,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}:o?{success:!1,partial:!0,error:l.message,errorMap:u,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}:{success:!1,error:l.message,errorMap:u,remoteRefusal:l.remoteRefusal===!0,targetIdentity:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Aw(t,e={}){const{pipelineResult:n}=e;let i=!1;const r={projectId:null,endpoint:Ge(),artifactType:"Bundle",artifactName:t?.title,fileName:t?.fileEntries?`${t.fileEntries.length} artifacts`:"bundle"};try{if(K.setState(ne.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed:
+${t.errors.join(`
+`)}`);const s=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===X.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,s.size);const o=lo(s);if(!o.valid)throw new Error(`File validation failed:
+${o.errors.join(`
+`)}`);K.setState(ne.VALIDATING);const a=await Ne("flutterflow"),l=Ge(),u=await Ne("flutterflow_project_id");let c=nr||await gc(a);if((a!==Ie||l!==Ge())&&(c=""),!a)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!c)throw new Error(u?"The FlutterFlow project target is not confirmed for your current API key. Reopen the deploy dialog and choose a project from the loaded list.":"FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!ro(c))throw new Error("Invalid FlutterFlow Project ID format.");r.projectId=c,K.setState(ne.PUSHING);const d=new Gn(a,c,"main",l),f=await pc(d,t.dependencies),p=f.yaml,h=await hc(d,s,f.remoteFiles,`Provision ${t.title} custom classes`,p);i=h.provisionSucceeded===!0;const g=await uc(h.syncFileMap,h.remoteFiles),m=new Map(h.syncFileMap);m.set("pubspec.yaml",{content:p,type:X.DEPENDENCIES,path:"pubspec.yaml"}),We.set("package");const v=await mc(m),x={project_id:c,zipped_custom_code:v,uid:`web_${Date.now()}`,branch_name:d.branchName,serialized_yaml:p,file_map:g.fileMapContents,functions_map:g.functionsMapContents};K.setProgress(1,s.size),Ei(d),We.set("push");const E=await fc(d,x);if(E.success){const I={...n,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((R,b)=>R+b.content.length,0),projectId:c};return K.setSuccess({...I,fileCount:s.size,warnings:E.errorMap?Array.from(E.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:I,targetIdentity:r,addedDependencies:f.added,unverified:h.unverified,approximate:h.approximate,warnings:E.errorMap?Array.from(E.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const y=E.errorMessage||cc(E.responseCode),S=new Error(y);throw S.errorMap=E.errorMap,S.remoteRefusal=!0,S}catch(s){console.error("Bundle commit execution failed:",s),K.setError(s);const o=s.errorMap||new Map;return s instanceof ot?{success:!1,unconfirmed:!0,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}:i?{success:!1,partial:!0,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}:{success:!1,error:s.message,errorMap:o,targetIdentity:r,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Pw(t,e=[]){const n=Bl("architect");try{return await qs("architect",fp,ey(t),n,e)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Prompt Architect failed: ${i.message}`)}}async function co(t,e,n=[],i){const r=ty(t),s=Bl("generator",_.bundleSpec);try{return await qs("generator",e,r,s,n)}catch(o){if(o.isModelArmor||o.isUsageLimit||o.isPipelineCancel)throw o;if(e!==qr){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,o.message),$b(e,qr,i);try{return await qs("generator",qr,r,s,n)}catch(a){throw a.isModelArmor||a.isUsageLimit||a.isPipelineCancel?a:new Error(`Code Generator failed: primary (${e}): ${o.message} | fallback (${qr}): ${a.message}`)}}throw new Error(`Code Generator failed: ${o.message}`)}}async function uo(t,e=null){const n={...Bl("review",_.artifactBundle||_.bundleSpec),architect_output:e};try{return await qs("review",hp,ny(t),n)}catch(i){throw i.isModelArmor||i.isUsageLimit||i.isPipelineCancel?i:new Error(`Code Review failed: ${i.message}`)}}function Hs(t,e){const n=document.getElementById(`step${t}-item`),i=document.getElementById(`step${t}-status`);!n||!i||(n.classList.remove("active","completed","error"),i.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),i.classList.add("running"),i.innerHTML=``):e==="completed"?(n.classList.add("completed"),i.classList.add("completed"),i.innerHTML=``):e==="error"?(n.classList.add("error"),i.classList.add("error"),i.innerHTML=``):i.innerHTML=``)}function $e(t,e){const n=document.getElementById(`step${t}-loading`),i=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),i.classList.add("hidden"),Hs(t,"active")):(n.classList.add("hidden"),i.classList.remove("hidden"),Hs(t,"completed"))}function Fw(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function Rw(t){ut(parseInt(t.replace("step","")))}function ut(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),zn();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const i=document.getElementById(`step${t}-content`);i&&i.classList.remove("hidden");const r=document.getElementById("stage-title"),s={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=s[t]||"Active Workflow Stage")}function Tw(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const r=e.closest(".code-container")?.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(i=>{console.warn("Failed to copy to clipboard:",i)})}function fl(t){const e=hl(t);console.log(`Step 1 (Prompt Architect): ${nn(fp)}`),console.log(e!==t?`Step 2 (Code Generator): ${nn(t)} → ${nn(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${nn(t)}`),console.log(`Step 3 (Code Review): ${nn(hp)}`)}function Pp(){return{step1Result:_.step1Result,step2Result:_.step2Result,step3Result:_.step3Result,artifactBundle:_.artifactBundle,bundleReview:_.bundleReview,selectedArtifactId:_.selectedArtifactId}}function $w(t){if(!t)return;Object.assign(_,t),new Set((_.artifactBundle?.artifacts||[]).map(n=>n.id)).has(_.selectedArtifactId)||(_.selectedArtifactId=yi(_.artifactBundle)?.id||null)}const Fp="results-replacement-error";function Mw(t,{stage:e=2,runId:n,retry:i}){if(!le(n))return;const r=document.getElementById(Fp);if(!r)return;const s=ip(t),o=document.getElementById("results-replacement-error-title"),a=document.getElementById("results-replacement-error-message"),l=document.getElementById("results-replacement-error-retry"),u=document.getElementById("results-replacement-error-upgrade");o&&(o.textContent=`${go[e]||"Regeneration"}: ${s.title}`),a&&(a.textContent=s.message),r.hidden=!1;let c=null;u&&(u.hidden=!s.canUpgrade,s.canUpgrade&&(u.textContent="View plans",u.onclick=()=>Si(),c=u)),l&&(l.hidden=s.canUpgrade,s.canUpgrade||(l.onclick=()=>{vc(),typeof i=="function"&&i()},l.textContent="Retry",c=l)),(c||r).focus({preventScroll:!0})}function vc(){const t=document.getElementById(Fp);t&&(t.hidden=!0)}function Rp(t,{previous:e,stage:n,runId:i,retry:r}){le(i)&&(t.isUsageLimit&&_n(),$w(e),Cr(),jt(!0),Ar(),bo(),In(),Mw(t,{stage:n,runId:i,retry:r}),hn())}async function Tp(){if(console.log("runRefinement called"),_.isRunning)return;const t=document.getElementById("code-generator-model").value;_.isRunning=!0;const e=mo();yc("standardRegenerate",_.step2Result,_.step1Result);const n=document.querySelectorAll(".btn-refine-action"),i=Pp();n.forEach(r=>{r.disabled=!0,r.innerHTML=`
+ Refining...`});try{vc();const r=ac(),s=r.id,o=iy({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,artifactId:r.id,userFeedback:"Fix the issues listed in the audit report."});wo({runId:e}),Ot(2,e),ut(2),$e(2,!0);const a=await co(o,t,[],e);if(!le(e))return;_.step2Result=a,oo(),fn(2,e);const l=document.getElementById("step2-output"),u=wi(_.step2Result);l.textContent=u,l.dataset.raw=u,$e(2,!1),ut(3),Ot(3,e),$e(3,!0);const c=await uo(_.step2Result,_.step1Result);if(!le(e))return;_.step3Result=c,ao(),fn(3,e),_.artifactBundle?.artifacts?.some(p=>p.id===s)?_.selectedArtifactId=s:_.selectedArtifactId=yi(_.artifactBundle)?.id||null;const d=document.getElementById("step3-output");d.textContent=_.step3Result,$e(3,!1),Cr();const f=to(_.step3Result);Ar(u,f)}catch(r){if(console.error("Refinement failed:",r),!le(e))return;const s=eo(r,{architect:2,generator:2,review:3});Rp(r,{previous:i,stage:s,runId:e,retry:Tp})}finally{n.forEach(r=>{r.disabled=!1,r.textContent="Refine & Regenerate"}),le(e)&&(_.isRunning=!1,hn())}}async function yc(t,e,n){const i=`${It}/connectFeedback`,r={type:t,code:e,input:n};try{const s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!s.ok){const a=await s.text();return console.error(`callEndpoint failed: ${s.status} ${s.statusText}`,a),{success:!1,status:s.status,error:a}}const o=await s.json();return console.log("Telemetry success:",o),o}catch(s){return console.error("callEndpoint failed:",s),{success:!1,error:s.message}}}function Lw(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function $p(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!_.step2Result){ke("No generated code found. Please run the full pipeline first.","warning");return}if(_.isRunning)return;const n=document.getElementById("code-generator-model").value;_.isRunning=!0;const i=mo();yc("flutterflowError",_.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` Fixing…`);const s=Pp();try{vc();const o=$h({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,userFeedback:e});ug(),wo({runId:i}),Ot(2,i),ut(2),$e(2,!0);const a=await co(o,n,[],i);if(!le(i))return;_.step2Result=a,oo(),fn(2,i);const l=document.getElementById("step2-output"),u=wi(_.step2Result);l.textContent=u,l.dataset.raw=u,$e(2,!1),ut(3),Ot(3,i),$e(3,!0);const c=await uo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=c,ao(),fn(3,i);const d=document.getElementById("step3-output");d.textContent=_.step3Result,$e(3,!1),Cr();const f=to(_.step3Result);Ar(u,f),t&&(t.value="")}catch(o){if(console.error("Fix from errors failed:",o),!le(i))return;const a=eo(o,{architect:2,generator:2,review:3});Rp(o,{previous:s,stage:a,runId:i,retry:$p})}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),le(i)&&(_.isRunning=!1,hn())}}async function wr(){if(console.log("runThinkingPipeline called"),_.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value,n=He.slice();if(!t.trim()){ke("Please describe your FlutterFlow widget first.","warning");return}_.isRunning=!0;const i=mo();try{if(await nl,!le(i)||(Sn.length&&await Promise.allSettled(Sn.map(E=>E.job)),!le(i))||!await sb()||!le(i)||(await Qw(),!le(i)))return;const r=hl(e);t.length,pw(),_.submittedPrompt=t,_.submittedImages=n.filter(E=>E.url),zs(!0),fl(r),zn();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");const o=document.getElementById("paywall-exhausted");o&&o.classList.add("hidden");const a=document.getElementById("composer")?.getBoundingClientRect(),l=document.getElementById("hero")?.getBoundingClientRect();wo({prompt:t,runId:i}),Ob(a,l),ut(1),Ot(1,i),$e(1,!0);const u=_.submittedImages.map(E=>({url:E.url})),c=await Pw(t,u);if(!le(i))return;_.step1Result=c,gw(),fn(1,i);const d=document.getElementById("step1-output"),f=wi(_.step1Result);d.textContent=f,d.dataset.raw=f,$e(1,!1),ut(2),Ot(2,i),$e(2,!0);const p=await co(_.step1Result,r,u,i);if(!le(i))return;_.step2Result=p,oo(),fn(2,i);const h=document.getElementById("step2-output"),g=wi(_.step2Result);h.textContent=g,h.dataset.raw=g,$e(2,!1),ut(3),Ot(3,i),$e(3,!0);const m=await uo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=m,ao(),fn(3,i);const v=document.getElementById("step3-output");v.textContent=_.step3Result,$e(3,!1),Cr();const x=to(_.step3Result);Ar(g,x)}catch(r){if(r.isPipelineCancel||console.error("Pipeline failed:",r),!le(i))return;const s=eo(r,{architect:1,generator:2,review:3});r.isUsageLimit?_n():(r.message,hl(document.getElementById("code-generator-model").value),void 0),ut(s),$e(s,!1),og(r,{stage:s,runId:i}),Hs(s,"error")}finally{le(i)&&(_.isRunning=!1,zs(!1),hn())}}function Nw(){const t=document.getElementById("code-generator-model").value,e=[Os,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(i=>i!==t),n=prompt(`Retry with different model?
+
+Current: ${t}
+
+Options:
+1. ${e[0]}
+2. ${e[1]}
+
+Enter 1 or 2:`);n==="1"?(document.getElementById("code-generator-model").value=e[0],wr()):n==="2"&&(document.getElementById("code-generator-model").value=e[1],wr())}async function Ow(){const t=lc();if(!t){ke("No code to commit. Please run the pipeline first.","warning");return}const e=await Ne("flutterflow"),n=await Ne("flutterflow_project_id");if(!e||!n){ke("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ic();return}if(_.artifactBundle?.artifacts?.length>1){await Bw();return}const{artifactType:i,artifactName:r,fileName:s}=xp(),o=Ap(t,{artifactType:i,artifactName:r,fileName:s}),a=Ew(o);if(!a.canProceed){ke(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}bc(o,a,null,null)}async function Bw(){const t=await Ne("flutterflow"),e=await Ne("flutterflow_project_id");if(!t||!e){ke("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ic();return}const n=qy(_.artifactBundle);if(n.errors.length>0){ke(`Bundle validation failed: ${n.errors.join("; ")}`,"error");return}const i=new Map(n.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),r=lo(i),s={canProceed:r.valid&&n.errors.length===0,issues:[...n.errors,...r.errors],warnings:[...n.warnings,...r.warnings]};if(!s.canProceed){ke(`Bundle validation failed: ${s.issues.join("; ")}`,"error");return}const o={content:n.fileEntries.map(a=>`// ${a.fileName}
+${a.content}`).join(`
+
+`),fileName:`${n.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:n.title};bc(o,s,n.dependencies,n)}function Dw(t){let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let n=`
+
FlutterFlow Commit Failed
+
${W(t.error)}
`;if(e&&e.size>0){n+=`
+
Errors:
+
`;for(const[r,s]of e.entries()){const o=ql(s);n+=`-
+ ${W(r)}: ${W(o)}
+
`}n+="
"}n+="
",n+=`
+
+
`;const i=document.getElementById("step3-output");i&&(i.innerHTML=n,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{Mp(t.error,e)}))}async function Mp(t,e){if(_.isRunning)return;const n=document.getElementById("code-generator-model").value;_.isRunning=!0;const i=mo(),r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` Fixing...`);try{let s=`The previous code had the following errors when committing to FlutterFlow:
+
+`;if(e&&e.size>0)for(const[p,h]of e.entries()){const g=ql(h);s+=`File: ${p}
+Error: ${g}
+
+`}else s+=`${t}
+`;const o=$h({bundleSpec:_.step1Result,artifactBundle:JSON.stringify(_.artifactBundle||_.step2Result),bundleReview:_.step3Result,userFeedback:s});wo({runId:i}),Ot(2,i),ut(2),$e(2,!0);const a=await co(o,n,[],i);if(!le(i))return;_.step2Result=a,oo(),fn(2,i);const l=document.getElementById("step2-output"),u=wi(_.step2Result);l.textContent=u,l.dataset.raw=u,$e(2,!1),ut(3),Ot(3,i),$e(3,!0);const c=await uo(_.step2Result,_.step1Result);if(!le(i))return;_.step3Result=c,ao(),fn(3,i);const d=document.getElementById("step3-output");d.textContent=_.step3Result,$e(3,!1),Cr();const f=to(_.step3Result);Ar(u,f)}catch(s){if(console.error("Regeneration failed:",s),!le(i))return;const o=eo(s,{architect:2,generator:2,review:3});s.isUsageLimit&&_n(),ut(o),$e(o,!1),og(s,{stage:o,runId:i,retry:()=>Mp(t,e)}),Hs(o,"error")}finally{r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),le(i)&&(_.isRunning=!1,hn())}}async function jw(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const n=await Ne("flutterflow"),i=await Ne("flutterflow_project_id");n&&i?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):n||i?(t.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(t.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function Lp(t){try{const e=await fetch(`${It}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function Uw(t){try{const n=await(await fetch(`${It}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(n.error||!n.email||!n.sessionToken)throw new Error(n.error||"Invalid or expired link");return n}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function Hw(t){try{const e=await fetch(`${It}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:t})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${It}/auth/refresh-session`,status:e.status}),null;const n=await e.json();return n.error||!n.email||!n.sessionToken?(console.warn("refreshSession: validation failed",{error:n.error,hasEmail:!!n.email,hasToken:!!n.sessionToken}),null):n}catch(e){return console.error("refreshSession: fetch failed",{url:`${It}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function Rd(t,e){const n=Op(),i=(H.email||n.email)!==t;H.email=t,H.sessionToken=e,H.isVerified=!0,fe=qn({isLoading:!0}),localStorage.setItem(Ms,JSON.stringify({email:t,sessionToken:e})),i&&Wp()}function Np(){H.email=null,H.sessionToken=null,H.isVerified=!1,fe=qn({isResolved:!0}),localStorage.removeItem(Ms),localStorage.removeItem(Ns)}function Op(){try{const t=localStorage.getItem(Ms);if(!t)return{email:null,sessionToken:null};const e=JSON.parse(t);return!e.email||!e.sessionToken?{email:null,sessionToken:null}:e}catch(t){return console.warn("getStoredSession: failed to parse auth session:",t),localStorage.removeItem(Ms),{email:null,sessionToken:null}}}async function Ww(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname+window.location.hash);try{const{email:n,sessionToken:i}=await Uw(e);Rd(n,i),Bp();const r=Td();r&&!window.location.hash&&(window.location.hash=r)}catch(n){Td();const i=n.message||"Sign-in link invalid or expired.";ke(i,"error"),fo(),oi(i,"error")}}else{const{email:n,sessionToken:i}=Op();if(n&&i){const r=await Hw(i);r?Rd(r.email,r.sessionToken):Np()}}_c()}function qw(){try{localStorage.setItem(tl,JSON.stringify({hash:window.location.hash||"#home",ts:Date.now()}))}catch(t){console.warn("rememberSignInReturnSurface: failed to persist return surface:",t)}}function Td(){try{const t=localStorage.getItem(tl);if(localStorage.removeItem(tl),!t)return null;const{hash:e,ts:n}=JSON.parse(t);return!e||typeof n!="number"||Date.now()-n>x0?null:e}catch(t){return console.warn("consumeSignInReturnSurface: failed to read return surface:",t),null}}function fo(){const t=document.getElementById("signin-modal");if(!t)return;qw(),document.getElementById("signin-email-input")?.removeAttribute("aria-invalid"),oi(""),Ke(t)}function Bp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&Ye(e)}function oi(t,e){const n=document.getElementById("signin-message");n&&(n.textContent=t||"",n.classList.remove("signin-message-success","signin-message-error"),e&&n.classList.add(`signin-message-${e}`))}async function zw(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),n=Xs(t?.value);if(!n||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(n)||n.length>254){t?.setAttribute("aria-invalid","true"),oi("Please enter a valid email address.","error");return}t?.removeAttribute("aria-invalid"),e&&(e.disabled=!0,e.textContent="Sending…");const r=Uh(n);r&&oi(r,"error");try{const s=await Lp(n),o=zl(s);t&&o&&(t.value=""),t?.setAttribute("aria-invalid",String(!o)),oi(Hh(s,n),o?"success":"error"),e&&(e.disabled=!1,e.textContent=o?"Sent!":"Send Sign-in Link",o&&setTimeout(()=>{e.textContent==="Sent!"&&(e.textContent="Send Sign-in Link")},2500))}catch(s){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:n,err:s}),oi("Something went wrong. Please try again.","error"),e&&(e.disabled=!1,e.textContent="Send Sign-in Link")}}function Vw(){H.email=null,H.sessionToken=null,H.isVerified=!1,fe=qn({isResolved:!0}),A_({storage:window.localStorage,onIdentityChanged:_c,onPlanChanged:po})}const Gw=F_({sendLink:Lp,getEmail:()=>H.email||"",onState:Kw});function Kw(t){const e=document.getElementById("send-new-link-btn"),n=document.getElementById("send-new-link-msg");if(!e||!n)return;if(t.status==="pending"){e.disabled=!0,e.textContent="Sending…",n.className="acct-access-msg",n.textContent="Sending a fresh sign-in link…";return}if(t.status==="sent"){e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg",n.textContent=Hh(t.data,H.email||"")||"Link sent — check your email.";return}e.disabled=!1,e.textContent="Send new link",n.className="acct-access-msg error";const i=t.error?.message?`Couldn't send a link right now. ${t.error.message}`:"Couldn't send a link right now. Please try again.";n.textContent=i}async function Yw(){await Gw()}function Jw(){const t=k_(window.localStorage),e=t.length?`Cleared disposable UI caches: ${t.join(", ")}.`:"Nothing disposable to clear.";ke(`${e} Your run count, identity and stored keys are kept.`,"info")}function Zw(){const t=document.getElementById("delete-unavailable-modal");t&&Ke(t,{trigger:document.activeElement})}function Xw(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("delete-unavailable-modal");e&&Ye(e)}function _c(){const t=H.isVerified&&!!H.email,e=document.getElementById("auth-signedout"),n=document.getElementById("auth-signedin"),i=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),n&&n.classList.toggle("hidden",!t),i&&i.classList.toggle("hidden",t);const r=document.getElementById("auth-user-email");r&&(r.textContent=H.email||"");const s=document.getElementById("access-signed-email");s&&(s.textContent=H.email||""),lb(),po()}async function Dp(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),n=e.visitorId,i=await fetch(A0,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:n})});if(!i.ok)throw new Error(`Identity check HTTP ${i.status}`);const r=await i.json();if(bt.userId=r.user_id,bt.token=r.identity_token||null,bt.status=r.status,bt.resolved=!0,sessionStorage.setItem(k0,r.user_id),bt.token&&sessionStorage.setItem(C0,bt.token),r.usage_count!==void 0){const s=xn(),a=(r.usage_month||s)===s?r.usage_count:0;localStorage.setItem(jn,JSON.stringify({count:a,month:s})),_n()}console.log(`Identity resolved: ${r.status} (${r.user_id.slice(0,8)}...) usage: ${r.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let ca=null;function Qw(t=5e3){return bt.resolved?Promise.resolve():(ca||(ca=Dp().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([ca,new Promise(e=>setTimeout(e,t))]))}function jp(){const t=xn();try{const e=localStorage.getItem(jn);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:jn,month:t,err:e}),localStorage.removeItem(jn),{count:0,month:t}}}function xn(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Ir(){const t=jp();return t.month!==xn()?{count:0,month:xn()}:t}function eb(){const e={count:Ir().count+1,month:xn()};return localStorage.setItem(jn,JSON.stringify(e)),e}function Ii(){return!!fe.isLoading}function Dt(){return!!fe.isResolved}function tb(t){if(!t)return null;const e=String(t).toLowerCase().replace(/[^a-z0-9]+/g,"_");return e==="pro"||e==="professional_plan"?"professional":e==="power_developer"||e==="power_plan"?"power":Object.prototype.hasOwnProperty.call(Ls,e)?e:null}function nb(t){return t&&Object.entries(ap).find(([,e])=>e===t)?.[0]||null}function zr(...t){return t.find(e=>e!=null&&e!=="")}function ib(...t){return t.find(e=>e&&typeof e=="object")||{}}function rb(t){const e=t.data&&typeof t.data=="object"?t.data:t,n=ib(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),i=e.metadata||n.metadata||e.customer?.metadata||{},r=zr(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,n.priceId,n.price_id,n.plan?.id,n.price?.id,n.items?.data?.[0]?.price?.id,n.items?.[0]?.price?.id,n.lines?.data?.[0]?.price?.id),s=zr(e.status,e.subscriptionStatus,e.subscription_status,n.status,"none"),o=tb(zr(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,n.tier,n.plan,i.tier,i.plan)),a=P0.has(String(s).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||nb(r)||(a||l?"professional":"free");return qn({tier:u,status:s,periodEnd:zr(e.periodEnd,e.currentPeriodEnd,e.current_period_end,n.current_period_end,n.periodEnd,null),isResolved:!0})}function ho(){return Ls[fe.tier]??Ls.free}async function sb(){if(H.isVerified&&(!Dt()||Ii())&&(await Hp({force:!0}),po()),H.isVerified&&!Dt())return ke("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Ir(),e=ho();if(t>=e)return Up(t,e,{openModal:!0}),!1;const n=Math.floor(e*.8);if(t>=n){const i=e-t;ke(`${i} run${i===1?"":"s"} remaining this month.`,"warning")}return!0}function $d(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Up(t,e,n={}){jt(!0);const i=document.getElementById("walkthrough-modal");i&&Ye(i,{restoreFocus:!1});const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const s=document.getElementById("preview-frame-container");s&&(s.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ke(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Si();return}const c=document.getElementById("paywall-exhausted-text");if(c){const f=fe.tier;f==="free"?c.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:c.textContent=`You've used all ${e} generations this month on your ${f} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",H.isVerified),u.classList.remove("hidden"),n.openModal&&Si()}function hl(t){return fe.tier==="free"&&es.includes(t)?Os:t}function ob(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const n=fe.tier,r=!(H.isVerified&&!Dt())&&n==="free";Array.from(e.options).forEach(o=>{const a=nn(o.value),l=es.includes(o.value);o.textContent=l&&r?`${a} (PRO)`:a,o.disabled=!1}),r&&es.includes(e.value)&&(e.value=Os),e.disabled=!1,_d.has(e)||(e.addEventListener("change",()=>{Dt()&&fe.tier==="free"&&es.includes(e.value)&&(e.value=Os,Si()),fl(e.value),Zl()}),_d.add(e));let s=document.getElementById("model-selector-free-notice");r?(s||(s=document.createElement("p"),s.id="model-selector-free-notice",s.className="text-xs text-gray-400 mt-1",t.appendChild(s)),s.innerHTML='Free plan — Gemini only. '):s&&s.remove(),fl(e.value)}function wc(){const t=H.isVerified&&!!H.email,e=t&&Ii(),n=!t||Dt(),i=Ir(),r=n?i.count:0,s=n?ho():0,o=Math.max(0,s-r),a=`${r} / ${s} runs this month`,l=Ol,u=n?fe.tier||"free":null,c=document.getElementById("topbar-credits-count");c&&(e?c.textContent="…":n?c.textContent=String(o):c.textContent="—");const d=document.getElementById("credits-balance");d&&(e?d.textContent="Checking plan…":n?d.textContent=a:d.textContent="Plan check failed");const f=document.getElementById("usage-dialog-tier");f&&(e?f.textContent="Checking…":n?f.textContent=l[u]||"Free":f.textContent="Unavailable");const p=document.getElementById("usage-dialog-status");p&&(e?p.textContent="Verifying your subscription…":n?p.textContent="Runs reset at the start of each month.":p.textContent="Could not verify your subscription. Try again or sign out.");const h=document.getElementById("usage-counter");if(h)if(e&&t)h.textContent="Checking plan…",h.className="text-xs text-gray-500";else if(!n&&t)h.textContent="Plan check failed",h.className="text-xs text-red-600 font-medium";else{h.textContent=a;const g=s>0?r/s:0;h.className=g>=1?"text-xs text-red-600 font-medium":g>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500"}if(!t){const g=document.getElementById("guest-usage-text");if(g){const m=jp(),v=m.month===xn()?m.count??0:0;g.textContent=`${v} / ${Ls.free} generations used`}}ab()}function ab(){if(!(H.isVerified&&!!H.email))return;const e=Ii(),n=Dt(),i=Ir(),r=n?i.count:0,s=n?ho():0,o=Math.max(0,s-r),a=n?fe.tier||"free":null,l={free:"Free",professional:"Pro",power:"Power"}[a]||"Free",u=H.email||"",c=u.split("@")[0]||u,d=document.getElementById("acct-avatar");d&&(d.textContent=(u[0]||"?").toUpperCase());const f=document.getElementById("acct-name");f&&(f.textContent=c||"—");const p=document.getElementById("acct-plan-tier"),h=document.getElementById("acct-plan-price"),g=document.getElementById("acct-plan-note"),m=document.getElementById("acct-renewal");if(p&&(p.textContent=e?"Checking…":n?l:"Plan unavailable"),h)if(e)h.textContent="—";else if(!n)h.textContent="—";else if(a==="free")h.textContent="$0 / month";else{const b=Yi(Ki[a]??0,Xl());h.textContent=`${b} / month`}if(g&&(e?g.textContent="Verifying your subscription…":n?a==="free"?g.textContent="No subscription. Upgrade for more generations.":g.textContent="billed monthly through Stripe":g.textContent="Could not verify your subscription. Check billing or sign out."),m){const b=Date.parse(fe.periodEnd||""),P=n&&a!=="free"&&!!fe.periodEnd&&!Number.isNaN(b);if(e)m.textContent="";else if(!n)m.textContent="";else if(a==="free")m.textContent="";else if(P){const T=new Date(b).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"});m.textContent=`Renews ${T} · reset at the start of each month.`}else m.textContent="Renewal date is not available for this period."}const v=document.getElementById("acct-left-count"),x=document.getElementById("acct-left-limit"),E=document.getElementById("acct-reset-note");v&&(v.textContent=e?"…":n?String(o):"—"),x&&(x.textContent=e?"…":n?String(s):"—"),E&&(e?E.textContent="Checking plan…":n?E.textContent="Runs reset at the start of each month.":E.textContent="Plan check failed. Refresh or manage billing.");const y=document.getElementById("acct-used-count"),S=document.getElementById("acct-meter-fill"),I=document.getElementById("acct-meter-meta"),R=document.getElementById("acct-meter-track");if(y&&(y.textContent=e?"…":n?String(r):"—"),S){const b=n&&s>0?Math.min(100,Math.round(r/s*100)):0;S.style.width=`${b}%`}if(I)if(e)I.textContent="Checking…";else if(!n)I.textContent="Plan check failed";else if(s===0)I.textContent=`${r} of ${s}`;else{const b=Math.round(r/s*100);I.textContent=`${r} of ${s} · ${b}%`}R&&(e?R.setAttribute("aria-label","Checking usage…"):n?R.setAttribute("aria-label",`${r} of ${s} generations used`):R.setAttribute("aria-label","Usage unavailable")),xt()}function _n(){if(wc(),H.isVerified&&(Ii()||!Dt())){$d();return}const{count:t}=Ir(),e=ho();t>=e&&!_.isRunning&&!Vv()?Up(t,e):$d()}function lb(){wc()}async function Hp(t={}){const e=t.force===!0;if(!H.isVerified||!H.sessionToken){fe=qn({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const n=H.sessionToken,i=localStorage.getItem(Ns);if(!e&&i)try{const{data:r,email:s,ts:o,version:a}=JSON.parse(i);if(a===wd&&s===H.email&&Date.now()-o<300*1e3){fe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",i)}try{const s=await(await fetch(`${It}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken,user_id:bt.userId})})).json();if(!H.isVerified||H.sessionToken!==n)return;if(s.error){if(["unauthorized","invalid session","expired session"].some(a=>String(s.error).toLowerCase().includes(a))){Np(),_c();return}fe=qn({isResolved:!1,error:s.error});return}fe=rb(s),localStorage.setItem(Ns,JSON.stringify({version:wd,data:fe,email:H.email,ts:Date.now()}))}catch(r){if(!H.isVerified||H.sessionToken!==n)return;console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function Wp(){localStorage.removeItem(Ns)}async function cb(t){if(!H.isVerified||!H.sessionToken){zp(),fo();return}if(!ap[t]){ke("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const i=await(await fetch(`${It}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:H.sessionToken,currency:Xl()})})).json();if(i.error||!i.url)throw new Error(i.error||"Failed to create checkout session");const{url:r}=i;window.location.href=r}catch(n){console.error("startCheckout failed:",n),e&&(e.disabled=!1,e.textContent="Subscribe"),ke("Could not start checkout. Please try again.","error")}}async function ub(t){if(!H.isVerified||!H.sessionToken){fo();return}const e=t||document.getElementById("manage-billing-btn"),n=e?e.textContent:"";e&&(e.disabled=!0,e.textContent="Loading…");try{const r=await(await fetch(`${It}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:H.sessionToken})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to open billing portal");const{url:s}=r;window.location.href=s}catch(i){console.error("openCustomerPortal failed:",i),e&&(e.disabled=!1,e.textContent=n),ke("Could not open billing portal. Please try again.","error")}}const Ws=new Set;function qp(){Ws.forEach(t=>t.abort()),Ws.clear()}async function qs(t,e,n,i={},r=[]){const o=new AbortController;Ws.add(o);let a=!1;const l=setTimeout(()=>{a=!0,o.abort()},12e4);try{const u=await fetch(I0,{method:"POST",headers:{"Content-Type":"application/json",...bt.token?{Authorization:`Bearer ${bt.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:bt.userId,step:t,model:e,prompt:n,images:r,context:i})}),c=await u.text();let d={};try{d=c?JSON.parse(c):{}}catch{d={}}if(u.status===429){d.serverCount!==void 0&&(localStorage.setItem(jn,JSON.stringify({count:d.serverCount,month:xn()})),_n());const h=new Error(d.message||"Monthly usage limit reached. Upgrade to continue.");throw h.isUsageLimit=!0,h.pipelineStep=t,h}const f=uy(d,t);if(f)throw f;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(d),"content type:",typeof d.content),!u.ok)throw new Error(`${d.message||d.error||"BuildShip pipeline error"} (HTTP ${u.status})`);if(t==="generator")if(d.usage_status==="success"&&Number.isFinite(d.usage_count)){const h=xn();(d.usage_month||h)===h&&(localStorage.setItem(jn,JSON.stringify({count:d.usage_count,month:h})),_n())}else eb(),_n();let p=d.output||d.content;if(!p){const h=c?` (body: ${c.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${h}`)}return Array.isArray(p)&&(p=p.map(h=>typeof h=="string"?h:h.text||"").join("")),typeof p!="string"&&(p=JSON.stringify(p)),p}catch(u){if(u.name==="AbortError"){if(a)throw new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`);const c=new Error(`BuildShip ${t} request cancelled`);throw c.isPipelineCancel=!0,c}throw u instanceof TypeError?new Error(`BuildShip unreachable: ${u.message}`):u}finally{clearTimeout(l),Ws.delete(o)}}let pl=!1;function db(){const e=new URLSearchParams(window.location.search).get("checkout");return e==="success"?(window.history.replaceState({},"",window.location.pathname+window.location.hash),Wp(),pl=!0):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname+window.location.hash),ke("Checkout cancelled.","info")),e}function fb(){if(!pl)return;pl=!1;const t=fe.tier!=="free";ke(t?"Subscription active! Your plan is live.":"Checkout complete — confirming your subscription. Check Manage billing if it does not update.",t?"success":"info")}function po(){const t=H.isVerified&&!!H.email,e=fe.tier,n=t&&Ii(),i=!t||Dt(),r=document.getElementById("subscription-tier-badge");if(r){const a=Ol,l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};r.textContent=n?"Checking…":i?a[e]||"Free":"Plan unavailable",r.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${i?l[e]||l.free:l.unresolved}`}const s=document.getElementById("upgrade-prompt");s&&s.classList.toggle("hidden",!t||n||!i||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||n||i&&e==="free"),hb(i?e:null),ob(),Zl(),_n(),dg()}function hb(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([r,{btnId:s,defaultText:o}])=>{const a=document.getElementById(s);a&&(r===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const i=document.getElementById("free-tier-current");i&&i.classList.toggle("hidden",t!=="free")}function pb(){document.querySelectorAll(".pm-card[data-tier]").forEach(t=>{const e=t.dataset.tier,n=Zv[e];if(!n)return;const i=t.querySelector("ul.pm-features");if(i){i.innerHTML="";for(const r of n){const s=document.createElement("li");s.textContent=r,i.appendChild(s)}}})}function gl(){const t=Xl(),e=document.getElementById("pro-price"),n=document.getElementById("power-price"),i=document.getElementById("plans-pro-price"),r=document.getElementById("plans-power-price"),s=document.getElementById("pro-price-note"),o=document.getElementById("power-price-note"),a=document.getElementById("plans-pro-price-note"),l=document.getElementById("plans-power-price-note");e&&(e.textContent=Yi(Ki.professional,t)),n&&(n.textContent=Yi(Ki.power,t)),i&&(i.textContent=Yi(Ki.professional,t)),r&&(r.textContent=Yi(Ki.power,t));const u="billed monthly";s&&(s.textContent=u),o&&(o.textContent=u),a&&(a.textContent=u),l&&(l.textContent=u)}function Si(){gl();const t=document.getElementById("pricing-modal");t&&Ke(t),j0().then(()=>gl())}function zp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&Ye(e)}function ke(t,e="info"){const n={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},i=document.createElement("div");i.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${n[e]||n.info}`,i.textContent=t,document.body.appendChild(i),setTimeout(()=>{i.style.opacity="0",setTimeout(()=>i.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{Kv(),Pb(),hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),gb(),window.__heroField=V_(),window.__pipelineLogo=J_(),Yb(),Jl=_0({onSubmit:wr}),nl=(async()=>{try{await Ww(),db(),await Hp()}catch(n){console.warn("Startup auth/subscription initialization failed:",n)}})(),await nl,fb(),po(),gl(),pb(),await mw(),dw();const t=document.getElementById("flutterflow-endpoint-select");if(t){const n=Ge();t.value=n}Sp(),Dp();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{dn===2&&e.value.trim().length>0&&(rc(),io())}),e.addEventListener("blur",()=>{const n=document.getElementById("walkthrough-modal");dn===2&&n&&Ke(n)}),e.addEventListener("keydown",n=>{if(n.key==="Tab"){const i=document.getElementById("walkthrough-modal");dn===2&&i&&setTimeout(()=>{Ke(i)},100)}})),window.addEventListener("commitStateChange",n=>{const{state:i}=n.detail;i===ne.PREPARING||i===ne.VALIDATING||i===ne.PUSHING?(Zp(),We.phaseId||Xp(),Ld(i)):(i===ne.SUCCESS||i===ne.ERROR)&&(Ld(i),Bn&&clearTimeout(Bn),Bn=setTimeout(()=>{Bn=null,Sc()},1e3))}),Fc()});function gb(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function mb(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",zn),document.addEventListener("keydown",zn))}function zn(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),n=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),n&&n.classList.remove("hidden");const i=document.getElementById("welcome-video-player");i&&i.removeEventListener("click",zn),document.removeEventListener("keydown",zn),Sp()}let ir=null;async function ml(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++Id,n=++no,i=()=>e===Id,r=vt;vr=null;const s=await Ne("flutterflow"),o=await Ne("flutterflow_project_id");if(i()){if(!s){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const l=await new Gn(s,"","main",Ge()).listProjects();if(!i())return;if(r!==vt||s!==Ie)return ml();if(n>un&&(un=n,tc(l,s,r)),!l||l.length===0){t.innerHTML='';return}t.innerHTML='',l.forEach(u=>{const c=document.createElement("option");c.value=u.id||u.projectId||"",c.textContent=u.name||u.projectName||`Project ${u.id}`,t.appendChild(c)}),vr={key:s,generation:r},o&&(t.value=o)}catch(a){if(!i())return;if(r!==vt||s!==Ie)return ml();console.error("Failed to load projects for deploy:",a),t.innerHTML=''}}}function vb(){const e=document.getElementById("confirm-project-select")?.value?.trim();if(!e)return null;const n=vr;return!n||n.key!==Ie||n.generation!==vt?null:e}function bc(t,e,n,i=null){ir={codeInfo:t,checks:e,deps:n,bundlePlan:i},document.getElementById("confirm-file-name").textContent=t.fileName,document.getElementById("confirm-artifact-type").textContent=t.artifactType,document.getElementById("confirm-file-size").textContent=`${(t.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=i?`${i.fileEntries.length} files`:t.content.split(`
+`).length,ml();const r=document.getElementById("confirm-deps-list"),s=document.getElementById("confirm-deps-section");n&&Object.keys(n).length>0?(r.innerHTML=Object.entries(n).map(([u,c])=>{const d=c?`at least ${cn(c)}`:"version resolved from your project";return`• ${cn(u)}: ${d}`}).join(""),s.classList.remove("hidden")):s.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`• ${cn(u)}`).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=t.content,document.getElementById("code-preview-content").classList.add("hidden"),document.getElementById("code-preview-chevron").style.transform="rotate(0deg)";const l=document.getElementById("commit-confirm-modal");l&&Ke(l)}function Vp(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&Ye(e),ir=null}function yb(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&Ye(e);const n=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const s of n){const o=document.getElementById(s);o&&(o.textContent="")}const i=document.getElementById("success-warnings-section");i&&i.classList.add("hidden");const r=document.getElementById("success-warnings-list");r&&(r.innerHTML="")}function Gp(t){const e=(m,v)=>{const x=document.getElementById(m);x&&(x.textContent=v||"")},n=t.metadata?.fileName||"",i=t.metadata?.projectId||"",r=t.metadata?.artifactType||"",s=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",i),e("success-file-name",n),e("success-artifact-type",r),e("success-time",s),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&i&&(u.href=`https://app.flutterflow.io/project/${i}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),f=t.unverified||[],p=t.approximate||[],h=t.warnings||[];(h.length>0||f.length>0||p.length>0)&&c&&d&&(d.innerHTML=[...f.map(m=>`Not verified before deploying: ${W(String(m))}`),...p.map(m=>`Verified approximately: ${W(String(m))}`),...h.map(([m,v])=>`${W(m)}: ${W(String(v))}`)].join(""),c.classList.remove("hidden"));const g=document.getElementById("commit-success-modal");g&&Ke(g)}function Kp(t){Sc(),Dw(t);const e=t.remoteRefusal===!0;Ec(t,{heading:"Deploy failed",title:e?"FlutterFlow refused this deploy — nothing was confirmed written.":"The deploy failed before FlutterFlow confirmed anything.",guidance:e?"Review the error and any per-file outcomes above, fix them in your code or in FlutterFlow, then deploy again. A refusal is definitive: no part of this deploy was applied, so retrying is safe once the problem is fixed.":"Review the error above, fix it, then deploy again. The deploy stopped before a write was confirmed, so nothing was applied."})}function Ec(t,{heading:e,title:n,guidance:i}){const r=t.targetIdentity||{},s=document.getElementById("commit-terminal-modal");if(!s)return!1;const o=(h,g)=>{const m=document.getElementById(h);m&&(m.textContent=g||"")};o("terminal-heading",e),o("terminal-title",n),o("terminal-message",t.error||t.message||"");const a=document.getElementById("terminal-identity-list");if(a){const h=[["Project",r.projectId||t.metadata?.projectId],["Endpoint",r.endpoint],["File",r.fileName||t.metadata?.fileName],["Artifact",r.artifactType||t.metadata?.artifactType]];a.innerHTML=h.map(([g,m])=>`${W(g)}:${W(String(m??"—"))}
`).join("")}const l=document.getElementById("terminal-file-outcomes");let u=t.errorMap;u&&!(u instanceof Map)&&(u=new Map(Object.entries(u)));const c=l?.querySelector("ul");l&&c&&u&&u.size>0?(c.innerHTML=[...u.entries()].map(([h,g])=>`${W(h)}: ${W(ql(g))}`).join(""),l.classList.remove("hidden")):l&&(c&&(c.innerHTML=""),l.classList.add("hidden"));const d=document.getElementById("terminal-guidance");d&&(d.innerHTML=i);const f=document.getElementById("terminal-open-ff-link"),p=r.projectId||t.metadata?.projectId;return f&&(f.href=p?`https://app.flutterflow.io/project/${p}`:"https://app.flutterflow.io/"),Ke(s),!0}function Yp(t){Ec(t,{heading:"Deploy partially applied",title:"Some custom classes reached FlutterFlow, but the deploy did not fully complete.",guidance:"The custom classes the runner confirmed are already in your project and are not lost. Review the per-file errors above, fix them in FlutterFlow or regenerate, then deploy again. Open the project to see exactly what landed."})}function Jp(t){Ec(t,{heading:"Deploy outcome not yet known",title:"This browser stopped waiting before the FlutterFlow server reported a result.",guidance:"The deploy may still be finishing on the server — it was not cancelled. Open your FlutterFlow project and confirm whether the class landed before retrying, so you do not push a duplicate or build on top of an unknown state."})}function _b(t){t&&t.target!==t.currentTarget||Ye(document.getElementById("commit-terminal-modal"))}function wb(){const t=document.getElementById("code-preview-content"),e=document.getElementById("code-preview-chevron");t.classList.contains("hidden")?(t.classList.remove("hidden"),e.style.transform="rotate(90deg)"):(t.classList.add("hidden"),e.style.transform="rotate(0deg)")}const Md={prepare:{message:"Preparing your code...",start:4,end:14},validate:{message:"Checking FlutterFlow credentials...",start:14,end:22},project:{message:"Reading your FlutterFlow project...",start:22,end:40},provision:{message:"Creating custom classes in FlutterFlow...",start:40,end:82},package:{message:"Packaging files for upload...",start:82,end:88},push:{message:"Pushing to FlutterFlow...",start:88,end:97},done:{message:"Complete!",start:100,end:100}},bb=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}];let Bn=null;function Zp(){Bn&&clearTimeout(Bn),Bn=null}const We={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){Zp(),this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&(Yu(e,!0,"Deploying to FlutterFlow"),Ke(e)),this.set("prepare")},set(t,e=null){if(!(!Md[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const n=this.sequence.indexOf("package");this.sequence.splice(n===-1?this.sequence.length:n,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=Md[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,n=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=bb.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const i=this.sequence.indexOf(this.phaseId),s=[`Step ${i===-1?1:i+1} of ${this.sequence.length}`];e>=5&&s.push(Eb(e)),Qp(this.phaseId==="done"?100:n,t.message,s.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&(Yu(t,!1),Ye(t,{force:!0,restoreFocus:!1}))}};function Eb(t){const e=Math.floor(t);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function Xp(t){We.start(t)}function Sc(){We.stop()}function Qp(t,e,n,i=null){const r=document.getElementById("commit-progress-bar"),s=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");r&&(r.style.width=`${Math.round(t*10)/10}%`),s&&(s.textContent=e),o&&(o.textContent=n),a&&(a.textContent=i||"",a.classList.toggle("hidden",!i))}function Ld(t){const e={[ne.PREPARING]:"prepare",[ne.VALIDATING]:"validate",[ne.PUSHING]:"project",[ne.SUCCESS]:"done"};if(t===ne.ERROR){We.timer&&clearInterval(We.timer),We.timer=null,Qp(100,"Failed","Error occurred");return}const n=e[t];n&&We.set(n)}function Sb(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===X.CODE_FILE):t.codeInfo?.codeType===X.CODE_FILE}let eg=!1;function tg(t){eg=t;const e=document.querySelector("#commit-confirm-modal button[data-deploy-confirm]");e&&(e.disabled=t),[...document.querySelectorAll("[data-deploy-start]"),...document.querySelectorAll("#btn-deploy-to-ff")].forEach(i=>{i.disabled=t})}function Nd(t){Sc(),tg(!1);const e=ep(t);e===De.COMMITTED?Gp(t):e===De.PARTIAL?Yp(t):e===De.UNCONFIRMED?Jp(t):Kp(t)}async function xb(){if(!ir){console.error("No pending commit data");return}if(eg){console.warn("Deploy already in flight; ignoring duplicate confirm.");return}const t=ir;if(ir=null,nr=vb(),Vp(),tg(!0),Xp({withProvisioning:Sb(t)}),t.bundlePlan){const o=await Aw(t.bundlePlan,{pipelineResult:{step1Result:_.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});nr=null,Nd(o);return}const{codeInfo:e}=t,{artifactType:n,artifactName:i,fileName:r}=xp(),s=await Cw(e.content,{artifactType:n,artifactName:i,fileName:r,pipelineResult:{step1Result:_.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});nr=null,Nd(s)}window.runThinkingPipeline=wr;window.toggleStep=Rw;window.toggleSection=Fw;window.selectWorkflowStep=ut;window.copyCode=Tw;window.retryWithDifferentModel=Nw;window.openApiKeysModal=ic;window.closeApiKeysModal=bp;window.openComposerSettings=wp;window.closeComposerSettings=nw;window.walkthroughConnectAccount=tw;window.closeWalkthroughModal=rw;window.openWalkthroughModal=iw;window.advanceWalkthrough=rc;window.commitToFlutterFlow=kw;function Ib(){_.isRunning||jt(!1);const t=document.getElementById("pipeline-input");t&&t.focus()}function kb(){wp();const t=document.getElementById("composer-settings-model");t&&(t.scrollIntoView({behavior:"smooth",block:"center"}),t.focus(),t.click())}window.focusPromptInput=Ib;window.openModelSelector=kb;window.handlePromptImageSelect=B0;window.removePromptImage=D0;window.saveApiKeys=aw;window.validateFlutterFlowConnection=oc;window.clearAllApiKeys=lw;window.toggleKeyVisibility=hw;window.handleWelcomeVideoEnd=mb;window.dismissWelcomeVideo=zn;window.initiateCommitToFlutterFlow=Ow;window.updateFlutterFlowCredentialStatus=jw;window.openCommitConfirmModal=bc;window.closeCommitConfirmModal=Vp;window.closeCommitSuccessModal=yb;window.closeCommitTerminalModal=_b;window.showCommitPartialModal=Yp;window.showCommitUnconfirmedModal=Jp;window.showCommitSuccessModal=Gp;window.showCommitFailureModal=Kp;window.toggleCodePreview=wb;window.confirmCommitToFlutterFlow=xb;window.runRefinement=Tp;window.regenerateFromPastedErrors=$p;window.clearErrorInput=Lw;window.setFlutterFlowEndpoint=X0;window.getFlutterFlowEndpoint=Ge;window.commitProgress=We;window.openSignInModal=fo;window.closeSignInModal=Bp;window.handleMagicLinkRequest=zw;window.handleSignOut=Vw;window.handleSendNewLink=Yw;window.handleClearCache=Jw;window.handleDeleteAccount=Zw;window.closeDeleteUnavailableModal=Xw;window.startCheckout=cb;window.openCustomerPortal=ub;window.openPricingModal=Si;window.closePricingModal=zp;let os=null,ng=null,Vn={1:"pending",2:"pending",3:"pending"},xc=1,Ic=null;const go={1:"Prompt Architect",2:"Code Generator",3:"Code Review"},Cb={1:"Understanding your prompt",2:"Generating Dart code",3:"Running the code audit"},Ab={1:"Prompt understood",2:"Dart code generated",3:"Code audit complete"};function mo(){return _.runId+=1,_.runId}function le(t){return t===void 0||t===_.runId}function ig(){_.runId+=1}function kc(t){return document.getElementById(`pdot-${t}`)}const rg=window.matchMedia("(max-width: 920px)");function Od(){const t=document.getElementById("pipeline-progress"),e=t?.querySelector(":scope > .pipeline-view"),n=t?.querySelector(":scope > .pipeline-prompt-recap");if(!e||!n)return;const i=rg.matches;if((e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)!==0===i)return;const s=document.activeElement;t.insertBefore(n,i?e.nextSibling:e),s instanceof HTMLElement&&n.contains(s)&&s.focus({preventScroll:!0})}function Pb(){Od(),rg.addEventListener("change",Od)}function Fb(t){return{1:"Turning your idea into a clear FlutterFlow specification.",2:"Building the Dart source, widget parameters and animation.",3:"Checking the generated code and preparing the file review."}[t]||""}function zs(t){const e=document.getElementById("btn-run-pipeline")||document.getElementById("hero-send");e&&(e.disabled=t,e.classList.toggle("is-busy",t),t?e.setAttribute("aria-busy","true"):e.removeAttribute("aria-busy"))}function vo(t){const e=document.getElementById("pipeline-progress");e&&(e.dataset.runState=t)}function Un(t,e){Vn[t]=e;const n=kc(t);if(!n)return;n.dataset.state=e,n.disabled=e==="pending"||e==="skipped";const i=go[t],r={pending:"not started",active:"in progress",done:"complete",failed:"failed",skipped:"not run"};n.setAttribute("aria-label",`Step ${t} of 3, ${i}: ${r[e]||e}`),e==="active"?n.setAttribute("aria-current","step"):n.removeAttribute("aria-current")}function Rb(){return[1,2,3].filter(t=>Vn[t]==="done").length}function yo(){const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width=`${Rb()/3*100}%`);const e=document.getElementById("progress-stage-count");e&&(e.textContent=`Step ${xc} of 3`)}function _o(t,{done:e=!1}={}){const n=document.getElementById("progress-title-text"),i=document.getElementById("progress-description-text"),r=document.getElementById("progress-substep-text"),s=Vn[t],o=e||s==="done";if(n&&(n.textContent=o?Ab[t]:Cb[t]),i&&(i.textContent=Fb(t)),r){const a=o?" — complete":s==="failed"?" — stopped":"";r.textContent=`Step ${t} of 3 — ${go[t]}${a}`}}function Tb(t){Vn[t]==="pending"||Vn[t]==="skipped"||(Ic=t,[1,2,3].forEach(e=>{const n=kc(e);n&&n.setAttribute("aria-pressed",String(e===t))}),_o(t))}function Cc(){Ic=null,[1,2,3].forEach(t=>{const e=kc(t);e&&e.removeAttribute("aria-pressed")})}function sg(t){const e=document.getElementById("pipeline-note");e&&(e.textContent=t||"",e.hidden=!t)}function $b(t,e,n){le(n)&&sg(`${nn(t)} did not answer. Continuing on ${nn(e)}.`)}function Ac(){const t=document.getElementById("pipeline-failure");if(!t)return;t.hidden=!0;const e=document.getElementById("pipeline-failure-actions");e&&e.replaceChildren()}function Mb(){return window.matchMedia?.("(prefers-reduced-motion: reduce)").matches===!0}function In(){Wn()}function Lb(){return[".pipeline-prompt-kicker","#pipeline-submitted-prompt","#pipeline-edit-prompt",".pipeline-glyph","#progress-title-text","#progress-description-text",".progress-track",".progress-meta"].map(t=>document.querySelector(t))}function Nb(){const e=document.getElementById("pipeline-stage-nav").classList.toggle("is-open");document.getElementById("progress-stage-count").setAttribute("aria-expanded",String(e))}window.togglePipelineStageNavigation=Nb;function Ob(t,e){op(t,document.getElementById("main-stage-container"),Lb()),E0(document.getElementById("hero"),e)}window.addEventListener("hashchange",In);window.addEventListener("popstate",In);function wo(t={}){const{prompt:e=null,runId:n}=t;if(!le(n))return;ki(),In(),jt(!0);const i=document.getElementById("pipeline-progress"),r=document.getElementById("results-view"),s=document.getElementById("ready-state");if(s&&s.classList.add("hidden"),r&&r.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),i&&i.classList.add("visible"),document.getElementById("pipeline-stage-nav")?.classList.remove("is-open"),document.getElementById("progress-stage-count")?.setAttribute("aria-expanded","false"),vo("running"),e!==null){const a=document.getElementById("pipeline-submitted-prompt");a&&(a.textContent=e)}ng=Date.now();const o=document.getElementById("progress-elapsed");o&&(o.textContent="0s"),Vn={1:"pending",2:"pending",3:"pending"},Cc(),Ac(),sg(""),[1,2,3].forEach(a=>Un(a,"pending")),Ot(1,n),Bb()}function Ot(t,e){le(e)&&(xc=t,Cc(),[1,2,3].forEach(n=>{n===t?Un(n,"active"):nt&&Un(n,"pending")}),_o(t),yo())}function fn(t,e){le(e)&&(Un(t,"done"),Ic===null&&_o(t,{done:!0}),yo())}function og(t,{stage:e=1,runId:n,retry:i=ag}={}){if(!le(n))return;kr(),ki(),In(),vo("failed"),jt(!0);const r=document.getElementById("pipeline-progress");r&&r.classList.add("visible");const s=document.getElementById("results-view");s&&s.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),Un(e,"failed"),[1,2,3].forEach(h=>{h>e&&Un(h,"pending")}),xc=e,Cc(),_o(e),yo();const o=ip(t),a=document.getElementById("pipeline-failure"),l=document.getElementById("pipeline-failure-title"),u=document.getElementById("pipeline-failure-message"),c=document.getElementById("pipeline-failure-hint"),d=document.getElementById("pipeline-failure-actions");if(!a||!l||!u||!d)return;if(a.dataset.kind=o.kind,l.textContent=`${go[e]}: ${o.title}`,u.textContent=o.message,c){const h=o.detail&&o.detail!==o.message?o.detail:"";c.textContent=h,c.hidden=!h}d.replaceChildren();const f=[o.canUpgrade&&{id:"upgrade",label:"View plans",variant:"primary",onClick:()=>Si()},o.canRetry&&{id:"retry",label:"Retry",variant:o.canUpgrade?"secondary":"primary",onClick:i},o.canEdit&&{id:"edit",label:"Edit prompt",variant:"secondary",onClick:vl}].filter(Boolean);!o.canEdit&&!o.canRetry&&f.push({id:"edit",label:"Back to prompt",variant:"secondary",onClick:vl}),f.forEach(h=>{const g=document.createElement("button");g.type="button",g.textContent=h.label,g.dataset.action=h.id,g.dataset.variant=h.variant,g.addEventListener("click",h.onClick),d.appendChild(g)}),a.hidden=!1;const p=d.querySelector("button");p&&p.focus({preventScroll:!0})}function vl(){ig(),qp(),_.isRunning=!1,zs(!1),hn(),vo("settled"),In(),kr(),ki(),Ac();const t=document.getElementById("pipeline-progress");t&&t.classList.remove("visible"),jt(!1);const e=document.getElementById("pipeline-input");e&&(_.submittedPrompt&&(e.value=_.submittedPrompt,e.dispatchEvent(new Event("input",{bubbles:!0}))),e.focus({preventScroll:!0}),e.setSelectionRange(e.value.length,e.value.length))}function ag(){const t=document.getElementById("pipeline-input");t&&_.submittedPrompt&&(t.value=_.submittedPrompt,t.dispatchEvent(new Event("input",{bubbles:!0}))),He=_.submittedImages.slice(),yn(),Ac(),wr()}function Bb(){kr(),os=setInterval(()=>{const t=(Date.now()-ng)/1e3,e=document.getElementById("progress-elapsed");e&&(e.textContent=`${Math.floor(t)}s`)},250)}function kr(){os&&(clearInterval(os),os=null)}let rr=null;function ki(){rr&&(clearTimeout(rr),rr=null)}function Cr(){kr(),ki(),vo("settled"),yo();const t=document.getElementById("pipeline-progress-fill");rr=setTimeout(()=>{rr=null;const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function xi(t,e=""){const n={pass:'',warning:'',fail:'',info:''};return``}function lg(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function Db(){return o_({bundle:_.artifactBundle,reviewResult:_.step3Result})}function jb(t){return`
+
+ ${xi(t.severity)}
+
+
${W(t.message)}
+ ${t.suggestion?`
${W(t.suggestion)}
`:""}
+
${W(t.source)}
+
+
+ `}function Ub(t){return`
+
+
+
${W(t.title)}
+ ${t.detail&&t.detail!==t.title?`
${W(t.detail)}
`:""}
+
+
+ `}function Hb(t){const e=document.getElementById("results-summary-detail"),n=document.getElementById("results-title");if(!e)return;n&&(n.textContent=t.title);const i=t.score,r=i==null?"neutral":i>=80?"pass":i>=60?"warning":"fail",s=i==null?"":i>=80?"Strong":i>=60?"Needs work":"High risk",o=t.findings.length?`
+
+ ${t.findings.map(u=>`
+ -
+ ${xi(u.severity)}
+
+ ${W(u.message)}
+ ${u.suggestion?`${W(u.suggestion)}`:""}
+
+
+ `).join("")}
+
+ `:"",a=t.warnings.length?`
+
+ ${xi("warning")} Bundle
+
+ ${t.warnings.map(u=>`- ${W(u)}
`).join("")}
+
+
+ `:"",l=t.manualSteps.length?`
+
+ Complete in FlutterFlow
+ For your information — these don't block the deploy. Finish them by hand in the FlutterFlow editor once the code is pushed.
+
+ ${t.manualSteps.map(u=>`
+ -
+ ${W(u.title)}
+ ${u.detail&&u.detail!==u.title?`${W(u.detail)}`:""}
+
+ `).join("")}
+
+
+ `:"";e.innerHTML=`
+
+
+
${W(t.title)}
+
${W(t.summary)}
+
+ - Artifact${t.artifacts.length===1?"":"s"}
- ${t.artifacts.map(u=>W(u.artifactType||u.type||u.name)).join(" · ")}
+ - Public API
- ${t.artifacts.flatMap(u=>u.publicApi||[]).map(W).join(" · ")||"No parameters returned"}
+ - Manual Steps Required
- ${l||"None reported"}
+ - Review
- ${W(t.status||"Not reported")}
+
+ ${o}
+ ${a}
+
+
+
+
+
Is the generated code correct?
+
+
+
+
+
+ `}function Wb(t){const e=t.artifacts.find(l=>l.id===_.selectedArtifactId)||t.artifacts[0];if(!e)return"";const n={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],i=e.findings.length?e.findings.map(jb).join(""):`${xi(n.icon)} ${W(n.message)}
`,r=e.dependencies?.length?e.dependencies.map(l=>`
+ ${W(l.name)}${l.version?` ${W(l.version)}`:""}${l.reason?`${W(l.reason)}
`:""}
+ `).join(""):'No external packages',s=e.imports?.length?e.imports.map(l=>`${W(l)}`).join(""):'No imports returned',o=e.publicApi?.length?e.publicApi.map(l=>`${W(l)}`).join(""):'No public API signature returned',a=e.relationships.length?e.relationships.map(l=>`
+ ${W(l.from||"Bundle")} ${W(l.type)} ${W(l.to||"Bundle")}${l.description?`${W(l.description)}
`:""}
+ `).join(""):'No relationships for this file';return`
+
+
+ Code Review findings
+ ${i}
+
+ ${e.manualSteps.length?`
+
+ Manual FlutterFlow steps for this file
+ ${e.manualSteps.map(Ub).join("")}
+
+ `:""}
+
+ File details
+
+
+
+ Deployment
+
+ - Status
- ${W(e.deployStatus||"pending")}
+ - Order
- ${e.index+1} of ${t.artifacts.length}
+ - Path hint
- ${W(e.pathHint||"Not returned")}
+
+
+
+
+
+
+
+ `}function qb(t){const e=document.getElementById("bundle-strip"),n=document.getElementById("results-summary-tab"),i=document.getElementById("artifact-tabs"),r=document.getElementById("results-file-count");if(n){const s=_.resultsViewMode==="summary";n.classList.toggle("active",s),n.setAttribute("role","tab"),n.setAttribute("aria-selected",String(s)),n.setAttribute("aria-controls","results-summary-detail"),n.tabIndex=s?0:-1}if(i&&(i.setAttribute("role","tablist"),i.setAttribute("aria-label","Artifacts in this bundle")),!t.artifacts.length){r&&(r.textContent="0 files"),e&&e.classList.remove("visible"),i&&(i.innerHTML=""),Bd();return}if(r){const s=t.artifacts.length;r.textContent=`${s} ${s===1?"file":"files"}`}i&&(i.innerHTML=t.artifacts.map(s=>{const o=_.resultsViewMode==="file"&&s.id===_.selectedArtifactId;return`
+
+ `}).join(""),i.onclick=s=>{const o=s.target.closest(".artifact-tab");o?.dataset?.artifactId&&Pc(o.dataset.artifactId)},Bd()),e&&e.classList.add("visible")}function Bd(){const t=document.getElementById("bundle-strip");!t||t.dataset.tabKeyboard==="bound"||(t.dataset.tabKeyboard="bound",t.addEventListener("keydown",e=>{if(e.defaultPrevented)return;const n=[document.getElementById("results-summary-tab"),...Array.from(document.querySelectorAll("#artifact-tabs .artifact-tab"))].filter(Boolean);if(!n.length||!n.includes(document.activeElement))return;let i=-1;const r=n.indexOf(document.activeElement);if(e.key==="ArrowRight")i=(r+1)%n.length;else if(e.key==="ArrowLeft")i=(r-1+n.length)%n.length;else if(e.key==="Home")i=0;else if(e.key==="End")i=n.length-1;else return;e.preventDefault();const s=n[i];if(!s)return;if(s.id==="results-summary-tab")cg();else{const a=s.dataset.artifactId;a&&Pc(a)}const o=s.id==="results-summary-tab"?document.getElementById("results-summary-tab"):document.querySelector(`#artifact-tabs .artifact-tab[data-artifact-id="${s.dataset.artifactId}"]`);o&&o.focus()}))}function bo(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),n=document.getElementById("results-audit-output"),i=document.getElementById("results-summary-detail"),r=document.getElementById("artifact-results-split"),s=Db(),o=lc();if(i&&(i.setAttribute("role","tabpanel"),i.setAttribute("aria-labelledby","results-summary-tab")),r){r.setAttribute("role","tabpanel");const a=s?.artifacts?.find(l=>l.id===_.selectedArtifactId);r.setAttribute("aria-labelledby",a?`artifact-tab-${a.id}`:"results-summary-tab")}Hb(s),qb(s),e&&(e.textContent=""),e&&(e.replaceChildren(),o.split(`
+`).forEach((a,l)=>{const u=document.createElement("span");u.className="code-line",u.innerHTML=rp(a),!Mb()&&_.resultsViewMode==="file"&&(u.classList.add("is-in"),u.style.setProperty("--d",`${l*10}ms`),u.addEventListener("animationend",()=>u.classList.remove("is-in"),{once:!0})),e.appendChild(u)})),n&&(n.innerHTML=Wb(s)),i&&i.classList.toggle("hidden",_.resultsViewMode!=="summary"),r&&r.classList.toggle("hidden",_.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Ar(t,e){const n=document.getElementById("main-stage-container"),i=w0(n),r=document.body.classList.contains("results-fullscreen");ki(),document.getElementById("pipeline-progress")?.classList.remove("visible"),jt(!0),_.selectedArtifactId||(_.selectedArtifactId=yi(_.artifactBundle).id),_.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),bo(),hn(),zb(),r||op(i,n,["#bundle-strip",".summary-heading",".review-summary-text",".summary-spec",".review-score-column",".results-action-bar"].map(o=>document.querySelector(o)),{results:!0})}function zb(){const t=document.getElementById("btn-feedback-up"),e=document.getElementById("btn-feedback-down"),n=document.getElementById("results-feedback-status");t&&(t.className="feedback-btn",t.setAttribute("aria-pressed","false"),t.disabled=!1,t.removeAttribute("aria-disabled")),e&&(e.className="feedback-btn",e.setAttribute("aria-pressed","false"),e.disabled=!1,e.removeAttribute("aria-disabled")),n&&(n.textContent=""),yl=!1}function Pc(t){_.selectedArtifactId=t,_.resultsViewMode="file",bo()}function cg(){_.resultsViewMode="summary",bo()}function Vb(){const t=document.getElementById("btn-copy-results"),e=document.getElementById("results-copy-status"),n=lc(),i=(r,s)=>{e&&(e.textContent=r,e.classList.toggle("ok",!!s),e.classList.toggle("fail",!s))};if(!navigator.clipboard?.writeText){i("Copying isn't supported in this browser.",!1);return}navigator.clipboard.writeText(n).then(()=>{if(i("Copied to clipboard",!0),t){t.classList.add("copied");const r=t.querySelector("span");if(r){const s=r.textContent;r.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),r.textContent=s},2e3)}}}).catch(()=>{i("Clipboard permission was denied. Select the code to copy it manually.",!1)})}let yl=!1;async function Gb(t){const e=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down"),i=document.getElementById("results-feedback-status");if(!e||!n||yl)return;const r=l=>{i&&(i.textContent="",i.offsetWidth,i.textContent=l)},s=l=>{yl=l,[e,n].forEach(u=>{u.disabled=l,u.setAttribute("aria-disabled",String(l))})},o=t==="up"?"thumbsUp":"thumbsDown";s(!0),r("Submitting review feedback…");const a={type:o,code:_.step2Result,input:_.step1Result};try{const l=await yc(a.type,a.code,a.input);if(!l||l.success!==!0){s(!1),r("Review feedback could not be sent. Tap again to retry.");return}e.classList.toggle("active-up",t==="up"),n.classList.toggle("active-down",t==="down"),e.setAttribute("aria-pressed",String(t==="up")),n.setAttribute("aria-pressed",String(t==="down")),s(!1),r("Review feedback saved.")}catch{s(!1),r("Review feedback could not be sent. Tap again to retry.")}}function Kb(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function ug(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}function Yb(){const t=document.getElementById("shell-stage"),e=document.getElementById("main-stage-container"),n=e?.querySelector(".pipeline-prompt-recap"),i=window.matchMedia("(max-width: 920px)"),r=()=>t?.style.setProperty("--fit",Math.min(1,document.documentElement.clientWidth/1920)),s=()=>{if(!n)return;const o=n.contains(document.activeElement)?document.activeElement:null;i.matches?e.appendChild(n):e.prepend(n),o?.focus({preventScroll:!0})};r(),s(),window.addEventListener("resize",r),i.addEventListener("change",s)}function jt(t){const e=document.getElementById("generation-stage");if(!e)return;const n=document.getElementById("hero");n&&(n.hidden=t,n.inert=t),t?(e.hidden=!1,e.inert=!1,e.classList.add("is-active")):(In(),document.body.classList.remove("results-fullscreen","results-with-sidebar"),e.classList.remove("is-active"),e.inert=!0,e.hidden=!0)}function dg(){const t=H.isVerified&&!!H.email,e=fe.tier||"free",n=t&&Ii(),i=!t||Dt(),s=n?"Checking…":i?Ol[e]||"Free":"—",o=document.getElementById("topbar-plan");o&&(o.textContent=s);const a=document.getElementById("topbar-avatar");a&&(a.textContent=(H.email||"?")[0].toUpperCase()),wc();const l=document.getElementById("plans-free-current");l&&l.classList.toggle("hidden",e!=="free"||!i);const u=document.getElementById("plans-checkout-btn-professional");if(u){const d=e==="professional"&&i;u.disabled=d,u.textContent=d?"Current plan":"Subscribe"}const c=document.getElementById("plans-checkout-btn-power");if(c){const d=e==="power"&&i;c.disabled=d,c.textContent=d?"Current plan":"Subscribe"}}function Jb(){dg();const t=document.getElementById("credits-modal");t&&Ke(t)}function Zb(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("credits-modal");e&&Ye(e)}function fg(t,e=!0,n=!0){if(t=["home","account","plans"].includes(t)?t:"home",document.body.dataset.shellView=t,t!=="home"&&(In(),Jl?.cancelTyping?.(),_.isRunning&&(ig(),qp(),_.isRunning=!1,zs(!1),kr(),ki())),document.querySelectorAll(".view[data-view]").forEach(r=>{r.dataset.view===t?(r.hidden=!1,r.removeAttribute("inert"),requestAnimationFrame(()=>{r.classList.add("is-active"),n&&r.focus({preventScroll:!0})})):(r.classList.remove("is-active"),r.setAttribute("inert","true"),setTimeout(()=>{r.classList.contains("is-active")||(r.hidden=!0)},260))}),t!=="home")jt(!1);else{const r=document.getElementById("main-stage-container");r&&r.classList.contains("visible")&&jt(!0)}if(e){const r=t==="home"?"":`#${t}`;window.location.hash!==r&&window.history.pushState({view:t},"",r||"#")}}let Dd=!1;function Fc(){const t=window.location.hash.replace(/^#/,"");fg(t||"home",!1,Dd),Dd=!0}window.addEventListener("popstate",t=>{Fc()});window.addEventListener("hashchange",()=>{Fc()});window.copyResultsCode=Vb;window.selectArtifact=Pc;window.selectResultsSummary=cg;window.submitResultsFeedback=Gb;window.showErrorInputPanel=Kb;window.hideErrorInputPanel=ug;window.setGenerationStageVisible=jt;window.switchView=fg;window.selectPipelineStage=Tb;window.editPipelinePrompt=vl;window.retryPipelineRun=ag;window.openCreditsModal=Jb;window.closeCreditsModal=Zb;
diff --git a/dist/index.html b/dist/index.html
index 0893e8f..783aef1 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -206,7 +206,7 @@
font-family: "Delight", "DM Sans", sans-serif;
width: 100%;
box-sizing: border-box;
- padding: 18px 20px !important;
+ padding: 18px 20px;
transition: all 0.2s ease;
}
textarea:focus {
@@ -916,6 +916,7 @@
.results-action-bar {
display: flex;
flex-wrap: wrap;
+ align-items: flex-start;
justify-content: flex-end;
gap: 10px;
padding: 14px 24px;
@@ -928,14 +929,33 @@
justify-content: center;
min-height: 42px;
}
- .results-action-bar .btn-error-regen {
+ /* Each action owns its caption: the button and its scope line share one
+ column, so the split sentence sits under the control it describes. */
+ .results-action {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ flex: 1 1 180px;
+ min-width: 0;
+ }
+ .results-action-wide {
flex-grow: 1.45;
}
+ .results-action .btn-header-action {
+ flex: none;
+ width: 100%;
+ }
+ /* The two action icons carry Tailwind's w-3.5/h-3.5 classes; pin the same
+ 14px here too, so the buttons keep one height when those utilities are
+ not available (the browser suite runs without the CDN's utilities). */
+ .results-action-bar .btn-header-action svg {
+ width: 14px;
+ height: 14px;
+ }
.results-action-scope {
- flex: 0 0 auto;
- display: block;
- margin: 10px 24px 4px;
+ margin: 0;
font-size: 11px;
+ line-height: 1.4;
color: var(--muted, #64748b);
text-align: center;
}
@@ -1587,6 +1607,7 @@
body.results-fullscreen .results-action-bar {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
+ align-items: start;
margin-top: auto;
padding: 10px 36px;
background: #fff;
@@ -1695,94 +1716,118 @@
pointer-events: none;
}
- /* ── Pipeline Progress Bar ───────────────────────── */
+ /* ── Pipeline holding window ──────────────────────────
+ Canonical source: custom-code-connect-hero.html .walkthrough-layout /
+ .pipeline-view. Desktop is the mock's two-column panel: the submitted
+ prompt is the left sidebar, and the stage view is a left-aligned block
+ centred in the main column. The authored mark is the only glyph.
+ Grid auto-placement paints the regions in DOM order; app.js keeps that
+ order equal to the displayed order at every breakpoint so sequential
+ focus never travels backwards across the panel. */
.pipeline-progress {
display: none;
- flex-direction: column;
- align-items: center;
- justify-content: center;
+ grid-template-columns: 310px minmax(0, 1fr);
height: 100%;
- padding: 48px;
- text-align: center;
+ overflow-y: auto;
+ text-align: left;
}
.pipeline-progress.visible {
- display: flex;
+ display: grid;
}
- .pipeline-progress-icon {
- width: 80px;
- height: 80px;
- border-radius: 50%;
- background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);
+ .pipeline-prompt-recap {
display: flex;
+ flex-direction: column;
+ min-width: 0;
+ padding: 30px;
+ border-right: 1px solid var(--border);
+ }
+ .pipeline-prompt-kicker {
+ font: 12px/1.5 var(--font-mono);
+ letter-spacing: 0.09em;
+ text-transform: uppercase;
+ color: var(--muted);
+ }
+ .pipeline-prompt-text {
+ margin: 12px 0 32px;
+ font-size: 17px;
+ line-height: 1.5;
+ color: var(--fg);
+ overflow-wrap: anywhere;
+ max-height: 146px;
+ overflow: auto;
+ }
+ .pipeline-prompt-edit {
+ display: inline-flex;
align-items: center;
justify-content: center;
- margin-bottom: 28px;
- position: relative;
+ margin-top: auto;
+ align-self: flex-start;
+ min-height: 44px;
+ padding: 10px 14px;
+ border: 1px solid var(--border);
+ border-radius: 9px;
+ background: transparent;
+ color: var(--fg);
+ font: 500 13px var(--font-display);
+ cursor: pointer;
+ transition: background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}
- .pipeline-progress-icon::after {
- content: '';
- position: absolute;
- inset: -4px;
- border-radius: 50%;
- border: 2px solid transparent;
- border-top-color: var(--accent);
- animation: spin 1.2s linear infinite;
+ .pipeline-prompt-edit:hover {
+ background: color-mix(in oklch, var(--fg) 6%, var(--surface));
+ border-color: var(--fg);
}
- .pipeline-progress-icon svg {
- width: 32px;
- height: 32px;
- color: #4f46e5;
+ .pipeline-view {
+ display: grid;
+ align-content: center;
+ min-width: 0;
+ padding: 48px 64px;
}
-
- .pipeline-progress h3 {
- font-family: "Delight", "Outfit", sans-serif;
- font-size: 18px;
- font-weight: 600;
+ .pipeline-view h3 {
+ font: 500 34px/1.2 var(--font-display);
+ letter-spacing: -0.025em;
color: var(--fg);
- margin-bottom: 6px;
- letter-spacing: -0.02em;
+ margin-bottom: 12px;
}
- .pipeline-progress .progress-substep {
- font-size: 13px;
- color: var(--muted-2);
- margin-bottom: 28px;
+ .pipeline-description {
+ color: var(--muted);
+ font-size: 16px;
+ line-height: 1.6;
+ max-width: 44ch;
+ }
+ /* The mock's arena sits 24px above the title and draws the mark in
+ --muted; the module stylesheet owns the mark's geometry and motion. */
+ .pipeline-progress .pipeline-glyph.logo-loop {
+ color: var(--muted);
+ margin-bottom: 24px;
}
+ /* One 4px pill, fg on the track token - the mock's bar, stepwise. */
.progress-track {
- width: 100%;
- max-width: 400px;
- height: 6px;
- background: #e2e8f0;
- border-radius: 3px;
+ height: 4px;
+ border-radius: 999px;
+ margin: 34px 0 16px;
+ background: var(--track);
overflow: hidden;
- position: relative;
}
.progress-fill {
height: 100%;
- background: linear-gradient(90deg, #6366f1, #3b82f6, #6366f1);
- background-size: 200% 100%;
- border-radius: 3px;
- transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
- animation: progress-shimmer 2s ease-in-out infinite;
width: 0%;
- }
- @keyframes progress-shimmer {
- 0% { background-position: 200% 0; }
- 100% { background-position: -200% 0; }
+ background: var(--fg);
+ border-radius: 999px;
+ transition: width var(--t-progress) var(--ease);
}
+ /* Meta: the run's real elapsed time and the mock's step count, in mono. */
.progress-meta {
display: flex;
align-items: center;
justify-content: space-between;
- width: 100%;
- max-width: 400px;
- margin-top: 10px;
+ font: 12px var(--font-mono);
+ color: var(--muted);
}
.progress-meta span {
- font-size: 11px;
- color: var(--muted-2);
- font-weight: 500;
+ font: inherit;
+ color: inherit;
}
.progress-steps-dots {
display: flex;
@@ -1793,8 +1838,8 @@
width: 8px;
height: 8px;
border-radius: 50%;
- background: #e2e8f0;
- transition: all 0.3s ease;
+ background: var(--border);
+ transition: background var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease);
}
.progress-dot.active {
background: #6366f1;
@@ -1805,61 +1850,15 @@
}
/* ── Pipeline: real stage, note and failure states (STU-377) ── */
- .pipeline-progress {
- overflow-y: auto;
- gap: 0;
- }
- .pipeline-prompt-recap {
- width: 100%;
- max-width: 400px;
- margin-bottom: 24px;
- text-align: left;
- padding: 14px 16px;
- border: 1px solid var(--border);
- border-radius: var(--radius-md, 12px);
- background: var(--surface);
- }
- .pipeline-prompt-kicker {
- font-family: var(--font-mono);
- font-size: 11px;
- letter-spacing: var(--ls-mono);
- text-transform: uppercase;
- color: var(--muted);
- margin-bottom: 6px;
- }
- .pipeline-prompt-text {
- font-size: 14px;
- color: var(--fg);
- overflow-wrap: anywhere;
- }
- .pipeline-prompt-edit {
- margin-top: 8px;
- padding: 0;
- min-height: 44px;
- background: none;
- border: none;
- color: var(--accent);
- font: inherit;
- font-size: 13px;
- cursor: pointer;
- text-decoration: underline;
- text-underline-offset: 3px;
- }
- /* A finished or failed run has nothing left to spin for. */
- .pipeline-progress[data-run-state="failed"] .pipeline-progress-icon::after,
- .pipeline-progress[data-run-state="settled"] .pipeline-progress-icon::after {
- animation: none;
- border-top-color: var(--border);
- }
.pipeline-progress[data-run-state="failed"] .progress-fill {
- animation: none;
background: var(--bad);
}
.progress-steps-dots {
flex-wrap: wrap;
- justify-content: center;
+ justify-content: flex-start;
gap: 4px;
+ margin-top: 20px;
}
.progress-stage {
display: inline-flex;
@@ -1872,18 +1871,18 @@
border: none;
font: inherit;
font-size: 11px;
- color: var(--muted-2);
+ color: var(--muted);
cursor: pointer;
}
.progress-stage:disabled {
cursor: default;
}
.progress-stage[data-state="active"] .progress-dot {
- background: #6366f1;
- box-shadow: 0 0 8px rgba(99, 102, 241, 0.4);
+ background: var(--fg);
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--fg) 14%, transparent);
}
.progress-stage[data-state="done"] .progress-dot {
- background: #22c55e;
+ background: var(--fg);
}
.progress-stage[data-state="failed"] .progress-dot {
background: var(--bad);
@@ -1976,14 +1975,35 @@
background: transparent;
}
+ /* Stacked: the workflow leads, the prompt follows beneath it (mock).
+ The DOM is reordered to match at this width, so the displayed order
+ and the focus order stay the same here too. */
+ @media (max-width: 920px) {
+ .pipeline-progress {
+ grid-template-columns: minmax(0, 1fr);
+ }
+ .pipeline-view {
+ align-content: start;
+ min-height: 300px;
+ padding: 34px 24px;
+ }
+ .pipeline-view h3 { font-size: 25px; }
+ .pipeline-progress .pipeline-glyph.logo-loop { margin-bottom: 16px; }
+ .pipeline-prompt-recap {
+ padding: 22px;
+ border-right: 0;
+ border-top: 1px solid var(--border);
+ }
+ .pipeline-prompt-text {
+ margin: 8px 0 20px;
+ font-size: 15px;
+ max-height: 100px;
+ }
+ }
@media (max-width: 640px) {
- .pipeline-progress { padding: 24px 16px 32px; justify-content: flex-start; }
- .pipeline-progress-icon { width: 56px; height: 56px; margin-bottom: 18px; }
.pipeline-failure-actions button { flex: 1 1 100%; }
}
@media (prefers-reduced-motion: reduce) {
- .pipeline-progress-icon::after,
- .progress-fill { animation: none; }
.composer-morph { display: none; }
}
@@ -2645,51 +2665,26 @@
align-items: center;
justify-content: space-between;
gap: 16px;
- background: var(--bg);
- border-bottom: 1px solid var(--border);
z-index: 100;
}
@media (min-width: 921px) {
- .topbar { padding: 0 40px; border-bottom: 0; }
+ .topbar { padding: 0 40px; }
}
.brand {
display: flex;
align-items: center;
- gap: 12px;
color: var(--fg);
text-decoration: none;
- font-size: 16px;
- font-weight: 600;
- letter-spacing: -0.01em;
flex-shrink: 0;
}
.brand-mark {
- width: 32px;
- height: 32px;
+ display: block;
+ width: 44px;
+ height: 44px;
color: var(--fg);
flex-shrink: 0;
}
- .brand .wordmark { display: flex; flex-direction: column; line-height: 1.15; }
- .brand .wordmark span { color: var(--muted); font-weight: 500; font-size: 11px; letter-spacing: 0.01em; }
- .topnav {
- display: flex;
- align-items: center;
- gap: 6px;
- }
- .nav-link {
- padding: 8px 14px;
- border-radius: var(--radius-nav);
- color: var(--muted);
- font-size: 14px;
- font-weight: 500;
- text-decoration: none;
- transition: color var(--t-fast) var(--ease), background-color var(--t-fast) var(--ease);
- }
- .nav-link:hover, .nav-link[aria-current="page"] {
- color: var(--fg);
- background: var(--fill-hover);
- }
.topbar-account {
display: flex;
align-items: center;
@@ -2737,22 +2732,8 @@
font-weight: 600;
cursor: pointer;
}
- /* Below the inline-nav breakpoint the nav wraps to its own topbar row
- with touch-sized targets, so every surface stays reachable instead
- of being hidden. */
- @media (max-width: 679px) {
- :root { --topbar-h: 100px; }
- .topbar { flex-wrap: wrap; align-content: center; row-gap: 2px; padding: 10px 12px; }
- .topnav { order: 3; width: 100%; gap: 4px; }
- .topnav .nav-link {
- flex: 1 1 0;
- min-height: 44px;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- }
-
+ /* The header holds only the logo and the account controls, so it keeps
+ its single 64px row at every width. */
.viewport {
position: relative;
top: var(--topbar-h);
@@ -2827,6 +2808,10 @@
margin: 0;
border: 0;
outline: 0;
+ /* The page's generic textarea focus ring (a blue offset box) must not
+ paint inside the composer; the composer's own orange border and
+ :focus-within ring carry the focus state. */
+ box-shadow: none;
background: transparent;
resize: none;
font: inherit;
@@ -3313,27 +3298,19 @@
.send.is-busy .send-spin { animation: none; opacity: 0.6; }
}
-
-
+
+
+
-
+
FlutterFlow custom code.
(minus the code)
Custom widgets and actions, expertly crafted, fully reviewed and ready to deploy to your project in one click.
@@ -3397,7 +3375,7 @@
FlutterFlow custom code.
Signature pad
-
+