diff --git a/app.js b/app.js index 461eff0..02af908 100644 --- a/app.js +++ b/app.js @@ -13,6 +13,7 @@ import { } from "./src/pipelineContracts.js"; import { createModelArmorError } from "./src/modelArmorResponse.js"; import { + getBlockingWidgetErrors, getCustomActionReturnTypeError, getCustomClassFileNameError, getDeclaredDartTypes, @@ -2282,6 +2283,13 @@ function validateDartFile( ); } + // A widget FlutterFlow cannot construct from an unset Define Parameters + // panel is reported as blocking in the review, so it has to block here too - + // otherwise the deploy lands code the project cannot compile. + if (codeType === CodeType.WIDGET) { + errors.push(...getBlockingWidgetErrors(content)); + } + if (codeType === CodeType.ACTION) { const returnTypeError = getCustomActionReturnTypeError(content, { functionName: artifactName, diff --git a/dist/assets/index-BZ-fNYow.js b/dist/assets/index-BZ-fNYow.js new file mode 100644 index 0000000..25dabdd --- /dev/null +++ b/dist/assets/index-BZ-fNYow.js @@ -0,0 +1,306 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function s(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function r(i){if(i.ep)return;i.ep=!0;const n=s(i);fetch(i.href,n)}})();var g=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:g,xe=we==null?void 0:we.navigator,F=we==null?void 0:we.document,re=we==null?void 0:we.location,wo=we==null?void 0:we.fetch,yn=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,ga=we==null?void 0:we.AbortController,Pd=we==null?void 0:we.CompressionStream,Pe=xe==null?void 0:xe.userAgent;function Xl(){return!(!g||g.navigator.onLine===!1)}var Ss=typeof globalThis<"u"?globalThis:g;Ss&&typeof self>"u"&&(Ss.self=Ss),Ss&&typeof File>"u"&&(Ss.File=function(){});var T=g??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function va(t,e,s,r,i,n,o){try{var a=t[n](o),l=a.value}catch(u){return void s(u)}a.done?e(l):Promise.resolve(l).then(r,i)}function X(t){return function(){var e=this,s=arguments;return new Promise(function(r,i){var n=t.apply(e,s);function o(l){va(n,r,i,o,a,"next",l)}function a(l){va(n,r,i,o,a,"throw",l)}o(void 0)})}}function b(){return b=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},b.apply(null,arguments)}function Ql(t,e){if(t==null)return{};var s={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;s[r]=t[r]}return s}var ma=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function _a(t){return typeof t=="string"||t}function ya(t){return typeof t=="string"?t:void 0}var xs,Ad=["$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"],ut=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}({}),wa=function(t){return t.GZipJS="gzip-js",t.Base64="base64",t}({}),Rd=["$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"],Td=["token"],ec="NativeGzipValidationError",wn=t=>t.length>=2&&t[0]===31&&t[1]===139,ba=(t,e)=>t===wa.GZipJS||e===wa.GZipJS||e==="gzip",Ea=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",ur=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=ec,e},$d=function(){var t=X(function*(e,s){18>e.size&&ur("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());wn(r)&&r[2]===8||ur("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(xs)return xs;xs=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;xs[c]=d>>>0}return xs})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(s)&&ur("invalid-crc");var n=s.length>>>0;i.getUint32(4,!0)!==n&&ur("invalid-size")});return function(e,s){return t.apply(this,arguments)}}();function bn(){return bn=X(function*(t,e,s){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),n=i.writable.getWriter(),o=n.write(r).then(()=>n.close()).catch(function(){var u=X(function*(c){try{yield n.abort(c)}catch{}throw c});return function(c){return u.apply(this,arguments)}}()),a=new Response(i.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield $d(l,r),l}catch(u){if(s!=null&&s.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}}),bn.apply(this,arguments)}var Md=["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"],Sa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return Md.concat(e).some(r=>{var i=r.toLowerCase();return s.indexOf(i)!==-1})};function L(t,e){return t.indexOf(e)!==-1}var wi=function(t){return t.trim()},En=function(t){return t.replace(/^\$/,"")};function tc(t){var e,s=[];return(e=JSON.stringify(t,function(r,i){if(typeof i=="bigint")return i.toString();if(typeof i!="function"&&typeof i!="symbol"){if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i&&typeof i=="object"){for(;s.length>0&&s[s.length-1]!==this;)s.pop();if(s.includes(i))return"[Circular]";s.push(i)}return i}}))!==null&&e!==void 0?e:"null"}var sc=Object.prototype,rc=sc.hasOwnProperty,bi=sc.toString,O=Array.isArray||function(t){return bi.call(t)==="[object Array]"},Ee=t=>typeof t=="function",te=t=>t===Object(t)&&!O(t),vt=t=>{if(te(t)){for(var e in t)if(rc.call(t,e))return!1;return!0}return!1},I=t=>t===void 0,z=t=>bi.call(t)=="[object String]",Sn=t=>z(t)&&t.trim().length===0,Re=t=>t===null,B=t=>I(t)||Re(t),de=t=>bi.call(t)=="[object Number]"&&t==t,lt=t=>de(t)&&t>0,Ke=t=>bi.call(t)==="[object Boolean]",Nd=t=>t instanceof FormData,Ld=t=>L(Rd,t),Od=t=>L(Td,t);function ic(t){return t===null||typeof t!="object"}function Or(t,e){return{}.toString.call(t)==="[object "+e+"]"}function bo(t){return typeof Event<"u"&&nc(t,Event)}function nc(t,e){try{return t instanceof e}catch{return!1}}var Dd=[!0,"true",1,"1","yes"],Ui=t=>L(Dd,t),Bd=[!1,"false",0,"0","no"];function rt(t,e,s,r,i){return e>s&&(r.warn("min cannot be greater than max."),e=s),de(t)?t>s?(r.warn(" cannot be greater than max: "+s+". Using max value instead."),s):e>t?(r.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(r.warn(" must be a number. using max or fallback. max: "+s+", fallback: "+i),rt(i||s,e,s,r))}class jd{constructor(e){this.tt={},this.et=e.et,this.it=rt(e.bucketSize,0,100,e.rt),this.nt=rt(e.refillRate,0,this.it,e.rt),this.st=rt(e.refillInterval,0,864e5,e.rt)}ot(e,s){var r=Math.floor((s-e.lastAccess)/this.st);r>0&&(e.tokens=Math.min(e.tokens+r*this.nt,this.it),e.lastAccess=e.lastAccess+r*this.st)}consumeRateLimit(e){var s,r=Date.now(),i=String(e),n=this.tt[i];return n?this.ot(n,r):this.tt[i]=n={tokens:this.it,lastAccess:r},n.tokens===0||(n.tokens--,n.tokens===0&&((s=this.et)==null||s.call(this,e)),n.tokens===0)}stop(){this.tt={}}}var Le="Mobile",Dr="iOS",mt="Android",us="Tablet",oc=mt+" "+us,ac="iPad",lc="Apple",cc=lc+" Watch",js="Safari",ds="BlackBerry",uc="Samsung",dc=uc+"Browser",hc=uc+" Internet",Ht="Chrome",Ud=Ht+" OS",pc=Ht+" "+Dr,Eo="Internet Explorer",fc=Eo+" "+Le,So="Opera",Hd=So+" Mini",xo="Edge",gc="Microsoft "+xo,os="Firefox",vc=os+" "+Dr,Gs="Nintendo",Ks="PlayStation",as="Xbox",mc=mt+" "+Le,_c=Le+" "+js,$s="Windows",xn=$s+" Phone",xa="Nokia",kn="Ouya",yc="Generic",zd=yc+" "+Le.toLowerCase(),wc=yc+" "+us.toLowerCase(),In="Konqueror",bc="Oculus Browser",Br="Vivaldi",Ec="Yandex",jr="Whale",Cn="DuckDuckGo",Sc="Pale Moon",Ur="Waterfox",Us="Brave",xc="Google Search App",le="(\\d+(\\.\\d+)?)",Hi=new RegExp("Version/"+le),Wd=new RegExp(as,"i"),qd=new RegExp(Ks+" \\w+","i"),Vd=new RegExp(Gs+" \\w+","i"),ko=new RegExp(ds+"|PlayBook|BB10","i"),Gd={"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"},kc=function(t,e,s,r){e=e||"";var i=function(n){return n!=null&&n.brave?Us:null}(s);return i||(r!=null&&r.detectGoogleSearchApp&&L(t,"GSA/")?xc:L(t," OPR/")&&L(t,"Mini")?Hd:L(t," OPR/")?So:ko.test(t)?ds:L(t,"IE"+Le)||L(t,"WPDesktop")?fc:L(t,"OculusBrowser")?bc:L(t,dc)?hc:L(t,xo)||L(t,"Edg/")?gc:L(t,Br+"/")?Br:L(t,"YaBrowser/")?Ec:L(t,jr+"/")?jr:L(t,Cn+"/")||L(t,"Ddg/")?Cn:L(t,"FBIOS")?"Facebook "+Le:L(t,"UCWEB")||L(t,"UCBrowser")?"UC Browser":L(t,"CriOS")?pc:L(t,"CrMo")||L(t,Ht)?Ht:L(t,mt)&&L(t,js)?mc:L(t,"FxiOS")?vc:L(t.toLowerCase(),In.toLowerCase())?In:L(t,Us+"/")?Us:((n,o)=>o&&L(o,lc)||function(a){return L(a,js)&&!L(a,Ht)&&!L(a,mt)}(n))(t,e)?L(t,Le)?_c:js:L(t,"PaleMoon/")?Sc:L(t,Ur+"/")?Ur:L(t,os)?os:L(t,"MSIE")||L(t,"Trident/")?Eo:L(t,"Gecko")?os:"")},Kd={[fc]:[new RegExp("rv:"+le)],[gc]:[new RegExp(xo+"?\\/"+le)],[Ht]:[new RegExp("("+Ht+"|CrMo)\\/"+le)],[pc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[js]:[Hi],[_c]:[Hi],[So]:[new RegExp("(Opera|OPR)\\/"+le)],[os]:[new RegExp(os+"\\/"+le)],[vc]:[new RegExp("FxiOS\\/"+le)],[In]:[new RegExp("Konqueror[:/]?"+le,"i")],[ds]:[new RegExp(ds+" "+le),Hi],[mc]:[new RegExp("android\\s"+le,"i")],[hc]:[new RegExp(dc+"\\/"+le)],[bc]:[new RegExp("OculusBrowser\\/"+le)],[Br]:[new RegExp(Br+"\\/"+le)],[Ec]:[new RegExp("YaBrowser\\/"+le)],[jr]:[new RegExp(jr+"\\/"+le)],[Us]:[new RegExp(Us+"\\/"+le)],[Cn]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Sc]:[new RegExp("PaleMoon\\/"+le)],[Ur]:[new RegExp(Ur+"\\/"+le)],[xc]:[new RegExp("GSA\\/"+le)],[Eo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Jd=function(t,e,s,r){var i=kc(t,e,s,r),n=Kd[i];if(I(n))return null;for(var o=0;n.length>o;o++){var a=t.match(n[o]);if(a)return parseFloat(a[a.length-2])}return null},ka=[[new RegExp(as+"; "+as+" (.*?)[);]","i"),t=>[as,t&&t[1]||""]],[new RegExp(Gs,"i"),[Gs,""]],[new RegExp(Ks,"i"),[Ks,""]],[ko,[ds,""]],[new RegExp($s,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[xn,""];if(new RegExp(Le).test(e)&&!/IEMobile\b/.test(e))return[$s+" "+Le,""];var s=/Windows NT ([0-9.]+)/i.exec(e);if(s&&s[1]){var r=Gd[s[1]]||"";return/arm/i.test(e)&&(r="RT"),[$s,r]}return[$s,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Dr,[t[3],t[4],t[5]||"0"].join(".")]:[Dr,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=I(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+mt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+mt+")","i"),t=>t&&t[2]?[mt,[t[2],t[3],t[4]||"0"].join(".")]:[mt,""]],[/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/,[Ud,""]],[/Linux|debian/i,["Linux",""]]],Ia=function(t){return Vd.test(t)?Gs:qd.test(t)?Ks:Wd.test(t)?as:new RegExp(kn,"i").test(t)?kn:new RegExp("("+xn+"|WPDesktop)","i").test(t)?xn:/iPad/.test(t)?ac:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?cc:ko.test(t)?ds:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(xa,"i").test(t)?xa:/(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(Le).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)?mt:oc:new RegExp("(pda|"+Le+")","i").test(t)?zd:new RegExp(us,"i").test(t)&&!new RegExp(us+" pc","i").test(t)?wc:""},Yd=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ca(t,e){return typeof(s=t)=="string"&&Yd.test(s)?t:e();var s}function It(t){return t&&t.split("#")[0]}function Io(t,e){var s=setTimeout(t,e);return s!=null&&s.unref&&(s==null||s.unref()),s}function Fa(t,e,s){return Ic.apply(this,arguments)}function Ic(){return(Ic=X(function*(t,e,s){var r;try{return yield Promise.race([t,new Promise((i,n)=>{r=Io(()=>{try{s==null||s(),i()}catch(o){n(o)}},e)})])}finally{clearTimeout(r)}})).apply(this,arguments)}var Zd=t=>t instanceof Error,Cc={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}},Xd=Cc.info;function Fc(t){if(Ke(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(O(t))return{arrayValue:{values:t.map(e=>Fc(e))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Hr(t){var e=[];for(var s in t){var r=t[s];Re(r)||I(r)||e.push({key:s,value:Fc(r)})}return e}function Qd(t,e){var s=Cc[t.level||"info"]||Xd,r=s.text,i=s.number,n=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),B(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),B(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=b({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:i,severityText:r,body:{stringValue:t.body},attributes:Hr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),I(t.trace_flags)||(l.flags=t.trace_flags),l}function Pc(t,e,s){return b({},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":s})}function Ac(t,e,s,r){return{resourceLogs:[{resource:{attributes:Hr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let eh=class{constructor(t,e,s,r,i,n,o){var a;n===void 0&&(n=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=s,this.ut=r,this.ht=i,this.dt=n,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 s={record:Qd(e,this.ut())};this.ht(()=>this.At(s))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=O(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Log was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return r}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 X(function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally(()=>{t.ct=null})),t.ct})()}Ft(){var t=this;return X(function*(){var e;t.Et();var s=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(s.length!==0)for(var r=s.length,i=0;s.length>0&&r>i;){var n,o;t.ft=0;var a=Math.min(s.length,t.Ct),l=s.slice(0,a),u=Ac(l.map(d=>d.record),t.Lt(),(n=t.vt)!==null&&n!==void 0?n: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),s=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],i+=l.length,c.kind==="fatal"))throw c.error}})()}Dt(t){var e=this;return X(function*(){var s,r=Math.max(0,t-e.ft),i=(s=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&s!==void 0?s:[];e._instance.setPersistedProperty(ut.LogsQueue,i.slice(r)),yield e.dt()})()}Lt(){return Pc(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var s=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>s.length||(s.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),s.push(t),this._instance.setPersistedProperty(ut.LogsQueue,s),this.kt>s.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Io(()=>{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(ut.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return X(function*(){e.Et();var s=e.flush().catch(()=>{});t!==void 0?yield Fa(s,t):yield s})()}flushWithTimeout(t){var e=this;return X(function*(){var s=e.flush();yield Fa(s,t,()=>{s.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 zi=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Pa(t){return String(t)+"000000"}function Aa(t,e,s,r){var i="";return r&&(i=Object.keys(r).sort().map(n=>JSON.stringify(n)+":"+JSON.stringify(r[n])).join(",")),t+"\0"+e+"\0"+(s??"")+"\0"+i}let th=class{constructor(t,e,s){this._instance=t,this.Ne=e,this.rt=s,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,s){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}gauge(t,e,s){this.Vt({name:t,type:"gauge",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}histogram(t,e,s){this.Vt({name:t,type:"histogram",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}flush(){var t=this,e=this.ct,s=function(){var i=X(function*(){e&&(yield e.catch(()=>{})),yield t.Zt()});return function(){return i.apply(this,arguments)}}(),r=s().finally(()=>{this.ct===r&&(this.ct=null)});return this.ct=r,r}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 s,r;try{s=e.attributes?b({},e.attributes):void 0,r=Aa(e.type,e.name,e.unit,s)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(r);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,i)}var n=this.Ut.get(e.name);n===void 0?this.Ut.set(e.name,e.type):n===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+n+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(i,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 s;switch(t.type){case"count":t.total=((s=t.total)!==null&&s!==void 0?s: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(zi.length+1).fill(0)});var r=t.hist;r.count+=1,r.sum+=e,r.min=Math.min(r.min,e),r.max=Math.max(r.max,e),r.bucketCounts[function(i,n){for(var o=0;n.length>o;o++)if(n[o]>=i)return o;return n.length}(e,zi)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=O(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Metric was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$t(){this.Nt||(this.Nt=Io(()=>{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 X(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 s=t.Wt,r=yield t._instance.Jt(t.Gt(e));if(s===t.Wt)switch(r.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:",r.error)}}})()}Gt(t){return e=this.Xt(t),s=function(n,o,a){return b({},n.resourceAttributes,{"service.name":n.serviceName||"unknown_service"},n.environment&&{"deployment.environment":n.environment},n.serviceVersion&&{"service.version":n.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})}(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Hr(s)},scopeMetrics:[{scope:{name:r,version:i},metrics:e}]}]};var e,s,r,i}Xt(t){var e=Pa(Date.now()),s=new Map;for(var r of t.values()){var i,n=Aa(r.type,r.name,r.unit,void 0),o=s.get(n);o||(o=b({name:r.name},r.unit&&{unit:r.unit}),r.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:r.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},s.set(n,o));var a=Hr((i=r.attributes)!==null&&i!==void 0?i:{}),l=Pa(r.windowStartMs);if(r.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=r.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(r.type==="gauge"){var d,h={attributes:a,timeUnixNano:e,asDouble:(d=r.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(h)}else r.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:r.hist.count,sum:r.hist.sum,min:r.hist.min,max:r.hist.max,bucketCounts:r.hist.bucketCounts,explicitBounds:zi})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var i=r[0],n=r[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,n.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=n.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(n.hist)if(o.hist){o.hist.count+=n.hist.count,o.hist.sum+=n.hist.sum,o.hist.min=Math.min(o.hist.min,n.hist.min),o.hist.max=Math.max(o.hist.max,n.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=n.hist.bucketCounts[a]}else o.hist=n.hist}else this.Qt()&&this.Bt.set(i,n)}}};var dr,Ra,Wi;function sh(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return Wi&&s.length===Ra||(Ra=s.length,Wi=s.reduce((r,i)=>{dr||(dr={});var n=dr[i];if(n)r[n[0]]=n[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l==null?void 0:l.filename,c=e[i];if(u&&c){r[u]=c,dr[i]=[u,c];break}}return r},{})),Wi}}class rh{constructor(e,s,r){r===void 0&&(r=[]),this.coercers=e,this.stackParser=s,this.modifiers=r}buildFromUnknown(e,s){s===void 0&&(s={});var r=s&&s.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(r,s,0).apply(e),n=this.buildParsingContext(s),o=this.parseStacktrace(i,n);return{$exception_list:this.convertToExceptionList(o,r),$exception_level:"error"}}modifyFrames(e){var s=this;return X(function*(){for(var r of e)r.stacktrace&&r.stacktrace.frames&&O(r.stacktrace.frames)&&(r.stacktrace.frames=yield s.applyModifiers(r.stacktrace.frames));return e})()}coerceFallback(e){var s;return{type:"Error",value:"Unknown error",stack:(s=e.syntheticException)==null?void 0:s.stack,synthetic:!0}}parseStacktrace(e,s){var r,i;return e.cause!=null&&(r=this.parseStacktrace(e.cause,s)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?s.skipFirstLines:0),s.chunkIdMap)),b({},e,{cause:r,stack:i})}applyChunkIds(e,s){return e.map(r=>(r.filename&&s&&(r.chunk_id=s[r.filename]),r))}applyCoercers(e,s){for(var r of this.coercers)if(r.match(e))return r.coerce(e,s);return this.coerceFallback(s)}applyModifiers(e){var s=this;return X(function*(){var r=e;for(var i of s.modifiers)r=yield i(r);return r})()}convertToExceptionList(e,s){var r,i,n,o={type:e.type,value:e.value,mechanism:{type:(r=s.type)!==null&&r!==void 0?r:"generic",handled:(i=s.handled)===null||i===void 0||i,synthetic:(n=e.synthetic)!==null&&n!==void 0&&n}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,b({},s,{handled:!0}))),a}buildParsingContext(e){var s;return{chunkIdMap:sh(this.stackParser),skipFirstLines:(s=e.skipFirstLines)!==null&&s!==void 0?s:1}}buildCoercingContext(e,s,r){r===void 0&&(r=0);var i=(n,o)=>{if(4>=o){var a=this.buildCoercingContext(e,s,o);return this.applyCoercers(n,a)}};return b({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:n=>i(n,r),next:n=>i(n,r+1)})}}var hs="?";function Fn(t,e,s,r,i){var n={platform:t,filename:e,function:s===""?hs:s,in_app:!0};return I(r)||(n.lineno=r),I(i)||(n.colno=i),n}var Rc=(t,e)=>{var s=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return s||r?[t.indexOf("@")!==-1?t.split("@")[0]:hs,s?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},ih=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,nh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,oh=/\((\S*)(?::(\d+))(?::(\d+))\)/,ah=(t,e)=>{var s=ih.exec(t);if(s)return Fn(e,s[1],hs,+s[2],+s[3]);var r=nh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var i=oh.exec(r[2]);i&&(r[2]=i[1],r[3]=i[2],r[4]=i[3])}var n=Rc(r[1]||hs,r[2]);return Fn(e,n[1],n[0],r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},lh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,ch=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,uh=(t,e)=>{var s=lh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=ch.exec(s[3]);r&&(s[1]=s[1]||"eval",s[3]=r[1],s[4]=r[2],s[5]="")}var i=s[3],n=s[1]||hs,o=Rc(n,i);return Fn(e,i=o[1],n=o[0],s[4]?+s[4]:void 0,s[5]?+s[5]:void 0)}},Ta=/\(error: (.*)\)/;class dh{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,s){var r=z(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:r?e.stack:void 0,cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var s=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?s+": "+e.message:s}isDOMException(e){return Or(e,"DOMException")}isDOMError(e){return Or(e,"DOMError")}}class hh{match(e){return function(s){switch({}.toString.call(s)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return nc(s,Error)}}(e)}coerce(e,s){return{type:this.getType(e),value:this.getMessage(e,s),stack:this.getStack(e),cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,s){var r=e.message;return String(r.error&&typeof r.error.message=="string"?r.error.message:r)}getStack(e){return e.stacktrace||e.stack||void 0}}class ph{constructor(){}match(e){return!!Or(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,s){var r;if(e.error!=null)return s.apply(e.error);var i=s.apply(e.message);return b({},i,{stack:(r=this.pe(e))!==null&&r!==void 0?r:i.stack,synthetic:!0})}fe(e){return z(e.message)&&e.message.length>0}pe(e){var s=e;if(z(s.filename)&&s.filename.length>0){var r,i,n=(r=s.lineno)!==null&&r!==void 0?r:0,o=(i=s.colno)!==null&&i!==void 0?i:0;return`Error + at `+s.filename+":"+n+":"+o}}}var fh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class gh{match(e){return typeof e=="string"}coerce(e,s){var r,i=this.getInfos(e),n=i[0],o=i[1];return{type:n??"Error",value:o??e,stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var s="Error",r=e,i=e.match(fh);return i&&(s=i[1],r=i[2]),[s,r]}}var vh=["fatal","error","warning","log","info","debug"];function Tc(t,e){e===void 0&&(e=40);var s=Object.keys(t);if(s.sort(),!s.length)return"[object has no keys]";for(var r=s.length;r>0;r--){var i=s.slice(0,r).join(", ");if(e>=i.length)return r===s.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class mh{match(e){return typeof e=="object"&&e!==null}coerce(e,s){var r,i,n=this.getErrorPropertyFromObject(e);return n?s.apply(n):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(i=s.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return bo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var s="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(s+=" with message: '"+e.message+"'"),s}if("message"in e&&typeof e.message=="string")return e.message;var r=this.getObjectClassName(e);return(r&&r!=="Object"?"'"+r+"'":"Object")+" captured as exception with keys: "+Tc(e)}isSeverityLevel(e){return z(e)&&!Sn(e)&&vh.indexOf(e)>=0}getStack(e){try{return z(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:z(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var s in e)if({}.hasOwnProperty.call(e,s)){var r=e[s];if(Zd(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class _h{match(e){return bo(e)}coerce(e,s){var r,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+Tc(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class yh{match(e){return ic(e)}coerce(e,s){var r;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class wh{match(e){return Or(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!bo(e))return!1;try{var s=e.detail;return s!=null&&typeof s=="object"&&"reason"in s}catch{return!1}}coerce(e,s){var r,i=this.getUnhandledRejectionReason(e);return ic(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(i)}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 zr="$message",Wr="$timestamp",bh=new Set([zr,Wr]),qi={enabled:!0,max_bytes:32768};function qr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:qi.enabled,max_bytes:Sh(t.max_bytes,qi.max_bytes)}:b({},qi)}class Eh{constructor(e){this.Ke=[],this.Je=0,this.Ne=qr(e)}setConfig(e){this.Ne=qr(e),this.Xe()}add(e){var s=function(i){var n;try{n=tc(i)}catch{return}try{var o=JSON.parse(n);if(!te(o))return;var a=o,l=a[zr],u=a[Wr];return!z(l)||l.trim().length===0||!z(u)&&!de(u)?void 0:{step:a,json:n}}catch{return}}(e);if(s){var r=function(i){if(typeof TextEncoder<"u")return new TextEncoder().encode(i).length;for(var n=encodeURIComponent(i),o=0,a=0;n.length>a;a++)n[a]==="%"?(o+=1,a+=2):o+=1;return o}(s.json);r>this.Ne.max_bytes||(this.Ke.push({step:s.step,bytes:r}),this.Je+=r,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 Sh(t,e){if(!de(t)||t===1/0||t===-1/0)return e;var s=Math.floor(t);return 0>s?e:s}var $c=function(t,e){var s=(e===void 0?{}:e).debugEnabled,r={k(i){if(g&&(Y.DEBUG||g.POSTHOG_DEBUG||s)&&!I(g.console)&&g.console){for(var n=("__rrweb_original__"in g.console[i])?g.console[i].__rrweb_original__:g.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];n(t,...a)}},debug(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("debug",...n)},info(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("log",...n)},warn(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("warn",...n)},error(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("error",...n)},critical(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];console.error(t,...n)},uninitializedWarning(i){r.error("You must initialize PostHog before calling "+i)},createLogger:(i,n)=>$c(t+" "+i,n)};return r},C=$c("[PostHog.js]"),se=C.createLogger,xh=se("[ExternalScriptsLoader]"),Vi=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return xh.warn(e+" was requested but loading of external scripts is disabled."),s("Loading of external scripts is disabled");var r=F==null?void 0:F.querySelectorAll("script");if(r){for(var i,n=function(){if(r[o].src===e){var l=r[o];return l.__posthog_loading_callback_fired?{v:s()}:(l.addEventListener("load",u=>{l.__posthog_loading_callback_fired=!0,s(void 0,u)}),l.onerror=u=>s(u),{v:void 0})}},o=0;r.length>o;o++)if(i=n())return i.v}var a=()=>{if(!F)return s("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,s(void 0,d)},l.onerror=d=>s(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return s("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==null||F.addEventListener("DOMContentLoaded",a)};T.__PosthogExtensions__=T.__PosthogExtensions__||{},T.__PosthogExtensions__.loadExternalDependency=(t,e,s)=>{if(e!=="remote-config"){var r;if(t.config.strict_script_versioning)r=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var i="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var n=3e5;i=i+"&t="+Math.floor(Date.now()/n)*n}r=t.requestRouter.endpointFor("assets",i)}Vi(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");Vi(t,o,s)}},T.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);Vi(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var Mc="$people_distinct_id",Js="$device_id",Gi="$device_model",Ms="__alias",Ns="__timers",Pn="$autocapture_disabled_server_side",An="$heatmaps_enabled_server_side",Rn="$exception_capture_enabled_server_side",Tn="$error_tracking_suppression_rules",$n="$error_tracking_capture_extension_exceptions",Mn="$web_vitals_enabled_server_side",Co="$dead_clicks_enabled_server_side",Fo="$product_tours_enabled_server_side",Nn="$web_vitals_allowed_metrics",Ut="$session_recording_remote_config",Nc="$replay_sample_rate",Lc="$replay_override_sampling",Oc="$replay_override_linked_flag",Dc="$replay_override_url_trigger",Bc="$replay_override_event_trigger",is="$sesid",Po="$session_is_sampled",Lt="$enabled_feature_flags",Ls="$active_feature_flags",Sr="$early_access_features",Ln="$feature_flag_details",Os="$feature_flag_payloads",xr="$feature_flag_request_id",Vr="$minimal_flag_called_events",Qe="$override_feature_flags",Ot="$override_feature_flag_payloads",ct="$stored_person_properties",Dt="$stored_group_properties",On="$surveys",Gr="$surveys_loaded_at",Dn="$surveys_activated",kr="$surveys_activated_session",Ir="$surveys_activated_timestamps",Ds="ph_product_tours",jt="$flag_call_reported",Bs="$flag_call_reported_session_id",Cr="$feature_flag_errors",Hs="$feature_flag_evaluated_at",Ue="$user_state",Bn="$client_session_props",jn="$capture_rate_limit",Un="$initial_campaign_params",Hn="$initial_referrer_info",Kr="$initial_person_info",Jr="$epp",hr="$posthog_cookieless",jc="$cookieless_mode",Uc="$sdk_debug_extensions_init_method",Hc="$sdk_debug_extensions_init_time_ms",zc="$sdk_debug_recording_script_not_loaded",Ao="PostHog loadExternalDependency extension not found.",Bt="on_reject",ht="always",Zt="anonymous",At="identified",zn="identified_only",Yr="visibilitychange",Zr="beforeunload",ts="$pageview",Ki="$pageleave",Ji="$identify",$a="$groupidentify";function pr(t,e){O(t)&&t.forEach(e)}function Z(t,e){if(!B(t))if(O(t))t.forEach(e);else if(Nd(t))t.forEach((r,i)=>e(r,i));else for(var s in t)rc.call(t,s)&&e(t[s],s)}var ee=function(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),r=1;e>r;r++)s[r-1]=arguments[r];for(var i of s)for(var n in i)i[n]!==void 0&&(t[n]=i[n]);return t};function Fr(t){for(var e=Object.keys(t),s=e.length,r=new Array(s);s--;)r[s]=[e[s],t[e[s]]];return r}var Ma=function(t){try{return t()}catch{return}},kh=function(t){return function(){try{for(var e=arguments.length,s=new Array(e),r=0;e>r;r++)s[r]=arguments[r];return t.apply(this,s)}catch(i){C.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),C.critical(i)}}},Ro=function(t){var e={};return Z(t,function(s,r){(z(s)&&s.length>0||de(s))&&(e[r]=s)}),e},Ih=["herokuapp.com","vercel.app","netlify.app"];function Ch(t){var e=t==null?void 0:t.hostname;if(!z(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of Ih)if(s===r)return!1;return!0}function ie(t,e,s,r){var i=r??{},n=i.capture,o=i.passive;t==null||t.addEventListener(e,s,{capture:n!==void 0&&n,passive:o===void 0||o})}function Wn(t){return t.name==="ph_toolbar_internal"}var Wc=t=>{if(F){try{for(var e=t+"=",s=F.cookie.split(";").filter(n=>n.length),r=0;s.length>r;r++){for(var i=s[r];i.charAt(0)==" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return decodeURIComponent(i.substring(e.length,i.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 de(t)&&isFinite(t)&&Math.floor(t)===t});class Xr{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,s,r,i){if(!Number.isInteger(e)||!Number.isInteger(s)||!Number.isInteger(r)||!Number.isInteger(i)||0>e||0>s||0>r||0>i||e>0xffffffffffff||s>4095||r>1073741823||i>4294967295)throw new RangeError("invalid field value");var n=new Uint8Array(16);return n[0]=e/Math.pow(2,40),n[1]=e/Math.pow(2,32),n[2]=e/Math.pow(2,24),n[3]=e/Math.pow(2,16),n[4]=e/256,n[5]=e,n[6]=112|s>>>8,n[7]=s,n[8]=128|r>>>24,n[9]=r>>>16,n[10]=r>>>8,n[11]=r,n[12]=i>>>24,n[13]=i>>>16,n[14]=i>>>8,n[15]=i,new Xr(n)}toString(){for(var e="",s=0;this.bytes.length>s;s++)e=e+(this.bytes[s]>>>4).toString(16)+(15&this.bytes[s]).toString(16),s!==3&&s!==5&&s!==7&&s!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new Xr(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var s=0;16>s;s++){var r=this.bytes[s]-e.bytes[s];if(r!==0)return Math.sign(r)}return 0}}class Fh{generate(){var e=this.generateOrAbort();if(!I(e))return e;this.S=0;var s=this.generateOrAbort();if(I(s))throw new Error("Could not generate UUID after timestamp reset");return s}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 Xr.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 Ph}}var Na,qc=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};g&&!I(g.crypto)&&crypto.getRandomValues&&(qc=t=>crypto.getRandomValues(t));class Ph{nextUint32(){return this.R.length>this.O||(qc(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>Ah().toString(),Ah=()=>(Na||(Na=new Fh)).generate(),ks="",Rh=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!F,j(t){C.error("cookieStore error: "+t)},P:Wc,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,s,r,i){if(!F)return!1;try{var n="",o="",a=function(c,d){if(d){var h=function(p,v){if(v===void 0&&(v=F),ks)return ks;if(!v||["localhost","127.0.0.1"].includes(p))return"";for(var _=p.split("."),m=Math.min(_.length,8),w="dmn_chk_"+dt();!ks&&m--;){var S=_.slice(m).join("."),k=w+"=1;domain=."+S+";path=/";v.cookie=k+";max-age=3",v.cookie.includes(w)&&(v.cookie=k+";max-age=0",ks=S)}return ks}(c);if(!h){var f=(p=>{var v=p.match(Rh);return v?v[0]:""})(c);f!==h&&C.info("Warning: cookie subdomain discovery mismatch",f,h),h=f}return h?"; domain=."+h:""}return""}(F.location.hostname,r);if(s){var l=new Date;l.setTime(l.getTime()+864e5*s),n="; expires="+l.toUTCString()}i&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+n+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&C.warn("cookieStore warning: large cookie, len="+u.length),F.cookie=u,!0}catch{return!1}},q(t,e){if(F!=null&&F.cookie)try{pt.F(t,"",-1,e)}catch{return}}},Yi=null,Q={N(){if(!Re(Yi))return Yi;var t=!0;if(I(g))t=!1;else try{var e="__mplssupport__";Q.F(e,"xyz"),Q.P(e)!=='"xyz"'&&(t=!1),Q.q(e)}catch{t=!1}return t||C.error("localStorage unsupported; falling back to cookie store"),Yi=t,t},j(t){C.error("localStorage error: "+t)},P(t){try{return g==null?void 0:g.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return g==null||g.localStorage.setItem(t,JSON.stringify(e)),!0}catch(s){Q.j(s)}return!1},q(t){try{g==null||g.localStorage.removeItem(t)}catch(e){Q.j(e)}}},Th=[Js,"distinct_id",is,Po,Jr,Kr,Ue],fr={},$h={N:()=>!0,j(t){C.error("memoryStorage error: "+t)},P:t=>fr[t]||null,H:t=>fr[t]||null,F:(t,e)=>(fr[t]=e,!0),q(t){delete fr[t]}},Rt=null,ce={N(){if(!Re(Rt))return Rt;if(Rt=!0,I(g))Rt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Rt=!1),ce.q(t)}catch{Rt=!1}return Rt},j(t){C.error("sessionStorage error: ",t)},P(t){try{return g==null?void 0:g.sessionStorage.getItem(t)}catch(e){ce.j(e)}return null},H(t){try{return JSON.parse(ce.P(t))||null}catch{}return null},F(t,e){try{return g==null||g.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(s){ce.j(s)}return!1},q(t){try{g==null||g.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class Mh{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===ht||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Bt}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,s=e.token,r=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(r?r+s:"__ph_opt_in_out_"+s)}get ei(){var e=this.ii.P(this.ri);return Ui(e)?1:L(Bd,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,s=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==s){this.ni=s;var r=e==="localStorage"?pt:Q;r.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Ui(r.P(this.ri))),r.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[xe==null?void 0:xe.doNotTrack,xe==null?void 0:xe.msDoNotTrack,T.doNotTrack].some(e=>Ui(e))}}function Vc(t,e){var s,r=t==null||(s=t.config)==null?void 0:s.get_current_url;if(!Ee(r))return e;try{var i=r(e);return z(i)&&i?i:e}catch(n){return C.error("Error in get_current_url, falling back to window.location.href",n),e}}var Gc="__POSTHOG_TOOLBAR__",Nh=1,Lh=3,Oh=11;function La(t){return t instanceof Element&&(t.id===Gc||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ct(t){return!!t&&t.nodeType===Nh}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Kc(t){return!!t&&t.nodeType===Lh}function Jc(t){return!!t&&t.nodeType===Oh&&Ct(t.host)}var Yc=1e3;function To(t){return t?wi(t).split(/\s+/):[]}function Oa(t,e){var s=function(r){var i,n=g==null||(i=g.location)==null?void 0:i.href;return I(n)?void 0:Vc(r,n)}(e);return!!(s&&t&&t.some(r=>s.match(r)))}function Qr(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 To(e)}function Zc(t){return B(t)?null:wi(t).split(/(\s+)/).filter(e=>zs(e)).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function Ys(t){var e="";return Vn(t)&&!tu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,function(s){var r;Kc(s)&&s.textContent&&(e+=(r=Zc(s.textContent))!==null&&r!==void 0?r:"")}),wi(e)}function Zi(t){var e;return I(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var $o=["a","button","form","input","select","textarea","label"];function qn(t,e){if(I(e))return!0;var s,r=function(n){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}}(n,o)))return{v:!0}};for(var i of t)if(s=r(i))return s.v;return!1}function Xc(t){var e=t.parentNode;return!(!e||!Ct(e))&&e}var Dh=[".ph-no-autocapture","[data-ph-no-autocapture]"],Qc=["next","previous","prev",">","<"],Bh=[...Qc,"+","-","−","–"],Da=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,Ba=[".ph-no-rageclick",".ph-no-capture"],jh=["","text","search","email","password","url","tel","number"];function ja(t,e){if(!g||Mo(t))return!1;var s,r,i,n,o;if(Ke(e)?(s=!!e&&Ba,r=void 0,i=!1):(s=(n=e==null?void 0:e.css_selector_ignorelist)!==null&&n!==void 0?n:Ba,r=e==null?void 0:e.content_ignorelist,i=(o=e==null?void 0:e.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||i&&function(l){return!(!l||!Ct(l))&&(!!Me(l,"textarea")||(Me(l,"input")?L(jh,(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=eu(t,!1).targetElementList;return!function(l,u){if(l===!1||I(l))return!1;var c;if(l===!0)c=Qc;else{if(!O(l))return!1;if(l.length>10)return C.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 h=d.safeText,f=d.ariaLabel;return c.some(p=>Da(h,p)||Da(f,p))})}(r,a.map(l=>{var u;return{safeText:Ys(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}}))&&!qn(a,s)}var Mo=t=>!t||Me(t,"html")||!Ct(t),eu=(t,e)=>{if(!g||Mo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],i=t;i.parentNode&&!Me(i,"body");)if(Jc(i.parentNode))r.push(i.parentNode.host),i=i.parentNode.host;else{var n=Xc(i);if(!n)break;if(e||$o.indexOf(n.tagName.toLowerCase())>-1)s=!0;else try{var o=g.getComputedStyle(n);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(n),i=n}return{parentIsUsefulElement:s,targetElementList:r}};function Vn(t){for(var e=new Set,s=0,r=t;r.parentNode&&!Me(r,"body");r=r.parentNode){if(s++>=Yc||e.has(r))return!1;e.add(r);var i=Qr(r);if(L(i,"ph-sensitive")||L(i,"ph-no-capture"))return!1}if(L(Qr(t),"ph-include"))return!0;var n=t.type||"";if(z(n))switch(n.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!z(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 tu(t){return!!(Me(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Me(t,"select")||Me(t,"textarea")||t.getAttribute("contenteditable")==="true")}var Ua=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}))$"),Ha=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,Uh=[16,15,14,13],Hh=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),za=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),Wa=/[0-9A-Za-z_]/;function zh(t){for(var e=0,s=!1,r=t.length-1;r>=0;r--){var i=t.charCodeAt(r)-48;s&&(i*=2)>9&&(i-=9),e+=i,s=!s}return e%10==0}function zs(t,e){if(e===void 0&&(e=!0),B(t))return!1;if(z(t)){t=wi(t);var s=e?Ua.test((t||"").replace(/[- ]/g,"")):function(i){var n;for(Ha.lastIndex=0;n=Ha.exec(i);){var o=n[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Uh){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(Ua.test(d)&&zh(d))return!0}}}return!1}(t);if(s)return!1;var r=e?Hh.test(t):function(i){var n;for(za.lastIndex=0;n=za.exec(i);){var o=n[1],a=n[3];if(!(o&&a&&Wa.test(o)&&Wa.test(a)))return!0}return!1}(t);if(r)return!1}return!0}function qa(t){var e=Ys(t);return zs(e=(e+" "+su(t)).trim())?e:""}function su(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,function(s){var r;if(s&&((r=s.tagName)==null?void 0:r.toLowerCase())==="span")try{var i=Ys(s);e=(e+" "+i).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+su(s)).trim())}catch(n){C.error("[AutoCapture]",n)}}),e}function Va(t){return t.replace(/"|\\"/g,'\\"')}function Wh(t){var e=t.attr__class;if(e)return O(e)?e:To(e)}var gr=se("[Dead Clicks]"),qh=()=>!0,Vh=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(Co)),r=t.instance.config.capture_dead_clicks;return Ke(r)?r:!!te(r)||s};class Ga{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,s,r){this.instance=e,this.isEnabled=s,this.onCapture=r,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var s=e.config;"captureDeadClicks"in s&&(this.instance.persistence&&this.instance.persistence.register({[Co]:s.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai(()=>{this.oi()}):this.stop()}ai(e){var s,r;(s=T.__PosthogExtensions__)!=null&&s.initDeadClicksAutocapture?e():(r=T.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"dead-clicks-autocapture",i=>{i?gr.error("failed to load script",i):e()})}oi(){var e;if(F){if(!this.si&&(e=T.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var s=te(this.instance.config.capture_dead_clicks)?b({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=T.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(F),gr.info("starting...")}}else gr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,gr.info("stopping..."))}}var Xi=se("[SegmentIntegration]"),ru="posthog-js";function iu(t,e){var s=e===void 0?{}:e,r=s.organization,i=s.projectId,n=s.prefix,o=s.severityAllowList,a=o===void 0?["error"]:o,l=s.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,f,p,v;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var _=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=_,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var m,w=((d=c.exception)==null?void 0:d.values)||[],S=w.map(E=>b({},E,{stacktrace:E.stacktrace?b({},E.stacktrace,{type:"raw",frames:(E.stacktrace.frames||[]).map(P=>b({},P,{platform:"web:javascript"}))}):void 0})),k={$exception_message:((h=w[0])==null?void 0:h.value)||c.message,$exception_type:(f=w[0])==null?void 0:f.type,$exception_level:c.level,$exception_list:S,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((p=w[0])==null?void 0:p.value)||c.message,$sentry_exception_type:(v=w[0])==null?void 0:v.type,$sentry_tags:c.tags};return r&&i&&(k.$sentry_url=(n||"https://sentry.io/organizations/")+r+"/issues/?project="+i+"&query="+c.event_id),u&&((m=t.exceptions)==null||m.sendExceptionEvent(k)),c}}class Gh{constructor(e,s,r,i,n,o){this.name=ru,this.setupOnce=function(a){a(iu(e,{organization:s,projectId:r,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o==null||o}))}}}class Ka{constructor(e){this.li=(s,r,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(C.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:s,changeReason:i}),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,s){var r,i=this.vi(e,s);return this.ui={pathname:(r=g==null?void 0:g.location.pathname)!==null&&r!==void 0?r:"",pageViewId:s,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var s;return this.vi(e,(s=this.ui)==null?void 0:s.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,s){var r=this.ui;if(!r)return{$pageview_id:s};var i={$pageview_id:s,$prev_pageview_id:r.pageViewId},n=this._instance.scrollManager.getContext();if(n&&!this._instance.config.disable_scroll_properties){var o=n.maxScrollHeight,a=n.lastScrollY,l=n.maxScrollY,u=n.maxContentHeight,c=n.lastContentY,d=n.maxContentY;if(!(I(o)||I(a)||I(l)||I(u)||I(c)||I(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 h=o>1?rt(a/o,0,1,C):1,f=o>1?rt(l/o,0,1,C):1,p=u>1?rt(c/u,0,1,C):1,v=u>1?rt(d/u,0,1,C):1;i=ee(i,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:h,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:f,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:p,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:v})}}return r.pathname&&(i.$prev_pageview_pathname=r.pathname),r.timestamp&&(i.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),i}}var Qi=["flags","surveys"],Kh={[Mc]:{exposure:"hidden"},[Ms]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Ns]:{exposure:"hidden"},[Pn]:{exposure:"event"},[An]:{exposure:"hidden"},[Rn]:{exposure:"event"},[Tn]:{exposure:"hidden"},[$n]:{exposure:"event"},[Mn]:{exposure:"event"},[Co]:{exposure:"event"},[Fo]:{exposure:"hidden"},[Nn]:{exposure:"event"},[Ut]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[is]:{exposure:"hidden"},[Po]:{exposure:"event"},[Nc]:{exposure:"event",shouldSkipFromEventProperties:t=>Re(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"},[Lt]:{exposure:"hidden",storageGroup:"flags"},[Ls]:{exposure:"hidden",storageGroup:"flags"},[Sr]:{exposure:"hidden"},[Ln]:{exposure:"hidden",storageGroup:"flags"},[Os]:{exposure:"hidden",storageGroup:"flags"},[xr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[Vr]:{exposure:"hidden",storageGroup:"flags"},[Qe]:{exposure:"hidden"},[Ot]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Dt]:{exposure:"hidden"},[On]:{exposure:"hidden",storageGroup:"surveys"},[Gr]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Dn]:{exposure:"event"},[kr]:{exposure:"hidden"},[Ir]:{exposure:"hidden"},[Ds]:{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"},[jt]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},[Cr]:{exposure:"hidden"},[Hs]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[Ue]:{exposure:"hidden"},[Bn]:{exposure:"hidden"},[jn]:{exposure:"hidden"},[Un]:{exposure:"hidden"},[Hn]:{exposure:"hidden"},[Kr]:{exposure:"hidden"},[Jr]:{exposure:"hidden"},[Lc]:{exposure:"event"},[Oc]:{exposure:"event"},[Dc]:{exposure:"event"},[Bc]:{exposure:"event"},[Uc]:{exposure:"event"},[Hc]:{exposure:"event"},[zc]:{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"}},Jh=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Tt=t=>{var e=Kh[t];if(e)return e;for(var s of Jh){var r=s[1];if(t.indexOf(s[0])===0)return r}},ns=(t,e)=>{try{return JSON.stringify(t,(s,r)=>typeof r=="bigint"?r.toString():r,e)}catch{return tc(t)}},ei=t=>{var e=F==null?void 0:F.createElement("a");return I(e)?null:(e.href=t,e)},ps=function(t,e){for(var s,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;r.length>i;i++){var n=r[i].split("=");if(n[0]===e){s=n;break}}if(!O(s)||2>s.length)return"";var o=s[1];try{o=decodeURIComponent(o)}catch{C.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},Zs=function(t,e,s){if(!t||!e||!e.length)return t;for(var r=t.split("#"),i=r[1],n=(r[0]||"").split("?"),o=n[1],a=n[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");O(d)&&(e.includes(d[0])?u.push(d[0]+"="+s):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},ti=function(t,e){var s=t.match(new RegExp(e+"=([^&]*)"));return s?s[1]:null},nu=(t,e)=>t>=e&&Xl(),ou=(t,e,s,r)=>{if(t===0){if(Xl()){var i=e+1;return i===s&&r(),i}return e}return 0},vr="https?://(.*)",fs=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Yh=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...fs],Xs="",Zh=["li_fat_id"];function au(t,e,s){if(!F)return{};var r,i=e?[...fs,...s||[]]:[],n=lu(Zs(F.URL,i,Xs),t),o=(r={},Z(Zh,function(a){var l=Wc(a);r[a]=l||null}),r);return ee(o,n)}function lu(t,e){var s=Yh.concat(e||[]),r={};return Z(s,function(i){var n=ps(t,i);r[i]=n||null}),r}function cu(t){var e=function(n){return n?n.search(vr+"google.([^/?]*)")===0?"google":n.search(vr+"bing.com")===0?"bing":n.search(vr+"yahoo.com")===0?"yahoo":n.search(vr+"duckduckgo.com")===0?"duckduckgo":null:null}(t),s=e!="yahoo"?"q":"p",r={};if(!Re(e)){r.$search_engine=e;var i=F?ps(F.referrer,s):"";i.length&&(r.ph_keyword=i)}return r}function Ja(){return navigator.language||navigator.userLanguage}var si="$direct";function uu(){return(F==null?void 0:F.referrer)||si}function du(t,e,s){s===void 0&&(s=!1);var r=t?[...fs,...e||[]]:[],i=s?It(re==null?void 0:re.href):re==null?void 0:re.href,n=i==null?void 0:i.substring(0,1e3);return{r:uu().substring(0,1e3),u:n?Zs(n,r,Xs):void 0}}function hu(t,e){var s;e===void 0&&(e=!1);var r=t.r,i=t.u,n=e?It(i):i,o={$referrer:r,$referring_domain:r==null?void 0:r==si?si:(s=ei(r))==null?void 0:s.host};if(n){o.$current_url=n;var a=ei(n);o.$host=a==null?void 0:a.host,o.$pathname=a==null?void 0:a.pathname;var l=lu(n);ee(o,l)}if(r){var u=cu(r);ee(o,u)}return o}function pu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Xh(){try{return new Date().getTimezoneOffset()}catch{return}}var Qh={flags:Hs,surveys:Gr},ep=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],Xt="main";class en{constructor(e,s,r){if(r===void 0&&(r=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=r,this.props={},this.mi=void 0,this.yi=(n=>{var o="";return n.token&&(o=n.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),n.persistence_name?"ph_"+n.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&C.info("Persistence loaded",e.persistence,b({},this.props)),this.update_config(e,e,s),this.save(),g){var i=()=>this.flush();ie(g,"beforeunload",i,{capture:!1}),ie(g,"pagehide",i,{capture:!1})}}ki(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return de(s)&&s>0?s:0}isDisabled(){return!!this.xi}bi(e){ep.indexOf(e.persistence.toLowerCase())===-1&&(C.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var s,r=function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...Th,...o];return b({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var f={};for(var p in c){var v=c[p];Re(v)||v===""||(f[p]=v)}d=ee(h,f)}else d=ee(c,h);return Q.F(u,d),d}catch{}return null},F(u,c,d,h,f,p){var v=Q.F(u,c,void 0,void 0,p);try{var _={};l.forEach(m=>{c[m]&&(_[m]=c[m])}),Object.keys(_).length&&pt.F(u,_,d,h,f,p)}catch(m){Q.j(m)}return v},q(u,c){try{g==null||g.localStorage.removeItem(u),pt.q(u,c)}catch(d){Q.j(d)}}})}(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),i=!1,n=e.persistence.toLowerCase();return n==="localstorage"&&Q.N()?(s=Q,i=!0):n==="localstorage+cookie"&&r.N()?(s=r,i=!0):n==="sessionstorage"&&ce.N()?s=ce:n==="memory"?s=$h:n==="cookie"?s=pt:r.N()?(s=r,i=!0):s=pt,this.fi=i,s}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,(s,r)=>{var i=Tt(r);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(s))return;e[r]=s}}),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of Qi){var s=Q.H(this.Si(e));if(s&&!vt(s)){var r=this.Mi(e);r.persisted=!0,this.Ti(e)||(r.fingerprint=this.Ei(s,e)),this.Ii(e,s)||ee(this.props,s)}}}Ti(e){return Object.keys(this.props).some(s=>{var r;return((r=Tt(s))==null?void 0:r.storageGroup)===e})}Ii(e,s){var r=Qh[e];if(!r)return!1;var i=s[r],n=this.props[r];return de(i)&&de(n)&&n>i}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=Tt(e))==null?void 0:s.storageGroup:void 0,i=r?Q.H(this.Si(r)):this.ii.H(this.yi);if(i&&e in i)this.Pi(e,i[e]);else{if(r){var n=this.ii.H(this.yi);if(n&&e in n)return void this.Pi(e,n[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?I(this.Ai)&&(this.Ai=setTimeout(()=>{this.Ai=void 0,this.Fi()},e)):this.Fi()}}flush(){I(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,Xt))}Li(){var e=this.Di(),s=e.main,r=e.groups;for(var i of(this.Oi(this.ii,this.yi,s,Xt),Qi)){var n,o=r[i];(!vt(o)||(n=this.ci[i])!=null&&n.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},s={flags:{},surveys:{}};return Z(this.props,(r,i)=>{var n,o=(n=Tt(i))==null?void 0:n.storageGroup;o?s[o][i]=r:e[i]=r}),{main:e,groups:s}}Ei(e,s){if(s===Xt)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,(i,n)=>{var o;r[n]=(o=Tt(n))!=null&&o.volatile?"__volatile__":i}),JSON.stringify(r)}Oi(e,s,r,i){var n=this.Mi(i);if(i===Xt||n.dirty||I(n.fingerprint)){var o;try{if((o=this.Ei(r,i))===n.fingerprint)return void(n.dirty=!1)}catch{o=void 0}e.F(s,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(n.dirty=!1,i!==Xt&&(n.persisted=!0),I(o)||(n.fingerprint=o)):this.Ne.debug&&C.warn('failed to persist storage entry "'+s+'"; will retry on next save')}}remove(e){var s=(e===void 0?{}:e).keepGroupEntries,r=s!==void 0&&s;if(I(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!r&&this.gi)for(var i of Qi)Q.q(this.Si(i));r?delete this.ci[Xt]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,s,r){if(te(e)){I(s)&&(s="None"),this.$i=I(r)?this.ji:r;var i=!1;if(Z(e,(n,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==s||(this.Pi(o,n),i=!0)}),i)return this.save(),!0}return!1}register(e,s){if(te(e)){this.$i=I(s)?this.ji:s;var r=!1;if(Z(e,(i,n)=>{e.hasOwnProperty(n)&&(this.props[n]!==i||te(i)||O(i))&&(this.Pi(n,i),r=!0)}),r)return this.save(),!0}return!1}unregister(e){var s=typeof e=="string"?[e]:e,r=!1;for(var i of s)i in this.props&&(this.Ri(i),r=!0);r&&this.save()}update_campaign_params(){var e=F==null?void 0:F.URL;if(e!==this.mi){var s=au(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);vt(Ro(s))||this.register(s),this.mi=e}}update_search_keyword(){var e;this.register((e=F==null?void 0:F.referrer)?cu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:uu(),$referring_domain:F!=null&&F.referrer&&((e=ei(F.referrer))==null?void 0:e.host)||si},void 0)}set_initial_person_info(){this.props[Un]||this.props[Hn]||this.register_once({[Kr]:du(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={};Z([Hn,Un],i=>{var n=this.props[i];n&&Z(n,function(o,a){e["$initial_"+En(a)]=o})});var s=this.props[Kr];if(s){var r=function(i,n){n===void 0&&(n=!1);var o=hu(i,n),a={};return Z(o,function(l,u){a["$initial_"+En(u)]=l}),a}(s,this.Ne.disable_capture_url_hashes);ee(e,r)}return e}safe_merge(e){return Z(this.props,function(s,r){r in e||(e[r]=s)}),e}update_config(e,s,r){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!r),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var i=e.persistence!==s.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every((h,f)=>h===d[f])})(e.cookie_persisted_properties||[],s.cookie_persisted_properties||[]),n=i?this.bi(e):this.ii,o=this.wi(e);if(i||o!==this.pi){var a=this.props;this.clear(),this.ii=n,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,s){var r=this.props[Ns]||{};r[e]=s,this.Pi(Ns,r),this.save()}remove_event_timer(e){var s=this.props[Ns]||{},r=s[e];return I(r)||(delete s[e],this.Pi(Ns,s),this.save()),r}get_property(e){return this.props[e]}set_property(e,s){this.Pi(e,s),this.save()}Pi(e,s){var r;this.props[e]=s,(r=Tt(e))!=null&&r.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var s,r=(s=Tt(e))==null?void 0:s.storageGroup;r&&(this.Mi(r).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function mr(t){var e=!0;return{dispose(){if(e){e=!1;var s=t();s&&Ee(s.then)&&s.then(void 0,()=>{})}}}}var Se={GZipJS:"gzip-js",Base64:"base64"},Is={Activation:"events",Cancellation:"cancelEvents"},tn={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},sn={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},Gn={Popover:"popover",Inline:"inline"},tp={SHOWN:"product tour shown"},Ya={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},Za=se("[RateLimiter]");class sp{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=s=>{var r=s.text;if(r&&r.length)try{(JSON.parse(r).quota_limited||[]).forEach(i=>{Za.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4})}catch(i){return void Za.warn('could not rate limit - continuing. Error: "'+(i==null?void 0:i.message)+'"',{text:r})}},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 s,r,i;e===void 0&&(e=!1);var n=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(s=(r=this.instance.persistence)==null?void 0:r.get_property(jn))!==null&&s!==void 0?s:{tokens:n,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>n&&(l.tokens=n);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(de(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(i=this.instance.persistence)==null||i.set_property(jn,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var s=this.instance.config.property_denylist;return!O(s)||!s.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&re!=null&&re.pathname)return""+((e=re.origin)!==null&&e!==void 0?e:"")+re.pathname}Hi(e){var s,r,i=this.captureEventsBurstLimit,n=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(s=(r=this.instance).get_session_id)==null?void 0:s.call(r):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 "+n+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var s=this.serverLimits[e||"events"]||!1;return s!==!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 St.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void St.warn("Remote config is disabled. Falling back to local config.");this.Wi(e=>{if(!e)return St.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi(s=>{this.Zi(s.json,s),this.Gi()});this.Zi(e),this.Gi()})}catch(e){St.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 s=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;s!==0&&(this.Ki=setInterval(()=>{this.refresh()},s))}}Zi(e,s){!e&&s&&(s.statusCode===0?s.error||St.warn("Failed to fetch remote config from PostHog."):St.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(i){St.error("Error applying remote config",i)}if((e==null?void 0:e.hasFeatureFlags)!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var r;(r=this._instance.featureFlags)==null||r.ensureFlagsLoaded()}catch(i){St.error("Error loading feature flags",i)}}}var Ve=Uint8Array,Ae=Uint16Array,gs=Uint32Array,No=new Ve([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]),Lo=new Ve([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]),Xa=new Ve([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),gu=function(t,e){for(var s=new Ae(31),r=0;31>r;++r)s[r]=e+=1<r;++r)for(var n=s[r];s[r+1]>n;++n)i[n]=n-s[r]<<5|r;return[s,i]},vu=gu(No,2),Kn=vu[1];vu[0][28]=258,Kn[258]=28;for(var Qa=gu(Lo,0)[1],mu=new Ae(32768),ne=0;32768>ne;++ne){var Qt=(43690&ne)>>>1|(21845&ne)<<1;mu[ne]=((65280&(Qt=(61680&(Qt=(52428&Qt)>>>2|(13107&Qt)<<2))>>>4|(3855&Qt)<<4))>>>8|(255&Qt)<<8)>>>1}var Ws=function(t,e,s){for(var r=t.length,i=0,n=new Ae(e);r>i;++i)++n[t[i]-1];var o,a=new Ae(e);for(i=0;e>i;++i)a[i]=a[i-1]+n[i-1]<<1;for(o=new Ae(r),i=0;r>i;++i)o[i]=mu[a[t[i]-1]++]>>>15-t[i];return o},Wt=new Ve(288);for(ne=0;144>ne;++ne)Wt[ne]=8;for(ne=144;256>ne;++ne)Wt[ne]=9;for(ne=256;280>ne;++ne)Wt[ne]=7;for(ne=280;288>ne;++ne)Wt[ne]=8;var ri=new Ve(32);for(ne=0;32>ne;++ne)ri[ne]=5;var rp=Ws(Wt,9),ip=Ws(ri,5),_u=function(t){return(t/8>>0)+(7&t&&1)},yu=function(t,e,s){(s==null||s>t.length)&&(s=t.length);var r=new(t instanceof Ae?Ae:t instanceof gs?gs:Ve)(s-e);return r.set(t.subarray(e,s)),r},ot=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8},Cs=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8,t[r+2]|=s>>>16},rn=function(t,e){for(var s=[],r=0;t.length>r;++r)t[r]&&s.push({s:r,f:t[r]});var i=s.length,n=s.slice();if(!i)return[new Ve(0),0];if(i==1){var o=new Ve(s[0].s+1);return o[s[0].s]=1,[o,1]}s.sort(function(E,P){return E.f-P.f}),s.push({s:-1,f:25001});var a=s[0],l=s[1],u=0,c=1,d=2;for(s[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=s[s[d].f>s[u].f?u++:d++],l=s[u!=c&&s[d].f>s[u].f?u++:d++],s[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=n[0].s;for(r=1;i>r;++r)n[r].s>h&&(h=n[r].s);var f=new Ae(h+1),p=Jn(s[c-1],f,0);if(p>e){r=0;var v=0,_=p-e,m=1<<_;for(n.sort(function(E,P){return f[P.s]-f[E.s]||E.f-P.f});i>r;++r){var w=n[r].s;if(e>=f[w])break;v+=m-(1<>>=_;v>0;){var S=n[r].s;e>f[S]?v-=1<=0&&v;--r){var k=n[r].s;f[k]==e&&(--f[k],++v)}p=e}return[new Ve(f),p]},Jn=function(t,e,s){return t.s==-1?Math.max(Jn(t.l,e,s+1),Jn(t.r,e,s+1)):e[t.s]=s},el=function(t){for(var e=t.length;e&&!t[--e];);for(var s=new Ae(++e),r=0,i=t[0],n=1,o=function(l){s[r++]=l},a=1;e>=a;++a)if(t[a]==i&&a!=e)++n;else{if(!i&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(i),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(i);n=1,i=t[a]}return[s.subarray(0,r),e]},Fs=function(t,e){for(var s=0,r=0;e.length>r;++r)s+=t[r]*e[r];return s},Yn=function(t,e,s){var r=s.length,i=_u(e+2);t[i]=255&r,t[i+1]=r>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var n=0;r>n;++n)t[i+n+4]=s[n];return 8*(i+4+r)},tl=function(t,e,s,r,i,n,o,a,l,u,c){ot(e,c++,s),++i[256];for(var d=rn(i,15),h=d[0],f=d[1],p=rn(n,15),v=p[0],_=p[1],m=el(h),w=m[0],S=m[1],k=el(v),E=k[0],P=k[1],D=new Ae(19),x=0;w.length>x;++x)D[31&w[x]]++;for(x=0;E.length>x;++x)D[31&E[x]]++;for(var A=rn(D,7),R=A[0],M=A[1],$=19;$>4&&!R[Xa[$-1]];--$);var N,J,W,H,oe=u+5<<3,pe=Fs(i,Wt)+Fs(n,ri)+o,Ie=Fs(i,h)+Fs(n,v)+o+14+3*$+Fs(D,R)+(2*D[16]+3*D[17]+7*D[18]);if(pe>=oe&&Ie>=oe)return Yn(e,c,t.subarray(l,l+u));if(ot(e,c,1+(pe>Ie)),c+=2,pe>Ie){N=Ws(h,f),J=h,W=Ws(v,_),H=v;var _e=Ws(R,M);for(ot(e,c,S-257),ot(e,c+5,P-1),ot(e,c+10,$-4),c+=14,x=0;$>x;++x)ot(e,c+3*x,R[Xa[x]]);c+=3*$;for(var Ce=[w,E],Te=0;2>Te;++Te){var ae=Ce[Te];for(x=0;ae.length>x;++x)ot(e,c,_e[ve=31&ae[x]]),c+=R[ve],ve>15&&(ot(e,c,ae[x]>>>5&127),c+=ae[x]>>>12)}}else N=rp,J=Wt,W=ip,H=ri;for(x=0;a>x;++x)if(r[x]>255){var ve;Cs(e,c,N[257+(ve=r[x]>>>18&31)]),c+=J[ve+257],ve>7&&(ot(e,c,r[x]>>>23&31),c+=No[ve]);var ge=31&r[x];Cs(e,c,W[ge]),c+=H[ge],ge>3&&(Cs(e,c,r[x]>>>5&8191),c+=Lo[ge])}else Cs(e,c,N[r[x]]),c+=J[r[x]];return Cs(e,c,N[256]),c+J[256]},np=new gs([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),op=function(){for(var t=new gs(256),e=0;256>e;++e){for(var s=e,r=9;--r;)s=(1&s&&3988292384)^s>>>1;t[e]=s}return t}(),nn=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8};function ap(t,e){e===void 0&&(e={});var s=function(){var d=4294967295;return{p(h){for(var f=d,p=0;h.length>p;++p)f=op[255&f^h[p]]^f>>>8;d=f},d(){return 4294967295^d}}}(),r=t.length;s.p(t);var i,n,o,a,l,u=(a=10+((i=e).filename&&i.filename.length+1||0),l=8,function(d,h,f,p,v,_){var m=d.length,w=new Ve(p+m+5*(1+Math.floor(m/7e3))+v),S=w.subarray(p,w.length-v),k=0;if(!h||8>m)for(var E=0;m>=E;E+=65535){var P=E+65535;m>P?k=Yn(S,k,d.subarray(E,P)):(S[E]=!0,k=Yn(S,k,d.subarray(E,m)))}else{for(var D=np[h-1],x=D>>>13,A=8191&D,R=(1<E;++E){var ve=W(E),ge=32767&E,Ye=$[ve];if(M[ge]=Ye,$[ve]=ge,E>=Te){var Pt=m-E;if((Ie>7e3||Ce>24576)&&Pt>423){k=tl(d,S,0,H,oe,pe,_e,Ce,ae,E-ae,k),Ce=Ie=_e=0,ae=E;for(var ue=0;286>ue;++ue)oe[ue]=0;for(ue=0;30>ue;++ue)pe[ue]=0}var Ge=2,Et=0,bs=A,De=ge-Ye&32767;if(Pt>2&&ve==W(E-De))for(var Fe=Math.min(x,Pt)-1,ar=Math.min(32767,E),lr=Math.min(258,Pt);ar>=De&&--bs&&ge!=Ye;){if(d[E+Ge]==d[E+Ge-De]){for(var Be=0;lr>Be&&d[E+Be]==d[E+Be-De];++Be);if(Be>Ge){if(Ge=Be,Et=De,Be>Fe)break;var cr=Math.min(De,Be-2),Jt=0;for(ue=0;cr>ue;++ue){var Yt=E-De+ue+32768&32767,Es=Yt-M[Yt]+32768&32767;Es>Jt&&(Jt=Es,Ye=Yt)}}}De+=(ge=Ye)-(Ye=M[ge])+32768&32767}if(Et){H[Ce++]=268435456|Kn[Ge]<<18|Qa[Et];var pa=31&Kn[Ge],fa=31&Qa[Et];_e+=No[pa]+Lo[fa],++oe[257+pa],++pe[fa],Te=E+Ge,++Ie}else H[Ce++]=d[E],++oe[d[E]]}}k=tl(d,S,!0,H,oe,pe,_e,Ce,ae,E-ae,k)}return yu(w,0,p+_u(k)+v)}(n=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+o.mem,a,l)),c=u.length;return function(d,h){var f=h.filename;if(d[0]=31,d[1]=139,d[2]=8,d[8]=2>h.level?4:h.level==9?2:0,d[9]=3,h.mtime!=0&&nn(d,4,Math.floor(new Date(h.mtime||Date.now())/1e3)),f){d[3]=8;for(var p=0;f.length>=p;++p)d[p+10]=f.charCodeAt(p)}}(u,e),nn(u,c-8,s.d()),nn(u,c-4,r),u}var lp=!!yn||!!wo,wu="text/plain",Pr=!1,bu=(t,e)=>{var s=t.split("#"),r=s[1],i=s[0].split("?"),n=i[0],o=i[1];if(!o)return t;var a=o.split("&").filter(l=>l.split("=")[0]!==e).join("&");return n+(a?"?"+a:"")+(r?"#"+r:"")},Ei=function(t,e,s){var r;s===void 0&&(s=!0);var i=t.split("?"),n=i[0],o=i[1],a=b({},e),l=(r=o==null?void 0:o.split("&").map(c=>{var d,h=c.split("="),f=h[0],p=s&&(d=a[f])!==null&&d!==void 0?d:h[1];return delete a[f],f+"="+p}))!==null&&r!==void 0?r:[],u=function(c,d){var h,f;d===void 0&&(d="&");var p=[];return Z(c,function(v,_){I(v)||I(_)||_==="undefined"||(h=encodeURIComponent((m=>m instanceof File)(v)?v.name:v.toString()),f=encodeURIComponent(_),p[p.length]=f+"="+h)}),p.join(d)}(a);return u&&l.push(u),l.length>0?n+"?"+l.join("&"):n},on=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===Se.GZipJS){var r=ap(function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new Ve(a.length+(a.length>>>1)),d=0,h=function(_){c[d++]=_},f=0;u>f;++f){if(d+5>c.length){var p=new Ve(d+8+(u-f<<1));p.set(c),c=p}var v=a.charCodeAt(f);128>v?h(v):2048>v?(h(192|v>>>6),h(128|63&v)):v>55295&&57344>v?(h(240|(v=65536+(1047552&v)|1023&a.charCodeAt(++f))>>>18),h(128|v>>>12&63),h(128|v>>>6&63),h(128|63&v)):(h(224|v>>>12),h(128|v>>>6&63),h(128|63&v))}return yu(c,0,d)}(ns(e)),{mtime:0});return{contentType:wu,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===Se.Base64){var i=function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,(l,u)=>String.fromCharCode(parseInt(u,16))))}(ns(e)),n=(a=>"data="+encodeURIComponent(typeof a=="string"?a:ns(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=ns(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Eu=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:Ei(t.url,{compression:Se.Base64}),encodedBody:on(b({},t,{compression:Se.Base64,Ji:void 0}))}:{url:bu(t.url,"compression"),encodedBody:on(b({},t,{compression:void 0,Ji:void 0}))};try{e=on(t)}catch(i){if(ba(t.compression,ps(t.url,"compression")))return C.error("Failed to gzip request body, sending uncompressed payload",i),r();throw i}return e&&ba(t.compression,ps(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?wn(new Uint8Array(s)):ArrayBuffer.isView(s)&&wn(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)))?(Pr=!0,r()):{url:t.url,encodedBody:e}},Su=t=>{try{return Eu(t)}catch(e){return C.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},cp=function(){var t=X(function*(e){var s=ns(e.data),r=yield function(n,o,a){return bn.apply(this,arguments)}(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var i=yield r.arrayBuffer();return b({},e,{Ji:{contentType:wu,body:i,estimatedSize:i.byteLength}})});return function(e){return t.apply(this,arguments)}}(),up=/Failed to fetch|NetworkError|Load failed/i,xu=t=>(t==null?void 0:t.name)==="TypeError"&&up.test((t==null?void 0:t.message)||""),ku=t=>{var e=Su(t);if(e){var s=e.url,r=e.encodedBody,i=r??{},n=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,function(p,v){l.append(v,p)}),n&&l.append("Content-Type",n);var u=null,c=!1;if(ga){var d=new ga;u={signal:d.signal,timeout:setTimeout(()=>{var p,v;c=!0,d.abort((p=t.timeout,(v=new Error("PostHog request timed out"+(p?" after "+p+"ms":""))).name="AbortError",v))},t.timeout)}}var h=p=>{c&&(p==null?void 0:p.name)==="AbortError"||xu(p)?C.warn(p):C.error(p),t.callback==null||t.callback({statusCode:0,error:p})};try{var f;wo(s,b({method:(t==null?void 0:t.method)||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(f=u)==null?void 0:f.signal},t.fetchOptions)).then(p=>p.text().then(v=>{var _={statusCode:p.status,text:v};if(p.status===200)try{_.json=JSON.parse(v)}catch(m){C.error(m)}t.callback==null||t.callback(_)})).catch(h).finally(()=>u?clearTimeout(u.timeout):null)}catch(p){u&&clearTimeout(u.timeout),h(p)}}},Zn=t=>{try{var e,s=Eu(t),r=s.url,i=s.encodedBody,n=i??{},o=n.body,a=n.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:n.contentType});if(xe.sendBeacon(r,l))return;var u=O(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(O(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>O(t.data)?h:b({},t.data,{batch:h});return Zn(b({},t,{data:d(u.slice(0,c))})),void Zn(b({},t,{data:d(u.slice(c))}))}C.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),ku(b({},t,{Yi:!0}))}catch(h){C.warn("Beacon send failed",h)}},sl=(t,e,s,r)=>{var i=r==="query"?e==="POST"?"sent_at":"_":void 0;return Ei(s===Se.GZipJS?bu(t,"compression"):t,b({},i?{[i]:Date.now().toString()}:{},s===Se.GZipJS?{}:{compression:s}))},Ar=[];wo&&Ar.push({transport:"fetch",method:ku}),yn&&Ar.push({transport:"XHR",method(t){var e=Su(t);if(e){var s=new yn,r=e.encodedBody;s.open(t.method||"GET",e.url,!0);var i=r??{},n=i.contentType,o=i.body;Z(t.headers,function(a,l){s.setRequestHeader(l,a)}),n&&s.setRequestHeader("Content-Type",n),t.timeout&&(s.timeout=t.timeout),s.onreadystatechange=()=>{if(s.readyState===4){var a={statusCode:s.status,text:s.responseText};if(s.status===200)try{a.json=JSON.parse(s.responseText)}catch{}t.callback==null||t.callback(a)}},s.send(o)}}}),xe!=null&&xe.sendBeacon&&Ar.push({transport:"sendBeacon",method:Zn});var Xn=3e3;class dp{constructor(e,s){this.Xi=!0,this.tr=[],this.er=rt((s==null?void 0:s.flush_interval_ms)||Xn,250,5e3,C.createLogger("flush interval"),Xn),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},s=Object.values(e);[...s.filter(r=>r.url.indexOf("/e")===0),...s.filter(r=>r.url.indexOf("/e")!==0)].map(r=>{this.lr(b({},r,{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 s=this.ar(),r=function(){var n=s[i],o=new Date().getTime();n.data&&O(n.data)&&Z(n.data,a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp}),e.lr(n)};for(var i in s)r()}},this.er))}lr(e){try{this.ir(e)}catch(s){C.error(s)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,s=>{var r,i=s,n=(i?i.batchKey:null)||i.url;I(e[n])&&(e[n]=b({},i,{data:[]})),(r=e[n].data)==null||r.push(i.data)}),this.tr=[],e}}var hp=["retriesPerformedSoFar"];class pp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!I(g)&&"onLine"in g.navigator&&(this.dr=g.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(g,"online",this.vr),ie(g,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=Ql(e,hp);lt(s)&&(r.url=Ei(r.url,{retry_count:s})),this._instance._send_request(b({},r,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(s??0))return void this.At(b({retriesPerformedSoFar:s},r));i.statusCode===0&&C.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(s??0)+" retries.")}r.callback==null||r.callback(i)}}))}At(e){var s=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=s+1;var r=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))}(s),i=Date.now()+r;this.tr.push({retryAt:i,requestOptions:e});var n="Enqueued failed request for retry in "+r;navigator.onLine||(n+=" (Browser is offline)"),C.warn(n),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(),s=[],r=this.tr.filter(n=>e>n.retryAt||(s.push(n),!1));if(this.tr=s,r.length>0)for(var i of r)this.retriableRequest(i.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,I(g)||(this.vr&&(g.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(g.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var s=e.requestOptions;try{this._instance._send_request(b({},s,{transport:"sendBeacon"}))}catch(r){C.error(r)}}this.tr=[]}}class fp{constructor(e){this.yr=()=>{var s,r,i,n;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+((o==null?void 0:o.clientHeight)||0),c=(o==null?void 0:o.scrollHeight)||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(s=this.br.maxScrollY)!==null&&s!==void 0?s:0),this.br.maxScrollHeight=Math.max(l,(r=this.br.maxScrollHeight)!==null&&r!==void 0?r:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(i=this.br.maxContentY)!==null&&i!==void 0?i:0),this.br.maxContentHeight=Math.max(c,(n=this.br.maxContentHeight)!==null&&n!==void 0?n: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(){ie(g,"scroll",this.yr,{capture:!0}),ie(g,"scrollend",this.yr,{capture:!0}),ie(g,"resize",this.yr)}scrollElement(){if(!this._r)return g==null?void 0:g.document.documentElement;var e=O(this._r)?this._r:[this._r];for(var s of e){var r=g==null?void 0:g.document.querySelector(s);if(r)return r}}wr(e){var s=e==="y"?"scrollTop":"scrollLeft";if(this._r){var r=this.scrollElement();return r&&r[s]||0}return g?e==="y"?g.scrollY||g.pageYOffset||g.document.documentElement.scrollTop||0:g.scrollX||g.pageXOffset||g.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var gp=t=>du(t==null?void 0:t.config.mask_personal_data_properties,t==null?void 0:t.config.custom_personal_data_properties,t==null?void 0:t.config.disable_capture_url_hashes);class rl{constructor(e,s,r,i){this.kr=n=>{var o=this.Sr();if(!o||o.sessionId!==n){var a={sessionId:n,props:this.Cr(this._instance)};this.Mr.register({[Bn]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=i||gp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Bn]}getSetOnceProps(){var e,s=(e=this.Sr())==null?void 0:e.props;return s?"r"in s?hu(s,this._instance.config.disable_capture_url_hashes):{$referring_domain:s.referringDomain,$pathname:s.initialPathName,utm_source:s.utm_source,utm_campaign:s.utm_campaign,utm_medium:s.utm_medium,utm_content:s.utm_content,utm_term:s.utm_term}:{}}getSessionProps(){var e={};return Z(Ro(this.getSetOnceProps()),(s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+En(r)]=s}),e}}class Oo{on(e,s){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(s),()=>{this.Er[e]=this.Er[e].filter(r=>r!==s)}}emit(e,s){for(var r of this.Er[e]||[])r(s);for(var i of this.Er["*"]||[])i(e,s)}constructor(){this.Er={}}}var Ps=se("[SessionId]");class il{on(e,s){return this.Ir.on(e,s)}constructor(e,s,r){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Oo,this.Lr=(u,c)=>!(!lt(u)||!lt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===ht)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=s||dt,this.Nr=r||dt;var n=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*rt(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Ps.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+n+"_window_id",this.Br="ph_"+n+"_primary_window_exists",this.Hr()){var o=ce.H(this.jr),a=ce.H(this.Br);o&&!a?this.Or=o:ce.q(this.jr),ce.F(this.Br,!0)}if((i=this.Ne.bootstrap)!=null&&i.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){Ps.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return I(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter(s=>s!==e)}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var s=this.Pr;return!Re(s)&&!Re(e)&&5e3>Math.abs(e-s)}Ur(e,s,r){var i=s!==this._sessionActivityTimestamp,n=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=s,this.Dr=e,n&&!i||n&&this.Zr(s)||(this.Pr=s,this.Mr.register({[is]:[s,e,r]}))}Gr(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(s)&&s>0}Qr(){this.Gr()?this.Mr.refreshKey(is):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!Re(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var s=this.Jr();s[1]===this.Dr&&s[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[is]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],s=lt(e)?e:0,r=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(s,r)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[is];return O(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&&g&&(g.removeEventListener(Zr,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(g,Zr,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,s){if(e===void 0&&(e=!1),s===void 0&&(s=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var r=s||new Date().getTime(),i=this.Jr(),n=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!n,f=n,p=!h&&!e&&this.Lr(r,a);if(p){(p=this.Xr(r))||Ps.info("cross-tab refresh kept the session alive",{sessionId:n});var v=this.Jr();n=v[1],o=v[2]}h||p||u?(n=this.$r(),l=this.Nr(),Ps.info("new session ID generated",{sessionId:n,windowId:l,changeReason:{noSessionId:h,activityTimeout:p,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=n!==f)&&(Ps.info("adopted cross-tab session id",{sessionId:n,windowId:l}),c=!0));var _=lt(a)&&e&&!u?a:r,m=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(n,_,m),e||this.qr();var w={noSessionId:h,activityTimeout:p,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach(S=>S(n,l,w)),{sessionId:n,windowId:l,sessionStartTimestamp:m,changeReason:c?w: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 Iu=function(t,e){if(!t)return!1;var s=t.userAgent;if(s&&Sa(s,e))return!0;try{var r=t==null?void 0:t.userAgentData;if(r!=null&&r.brands&&r.brands.some(i=>Sa(i==null?void 0:i.brand,e)))return!0}catch{}return!!t.webdriver};function Cu(){return(Cu=X(function*(){var t=xe==null?void 0:xe.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),s=e==null?void 0:e.model;return z(s)&&s.length>0?s:void 0}catch(r){return void C.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",r)}})).apply(this,arguments)}var ii=function(t,e){if(!function(s){try{new RegExp(s)}catch{return!1}return!0}(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function an(t,e,s){return ns({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:s})}var Fu={exact:(t,e)=>e.some(s=>t.some(r=>s===r)),is_not:(t,e)=>e.every(s=>t.every(r=>s!==r)),regex:(t,e)=>e.some(s=>t.some(r=>ii(s,r))),not_regex:(t,e)=>e.every(s=>t.every(r=>!ii(s,r))),icontains:(t,e)=>e.map(_r).some(s=>t.map(_r).some(r=>s.includes(r))),not_icontains:(t,e)=>e.map(_r).every(s=>t.map(_r).every(r=>!s.includes(r))),gt:(t,e)=>e.some(s=>{var r=parseFloat(s);return!isNaN(r)&&t.some(i=>r>parseFloat(i))}),lt:(t,e)=>e.some(s=>{var r=parseFloat(s);return!isNaN(r)&&t.some(i=>rt.toLowerCase();function Pu(t,e){return!t||Object.entries(t).every(s=>{var r=s[1],i=e==null?void 0:e[s[0]];if(I(i)||Re(i))return!1;var n=[String(i)],o=Fu[r.operator];return!!o&&o(r.values,n)})}var Qn="custom",nl="i.posthog.com",vp=/^\/static\//;class mp{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,s=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return s||(s=this.apiHost.replace("."+nl,".posthog.com")),s==="https://app.posthog.com"?"https://us.posthog.com":s}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":Qn),this.en[this.apiHost]}rn(e){if(vp.test(e)){var s=this.instance.config.asset_host;if(typeof s=="string")return s.trim().replace(/\/$/,"")||void 0}}endpointFor(e,s){if(s===void 0&&(s=""),s&&(s=s[0]==="/"?s:"/"+s),e==="ui")return this.uiHost+s;if(e==="flags")return this.flagsApiHost+s;if(e==="assets"){var r=this.rn(s);if(r)return""+r+s}if(this.region===Qn)return this.apiHost+s;var i=nl+s;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function Au(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var V=se("[Surveys]"),Ru="seenSurvey_",Tu=t=>{try{var e=(s=>((r,i)=>""+Ru+function(n){return n.current_iteration&&n.current_iteration>0?n.id+"_"+n.current_iteration:n.id}(i))(0,s))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(s){V.error("Failed to persist survey seen state",s)}},_p=[tn.Popover,tn.Widget,tn.API],yp={ignoreConditions:!1,ignoreDelay:!1,displayType:Gn.Popover},wp=se("[PostHog ExternalIntegrations]"),bp={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class Ep{constructor(e){this._instance=e}ai(e,s){var r;(r=T.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,e,i=>{if(i)return wp.error("failed to load script",i);s()})}startIfEnabledOrStop(){var e=this,s=function(){var n,o,a,l=r[0],u=r[1];!u||(n=T.__PosthogExtensions__)!=null&&(n=n.integrations)!=null&&n[l]||e.ai(bp[l],()=>{var c;(c=T.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)}),!u&&(o=T.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=T.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var r of Object.entries((i=this._instance.config.integrations)!==null&&i!==void 0?i:{})){var i;s()}}}class Sp{constructor(e,s){this.rt=e,this.nn=s,this.sn=new Map,this.an=!1}add(e){var s=this;return X(function*(){if(s.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(s.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');s.sn.set(e.name,e);try{var r=e.setup(s.nn);r&&(yield r)}catch(n){var i=s.sn.get(e.name)===e;i&&s.sn.delete(e.name),s.rt.error('Failed to set up browser extension "'+e.name+'"',n),i&&s.ln(e)}})()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var s of(this.sn.clear(),e))this.ln(s)}}ln(e){try{var s=e.dispose==null?void 0:e.dispose();s&&Ee(s.then)&&s.then(void 0,r=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)})}catch(r){this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)}}}class xp{constructor(e){this._instance=e}initialize(){}get(e){var s=this._instance.persistence;if(typeof e=="string")return s==null?void 0:s.get_property(e);var r={};for(var i of e){var n=s==null?void 0:s.get_property(i);I(n)||(r[i]=n)}return r}set(e,s){var r;(r=this._instance.persistence)==null||r.register(typeof e=="string"?{[e]:s}:e)}remove(e){var s;(s=this._instance.persistence)==null||s.unregister(e)}}var ol="extensionsRemoteConfig";class kp{constructor(e){this.an=!1,this.instance=e,this.rt=C,this.un=e.hn,this.kv=new xp(e),this.onEvent=s=>mr(this.instance.on("eventCaptured",r=>{try{s({event:r.event,properties:r.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}})),this.onRemoteConfig=s=>{if(this.an)return mr(()=>{});var r=n=>{try{s(n)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(ol,r);return this.un&&r(this.un),mr(i)},this.vn=new Sp(C.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(Js))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(Js);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,s;return(e=(s=this.instance.persistence)==null?void 0:s.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,s,r,i,n=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(s=n==null?void 0:n.sessionId)!==null&&s!==void 0?s:"",windowId:(r=n==null?void 0:n.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(i=n==null?void 0:n.sessionStartTimestamp)!==null&&i!==void 0?i:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,s,r){var i=this;return X(function*(){r?i.instance.capture(e,s,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):i.instance.capture(e,s)})()}registerDynamicEventProperties(e){return mr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(ol,e))}sendRequest(e,s){var r=this;return X(function*(){var i;s===void 0&&(s={});var n=r.instance.requestRouter.endpointFor((i=s.target)!==null&&i!==void 0?i:"api",e),o={method:s.method,url:s.query?Ei(n,s.query):n,data:s.body,headers:s.headers,timeout:s.timeoutMs,fireCallbackOnDrop:!0,transport:s.transport,compression:s.compression,timestampMode:s.sentAt};return s.transport==="sendBeacon"?(r.instance._send_request(o),{statusCode:202}):new Promise(a=>{o.callback=a,r.instance._send_request(o)})})()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var qs={},ln=0,ni=()=>{},al='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',As="Surveys module not available",ll="sanitize_properties is deprecated. Use before_send instead",$u="Invalid value for property_denylist config: ",Ip=["token","distinct_id",jc],ss="posthog",Mu=!lp&&(Pe==null?void 0:Pe.indexOf("MSIE"))===-1&&(Pe==null?void 0:Pe.indexOf("Mozilla"))===-1,cn=t=>{var e;return b({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:Ch(F==null?void 0:F.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:ni,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:re&&z(re==null?void 0:re.search)&&re.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:(g==null||(e=g.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(s){C.error("Bad HTTP status: "+s.statusCode+" "+s.text)},get_device_id:s=>s,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:zn,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:Xn},error_tracking:{},_onCapture:ni},(s=>({rageclick:s&&s>="2026-05-30"?{content_ignorelist:Bh,ignore_text_selection:!0}:!s||"2025-11-30">s||{content_ignorelist:!0},capture_pageview:!s||"2025-05-24">s||"history_change",session_recording:s&&s>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:s&&s>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:s&&s>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:s&&s>="2026-01-30"?"head":"body",internal_or_test_user_hostname:s&&s>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:s&&s>="2026-05-30"?250:0,split_storage:!(!s||"2026-05-30">s),detect_google_search_app:!(!s||"2026-05-30">s),disable_capture_url_hashes:!(!s||"2026-06-25">s)}))(t))},Cp=[["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"]],cl=t=>{var e={};for(var s of Cp){var r=s[0],i=s[1];I(t[r])||(e[i]=t[r])}var n=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return I(o)||(I(t.strict_script_versioning)&&(n.strict_script_versioning=!!o),z(o)&&I(t.asset_host)&&(n.asset_host=o)),O(t.property_blacklist)&&(I(t.property_denylist)?n.property_denylist=t.property_blacklist:O(t.property_denylist)?n.property_denylist=[...t.property_blacklist,...t.property_denylist]:C.error($u+t.property_denylist)),n};class Fp{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){C.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class $e{pn(e,s){if(e){var r=this.sn.indexOf(e);r!==-1&&this.sn.splice(r,1)}return this.sn.push(s),s.initialize==null||s.initialize(),s}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Bt&&this.consent.isRejected()}get decideEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new Fp,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Oo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=cn(),this.SentryIntegration=Gh,this.sentryIntegration=r=>function(i,n){var o=iu(i,n);return{name:ru,processEvent:a=>o(a)}}(this,r),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new fp(this),this.pageViewManager=new Ka(this),this.rateLimiter=new sp(this),this.requestRouter=new mp(this),this.consent=new Mh(this),this.externalIntegrations=new Ep(this);var s=(e=$e.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=s.featureFlags&&new s.featureFlags(this),this.toolbar=s.toolbar&&new s.toolbar(this),this.surveys=s.surveys&&new s.surveys(this),this.conversations=s.conversations&&new s.conversations(this),this.logs=s.logs&&new s.logs(this),this.metrics=s.metrics&&new s.metrics(this),this.experiments=s.experiments&&new s.experiments(this),this.exceptions=s.exceptions&&new s.exceptions(this),this.people={set:(r,i,n)=>{var o=z(r)?{[r]:i}:r;this.setPersonProperties(o),n==null||n({})},set_once:(r,i,n)=>{var o=z(r)?{[r]:i}:r;this.setPersonProperties(void 0,o),n==null||n({})}},this.on("eventCaptured",r=>C.info('send "'+(r==null?void 0:r.event)+'"',r))}init(e,s,r){if(r&&r!==ss){var i,n=(i=qs[r])!==null&&i!==void 0?i:new $e;return n._init(e,s,r),qs[r]=n,qs[ss][r]=n,n}return this._init(e,s,r)}_init(e,s,r){var i,n;s===void 0&&(s={});var o,a=z(e)?e.trim():"";if(!a)return C.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=cn(s.defaults),s.debug=this.Cn(s.debug),this.Mn=s,this.Tn=[],s.person_profiles?this.xn=s.person_profiles:s.process_person&&(this.xn=s.process_person);var l=cn(s.defaults),u=cl(s),c=ee({},l,u,{name:r,token:a});te(l.rageclick)&&te(u.rageclick)&&(c.rageclick=ee({},l.rageclick,u.rageclick)),te(l.session_recording)&&te(u.session_recording)&&(c.session_recording=ee({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&C.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=s.disable_compression?void 0:Se.GZipJS;var d=this.En();if(this.persistence=new en(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new en(b({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);O(h)&&h.forEach(P=>{z(P)&&this.yn.add(P)})}else ce.q(this.bn);var f=b({},this.persistence.props),p=b({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new dp(P=>this.Pn(P),this.config.request_queue_config),this.Rn=new pp(this),this.__request_queue=[];var v=this.gn();if(v||(this.sessionManager=new il(this),this.sessionPropsManager=new rl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId((P,D,x)=>{(x!=null&&x.activityTimeout||x!=null&&x.sessionPastMaximumLength||x!=null&&x.crossTabAdoption)&&this.An()})),this.Fn(),this.config.__preview_deferred_init_extensions?(C.info("Deferring extension initialization to improve startup performance"),setTimeout(()=>{this.Ln(v)},0)):(C.info("Initializing extensions synchronously"),this.Ln(v)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&C.info("Starting in debug mode",{this:this,config:s,thisC:b({},this.config),p:f,s:p}),!this.config.identity_distinct_id||(i=s.bootstrap)!=null&&i.distinctID||(s.bootstrap=b({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((n=s.bootstrap)==null?void 0:n.distinctID)!==void 0){var _=s.bootstrap.distinctID,m=this.get_distinct_id(),w=this.persistence.get_property(Ue);if(s.bootstrap.isIdentifiedID&&m!=null&&m!==_&&w===Zt)this.identify(_);else if(s.bootstrap.isIdentifiedID&&m!=null&&m!==_&&w===At)C.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(dt()),k=s.bootstrap.isIdentifiedID?S:_;this.persistence.set_property(Ue,s.bootstrap.isIdentifiedID?At:Zt),this.register({distinct_id:_,$device_id:k})}}if(v)this.register_once({distinct_id:hr,$device_id:null},"");else if(!this.get_distinct_id()){var E=this.config.get_device_id(dt());this.register_once({distinct_id:E,$device_id:E},""),this.persistence.set_property(Ue,Zt)}return ie(g,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),s.segment?function(P,D){var x=P.config.segment;if(!x)return D();(function(A,R){var M=A.config.segment;if(!M)return R();var $=J=>{var W=()=>J.anonymousId()||dt();A.config.get_device_id=W,J.id()&&(A.register({distinct_id:J.id(),$device_id:W()}),A.persistence.set_property(Ue,At)),R()},N=M.user();"then"in N&&Ee(N.then)?N.then($):$(N)})(P,()=>{x.register((A=>{typeof Promise<"u"&&Promise.resolve||Xi.warn("This browser does not have Promise support, and can not use the segment integration");var R=(M,$)=>{if(!$)return M;M.event.userId||M.event.anonymousId===A.get_distinct_id()||(Xi.info("No userId set, resetting PostHog"),A.reset()),M.event.userId&&M.event.userId!==A.get_distinct_id()&&(Xi.info("UserId set, identifying with PostHog"),A.identify(M.event.userId));var N=A.calculateEventProperties($,M.event.properties);return M.event.properties=Object.assign({},N,M.event.properties),M};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:M=>R(M,M.event.event),page:M=>R(M,ts),identify:M=>R(M,Ji),screen:M=>R(M,"$screen")}})(P)).then(()=>{D()})})}(this,()=>this.On()):this.On(),Ee(this.config._onCapture)&&this.config._onCapture!==ni&&(C.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",P=>this.config._onCapture(P.event,P))),this.config.ip&&C.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 Cu.apply(this,arguments)}().then(P=>{P&&this.register({[Gi]:P})}).catch(ni),this}Fn(){var e,s,r,i,n,o,a=(e=(s=this.config.__extensionClasses)==null?void 0:s.featureFlags)!==null&&e!==void 0?e:(r=$e.__defaultExtensionClasses)==null?void 0:r.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((i=this.Dn)==null||i.call(this),this.Dn=void 0,this.featureFlags=new a(this)),Ee(this.featureFlags.onReloading)&&Ee(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading(()=>{this.dn.emit("featureFlagsReloading",!0)}),this.$n().add(this.featureFlags)):(n=(o=this.featureFlags).initialize)==null||n.call(o))}Ln(e){var s,r,i,n,o,a,l,u=performance.now(),c=b({},$e.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(s=this.exceptions)!==null&&s!==void 0?s: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=(r=this.surveys)!==null&&r!==void 0?r:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(i=this.logs)!==null&&i!==void 0?i:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(n=this.metrics)!==null&&n!==void 0?n: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,Vh)),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(h=>{h.initialize&&d.push(()=>{h.initialize==null||h.initialize()})}),d.push(()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach(f=>f.onRemoteConfig==null?void 0:f.onRemoteConfig(h))}}),this.qn(d,u)}qn(e,s){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-s>=30&&e.length>0)return void setTimeout(()=>{this.qn(e,s)},0);var r=e.shift();if(r)try{r()}catch(n){C.error("Error initializing extension:",n)}}var i=Math.round(performance.now()-s);this.register_for_session({[Uc]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[Hc]:i}),this.config.__preview_deferred_init_extensions&&C.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var s;if(!F||!F.body)return C.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 r,i=e.config;i.supportedCompression&&!this.config.disable_compression&&(this.compression=L(i.supportedCompression,Se.GZipJS)?Se.GZipJS:L(i.supportedCompression,Se.Base64)?Se.Base64:void 0),(r=i.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:zn}),(s=this.jn)==null||s.handleRemoteConfig(e),this.sn.forEach(n=>n.onRemoteConfig==null?void 0:n.onRemoteConfig(e))}On(){try{this.config.loaded(this)}catch(r){C.critical("`loaded` function failed",r)}if(this.Bn(),this.config.internal_or_test_user_hostname&&re!=null&&re.hostname){var e=re.hostname,s=this.config.internal_or_test_user_hostname;(typeof s=="string"?e===s:s.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout(()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()},1),this.Un=new fu(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()&&pr(this.__request_queue,e=>this.Pn(e)),this.__request_queue=[],this.Bn()}_handle_unload(){var e,s,r,i,n;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(s=this.metrics)==null||s.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(Ki),(r=this.logs)==null||r.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(n=this.Rn)==null||n.unload()):this.zn()&&this.capture(Ki,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?Mu?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=b({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(I(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(s=>{var r,i,n,o=b({},s);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&I(o.compression)&&o.data&&(o.compression=Se.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=O(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d==null?void 0:d.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=function(_,m){return m===void 0&&(m=new Date().toISOString()),O(_)?_.map(w=>b({},w,{sent_at:m})):b({},_,{sent_at:m})}(o.data))),o.url=sl(o.url,o.method,o.compression,o.timestampMode);var f=Ar.filter(_=>!o.disableTransport||!_.transport||!o.disableTransport.includes(_.transport)),p=(i=(n=function(_,m){for(var w=0;_.length>w;w++)if(_[w].transport===h)return _[w]}(f))==null?void 0:n.method)!==null&&i!==void 0?i:f[0].method;if(!p)throw new Error("No available transport method");var v=_=>{try{p(_)}catch(m){xu(m)?C.warn(m):C.error(m),o.callback==null||o.callback({statusCode:0,error:m})}};h!=="sendBeacon"&&o.data&&o.compression===Se.GZipJS&&Pd&&typeof Promise<"u"&&!Pr?cp(o).then(_=>{v(_)}).catch(_=>{if(Ea(_))return Pr=!0,void v(b({},o,{compression:void 0,url:sl(s.url,s.method,void 0,s.timestampMode)}));(m=>{if(!m||typeof m!="object")return!1;var w="name"in m?String(m.name):"";return Ea(m)||w===ec})(_)&&(Pr=!0),v(o)}):p(o)})(b({},e,{callback:s=>{var r,i;this.rateLimiter.checkForLimiting(s),400>s.statusCode||(r=(i=this.config).on_request_error)==null||r.call(i,s),e.callback==null||e.callback(s)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){ln++;try{var s,r=[],i=[],n=[];pr(e,a=>{if(a)if(O(s=a[0]))n.push(a);else if(Ee(a))try{a.call(this)}catch(l){C.error("Error executing queued PostHog call",a,l)}else O(a)&&s==="alias"?r.push(a):O(a)&&s.indexOf("capture")!==-1&&Ee(this[s])?n.push(a):i.push(a)});var o=function(a,l){pr(a,function(u){try{if(O(u[0])){var c=l;Z(u,function(d){c=c[d[0]].apply(c,d.slice(1))})}else l[u[0]].apply(l,u.slice(1))}catch(d){C.error("Error executing queued PostHog call",u,d)}})};o(r,this),o(i,this),o(n,this)}finally{ln--}}push(e){if(ln>0&&O(e)&&z(e[0])){var s=$e.prototype[e[0]];Ee(s)&&s.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,s,r){var i,n,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!I(e)&&z(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=r!=null&&r.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){s!=null&&s.$current_url&&!z(s==null?void 0:s.$current_url)&&(C.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),s==null||delete s.$current_url),e!=="$exception"||r!=null&&r.Wn||C.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,h=(r==null?void 0:r.timestamp)||d,f=Ca(r==null?void 0:r.uuid,dt),p={uuid:f,event:e,properties:this.calculateEventProperties(e,s||{},h,f)};e===ts&&this.config.__preview_capture_bot_pageviews&&u&&(p.event="$bot_pageview",p.properties.$browser_type="bot"),c&&(p.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var v=e==="$feature_flag_called"&&p.properties.$feature_flag_has_experiment===!1&&this.get_property(Vr)===!0;r!=null&&r.$set&&!v&&(p.$set=r==null?void 0:r.$set);var _=r==null?void 0:r.$unset;_&&(p.$unset=_);var m,w,S,k=v?void 0:this.Vn(r==null?void 0:r.$set_once,e!==$a,e===Ji);if(k&&(p.$set_once=k),r!=null&&r._noTruncate||(n=this.config.properties_string_max_length,o=p,a=$=>z($)?$.slice(0,n):$,l=new Set,p=function $(N,J){if(N!==Object(N))return a?a(N):N;if(!l.has(N)){var W;if(l.add(N),O(N))W=[],pr(N,oe=>{W.push($(oe))});else{var H={};Z(N,(oe,pe)=>{l.has(oe)||(H[pe]=$(oe))}),W=H}return W}}(o)),p.timestamp=h,I(r==null?void 0:r.timestamp)||(p.properties.$event_time_override_provided=!0,p.properties.$event_time_override_system_time=d),v&&(p.properties=function($,N){N===void 0&&(N=[]);var J={},W=H=>{$[H]!==void 0&&(J[H]=$[H])};return Ad.forEach(W),N.forEach(W),J}(p.properties,Ip)),e===ft.DISMISSED||e===ft.SENT){var E=s==null?void 0:s[sn.SURVEY_ID],P=s==null?void 0:s[sn.SURVEY_ITERATION];Tu({id:E,current_iteration:P}),p.$set=b({},p.$set,{[(m={id:E,current_iteration:P},w=e===ft.SENT?"responded":"dismissed",S="$survey_"+w+"/"+m.id,m.current_iteration&&m.current_iteration>0&&(S="$survey_"+w+"/"+m.id+"/"+m.current_iteration),S)]:!0})}else e===ft.SHOWN&&(p.$set=b({},p.$set,{[sn.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===tp.SHOWN){var D=s==null?void 0:s[Ya.TOUR_TYPE];D&&(p.$set=b({},p.$set,{[Ya.TOUR_LAST_SEEN_DATE+"/"+D]:new Date().toISOString()}))}var x=b({},p.properties.$set,p.$set);if(vt(x)||this.setPersonPropertiesForFlags(x),!B(this.config.before_send)){var A=this.Pt(p);if(!A)return;(p=A).uuid=Ca(p.uuid,dt)}this.dn.emit("eventCaptured",p);var R=(i=r==null?void 0:r._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),M={method:"POST",url:R,data:p,compression:"best-available",timestampMode:(r==null?void 0:r._batchKey)==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:r==null?void 0:r._batchKey,transport:r==null?void 0:r.transport};return!this.config.request_batching||r&&(r==null||!r._batchKey)||r!=null&&r.send_instantly?this.Pn(M):this.In.enqueue(M),p}C.critical("This capture call is ignored due to client rate limiting.")}}else C.error("No event name provided to posthog.capture")}else C.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",s=>e(s.event,s))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new kp(this)}cn(e){this._n.push(e);var s=!0;return()=>{if(s){s=!1;var r=this._n.indexOf(e);r!==-1&&this._n.splice(r,1)}}}calculateEventProperties(e,s,r,i,n){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return s;var o=n?void 0:this.persistence.remove_event_timer(e),a=b({},s);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[jc]=!0),e==="$snapshot"){var l=b({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!z(a.distinct_id)&&!de(a.distinct_id)||Sn(a.distinct_id))&&C.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=function(E,P,D,x){var A,R,M,$;if(x===void 0&&(x=!1),!Pe)return{};var N,J=E?[...fs,...P||[]]:[],W=function(lr){for(var Be=0;ka.length>Be;Be++){var cr=ka[Be],Jt=cr[1],Yt=cr[0].exec(lr),Es=Yt&&(Ee(Jt)?Jt(Yt,lr):Jt);if(Es)return Es}return["",""]}(Pe),H=W[0],oe=W[1],pe=(N=typeof navigator<"u"?navigator:void 0)!=null&&N.brave?{brave:!0}:{},Ie={};I(D)||(Ie.detectGoogleSearchApp=D);var _e={},Ce=(A=navigator)==null||(A=A.userAgentData)==null?void 0:A.platform,Te=(R=navigator)==null?void 0:R.maxTouchPoints,ae=g==null||(M=g.screen)==null?void 0:M.width,ve=g==null||($=g.screen)==null?void 0:$.height,ge=g==null?void 0:g.devicePixelRatio;I(Ce)||(_e.userAgentDataPlatform=Ce),I(Te)||(_e.maxTouchPoints=Te),I(ae)||(_e.screenWidth=ae),I(ve)||(_e.screenHeight=ve),I(ge)||(_e.devicePixelRatio=ge);var Ye,Pt,ue,Ge,Et,bs,De,Fe,ar=ee(Ro({$os:H,$os_version:oe,$browser:kc(Pe,navigator.vendor,pe,Ie),$device:Ia(Pe),$device_type:(Pt=Pe,ue=_e,Fe=Ia(Pt),Fe===ac||Fe===oc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===wc?us:Fe===Gs||Fe===as||Fe===Ks||Fe===kn?"Console":Fe===cc?"Wearable":Fe?Le:(ue==null?void 0:ue.userAgentDataPlatform)==="Android"&&((Ge=ue==null?void 0:ue.maxTouchPoints)!==null&&Ge!==void 0?Ge:0)>0?600>Math.min((Et=ue==null?void 0:ue.screenWidth)!==null&&Et!==void 0?Et:0,(bs=ue==null?void 0:ue.screenHeight)!==null&&bs!==void 0?bs:0)/((De=ue==null?void 0:ue.devicePixelRatio)!==null&&De!==void 0?De:1)?Le:us:"Desktop"),$timezone:pu(),$timezone_offset:Xh()}),{$current_url:Zs(x?It(re==null?void 0:re.href):re==null?void 0:re.href,J,Xs),$host:re==null?void 0:re.host,$pathname:re==null?void 0:re.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:Jd(Pe,navigator.vendor,pe,Ie),$browser_language:Ja(),$browser_language_prefix:(Ye=Ja(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:g==null?void 0:g.screen.height,$screen_width:g==null?void 0:g.screen.width,$viewport_height:g==null?void 0:g.innerHeight,$viewport_width:g==null?void 0:g.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(ar.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),ar}(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(n,r.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var f;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(f=this.Rn)==null?void 0:f.length}catch(E){a.$sdk_debug_error_capturing_properties=String(E)}if(this.requestRouter.region===Qn&&(a.$lib_custom_api_host=this.config.api_host),u=e!==ts||n?e!==Ki||n?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,i),a=ee(a,u),e===ts&&F&&(a.title=F.title),!I(o)){var p=r.getTime()-o;a.$duration=parseFloat((p/1e3).toFixed(3))}Pe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var v=this.persistence.properties(),_=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],E=>{E in v&&delete _[E]});var m={};if(this._n.length>0)for(var w of this._n.slice())try{ee(m,w())}catch(E){C.error("Failed to produce browser extension event properties",E)}(a=ee({},c,v,_,b({},m,a))).$is_identified=this._isIdentified(),O(this.config.property_denylist)?Z(this.config.property_denylist,function(E){delete a[E]}):C.error($u+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var S=this.config.sanitize_properties;S&&(C.error(ll),a=S(a,e));var k=this.Zn();return a.$process_person_profile=k,k&&!n&&this.Gn("_calculate_event_properties"),a}Vn(e,s,r){var i;if(s===void 0&&(s=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var n=this.persistence.get_initial_props(),o=(i=this.sessionPropsManager)==null?void 0:i.getSetOnceProps(),a=ee({},n,o||{},e||{}),l=this.config.sanitize_properties;return l&&(C.error(ll),a=l(a,"$set_once")),s&&(this.mn=!0),vt(a)?void 0:a}register(e,s){var r;(r=this.persistence)==null||r.register(e,s)}register_once(e,s,r){var i;(i=this.persistence)==null||i.register_once(e,s,r)}register_for_session(e){var s;(s=this.sessionPersistence)==null||s.register(e),Object.keys(e).forEach(r=>this.yn.add(r)),this.Qn()}unregister(e){var s;(s=this.persistence)==null||s.unregister(e)}unregister_for_session(e){var s;(s=this.sessionPersistence)==null||s.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,s){this.register({[e]:s})}An(){this.yn.forEach(e=>{var s;(s=this.sessionPersistence)==null||s.unregister(e)}),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var s=[];this.yn.forEach(r=>s.push(r)),s.length>0?ce.F(this.bn,s):ce.q(this.bn)}}getFeatureFlag(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlag(e,s)}getFeatureFlagPayload(e){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagPayload(e)}getFeatureFlagResult(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagResult(e,s)}getAllFeatureFlags(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,s){var r,i;return(r=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,s))!==null&&r!==void 0?r:s==null?void 0:s.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,s,r){var i;(i=this.featureFlags)==null||i.updateFlags(e,s,r)}updateEarlyAccessFeatureEnrollment(e,s,r){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,s,r)}getEarlyAccessFeatures(e,s,r){var i;return s===void 0&&(s=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,s,r)}on(e,s){return this.dn.on(e,s)}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:As}),()=>{})}onSessionId(e){var s,r;return(s=(r=this.sessionManager)==null?void 0:r.onSessionId(e))!==null&&s!==void 0?s:()=>{}}getSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getSurveys(e,s):e([],{isLoaded:!1,error:As})}getActiveMatchingSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,s):e([],{isLoaded:!1,error:As})}renderSurvey(e,s){var r;(r=this.surveys)==null||r.renderSurvey(e,s)}displaySurvey(e,s){var r;s===void 0&&(s=yp),(r=this.surveys)==null||r.displaySurvey(e,s)}cancelPendingSurvey(e){var s;(s=this.surveys)==null||s.cancelPendingSurvey(e)}canRenderSurvey(e){var s,r;return(s=(r=this.surveys)==null?void 0:r.canRenderSurvey(e))!==null&&s!==void 0?s:{visible:!1,disabledReason:As}}canRenderSurveyAsync(e,s){var r,i;return s===void 0&&(s=!1),(r=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,s))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:As})}Jn(e){return!e||Sn(e)?(C.critical("Unique user id has not been set in posthog.identify"),!1):e===hr?(C.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())||(C.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,s,r){if(!this.__loaded||!this.persistence)return C.uninitializedWarning("posthog.identify");if(de(e)&&(e=e.toString(),C.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 i=this.get_distinct_id();this.register({$user_id:e}),this.get_property(Js)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(Ms)&&(this.unregister(Ms),this.register({distinct_id:e}));var n,o=(this.persistence.get_property(Ue)||Zt)===Zt,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(Ue,At),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(Ji,{distinct_id:e,$anon_distinct_id:i},{$set:s||{},$set_once:r||{}}),this.Sn=an(e,s,r),(n=this.featureFlags)==null||n.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(Ue,At);var u=s||{},c=r||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=an(e,s,r)}else(s||r)&&this.setPersonProperties(s,r);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(jt)):l&&(s||r)&&this.reloadFeatureFlags()}}setPersonProperties(e,s){if((e||s)&&this.Gn("posthog.setPersonProperties")){var r=an(this.get_distinct_id(),e,s);this.Sn!==r?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:s||{}},!0),this.capture("$set",{$set:e||{},$set_once:s||{}}),this.Sn=r):C.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var s,r=(O(e)?e:[e]).filter(i=>z(i)&&i.length>0);r.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((s=this.featureFlags)==null||s.unsetPersonPropertiesForFlags(r,!0),this.capture("$set",{$unset:r}),this.Sn=null)}group(e,s,r){if(e&&s){var i=this.getGroups(),n=i[e]!==s;if(n&&this.resetGroupPropertiesForFlags(e),this.register({$groups:b({},i,{[e]:s})}),n||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture($a,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),n&&!r&&this.reloadFeatureFlags()}else C.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),(r=this.featureFlags)==null||r.setPersonPropertiesForFlags(e,s)}resetPersonPropertiesForFlags(e){var s;e===void 0&&(e=!0),(s=this.featureFlags)==null||s.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((r=this.featureFlags)==null||r.setGroupPropertiesForFlags(e,s))}resetGroupPropertiesForFlags(e){var s;(s=this.featureFlags)==null||s.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,s){var r,i,n,o,a,l,u,c,d,h;if(s===void 0&&(s=!1),C.info("reset"),!this.__loaded)return C.uninitializedWarning("posthog.reset");var f,p=this.get_property(Js),v=this.get_property(Gi),_=this.get_property(Ut),m=this.is_capturing();if(this.consent.reset(),s||!m||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."),(r=this.persistence)==null||r.clear(),(i=this.sessionPersistence)==null||i.clear(),this.yn.clear(),this.Qn(),I(_)||(f=this.persistence)==null||f.register({[Ut]:_}),(n=this.surveys)==null||n.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(Ue,Zt),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:hr,$device_id:null},"");else{var w=this.config.get_device_id(dt());this.register_once({distinct_id:w,$device_id:e?w:p},""),e||I(v)||this.register({[Gi]:v})}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 s=this;return X(function*(){var r,i,n,o,a,l,u;if(s.__loaded){(r=s.Un)==null||r.stop(),(i=s.jn)==null||i.dispose(),(n=s.sessionRecording)==null||n.dispose(),(o=s.logs)==null||o.flushLogs("sendBeacon"),(a=s.metrics)==null||a.flush("sendBeacon"),(l=s.In)==null||l.unload(),(u=s.Rn)==null||u.unload();try{var c;(c=s.featureFlags)==null||c.destroy()}catch(d){C.error("Error while destroying feature flags",d)}}else C.uninitializedWarning("posthog.shutdown")})()}setIdentity(e,s){var r;this.config.identity_distinct_id=e,this.config.identity_hash=s,this.alias(e),(r=this.conversations)==null||r.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,s;return(e=(s=this.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var s=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+s.sessionId);if(e!=null&&e.withTimestamp&&r){var n,o=(n=e.timestampLookBack)!==null&&n!==void 0?n:10;if(!r)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return i}alias(e,s){return e===this.get_property(Mc)?(C.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(I(s)&&(s=this.get_distinct_id()),e!==s?(this.Kn(Ms,e),this.capture("$create_alias",{alias:e,distinct_id:s})):(C.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var s=b({},this.config);if(te(e)){var r,i,n,o,a,l,u,c,d,h,f,p;ee(this.config,cl(e));var v=this.En();(r=this.persistence)==null||r.update_config(this.config,s,v),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new en(b({},this.config,{persistence:"sessionStorage"}),v,!1);var _=this.Cn(this.config.debug);Ke(_)&&(this.config.debug=_),Ke(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),C.info("set_config",{config:e,oldConfig:s,newConfig:b({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(n=this.exceptionObserver)==null||n.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(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(f=this.surveys)==null||f.loadIfEnabled(),this.es(),(p=this.externalIntegrations)==null||p.startIfEnabledOrStop()}}_overrideSDKInfo(e,s){Y.LIB_NAME=e,Y.LIB_VERSION=s}startSessionRecording(e){var s,r,i,n,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)&&((s=this.sessionManager)==null||s.checkAndGetSessionAndWindowId(),l.sampling&&((r=this.sessionRecording)==null||r.overrideSampling()),l.linked_flag&&((i=this.sessionRecording)==null||i.overrideLinkedFlag()),l.url_trigger&&((n=this.sessionRecording)==null||n.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,s){if(this.exceptions){var r=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(b({},i,s))}}addExceptionStep(e,s){var r;(r=this.exceptions)==null||r.addExceptionStep(e,s)}captureLog(e){var s;(s=this.logs)==null||s.captureLog(e)}get logger(){var e,s;return(e=(s=this.logs)==null?void 0:s.logger)!==null&&e!==void 0?e:$e.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var s,r;return(s=(r=this.toolbar)==null?void 0:r.loadToolbar(e))!==null&&s!==void 0&&s}get_property(e){var s;return(s=this.persistence)==null?void 0:s.props[e]}getSessionProperty(e){var s;return(s=this.sessionPersistence)==null?void 0:s.props[e]}toString(){var e,s=(e=this.config.name)!==null&&e!==void 0?e:ss;return s!==ss&&(s=ss+"."+s),s}_isIdentified(){var e,s;return((e=this.persistence)==null?void 0:e.get_property(Ue))===At||((s=this.sessionPersistence)==null?void 0:s.get_property(Ue))===At}Zn(){var e,s;return!(this.config.person_profiles==="never"||this.config.person_profiles===zn&&!this._isIdentified()&&vt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Ms])&&((s=this.persistence)==null||(s=s.props)==null||!s[Jr]))}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"?(C.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(Jr,!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!==Bt)}es(){var e,s,r,i,n=this.En();return((e=this.persistence)==null?void 0:e.xi)!==n&&((r=this.persistence)==null||r.set_disabled(n)),((s=this.sessionPersistence)==null?void 0:s.xi)!==n&&((i=this.sessionPersistence)==null||i.set_disabled(n)),n&&(this.yn.clear(),this.Qn()),n}opt_in_capturing(e){var s;if(this.config.cookieless_mode!==ht){if(this.gn()){var r,i,n,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new il(this),this.pageViewManager=new Ka(this),this.persistence&&(this.sessionPropsManager=new rl(this,this.sessionManager,this.persistence));var l,u=(n=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&n!==void 0?n:(a=$e.__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(),(s=this.sessionRecording)==null||s.startIfEnabledOrStop(),this.config.cookieless_mode==Bt&&((c=this.surveys)==null||c.loadIfEnabled()),(I(e==null?void 0:e.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e==null?void 0:e.captureEventName)!==null&&d!==void 0?d:"$opt_in",e==null?void 0:e.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else C.warn(al)}opt_out_capturing(){var e,s,r;this.config.cookieless_mode!==ht?(this.config.cookieless_mode===Bt&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Bt&&(this.register({distinct_id:hr,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):C.warn(al)}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===ht||(this.config.cookieless_mode===Bt?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return xe?Iu(xe,this.config.custom_blocked_useragents):void 0}Hn(){F&&(F.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(ts,{title:F.title},{send_instantly:!0}),this.kn&&(F.removeEventListener(Yr,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(F,Yr,this.kn)))}debug(e){e===!1?(g==null||g.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(g==null||g.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?(C.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(s,r,i,n,o){var a=r in s&&!B(s[r]),l=i in s&&!B(s[i]);return a?s[r]:!!l&&(o&&o.warn("Config field '"+i+"' is deprecated. Please use '"+r+"' instead. The old field will be removed in a future major version."),s[i])}(e,"advanced_disable_flags","advanced_disable_decide",0,C)}Pt(e){var s;if(B(this.config.before_send))return e;var r=Object.keys((s=e.properties)!==null&&s!==void 0?s:{}).filter(Od),i=O(this.config.before_send)?this.config.before_send:[this.config.before_send],n=e;for(var o of i){if(n=o(n),B(n)){var a="Event '"+e.event+"' was rejected in beforeSend function";return Ld(e.event)?C.warn(a+". This can cause unexpected behavior."):C.info(a),null}n.properties&&!vt(n.properties)||C.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(n.properties&&B(n.properties[l]))return C.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 n}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,s){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:s})}captureTraceMetric(e,s,r){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:s,$ai_metric_value:String(r)})}Cn(e){var s=Ke(e)&&!e,r=Q.N()&&Q.P("ph_debug")==="true";return!s&&(!!r||e)}}$e.__defaultExtensionClasses={},$e.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),function(t,e){for(var s=0;e.length>s;s++)t.prototype[e[s]]=kh(t.prototype[e[s]])}($e,["identify"]);class ul{constructor(e){this.disabled=e===!1;var s=te(e)?e:{};this.thresholdPx=s.threshold_px||30,this.timeoutMs=s.timeout_ms||1e3,this.clickCount=s.click_count||3,this.clicks=[]}isRageClick(e,s,r){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(s-i.y)r-i.timestamp){if(this.clicks.push({x:e,y:s,timestamp:r}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:s,timestamp:r}];return!1}}var un="$copy_autocapture",dn=se("[AutoCapture]");function hn(t,e){return e.length>t?e.slice(0,t)+"...":e}function Pp(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ct(e));return e}function Ap(t,e){var s,r,i=e.e,n=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!Ct(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Me(h,"body")&&Yc>c.length;)if(Jc(h.parentNode)){var f=h.parentNode.host;if(d.has(f))break;d.add(f),c.push(f),h=f}else{if(!Ct(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var p,v,_=[],m={},w=!1,S=!1;if(Z(c,x=>{var A=Vn(x);if(Me(x,"a")){var R=x.getAttribute("href");w=!!(A&&R&&zs(R))&&(u?It(R):R)}L(Qr(x),"ph-no-capture")&&(S=!0),_.push(function($,N,J,W,H){H===void 0&&(H=!1);var oe=$.tagName.toLowerCase(),pe={tag_name:oe};$o.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?hn(1024,qa($)):hn(1024,Ys($)));var Ie=Qr($);Ie.length>0&&(pe.classes=Ie.filter(function(ae){return ae!==""})),Z($.attributes,function(ae){var ve;if((!tu($)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(W==null||!W.includes(ae.name))&&!N&&zs(ae.value)&&(!z(ve=ae.name)||ve.substring(0,10)!=="_ngcontent"&&ve.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=To(ge).join(" ")),pe["attr__"+ae.name]=hn(1024,ae.name==="href"&&H?It(ge):ge)}});for(var _e=1,Ce=1,Te=$;Te=Pp(Te);)_e++,Te.tagName===$.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe}(x,n,o,a,u));var M=function($){if(!Vn($))return{};var N={};return Z($.attributes,function(J){if(J.name&&J.name.indexOf("data-ph-capture-attribute")===0){var W=J.name.replace("data-ph-capture-attribute-",""),H=J.value;W&&H&&zs(H)&&(N[W]=H)}}),N}(x);ee(m,M)}),S)return{props:{},explicitNoCapture:S};if(o||(_[0].$el_text=Me(t,"a")||Me(t,"button")?qa(t):Ys(t)),w){var k,E;_[0].attr__href=w;var P=(k=ei(w))==null?void 0:k.host,D=g==null||(E=g.location)==null?void 0:E.host;P&&D&&P!==D&&(p=w)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:_},{$elements_chain:(v=_,function(x){return x.map(A=>{var R,M,$="";if(A.tag_name&&($+=A.tag_name),A.attr_class)for(var N of(A.attr_class.sort(),A.attr_class))$+="."+N.replace(/"/g,"");var J=b({},A.text?{text:A.text}:{},{"nth-child":(R=A.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(M=A.nth_of_type)!==null&&M!==void 0?M:0},A.href?{href:A.href}:{},A.attr_id?{attr_id:A.attr_id}:{},A.attributes),W={};return Fr(J).sort((H,oe)=>H[0].localeCompare(oe[0])).forEach(H=>{var oe=H[1];return W[Va(H[0].toString())]=Va(oe.toString())}),($+=":")+Fr(W).map(H=>H[0]+'="'+H[1]+'"').join("")}).join(";")}(function(x){return x.map(A=>{var R,M,$={text:(R=A.$el_text)==null?void 0:R.slice(0,400),tag_name:A.tag_name,href:(M=A.attr__href)==null?void 0:M.slice(0,2048),attr_class:Wh(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Fr(A).filter(N=>N[0].indexOf("attr__")===0).forEach(N=>$.attributes[N[0]]=N[1]),$})}(v)))},(s=_[0])!=null&&s.$el_text?{$el_text:(r=_[0])==null?void 0:r.$el_text}:{},p&&i.type==="click"?{$external_click_url:p}:{},m)}}var Rs=se("[ExceptionAutocapture]"),dl=()=>{},Rp=se("[TracingHeaders]"),$t=se("[Web Vitals]"),hl=9e5,pl="disabled",fl="lazy_loading",Ts="awaiting_config",yr="missing_config";se("[SessionRecording]"),se("[SessionRecording]");var eo="[SessionRecording]",at=se(eo),Tp=se("[Heatmaps]");function pn(t){return te(t)&&"clientX"in t&&"clientY"in t&&de(t.clientX)&&de(t.clientY)}var wr=se("[Product Tours]"),fn=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Fo))},$p=["$set_once","$set"],Ze=se("[SiteApps]"),gl="Error while initializing PostHog app with config id ";function es(t,e,s){if(B(t))return!1;switch(s){case"exact":return t===e;case"contains":var r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(r,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class Mp{constructor(e){this.ns=new Oo,this.ss=(s,r)=>this.os(s,r)&&this.ls(s,r)&&this.us(s,r)&&this.hs(s,r),this.os=(s,r)=>r==null||!r.event||(s==null?void 0:s.event)===(r==null?void 0:r.event),this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,s;I((e=this._instance)==null?void 0:e._addCaptureHook)||(s=this._instance)==null||s._addCaptureHook((r,i)=>{this.on(r,i)})}register(e){var s,r;if(!I((s=this._instance)==null?void 0:s._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==null?void 0:u.event)||"")})}),(r=this._instance)!=null&&r.autocapture)){var i,n=new Set;e.forEach(o=>{var a;(a=o.steps)==null||a.forEach(l=>{l!=null&&l.selector&&n.add(l==null?void 0:l.selector)})}),(i=this._instance)==null||i.autocapture.setElementSelectors(n)}}on(e,s){var r;s!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(s.event))&&this.vs&&((r=this.vs)==null?void 0:r.size)>0&&this.vs.forEach(i=>{this.cs(s,i)&&this.ns.emit("actionCaptured",i.name)})}fs(e){this.onAction("actionCaptured",s=>e(s))}cs(e,s){if((s==null?void 0:s.steps)==null)return!1;for(var r of s.steps)if(this.ss(e,r))return!0;return!1}onAction(e,s){return this.ns.on(e,s)}ls(e,s){if(s!=null&&s.url){var r,i=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!i||typeof i!="string"||!es(i,s.url,s.url_matching||"contains"))return!1}return!0}us(e,s){return!!this.ps(e,s)&&!!this.gs(e,s)&&!!this.ys(e,s)}ps(e,s){var r;if(s==null||!s.href)return!0;var i=this.bs(e);if(i.length>0)return i.some(a=>es(a.href,s.href,s.href_matching||"exact"));var n,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&es((n=o.match(/(?::|")href="(.*?)"/))?n[1]:"",s.href,s.href_matching||"exact")}gs(e,s){var r;if(s==null||!s.text)return!0;var i=this.bs(e);if(i.length>0)return i.some(u=>es(u.text,s.text,s.text_matching||"exact")||es(u.$el_text,s.text,s.text_matching||"exact"));var n,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(n=function(u){for(var c,d=[],h=/(?::|")text="(.*?)"/g;!B(c=h.exec(u));)d.includes(c[1])||d.push(c[1]);return d}(l),o=s.text,a=s.text_matching||"exact",n.some(u=>es(u,o,a)))}ys(e,s){var r,i;if(s==null||!s.selector)return!0;var n=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(n!=null&&n.includes(s.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(s.selector_regex&&o)try{return new RegExp(s.selector_regex).test(o)}catch{return!1}return!1}bs(e){var s;return(e==null||(s=e.properties)==null?void 0:s.$elements)==null?[]:e==null?void 0:e.properties.$elements}hs(e,s){return s==null||!s.properties||s.properties.length===0||Pu(s.properties.reduce((r,i)=>{var n=O(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return r[i.key]={values:n,operator:i.operator||"exact"},r},{}),e==null?void 0:e.properties)}}class Np{constructor(e){var s;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(s=this._instance)==null||s.onSessionId==null||s.onSessionId(r=>this.Ss(r))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,s){return!!e&&Pu(e.propertyFilters,s==null?void 0:s.properties)}Ps(e,s){var r=new Map;return e.forEach(i=>{var n;(n=i.conditions)==null||(n=n[s])==null||(n=n.values)==null||n.forEach(o=>{if(o!=null&&o.name){var a=r.get(o.name)||[];a.push(i.id),r.set(o.name,a)}})}),r}Rs(e,s,r){var i=(r===Is.Activation?this.ws:this.ks).get(e),n=[];return this.As(o=>{n=o.filter(a=>i==null?void 0:i.includes(a.id))}),n.filter(o=>{var a,l=(a=o.conditions)==null||(a=a[r])==null||(a=a.values)==null?void 0:a.find(u=>u.name===e);return this.Is(l,s)})}register(e){var s;I((s=this._instance)==null?void 0:s._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var s=e.filter(r=>{var i,n;return((i=r.conditions)==null?void 0:i.actions)&&((n=r.conditions)==null||(n=n.actions)==null||(n=n.values)==null?void 0:n.length)>0});s.length!==0&&(this.Os==null&&(this.Os=new Mp(this._instance),this.Os.init(),this.Os.fs(r=>{this.onAction(r)})),s.forEach(r=>{var i,n,o,a,l;r.conditions&&(i=r.conditions)!=null&&i.actions&&(n=r.conditions)!=null&&(n=n.actions)!=null&&n.values&&((o=r.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(r.conditions.actions.values),(l=r.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(r.id),this.xs.set(u.name,c||[r.id])}}))}))}Fs(e){var s,r=e.filter(n=>{var o,a;return((o=n.conditions)==null?void 0:o.events)&&((a=n.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0}),i=e.filter(n=>{var o,a;return((o=n.conditions)==null?void 0:o.cancelEvents)&&((a=n.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0});r.length===0&&i.length===0||((s=this._instance)==null||s._addCaptureHook((n,o)=>{this.onEvent(n,o)}),this.ws=this.Ps(e,Is.Activation),this.ks=this.Ps(e,Is.Cancellation))}onEvent(e,s){var r,i,n=this.Ds(),o=(s==null||(r=s.properties)==null?void 0:r.$survey_id)||(s==null||(i=s.properties)==null?void 0:i.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return n.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return n.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,s,Is.Cancellation);l.length>0&&(n.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)){n.info("event name matched",{event:e,eventPayload:s,items:this.ws.get(e)});var u=this.Rs(e,s,Is.Activation);this.Hs(u.map(c=>c.id))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var s;if(e.length!==0){var r=!((s=this._instance)==null||s.get_session_id==null||!s.get_session_id()),i=[];for(var n of e)r&&this.Cs(n)?this.qs(n)&&this.Us(n):i.push(n);i.length>0&&(this._s=[...new Set([...this._s,...i])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter(r=>r!==e);var s=this.zs();return!s.includes(e)&&(this.Ws([...s,e]),this.Vs(),!0)}Ns(e){var s=new Set(e);this._s=this._s.filter(n=>!s.has(n));var r=this.Zs(),i=r.filter(n=>!s.has(n));i.length!==r.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,s=this.Ms();if(!s)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var s=this.Qs();this.Ts(b({},s,{[e]:Date.now()}))}}js(e){if(this.Ms()){var s=this.Qs(),r={},i=!1;for(var n of Object.entries(s)){var o=n[0],a=n[1];e.includes(o)?i=!0:r[o]=a}i&&(vt(r)?this.Es():this.Ts(r))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var s=this.Qs()[e];return de(s)?s:void 0}}Zs(){var e,s=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s])||[]}zs(){var e,s,r=this.Zs();if(r.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],n=(s=this._instance)==null||s.get_session_id==null?void 0:s.get_session_id();return n&&i===n?r:[]}Vs(){var e,s=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();s&&this.Xs(s)}Gs(){this.ta()}Ss(e){var s,r=(s=this._instance)==null||(s=s.persistence)==null?void 0:s.props[this.Ys()];if(r&&r!==e){var i=this.Zs(),n=this.Qs();i.length>0&&(this.Ws([]),i.filter(o=>de(n[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 Lp extends Np{constructor(e){super(e)}Js(){return Dn}Ys(){return kr}Ms(){return Ir}Ts(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Ir]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ir)}Cs(e){var s,r;this.As(n=>{r=n.find(o=>o.id===e)});var i=(s=r)==null||(s=s.appearance)==null?void 0:s.surveyPopupDelaySeconds;return de(i)&&i>0}ra(){return ft.SHOWN}As(e){var s;(s=this._instance)==null||s.getSurveys(e)}Bs(e){var s;(s=this._instance)==null||s.cancelPendingSurvey(e)}Ds(){return V}Ws(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Dn]:e})}Xs(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[kr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(kr)}ea(){return!1}$s(e,s){var r;this.As(n=>{r=n.find(o=>o.id===s)});var i=!r||function(n){var o;return Au(n)&&!((o=n.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||n.schedule==="always"}(r);return i?e===ft.SHOWN?"consume":"ignore":e===ft.SHOWN?"persist":e===ft.DISMISSED||e===ft.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var br="SDK is not enabled or survey functionality is not yet loaded",vl="Disabled. Not loading surveys.",Op=g!=null&&g.location?ti(g.location.hash,"__posthog")||ti(location.hash,"state"):null,ml="_postHogToolbarParams",_l=se("[Toolbar]"),yl=se("[FeatureFlags]");class Dp{constructor(e,s){s===void 0&&(s=!1),this.na=!1,this.update(e,s)}update(e,s){this.sa=((r,i)=>{var n,o,a,l;return{bootstrap:{featureFlags:(n=r.bootstrap)==null?void 0:n.featureFlags,featureFlagPayloads:(o=r.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:i,featureFlagsDisabled:!!r.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!r.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!r.advanced_feature_flags_dedup_per_session,cacheTtlMs:r.feature_flag_cache_ttl_ms,requestTimeoutMs:r.feature_flag_request_timeout_ms,compression:r.disable_compression?"none":"base64",evaluationContexts:(a=(l=r.evaluation_contexts)!==null&&l!==void 0?l:r.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:O(r.flag_keys)?r.flag_keys:void 0}})(e,s),!e.evaluation_environments||e.evaluation_contexts||this.na||(yl.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),I(e.flag_keys)||O(e.flag_keys)||yl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var wl=se("[FeatureFlags]"),Mt=se("[FeatureFlags]",{debugEnabled:!0}),gn=`" failed. Feature flags didn't load in time.`,bl="connection_error",El=t=>{for(var e={},s=0;t.length>s;s++)e[t[s]]=!0;return e},Sl=t=>{var e={};for(var s of Fr(t||{})){var r=s[1];r&&(e[s[0]]=r)}return e},Xe=se("[Error tracking]"),xl="Refusing to render web experiment since the viewer is a likely bot",Bp={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>ii(e,t),not_regex:(t,e)=>!ii(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var s=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(r){r===void 0&&(r=!1),s.getWebExperiments(i=>{ye.aa("retrieved web experiments from the server"),s.oa=new Map,i.forEach(n=>{if(n.feature_flag_key){var o;s.oa&&(ye.aa("setting flag key ",n.feature_flag_key," to web experiment ",n),(o=s.oa)==null||o.set(n.feature_flag_key,n));var a=s._instance.getFeatureFlag(n.feature_flag_key);z(a)&&n.variants[a]&&s.la(n.name,a,n.variants[a].transforms)}else if(n.variants)for(var l in n.variants){var u=n.variants[l];ye.ua(u,s._instance)&&s.la(n.name,l,u.transforms)}})},r)},this._instance=e,this._instance.onFeatureFlags(r=>{this.onFeatureFlags(r)})}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(xl);else if(!this.Ne.disable_web_experiments){if(B(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();ye.aa("applying feature flags",e),e.forEach(s=>{var r;if(this.oa&&(r=this.oa)!=null&&r.has(s)){var i,n=this._instance.getFeatureFlag(s),o=(i=this.oa)==null?void 0:i.get(s);n&&o!=null&&o.variants[n]&&this.la(o.name,n,o.variants[n].transforms)}})}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var s=ps(e==null?void 0:e.search,"__experiment_id"),r=ps(e==null?void 0:e.search,"__experiment_variant");s&&r&&(ye.aa("previewing web experiments "+s+" && "+r),this.getWebExperiments(i=>{this.ha(parseInt(s),r,i)},!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,s,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!s)return e(i);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:n=>e(n.statusCode===200&&n.json&&n.json.experiments||[])})}ha(e,s,r){var i=r.filter(n=>n.id===e);i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+s+"]"),this.la(i[0].name,s,i[0].variants[s].transforms))}static ua(e,s){return!B(e.conditions)&&ye.da(e,s)&&ye.va(e)}static da(e,s){var r;if(B(e.conditions)||B((r=e.conditions)==null?void 0:r.url))return!0;var i=ye.getWindowLocation();if(i){var n,o,a,l=Vc(s,i.href);return(n=e.conditions)==null||!n.url||Bp[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return g==null?void 0:g.location}static va(e){var s;if(B(e.conditions)||B((s=e.conditions)==null?void 0:s.utm))return!0;var r=au();if(r.utm_source){var i,n,o,a,l,u,c,d,h=(i=e.conditions)==null||(i=i.utm)==null||!i.utm_campaign||((n=e.conditions)==null||(n=n.utm)==null?void 0:n.utm_campaign)==r.utm_campaign,f=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==r.utm_source,p=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((u=e.conditions)==null||(u=u.utm)==null?void 0:u.utm_medium)==r.utm_medium,v=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==r.utm_term;return h&&p&&v&&f}return!1}static aa(e){for(var s=arguments.length,r=new Array(s>1?s-1:0),i=1;s>i;i++)r[i-1]=arguments[i];C.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(xl):s!=="control"?r.forEach(i=>{if(i.selector){var n;ye.aa("applying transform of variant "+s+" for experiment "+e+" ",i);var o=(n=document)==null?void 0:n.querySelectorAll(i.selector);o==null||o.forEach(a=>{var l=a;i.html&&(l.innerHTML=i.html),i.css&&l.setAttribute("style",i.css)})}}):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return xe&&this._instance?Iu(xe,this.Ne.custom_blocked_useragents):void 0}}var je=se("[Conversations]"),Nt="Conversations not available yet.",kl="console",Nu="__posthogHandledLogsRequestError",vn=(t,e)=>{var s=t instanceof Error?t:new Error(e);return s[Nu]=!0,s},Il=t=>!!t&&typeof t=="object"&&t[Nu]===!0,Si={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=wl,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 Dp(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var s;(s=this.Ea)==null||s.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),s=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(s):s();var e,s}Pa(t){if(this.nn===t)return g&&ie(g,"online",this.Ca),this.Ra=t.registerDynamicEventProperties(()=>this.Aa()?this.fa:this.pa),this.Fa(),this.initialize()}destroy(){g==null||g.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=[],g==null||g.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[Ls,Os,xr,Qe]){var s=this.Oa(e);I(s)||(t[e]=s)}this.fa=t;var r=b({},t),i=this.Oa(Lt);if(i)for(var n of Object.entries(i))r["$feature/"+n[0]]=n[1];this.pa=r}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Hs);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 s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),s}):[]}qa(){var t=this.Ne.flagKeys;if(!I(t))return t.filter(e=>{var s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),s})}initialize(){var t,e,s=this.Ne,r=(t=(e=s.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(r).length){var i,n,o=(i=(n=s.bootstrap)==null?void 0:n.featureFlagPayloads)!==null&&i!==void 0?i:{},a=Object.keys(r).filter(u=>!!r[u]).reduce((u,c)=>(u[c]=r[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,s){var r,i,n=s!=null&&s.merge&&(r=this.Oa(Lt))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(i=this.Oa(Os))!==null&&i!==void 0?i:{},a=b({},n,t),l=b({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:_a(h),variant:ya(h),reason:void 0,metadata:I(l==null?void 0: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(Ln),e=this.Oa(Qe),s=this.Oa(Ot);if(!s&&!e)return t||{};var r=ee({},t||{}),i=[...new Set([...Object.keys(s||{}),...Object.keys(e||{})])];for(var n of i){var o,a,l=r[n],u=e==null?void 0:e[n],c=I(u)?(o=l==null?void 0:l.enabled)!==null&&o!==void 0&&o:!!u,d=I(u)?l==null?void 0:l.variant:typeof u=="string"?u:void 0,h=s==null?void 0:s[n],f=b({},l,{enabled:c,variant:c?d??(l==null?void 0:l.variant):void 0});c!==(l==null?void 0:l.enabled)&&(f.original_enabled=l==null?void 0:l.enabled),d!==(l==null?void 0:l.variant)&&(f.original_variant=l==null?void 0:l.variant),h&&(f.metadata=b({},l==null?void 0:l.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[n]=f}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:s,finalDetails:r}),this.ca=!0),r}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map(s=>{var r=t[s];return{key:s,enabled:_a(r),variant:ya(r),payload:ma(e[s])}})}getFlagVariants(){var t=this.Oa(Lt),e=this.Oa(Qe);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:s}),this.ca=!0),s}getFlagPayloads(){var t=this.Oa(Os),e=this.Oa(Ot);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:s}),this.ca=!0),s}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(jt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var s={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:b({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Dt),timezone:pu()};I(e.deviceId)||(s.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(s.disable_flags=!0);var r=this.Na();r.length&&(s.evaluation_contexts=r);var i=this.qa();I(i)||(s.flag_keys=i);var n=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(n?"&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({[Cr]:[bl]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:s,compression:this.Ne.compression==="base64"?Se.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then(c=>{var d,h,f=(d=c.json)!==null&&d!==void 0?d:{},p=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),p||this.wa||(this.$anon_distinct_id=void 0),!s.disable_flags||this.wa){this.ka=!p;var v=[];c.error?v.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?bl:"unknown_error"):c.statusCode!==200&&v.push("api_error_"+c.statusCode),f.errorsWhileComputingFlags&&v.push("errors_while_computing_flags");var _=!((h=f.quotaLimited)==null||!h.includes("feature_flags"));_&&v.push("quota_limited"),this.F({[Cr]:v}),_?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."):s.disable_flags||this.ja(f,p,{partialResponse:n}),l()}}else l()}).catch(u)}catch(c){u(c)}}}Ma(){return nu(this.Sa,3)}Ua(t){this.Sa=ou(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 s;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r=this.getFeatureFlagResult(t,e);return(s=r==null?void 0:r.variant)!==null&&s!==void 0?s:r==null?void 0:r.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+gn)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e==null?void 0: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 s,r=this.getFlagVariants(),i=t in r,n=r[t],o=this.getFlagPayloads()[t],a=String(n),l=this.Oa(xr)||void 0,u=this.Oa(Hs)||void 0,c=this.Oa(jt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,f=this.Oa(Bs);h&&h!==f&&(c={},s=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))s&&this.F({[jt]:c,[Bs]:s});else{var p,v,_,m,w,S,k,E,P,D;O(c[t])?c[t].push(a):c[t]=[a],this.F(b({[jt]:c},s?{[Bs]:s}:{}));var x=this.getFeatureFlagDetails(t),A=[...(p=this.Oa(Cr))!==null&&p!==void 0?p:[]];I(n)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:n,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((v=this.Ne.bootstrap)==null||(v=v.featureFlags)==null?void 0:v[t])||null,$feature_flag_bootstrapped_payload:((_=this.Ne.bootstrap)==null||(_=_.featureFlagPayloads)==null?void 0:_[t])||null,$used_bootstrap_value:!this.ka};I(x==null||(m=x.metadata)==null?void 0:m.has_experiment)||(R.$feature_flag_has_experiment=x.metadata.has_experiment),I(x==null||(w=x.metadata)==null?void 0:w.version)||(R.$feature_flag_version=x.metadata.version);var M,$=(S=x==null||(k=x.reason)==null?void 0:k.description)!==null&&S!==void 0?S:x==null||(E=x.reason)==null?void 0:E.code;$&&(R.$feature_flag_reason=$),x!=null&&(P=x.metadata)!=null&&P.id&&(R.$feature_flag_id=x.metadata.id),I(x==null?void 0:x.original_variant)&&I(x==null?void 0:x.original_enabled)||(R.$feature_flag_original_response=I(x.original_variant)?x.original_enabled:x.original_variant),x!=null&&(D=x.metadata)!=null&&D.original_payload&&(R.$feature_flag_original_payload=x==null||(M=x.metadata)==null?void 0:M.original_payload),A.length&&(R.$feature_flag_error=A.join(",")),this.za(R)}else s&&this.F({[jt]:c,[Bs]:s});if(i)return{key:t,enabled:!!n,variant:typeof n=="string"?n:void 0,payload:ma(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+gn)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch(s=>{this.rt.error("Failed to capture feature flag call",s)})}catch(s){this.rt.error("Failed to capture feature flag call",s)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var s=this;return X(function*(){var r=s.nn;if(r){var i={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},n=s.Na();n.length&&(i.evaluation_contexts=n);var o,a=s.qa();I(a)||(i.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:s.Ne.compression==="base64"?Se.Base64:void 0,sentAt:"body",timeoutMs:s.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=(u==null?void 0:u[t])||void 0}catch(c){return void s.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){s.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+gn),e.defaultValue;var s=this.getFeatureFlag(t,e);return I(s)?e.defaultValue:!!s}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter(e=>e!==t)}receivedFeatureFlags(t,e,s){this.ja(t,e,s)}ja(t,e,s){if(this.nn){this.ma=!0;var r=function(i,n,o,a,l,u){n===void 0&&(n={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=wl);var c=((P,D)=>{var x=P.flags;return x?b({},P,{featureFlags:Object.fromEntries(Object.keys(x).map(A=>{var R;return[A,(R=x[A].variant)!==null&&R!==void 0?R:x[A].enabled]})),featureFlagPayloads:Object.fromEntries(Object.keys(x).filter(A=>x[A].enabled).filter(A=>{var R;return(R=x[A].metadata)==null?void 0:R.payload}).map(A=>{var R;return[A,(R=x[A].metadata)==null?void 0:R.payload]}))}):(P.featureFlags&&D.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),P)})(i,u),d=c.flags,h=c.featureFlags,f=c.featureFlagPayloads;if(h){var p=i.requestId,v=i.evaluatedAt;if(O(h)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var _={};if(h)for(var m=0;h.length>m;m++)_[h[m]]=!0;return{[Ls]:h,[Lt]:_,[Vr]:!1}}var w=h,S=f,k=d;if(l!=null&&l.partialResponse)w=b({},n,w),S=b({},o,S),k=b({},a,k);else if(i.errorsWhileComputingFlags)if(d){var E=new Set(Object.keys(d).filter(P=>{var D;return!((D=d[P])!=null&&D.failed)}));w=b({},n,Object.fromEntries(Object.entries(w).filter(P=>E.has(P[0])))),S=b({},o,Object.fromEntries(Object.entries(S||{}).filter(P=>E.has(P[0])))),k=b({},a,Object.fromEntries(Object.entries(k||{}).filter(P=>E.has(P[0]))))}else w=b({},n,w),S=b({},o,S),k=b({},a,k);return b({[Ls]:Object.keys(Sl(w)),[Lt]:w||{},[Os]:S||{},[Ln]:k||{},[Vr]:i.minimalFlagCalledEvents===!0},p?{[xr]:p}:{},v?{[Hs]:v}:{})}}(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),s,this.rt);r&&this.F(r),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([Qe,Ot]),this.Va(),void Mt.info("All overrides cleared");if(O(t))return this.F({[Qe]:El(t)}),this.Va(),void Mt.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,s=t;this.ca=!!((e=s.suppressWarning)!==null&&e!==void 0&&e);var r={},i=s.flags,n=s.payloads;return i&&(r[Qe]=O(i)?El(i):i),n&&(r[Ot]=n),Object.keys(r).length&&this.F(r),i===!1&&n===!1?this.q([Qe,Ot]):i===!1?this.q(Qe):n===!1&&this.q(Ot),this.Va(),i===!1?Mt.info("Flag overrides cleared"):i&&Mt.info("Flag overrides set",{flags:i}),void(n===!1?Mt.info("Payload overrides cleared"):n&&Mt.info("Payload overrides set",{payloads:n}))}if(t&&typeof t=="object")return this.F({[Qe]:t}),this.Va(),void Mt.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(),s=e.flags,r=e.flagVariants;try{t(s,r)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,s){var r=(this.Oa(Sr)||[]).find(l=>l.flagKey===t),i={["$feature_enrollment/"+t]:e},n={$feature_flag:t,$feature_enrollment:e,$set:i};r&&(n.$early_access_feature_name=r.name),s&&(n.$feature_enrollment_stage=s);var o=b({},this.getFlagVariants(),{[t]:e});this.F({[Ls]:Object.keys(Sl(o)),[Lt]:o,[ct]:b({},this.Oa(ct)||{},i)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",n).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,s){e===void 0&&(e=!1);var r=this.Oa(Sr);!r||e?this.Qa(t,s):t(r)}Qa(t,e){var s=this;return X(function*(){var r=s.nn;if(r){var i,n=e?"&"+e.map(a=>"stage="+a).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+n,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;s.F({[Sr]:i=o.json.earlyAccessFeatures})}catch(a){return void s.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){s.rt.error("Early access feature callback failed",a)}}})()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter(s=>e[s]),flagVariants:Object.keys(e).filter(s=>e[s]).reduce((s,r)=>(s[r]=e[r],s),{})}}Va(t){this.Fa();var e=this.Ga(),s=e.flags,r=e.flagVariants;this.featureFlagEventHandlers.forEach(i=>{try{i(s,r,{errorsLoading:t})}catch(n){this.rt.error("Error while running feature flags callback",n)}})}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var s=this.Oa(ct)||{},r=(t==null?void 0:t.$set)||(t!=null&&t.$set_once?{}:t),i=t==null?void 0:t.$set_once,n={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in s||(n[o]=i[o]));this.F({[ct]:b({},s,n,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=b({},this.Oa(ct)||{});t.forEach(r=>{delete s[r]}),this.F({[ct]:s}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ct),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=this.Oa(Dt)||{},r=b({},s);for(var i of Object.keys(t))r[i]=b({},s[i],t[i]);this.F({[Dt]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Dt)||{};this.F({[Dt]:b({},e,{[t]:{}})})}else this.q(Dt)}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}}},jp={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===Ts||this.Ya===yr?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=pl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(F==null||!F.visibilityState||F.visibilityState==="visible")return!0;var s=g==null||(e=g.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(s!=null&&s.length)||s.some(r=>r.name==="visible")})(),this.Ie=()=>{var e;(F==null?void 0:F.visibilityState)==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw at.error("started without valid sessionManager"),new Error(eo+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(eo+' cannot be used with cookieless_mode="always"');F!=null&&F.addEventListener&&ie(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(Ut))==null||!t.enabled),s=!this.Ne.disable_session_recording,r=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return g&&e&&s&&!r}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var s=!I(Object.assign)&&!I(Array.from);this.ro&&s?(this.no(t),at.info("starting")):(this.Ya=pl,this.stopRecording())}}no(t){var e,s,r;this.ro&&(this.Ya!==Ts&&this.Ya!==yr&&(this.Ya=fl),T!=null&&(e=T.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(s=T.__PosthogExtensions__)!=null&&s.initSessionRecording?this.so(t):(r=T.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,this.ao,i=>{if(i)return at.error("could not load recorder",i);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(Po),(e=this.Mr)==null||e.unregister(Nc)}uo(t,e){if(B(t))return null;var s,r=de(t)?t:parseFloat(t);return typeof(s=r)!="number"||!Number.isFinite(s)||0>s||s>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):r}ho(t){if(this.Mr){var e,s,r=this.Mr,i=()=>{var n,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((n=this.Ne.session_recording)==null?void 0:n.sampleRate,"session_recording.sampleRate"),l=this.uo(o==null?void 0:o.sampleRate,"remote config sampleRate"),u=a??l;B(u)&&this.lo();var c=o==null?void 0:o.minimumDurationMilliseconds;r.register({[Ut]:b({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:b({capturePerformance:t.capturePerformance},o==null?void 0:o.networkPayloadCapture),canvasRecording:{enabled:o==null?void 0:o.recordCanvas,fps:o==null?void 0:o.canvasFps,quality:o==null?void 0:o.canvasQuality},sampleRate:u,minimumDurationMilliseconds:I(c)?null:c,endpoint:o==null?void 0:o.endpoint,triggerMatchType:o==null?void 0:o.triggerMatchType,masking:o==null?void 0:o.masking,urlTriggers:o==null?void 0:o.urlTriggers,version:o==null?void 0:o.version,triggerGroups:o==null?void 0:o.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(i)}}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===Ts&&(this.Ya=yr,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var s;e===void 0&&(e="log"),(s=this.Ja)!=null&&s.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,s=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(Ut);return(s==null||(e=s.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Ut);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(s){return at.warn("persisted remote config for session recording is invalid and will be ignored",s),!1}return!B(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,s,r;if(!this.eo){if((e=T.__PosthogExtensions__)==null||!e.initSessionRecording)return at.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[zc]:!0});var i;if(this.Ja||(this.Ja=(i=T.__PosthogExtensions__)==null?void 0:i.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===yr||this.Ya===Ts?void 0:(this.Ya=Ts,at.info("persisted remote config is stale, requesting fresh config before starting"),void new fu(this._instance).load());this.Ya=fl,(s=(r=this.Ja).setDocumentWasEverVisible)==null||s.call(r,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({[Oc]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[Lc]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,s;this.Ja||(s=this.Mr)==null||s.register({[t==="url"?Dc:Bc]:!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 s;return!((s=this.Ja)==null||!s.tryAddCustomEvent(t,e))}}},Up={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new ul(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,s=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return s.url_allowlist=(t=s.url_allowlist)==null?void 0:t.map(r=>new RegExp(r)),s.url_ignorelist=(e=s.url_ignorelist)==null?void 0:e.map(r=>new RegExp(r)),s}yo(){if(this.isBrowserSupported()){if(g&&F){var t=s=>{s=s||(g==null?void 0:g.event);try{this.bo(s)}catch(r){dn.error("Failed to capture event",r)}};if(ie(F,"submit",t,{capture:!0}),ie(F,"change",t,{capture:!0}),ie(F,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||(g==null?void 0:g.event);try{this.bo(s,un)}catch(r){dn.error("Failed to capture copy/cut event",r)}};ie(F,"copy",e,{capture:!0}),ie(F,"cut",e,{capture:!0})}}}else dn.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 s=e.autocapture_opt_out;Ke(s)&&(this.instance.persistence&&this.instance.persistence.register({[Pn]:s}),this.co=s),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,s=[];return(e=this.mo)==null||e.forEach(r=>{var i=F==null?void 0:F.querySelectorAll(r);i==null||i.forEach(n=>{t===n&&s.push(r)})}),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[Pn],r=this.co,i=this.instance.Qi()&&!this.fo;if(Re(r)&&!Ke(s)&&!i)return!1;var n=(e=this.co)!==null&&e!==void 0?e:!!s;return!!this.instance.config.autocapture&&!n}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var s,r=Zi(t);Kc(r)&&(r=r.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ja(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===un;if(r&&function(d,h,f,p,v,_){var m;if(!g||Mo(d)||f!=null&&f.url_allowlist&&!Oa(f.url_allowlist,_)||f!=null&&f.url_ignorelist&&Oa(f.url_ignorelist,_))return!1;if(f!=null&&f.dom_event_allowlist){var w=f.dom_event_allowlist;if(w&&!w.some(x=>h.type===x))return!1}var S=eu(d,p),k=S.parentIsUsefulElement,E=S.targetElementList;if(!function(x,A){var R=A==null?void 0:A.element_allowlist;if(I(R))return!0;var M,$=function(J){if(R.some(W=>J.tagName.toLowerCase()===W))return{v:!0}};for(var N of x)if(M=$(N))return M.v;return!1}(E,f)||!qn(E,f==null?void 0:f.css_selector_allowlist)||qn(E,(m=f==null?void 0:f.css_selector_ignorelist)!==null&&m!==void 0?m:Dh))return!1;try{var P=g.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var D=d.tagName.toLowerCase();switch(D){case"html":return!1;case"form":return(v||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(v||["change","click"]).indexOf(h.type)>=0;default:return k?(v||["click"]).indexOf(h.type)>=0:(v||["click"]).indexOf(h.type)>=0&&($o.indexOf(D)>-1||d.getAttribute("contenteditable")==="true")}}(r,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var n=Ap(r,{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=n.props;if(n.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===un){var l,u=Zc(g==null||(l=g.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 Ee(F==null?void 0:F.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(g==null||(e=g.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(C.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,C.info("History API monitoring stopped")}monitorHistoryChanges(){g&&g.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(g&&((e=g.history[t])==null||!e.__posthog_wrapped__)){var s=this;(function(r,i,n){try{if(!(i in r))return dl;var o={next:r[i]},a=n(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 Ee(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),r[i]=a,()=>{if(r[i]!==a)for(var l=r[i];Ee(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else r[i]=o.next}}catch{return dl}})(g.history,t,r=>function(i,n,o){r.call(this,i,n,o),s.So(t)})}}So(t){try{var e,s=g==null||(e=g.location)==null?void 0:e.pathname;if(!s)return;s!==this._o&&this.isEnabled&&this._instance.capture(ts,{navigation_type:t}),this._o=s}catch(r){C.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(g,"popstate",t),this.wo=()=>{g&&g.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[An]),this.rageclicks=new ul(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return te(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return B(this.Ne.capture_heatmaps)?B(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;Tp.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 s=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[An]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){pn(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=(F==null?void 0:F.visibilityState)==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){g&&F&&(this.Po=this.cr.bind(this),ie(g,Zr,this.Po),this.Ro=t=>this.ke(t||(g==null?void 0:g.event)),ie(F,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||(g==null?void 0:g.event)),ie(F,"mousemove",this.Ao,{capture:!0}),this.Lo=new Ga(this.instance,qh,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(F,Yr,this.Oo),this.vo=!0)}Eo(){var t;g&&F&&(this.Po&&g.removeEventListener(Zr,this.Po),this.Ro&&F.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&F.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&F.removeEventListener(Yr,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var s=this.instance.scrollManager.scrollY(),r=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),n=function(o,a,l){for(var u=o;u&&Ct(u)&&!Me(u,"body");){if(u===l)return!1;var c=void 0;try{var d,h,f;c=(d=(h=(f=u.ownerDocument)==null?void 0:f.defaultView)!==null&&h!==void 0?h:g)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(L(a,c))return!0;u=Xc(u)}return!1}(Zi(t),["fixed","sticky"],i);return{x:t.clientX+(n?0:r),y:t.clientY+(n?0:s),target_fixed:n,type:e}}ke(t,e){var s;if(e===void 0&&(e="click"),!La(t.target)&&pn(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ja(Zi(t),this.instance.config.rageclick)&&this.Vt(b({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!La(t.target)&&pn(t)&&(clearTimeout(this.Do),this.Do=setTimeout(()=>{this.Vt(this.$o(t,"mousemove"))},500))}Vt(t){if(g){var e=this.Ne.disable_capture_url_hashes?It(g.location.href):g.location.href,s=this.Ne.custom_personal_data_properties,r=this.Ne.mask_personal_data_properties?[...fs,...s||[]]:[],i=Zs(e,r,Xs);this.R=this.R||{},this.R[i]||(this.R[i]=[]),this.R[i].push(t)}}cr(){this.R&&!vt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:Ga,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",b({$current_url:this.R.url},this.R.metrics.reduce((s,r)=>b({},s,{["$web_vitals_"+r.name+"_event"]:b({},r),["$web_vitals_"+r.name+"_value"]:r.value}),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=s=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},B(s==null?void 0:s.name)||B(s==null?void 0:s.value))$t.error("Invalid metric received",s);else{var i=typeof s.navigationURL=="string"?s.navigationURL:void 0,n=this.Bo(i);if(!I(n)){var o=de(s.navigationId)||typeof s.navigationId=="string"?"navigation:"+s.navigationId:"url:"+n;if(!this.Ho||this.Ho>s.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),I(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=n),this.R.firstMetricTimestamp=I(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,s.attribution&&s.attribution.interactionTargetElement&&(s.attribution.interactionTargetElement=void 0);var a=(r=this._instance.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0),l=b({},s,i?{navigationURL:n}:{},{$current_url:n,timestamp:Date.now()});I(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 $t.error("Ignoring metric with value >= "+this.Ho,s)}}},this.Uo=()=>{if(!this.vo){var s,r,i,n,o=T.__PosthogExtensions__,a=o==null?void 0:o.postHogWebVitalsCallbacksByFlavor,l=(a==null?void 0:a[this.zo])||(this.zo==="web-vitals"&&I(a)?o==null?void 0:o.postHogWebVitalsCallbacks:void 0);if(I(l)||(s=l.onLCP,r=l.onCLS,i=l.onFCP,n=l.onINP),s&&r&&i&&n){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&n(this.jo.bind(this),u),this.vo=!0}else $t.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Mn]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,s=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return B(s)?((e=this._instance.persistence)==null?void 0:e.props[Nn])||["CLS","FCP","INP","LCP"]:s}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&de(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:hl;return t>0&&6e4>=t?hl:t}get isEnabled(){var t=re==null?void 0:re.protocol;if(t!=="http:"&&t!=="https:")return $t.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=te(this.Wo)?this.Wo.web_vitals:Ke(this.Wo)?this.Wo:void 0;return Ke(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&($t.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var s=te(e.capturePerformance)&&!!e.capturePerformance.web_vitals,r=te(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Mn]:s}),this._instance.persistence.register({[Nn]:r})),this.Co=s,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=T.__PosthogExtensions__,s=this.zo,r=e==null?void 0:e.postHogWebVitalsCallbacksByFlavor;r!=null&&r[s]||s==="web-vitals"&&I(r)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,s,i=>{i?$t.error("failed to load script",i):t()})}Bo(t){var e=t||(g==null?void 0:g.location.href);if(e){var s=this._instance.config.disable_capture_url_hashes?It(e):e,r=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[...fs,...r||[]]:[];return Zs(s,i,Xs)}$t.error("Could not determine current URL")}}},Hp={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var s;if(g&&this.isEnabled&&(s=T.__PosthogExtensions__)!=null&&s.errorWrappingFunctions){var r=T.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=T.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,n=T.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=r(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=i(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=n(this.captureException.bind(this)))}catch(o){Rs.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Rn]),this.Jo=new jd(b({},function(s){var r,i,n,o;return s===void 0&&(s={}),{refillRate:(r=(i=s.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:s.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(n=(o=s.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:s.__exceptionRateLimiterBucketSize)!==null&&n!==void 0?n:10}}(this._instance.config.error_tracking),{refillInterval:1e4,rt:Rs})),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 te(t)?e=b({},e,t):(I(t)?this.Ko:t)&&(e=b({},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?(Rs.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,s;(e=T.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(s=T.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"exception-autocapture",r=>{if(r)return Rs.error("failed to load script",r);t()})}Qo(){var t,e,s;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(s=this.Go)==null||s.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({[Rn]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,s,r,i=(e=t==null||(s=t.$exception_list)==null||(s=s[0])==null?void 0:s.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?Rs.info("Skipping exception capture because of client rate limiting.",{exception:i}):(r=this._instance.exceptions)==null||r.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,s;this.Xo=[],this.tl=new rh([new dh,new wh,new ph,new hh,new _h,new mh,new gh,new yh],function(r){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;i>o;o++)n[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 h=c[d];if(1024>=h.length){var f=Ta.test(h)?h.replace(Ta,"$1"):h;if(!f.match(/\S*Error: /)){for(var p of n){var v=p(f,r);if(v){u.push(v);break}}if(u.length>=50)break}}}return function(_){if(!_.length)return[];var m=Array.from(_);return m.reverse(),m.slice(0,50).map(w=>{return b({},w,{filename:w.filename||(S=m,S[S.length-1]||{}).filename,function:w.function||hs});var S})}(u)}}("web:javascript",ah,uh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(Tn))!==null&&e!==void 0?e:[],this.el=qr(this.il()),this.rl=new Eh(this.el)}onConfigChange(){this.el=qr(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,s,r;if(t.ok){var i=t.config;if("errorTracking"in i){var n=(e=(s=i.errorTracking)==null?void 0:s.suppressionRules)!==null&&e!==void 0?e:[],o=(r=i.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=n,this._instance.persistence&&this._instance.persistence.register({[Tn]:this.Xo,[$n]:o})}}}get nl(){var t,e=!!this._instance.get_property($n),s=this._instance.config.error_tracking.captureExtensionExceptions;return(t=s??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e==null?void 0:e.syntheticException,mechanism:{handled:e==null?void 0:e.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!z(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var s=function(n){if(!n)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(n).reduce((a,l)=>bh.has(l)?(o.push(l),a):(a[l]=n[l],a),{}),droppedKeys:o}}(this.sl(e)),r=s.sanitizedProperties,i=s.droppedKeys;i.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(b({[zr]:t,[Wr]:new Date().toISOString()},r))}catch(n){Xe.error("Failed to add exception step. Ignoring breadcrumb.",n)}}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 Xe.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 Xe.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 Xe.info("Skipping exception capture because it was thrown by the PostHog SDK")}var s=this.el.enabled&&B(t.$exception_steps)?this.dl(t):t,r=typeof(n=globalThis._posthogReleaseId)=="string"&&n.length>0?n:void 0;r&&(s.$release_id=r);try{var i=this._instance.capture("$exception",s,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return i&&this.rl.clear(),i}catch(o){return Xe.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void Xe.error("Failed to process exception event. Ignoring this exception.",o)}var n}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:b({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[zr]:t,[Wr]:new Date().toISOString()})}sl(t){return te(t)?b({},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((s,r)=>{var i=r.type,n=r.value;return z(i)&&i.length>0&&s.$exception_types.push(i),z(n)&&n.length>0&&s.$exception_values.push(n),s},{$exception_types:[],$exception_values:[]});return this.Xo.some(s=>{var r=s.values.map(i=>{var n=Fu[i.operator],o=e[i.key];if(!n||!o)return!1;var a=O(i.value)?i.value:[i.value];return a.length>0&&n(a,o)});return s.type==="OR"?r.some(Boolean):r.every(Boolean)})}catch(s){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",s),!1}}ul(t){return t.flatMap(e=>{var s,r;return(s=(r=e.stacktrace)==null?void 0:r.frames)!==null&&s!==void 0?s:[]}).some(e=>e.filename&&e.filename.startsWith("chrome-extension://"))}hl(t){if(t.length>0){var e,s,r,i,n=(e=(s=t[0].stacktrace)==null?void 0:s.frames)!==null&&e!==void 0?e:[],o=n[n.length-1];return(r=o==null||(i=o.filename)==null?void 0:i.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}al(t){return!B(t)&&O(t)}}},zp=b({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 s,r;if(this.Mr&&this.Mr.register({[Fo]:!!e.productTours}),!fn(this._instance))return!this.vl&&B((s=this.Mr)==null?void 0:s.props[Ds])||wr.info("product tours disabled; stopping and clearing cached tours"),(r=this.vl)==null||r.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&fn(this._instance)&&this.ai(()=>this.fl())}ai(t){var e,s;(e=T.__PosthogExtensions__)!=null&&e.generateProductTours?t():(s=T.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"product-tours",r=>{r?wr.error("Could not load product tours script",r):t()})}fl(){var t;!this.vl&&(t=T.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=T.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!O(this.cl)||e){var s=this.Mr;if(s){var r=s.props[Ds];if(O(r)&&!e)return this.cl=r,void t(r,{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:i=>{if(fn(this._instance)){var n=i.statusCode;if(n!==200||!i.json){var o="Product Tours API could not be loaded, status: "+n;return n===0?i.error||wr.warn(o):wr.error(o),void t([],{isLoaded:!1,error:o})}var a=O(i.json.product_tours)?i.json.product_tours:[];this.cl=a,s&&s.register({[Ds]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){B(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(Ds)}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)}}},Si),Wp={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 s=this.globalsForEvent(e);this.gl.push(s),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=T._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,s,r,i,n,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 h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var f=t.$set_once,p=t.$set;return{event:b({},Ql(t,$p),{properties:b({},t.properties,p?{$set:b({},(e=(s=t.properties)==null?void 0:s.$set)!==null&&e!==void 0?e:{},p)}:{},f?{$set_once:b({},(r=(i=t.properties)==null?void 0:i.$set_once)!==null&&r!==void 0?r:{},f)}:{}),elements_chain:(n=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&n!==void 0?n:"",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,s=(e=t.tagName)==null?void 0:e.toLowerCase();return s==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ze.error("prepare_external_dependency_stylesheet returned null"),null):s==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ze.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,s,r,i,n,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=F==null?void 0: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,h=new WeakSet,f=(_,m,w)=>{if(_!=null&&_[m]){var S=_[m];_[m]=w(S),c.push(()=>{_[m]=S})}},p=_=>{if(h.has(_))return _;var m=d.bl(_);return m&&h.add(m),m},v=_=>_.map(m=>typeof m=="string"?m:p(m)).filter(m=>!Re(m));return f(u,"appendChild",_=>function(m){var w=p(m);return w?_.call(this,w):m}),f(u,"insertBefore",_=>function(m,w){var S=p(m);return S?_.call(this,S,w):m}),f(u,"replaceChild",_=>function(m,w){var S=p(m);return S?_.call(this,S,w):w}),[(e=l.Element)==null?void 0:e.prototype,(s=l.Document)==null?void 0:s.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach(_=>{f(_,"append",m=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return m.apply(this,v(S))}),f(_,"prepend",m=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return m.apply(this,v(S))})}),[(i=l.Element)==null?void 0:i.prototype,(n=l.CharacterData)==null?void 0:n.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach(_=>{f(_,"before",m=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return m.apply(this,v(S))}),f(_,"after",m=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return m.apply(this,v(S))}),f(_,"replaceWith",m=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];var E=v(S);return S.length&&!E.length?void 0:m.apply(this,E)})}),f((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",_=>function(m,w){var S=p(w);return S?_.call(this,m,S):null}),this.wl=()=>{c.forEach(_=>_()),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 s=this._l();try{var r=t(s);return e&&s(),r}catch(i){throw s(),i}}setupSiteApp(t){var e=this.apps[t.id],s=()=>{var o;!e.errored&&this.gl.length&&(Ze.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))},r=!1,i=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&s()};try{var n=this.xl(o=>t.init({posthog:this._instance,callback(a){o(),i(a)}}),!1).processEvent;n&&(e.processEvent=n),r=!0}catch(o){Ze.error(gl+t.id,o),i(!1)}if(r&&e.loaded)try{s()}catch(o){Ze.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 s of t)this.setupSiteApp(s)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var s=this.globalsForEvent(t),r=function(n){try{e.xl(()=>n.processEvent==null?void 0:n.processEvent(s))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+n.id,o)}};for(var i of Object.values(this.apps))r(i)}}onRemoteConfig(t){var e,s,r,i=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",l=>this.Cl(l))):void Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((s=this.yl)==null||s.call(this),t.ok){var n=t.config;if((r=n.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;T["__$$ph_site_app_"+u]=i._instance,(l=T.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,d=>{if(d)return Ze.error(gl+u,d)})};for(var a of n.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},qp={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,s,r=this.Il();r?(I(this.Ml)&&(this.Ml=(e=T.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(r,()=>this._instance.get_distinct_id(),this._instance.sessionManager)),I(this.Tl)&&(this.Tl=(s=T.__PosthogExtensions__)==null||(s=s.tracingHeadersPatchFns)==null?void 0:s._patchFetch(r,()=>this._instance.get_distinct_id(),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,s;(e=T.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(s=T.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"tracing-headers",r=>{if(r)return Rp.error("failed to load script",r);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 O(t)?(O(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(O(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()}}},Vp=b({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 V.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(B(e))return V.warn("Flags not loaded yet. Not loading surveys.");var s=O(e);this.Rl=s?e.length>0:e,V.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=[],s=0;slocalStorage.removeItem(i))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)V.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)V.info(vl);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())V.info("Not loading surveys in cookieless mode without consent.");else{var t=T==null?void 0:T.__PosthogExtensions__;if(t){if(!I(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var s=t.generateSurveys;if(s)return void this.Dl(s,e);var r=t.loadExternalDependency;if(!r)return void this.$l(Ao);r(this._instance,"surveys",i=>{i||!t.generateSurveys?this.$l("Could not load surveys script",i):this.Dl(t.generateSurveys,e)})}catch(i){throw this.$l("Error initializing surveys",i),i}finally{this.Al=!1}}}else V.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new Lp(this._instance),V.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){V.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 V.info(vl),t([]);var s,r=this._instance.get_property(On);if(r&&!e)return t(r,{isLoaded:!0}),void(this.ql()&&this.getSurveys(()=>{},!0));typeof Promise<"u"&&this.Ll?this.Ll.then(i=>t(i.surveys,i.context)):(typeof Promise<"u"&&(this.Ll=new Promise(i=>{s=i})),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:i=>{var n;this.Ll=null;var o=i.statusCode;if(o!==200||!i.json){var a="Surveys API could not be loaded, status: "+o;o!==0?V.error(a):i.error||V.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(s==null||s({surveys:[],context:l}))}this.Ol=null;var u,c=i.json.surveys||[],d=c.filter(f=>function(p){return!(!p.start_date||p.end_date)}(f)&&(Au(f)||function(p){var v;return!((v=p.conditions)==null||(v=v.actions)==null||(v=v.values)==null||!v.length)}(f)));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(n=this._instance.persistence)==null||n.register({[On]:c,[Gr]:Date.now()});var h={isLoaded:!0};t(c,h),s==null||s({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(Gr);return de(t)&&Date.now()-t>3e5}Bl(){return de(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var s,r={id:t,current_iteration:(s=e==null?void 0:e.iteration)!==null&&s!==void 0?s:null};Tu(r);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(s){V.error("Error in survey callback",s)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!B(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);V.warn("init was not called")}Hl(t){var e=null;return this.getSurveys(s=>{var r;e=(r=s.find(i=>i.id===t))!==null&&r!==void 0?r:null}),e}Ul(t){if(B(this._surveyManager))return{eligible:!1,reason:br};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(B(this._surveyManager))return{eligible:!1,reason:br};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(B(this._surveyManager))return V.warn("init was not called"),{visible:!1,disabledReason:br};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return B(this._surveyManager)?(V.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:br})):new Promise(s=>{this.getSurveys(r=>{var i,n=(i=r.find(a=>a.id===t))!==null&&i!==void 0?i:null;if(n){var o=this.zl(n);s({visible:o.eligible,disabledReason:o.reason})}else s({visible:!1,disabledReason:"Survey not found"})},e)})}renderSurvey(t,e,s){var r;if(B(this._surveyManager))V.warn("init was not called");else{var i=typeof t=="string"?this.Hl(t):t;if(i!=null&&i.id)if(_p.includes(i.type)){var n=F==null?void 0:F.querySelector(e);if(n)return(r=i.appearance)!=null&&r.surveyPopupDelaySeconds?(V.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout(()=>{var o,a;V.info("Rendering survey "+i.id+" with delay of "+((o=i.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(i,n,s),V.info("Survey "+i.id+" rendered")},1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,n,s);V.warn("Survey element not found")}else V.warn("Surveys of type "+i.type+" cannot be rendered in the app");else V.warn("Survey not found")}}displaySurvey(t,e){var s;if(B(this._surveyManager))V.warn("init was not called");else{var r=this.Hl(t);if(r){var i=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=b({},r,{appearance:b({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==Gn.Popover&&e.initialResponses&&V.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var n=this.Ul(r);if(!n.eligible)return void V.warn("Survey is not eligible to be displayed: ",n.reason)}e.displayType!==Gn.Inline?this._surveyManager.handlePopoverSurvey(i,e):this.renderSurvey(i,e.selector,e.properties)}else V.warn("Survey not found")}}cancelPendingSurvey(t){B(this._surveyManager)?V.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},Si),Gp={toolbar:class{constructor(t){this.instance=t}Wl(t){T.ph_toolbar_state=t}Vl(){var t;return(t=T.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,s){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),Wn(this.instance.config)||!g||!F)return!1;t=t??g.location,s=s??g.history;try{if(!e){try{g.localStorage.setItem("test","test"),g.localStorage.removeItem("test")}catch{return!1}e=g==null?void 0:g.localStorage}var r,i=Op||ti(t.hash,"__posthog")||ti(t.hash,"state"),n=i?Ma(()=>JSON.parse(atob(decodeURIComponent(i))))||Ma(()=>JSON.parse(decodeURIComponent(i))):null;return n&&n.action==="ph_authorize"?((r=n).source="url",r&&Object.keys(r).length>0&&(n.desiredHash?t.hash=n.desiredHash:s?s.replaceState(s.state,"",t.pathname+t.search):t.hash="")):((r=JSON.parse(e.getItem(ml)||"{}")).source="localstorage",delete r.userIntent),!(!r.token||this.instance.config.token!==r.token||(this.loadToolbar(r),0))}catch{return!1}}Zl(t){var e=T.ph_load_toolbar||T.ph_load_editor;!B(e)&&Ee(e)?e(t,this.instance):_l.warn("No toolbar load function found")}loadToolbar(t){var e=!(F==null||!F.getElementById(Gc));if(!g||e)return!1;var s=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=b({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(g.localStorage.setItem(ml,JSON.stringify(b({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var i;this.Wl(1),(i=T.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"toolbar",n=>{if(n)return _l.error("[Toolbar] Failed to load",n),void this.Wl(0);this.Wl(2),this.Zl(r)}),ie(g,"turbolinks:load",()=>{this.Wl(0),this.loadToolbar(r)})}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,s){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),this.maybeLoadToolbar(t,e,s)}}},Kp=b({experiments:ye},Si),Jp={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;B(e)||(Ke(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||Wn(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=T==null?void 0:T.__PosthogExtensions__;if(t&&!I(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 s=t.loadExternalDependency;if(!s)return void this.eu(Ao);s(this._instance,"conversations",r=>{r||!t.initConversations?this.eu("Could not load conversations script",r):this.tu(t.initConversations),this.Kl=!1})}catch(r){this.eu("Error initializing conversations",r),this.Kl=!1}}else je.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,je.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else je.error("Cannot complete initialization: remote config is null")}eu(t,e){je.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():je.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!Re(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":Wn(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":I(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?B(this.Jl)||!this.Jl.token?"missing_token":T!=null&&T.__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,s){var r=this;return X(function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,e,s):(je.warn(Nt),null)})()}getMessages(t,e){var s=this;return X(function*(){return s._conversationsManager?s._conversationsManager.getMessages(t,e):(je.warn(Nt),null)})()}markAsRead(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(je.warn(Nt),null)})()}getTickets(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(je.warn(Nt),null)})()}requestRestoreLink(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(je.warn(Nt),null)})()}restoreFromToken(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(je.warn(Nt),null)})()}restoreFromUrlToken(){var t=this;return X(function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(je.warn(Nt),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()}}},Yp={logs:class{constructor(t){var e,s=this;this.iu=!1,this.ru=!1,this.rt=se("[logs]"),this.nu=b({},this.rt,{error(){for(var r=arguments.length,i=new Array(r),n=0;r>n;n++)i[n]=arguments[n];i.some(Il)||s.rt.error(...i)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var r,i;this.Sa=0,(r=this.ou)==null||r.onReconnect(),(i=this.lu)==null||i.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),g&&ie(g,"online",this.au)}uu(t,e,s,r){var i,n=function(o,a){var l,u,c,d,h,f,p,v=(l=o==null?void 0:o.flushIntervalMs)!==null&&l!==void 0?l:3e3,_=(u=o==null?void 0:o.maxBufferSize)!==null&&u!==void 0?u:100,m=a!=null&&a.consoleCapture?void 0:(c=o==null?void 0:o.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,w=I(m)?Math.max(_,2048):Math.max(_,m),S=o==null?void 0:o.resourceAttributes;return{serviceName:(d=(h=S==null?void 0:S["service.name"])!==null&&h!==void 0?h:o==null?void 0:o.serviceName)!==null&&d!==void 0?d:a==null?void 0:a.serviceNameDefault,serviceVersion:(f=S==null?void 0:S["service.version"])!==null&&f!==void 0?f:o==null?void 0:o.serviceVersion,environment:(p=S==null?void 0:S["deployment.environment"])!==null&&p!==void 0?p:o==null?void 0:o.environment,resourceAttributes:S,beforeSend:o==null?void 0:o.beforeSend,flushIntervalMs:v,maxBufferSize:_,maxQueueSize:w,maxBatchRecordsPerPost:100,rateCapWindowMs:v,maxLogsPerInterval:m,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}}((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,s);return[new eh(this.hu(t,e),n,this.nu,()=>this.du(),o=>o(),void 0,r),n]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var s;(s=this.ou)==null||s.reset(),this.cu=e;var r=this.uu(()=>this.tr,i=>{this.tr=i});this.ou=r[0],this.fu=r[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 s;(s=this.lu)==null||s.reset(),this.gu=e;var r=this.uu(()=>this.su,i=>{this.su=i},{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},kl);this.lu=r[0],this.mu=r[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var s=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!B(s)&&s&&(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){Il(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=T==null?void 0:T.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",s=>{var r;s||(r=t.logs)==null||!r.initializeLogs?this.rt.error("Could not load logs script",s):(t.logs.initializeLogs(this._instance),this.ru=!0)}):this.rt.error(Ao)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var s=this._instance;return{get isDisabled(){return!1},get optedOut(){return!s.is_capturing()},getPersistedProperty:r=>r===ut.LogsQueue?t():void 0,setPersistedProperty(r,i){var n;r===ut.LogsQueue&&e((n=i)!==null&&n!==void 0?n:[])},Ot:r=>this.Ot(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise(e=>{if(nu(this.Sa,3))e({kind:"fatal",error:vn(void 0,"logs endpoint is unreachable, dropping batch")});else{var s=!1,r=n=>{s||(s=!0,clearTimeout(i),e(n))},i=setTimeout(()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:vn(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:n=>{var o=n.statusCode;if(this.ku(o),o>=200&&300>o)r({kind:"ok"});else if(o===413)r({kind:"too-large"});else if(o!==0&&o!==429&&500>o)r({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(n.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:vn(n.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=n.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}})}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=ou(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,Y.LIB_NAME,e=>{this.tr=e}),this.su.length>0&&this.xu(t,this.su,this.mu,kl,e=>{this.su=e})}xu(t,e,s,r,i){if(e.length!==0){var n=e.map(a=>a.record);i([]);var o=Ac(n,Pc(s,Y.LIB_NAME,Y.LIB_VERSION),r,Y.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 s=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.windowId,i=s.sessionStartTimestamp,n=s.lastActivityTimestamp;e.sessionId=s.sessionId,e.windowId=r,B(i)||(e.sessionStartTimestamp=i),B(n)||(e.lastActivityTimestamp=n)}if(T!=null&&(t=T.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?It(T.location.href):T.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Zp={metrics:class{constructor(t){this.rt=se("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,s=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===s||((e=this.ou)==null||e.reset(),this.cu=s,this.ou=new th(this.hu(),function(r){var i,n,o,a,l,u=r==null?void 0:r.resourceAttributes;return{serviceName:(i=u==null?void 0:u["service.name"])!==null&&i!==void 0?i:r==null?void 0:r.serviceName,serviceVersion:(n=u==null?void 0:u["service.version"])!==null&&n!==void 0?n:r==null?void 0:r.serviceVersion,environment:(o=u==null?void 0:u["deployment.environment"])!==null&&o!==void 0?o:r==null?void 0:r.environment,resourceAttributes:u,beforeSend:r==null?void 0:r.beforeSend,flushIntervalMs:(a=r==null?void 0:r.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=r==null?void 0:r.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}}(s),this.rt)),this.ou}count(t,e,s){e===void 0&&(e=1),this.vu().count(t,e,s)}gauge(t,e,s){this.vu().gauge(t,e,s)}histogram(t,e,s){this.vu().histogram(t,e,s)}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(s=>this.rt.error("PostHog metrics flush failed:",s))}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:s=>e.Jt(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise(s=>{var r=!1,i=o=>{r||(r=!0,clearTimeout(n),s(o))},n=setTimeout(()=>i({kind:"retry-later",error:new Error("metrics request timed out")}),9e4);this._instance._send_request(b({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)i({kind:"ok"});else if(a===413)i({kind:"too-large"});else if(a!==0&&a!==429&&500>a)i({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;i({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)}}},Xp=b({},Si,jp,Up,Hp,zp,Wp,Vp,qp,Gp,Kp,Jp,Yp,Zp);$e.__defaultExtensionClasses=b({},Xp);var Lu=function(){Y.SDK_DIST_CHANNEL="npm";var t=qs[ss]=new $e;return function(){function e(){e.done||(e.done=!0,Mu=!1,Z(qs,function(s){s._dom_loaded()}))}F!=null&&F.addEventListener?F.readyState==="complete"?e():ie(F,"DOMContentLoaded",e,{capture:!1}):g&&C.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")}(),t}();const Ou="CustomWidget",Du="GeneratedWidget",Qp={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function to(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function ef(t={},e=0){const s=to(t.artifactType||t.type||Ou),r=to(t.artifactName||t.name||t.fileName||`${Du}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function Bu(t={},e=0){const s=kt(t),r=s.artifactType||s.type||Ou,i=s.artifactName||s.name||Du,n=s.fileName||`${i}.dart`;return{id:to(s.id)||ef({...s,artifactType:r,artifactName:i,fileName:n},e),artifactType:r,artifactName:i,fileName:n,description:s.description||"",code:s.code||s.content||"",dependencies:ju(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:Uu(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:kt(s.metadata),codeType:s.codeType||Qp[r]||"O"}}function ju(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const s=kt(e),r=s.name||s.package;return r?{name:r,version:s.version||null,inferred:!!s.inferred,...s.reason?{reason:s.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,s])=>({name:e,version:s||null,inferred:!1})):[]}function Uu(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const s=kt(e);return!s.from&&!s.to?null:{from:s.from||null,to:s.to||null,type:s.type||"uses",description:s.description||""}}).filter(Boolean):[]}function so(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const s=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!s)return null;try{return JSON.parse(s[1].trim())}catch{return null}}}function Qs(t,e={}){const s=[],r=typeof t=="string"?so(t):t,n=kt(r||{});!r&&typeof t=="string"&&s.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(n.artifacts)?n.artifacts:[{artifactType:n.artifactType||e.artifactType,artifactName:n.artifactName||e.artifactName,fileName:n.fileName||e.fileName,description:n.description,code:n.code||e.code||(typeof t=="string"?t:""),dependencies:n.dependencies||e.dependencies,relationships:n.relationships||e.relationships}],a=o.map((d,h)=>Bu(d,h)),l=new Map(o.map((d,h)=>{var f;return[kt(d).id,(f=a[h])==null?void 0:f.id]}).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=Uu(n.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:n.schemaVersion||e.schemaVersion||null,id:n.id||e.id||"bundle-current",title:n.title||n.name||e.title||"Generated artifact bundle",description:n.description||e.description||"",artifacts:a,dependencies:ju(n.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(n.deployOrder)?n.deployOrder.map(u):a.map(d=>d.id),warnings:[...s,...Array.isArray(n.warnings)?n.warnings:[]],metadata:kt(n.metadata)}}function oi(t){return Qs(t).artifacts[0]||Bu()}function yt(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function vs(t){return JSON.stringify(t,null,2)}function tf(t){return vs({task:"architect",userRequest:String(t??"")})}function sf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?vs(e):vs({task:"generate_bundle",bundleSpec:e})}function rf(t){return vs({task:"review_bundle",generatedBundle:yt(t),outputRequirements:{overall:["status","score","summary","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"]}})}function Do(t,e=null){const s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function nf({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:i}){return vs({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(i)})}function Hu({bundleSpec:t,artifactBundle:e,bundleReview:s,userFeedback:r}){return vs({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(r??"")})}const Cl={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"},of=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Ne(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function af(t){return Ne(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Ne(t.filterSummary)||Ne(t.filterResults):!1}function zu(t,e=0){if(!Ne(t)||e>3)return null;if(af(t))return t;for(const s of of){const r=t[s];if(Ne(r)){const i=zu(r,e+1);if(i)return i}}return null}function ai(t){return Array.isArray(t)?t.some(ai):Ne(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(ai):!1}function ro(t){return Array.isArray(t)?t.some(ro):Ne(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(ro):!1}function Wu(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function lf(t,e){if(Ne(t))for(const[s,r]of Object.entries(t)){if(!Ne(r))continue;const i=Ne(r.categories)?r.categories:{},n=Object.entries(i).filter(([,o])=>Ne(o)&&o.matched===!0).map(([o])=>o);n.length>0?n.forEach(o=>e.add(o)):r.matched===!0&&e.add(Wu(s))}}function cf(t,e){var r;if(!t)return;const s=Array.isArray(t)?t.flatMap(i=>Ne(i)?Object.entries(i):[]):Object.entries(t);for(const[i,n]of s){if(!ai(n))continue;const o=Wu(i),a=((r=n==null?void 0:n.raiFilterResult)==null?void 0:r.raiFilterTypeResults)||(o==="rai"?n==null?void 0:n.raiFilterTypeResults:null),l=Ne(a)?Object.entries(a).filter(([,u])=>ai(u)).map(([u])=>u):[];l.length>0?l.forEach(u=>e.add(u)):e.add(o)}}function uf(t){return Cl[t]?Cl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Fl(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 df(t){const e=zu(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);lf(e.filterSummary,s),cf(e.filterResults,s);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||s.size>0,i=e.invocationResult||null,n=ro(e.filterSummary||e.filterResults);return!r&&!n&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:r?"blocked":"unavailable",invocationResult:i,matchedFilters:[...s]}}function hf(t,e){const s=df(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(uf))],i=s.kind==="blocked",n=new Error(i?`Safety screening blocked this pipeline step for ${Fl(r)}.`:"Safety screening could not be completed. Please try again.");return n.name="ModelArmorError",n.code=i?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",n.isModelArmor=!0,n.pipelineStep=e,n.userTitle=i?"Request blocked for safety":"Safety check unavailable",n.userMessage=i?`The safety check detected ${Fl(r)}. 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.",n.retryExplanation=i?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",n.matchedFilters=s.matchedFilters,n}const pf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Pl={CustomWidget:"custom_widgets/",CustomAction:"actions/",CustomFunction:"custom_functions/",CustomClass:"custom_code/",CodeFile:"custom_code/"},ff=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),gf=["Struct","Record"];function xt(t,e,s){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:s}}function qu(t){let e="",s=0;for(;s"&&(s--,s===0))return{inner:t.slice(e+1,r),end:r+1};return null}function mf(t){const e=[],s=t.matchAll(/\bFuture\b/g);for(const r of s){let i=r.index+6,n=null;const o=i;for(;io;if(t[i]==="<"){const u=vf(t,i);if(!u||(n=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;iAl(o.functionName)===r);if(i)return i;const n=o=>!o.functionName.startsWith("_");return s.find(n)||s[0]}function xi(t=""){return Array.from(qu(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function _f(t="",e=""){var s;return((s=Vu(t,e))==null?void 0:s.returnType)||null}function Rl(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 Gu(t,e){const s=xi(e);if(s.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>Rl(l)===i))return null;const[o]=s,a=`${Rl(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow expects the file to be named "${a}" - rename the file (or the class) so they agree exactly.`}function yf(t="",e=""){return Vu(t,e)!==null}function wf(t,e=new Set){return((t==null?void 0:t.match(/[A-Za-z_]\w*/g))||[]).filter(r=>ff.has(r)?!1:!gf.some(n=>r.endsWith(n))||e.has(r))}function Ku(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=_f(t,e),i=wf(r,s);if(i.length===0)return null;const[n]=i;let o;return s.has(n)?o=`uses Code File type "${n}", which FlutterFlow cannot process as an Action Return Value`:r===n?o="is not a FlutterFlow Action Return Value":o=`uses type "${n}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${r}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function bf(t,e={}){const s=[],r=t.fileName||"",i=t.code||"";if(pf.has(t.artifactType)||s.push(xt(t,"error",`Unsupported artifact type "${t.artifactType}".`)),r.endsWith(".dart")||s.push(xt(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return s.push(xt(t,"warning","Generated artifact has no Dart code yet.")),s;if(t.artifactType==="CustomWidget"&&!/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&s.push(xt(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget.")),t.artifactType==="CustomAction"&&!yf(i,t.artifactName)&&s.push(xt(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const n=e.declaredTypes||new Set(xi(i)),o=Ku(i,{functionName:t.artifactName,declaredTypes:n});o&&s.push(xt(t,"error",o))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&s.push(xt(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const n=Gu(r,i);n&&s.push(xt(t,"error",n))}return s}function Ef(t){const e=Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[],s=new Set(e.flatMap(n=>xi(n.code||""))),r=e.flatMap(n=>bf(n,{declaredTypes:s})),i=e.map(n=>({artifactId:n.id,fileName:n.fileName,pathHint:Pl[n.artifactType]||Pl.CodeFile}));return{valid:r.every(n=>n.severity!=="error"),findings:r,deployHints:i}}const Sf=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function xf(t){let e="",s=0;for(;s{const r=s.name||s.package;return!r||r==="flutter"||(e[r]=s.version||""),e},{})}function Ff(t){const e=new Map,s=new Map,r=[];for(const i of t)e.has(i.fileName)?r.push(`Duplicate deploy file name "${i.fileName}" for artifacts "${e.get(i.fileName)}" and "${i.artifactId}".`):e.set(i.fileName,i.artifactId),s.has(i.path)?r.push(`Duplicate deploy path "${i.path}" for artifacts "${s.get(i.path)}" and "${i.artifactId}".`):s.set(i.path,i.artifactId);return r}function Pf(t,e={}){const s=Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||(t==null?void 0:t.deployOrder)||s.map(d=>d.id)).map(d=>s.find(h=>h.id===d)).filter(Boolean),n=[...(t==null?void 0:t.warnings)||[]],o=[];i.forEach(d=>{const h=Cf(d),f=d.code||"",p=d.codeType||kf[d.artifactType]||ze.OTHER;f.trim()||n.push(`${d.artifactName||d.id} has no generated code.`),o.push({artifactId:d.id,artifactName:d.artifactName,artifactType:d.artifactType,fileName:h,content:f,type:p,path:If(h,p),deployMode:"customCodeSync"})});const a={...Tl(t==null?void 0:t.dependencies),...i.reduce((d,h)=>({...d,...Tl(h.dependencies)}),{})},l={};i.forEach(d=>{Ju(d.code||"").forEach(h=>{h in a||(l[h]="^1.0.0")})});const u={...l,...a};i.forEach(d=>{(d.dependencies||[]).forEach(h=>{const f=h.name||h.package;f&&!h.version&&n.push(`${d.artifactName||d.id} dependency "${f}" has no explicit version.`)})});const c=Ff(o);return{bundleId:(t==null?void 0:t.id)||"bundle-current",title:(t==null?void 0:t.title)||"Generated artifact bundle",fileEntries:o,dependencies:u,relationships:(t==null?void 0:t.relationships)||[],warnings:n,errors:c}}function Af(t){var e;return(e=String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/))==null?void 0:e[1]}function Rf(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 Tf(t,e){const r=[Rf(t),Af(e.content),e.artifactName].find(i=>/^[A-Z][A-Za-z0-9_]*$/.test(String(i||"")));if(!r)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return r}function $f(t,e=new Map){const s=[];for(const[r,i]of t.entries())i.type!=="C"||e.has(i.path)||s.push({artifactId:i.artifactId||r,className:Tf(r,i),content:i.content,fileName:r,path:i.path});return s}function Mf(t,e){const s=new Set(e.map(r=>r.path));return new Map(Array.from(t.entries()).filter(([,r])=>!s.has(r.path)))}const $l={pass:0,warning:1,fail:2},Nf=["manualSteps","manualActions","requiredActions","flutterFlowSteps","flutterFlowActions","requiredUserActions","requiredFlutterFlowActions","flutterFlowSetup","userActions","nextSteps"];function Oe(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function gt(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const s=e.filter(r=>typeof r=="string").join(` +`);if(s)return s}}return""}function et(t){return t==null?[]:Array.isArray(t)?t:[t]}function Lf(t){const e=Oe(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const s=Number(e);if(Number.isFinite(s))return s;const r=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return r?Number(r[1]):null}function We(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Bo(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 io(...t){return t.filter(Boolean).reduce((e,s)=>$l[s]>$l[e]?s:e,"pass")}function Yu(t,e="warning",s="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:s};const r=Oe(t),i=gt(r.message,r.title,r.issue,r.description,r.summary);return i?{severity:Bo(r.severity||r.status||r.level)||e,message:i,suggestion:gt(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||s}:null}function no(t,e="review"){const s=Oe(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,n])=>et(s[i]).map(o=>Yu(o,n,e)).filter(Boolean))}function Of(t,e,s=null){if(typeof t=="string")return{id:`${s||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:s,source:"Code Review"};const r=Oe(t),i=gt(r.title,r.action,r.step,r.message,r.name,r.description);return i?{id:r.id||`${s||"bundle"}-manual-${e+1}`,title:i,detail:gt(r.detail,r.instructions,r.description),location:gt(r.location,r.flutterFlowPath,r.path),timing:gt(r.timing,r.phase)||"unspecified",artifactId:s,source:gt(r.source)||"Code Review"}:null}function oo(t,e=null){const s=Oe(t);return Nf.flatMap(r=>et(s[r])).map((r,i)=>Of(r,i,e)).filter(Boolean)}function Df(t){let e=typeof t=="string"?so(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=Oe(e);typeof s.content=="string"&&(e=so(s.content)||e);const r=Oe(e),i=Oe(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(i).length?i:r}}function Bf(t,e){const s=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const i=Oe(r);return[i.id,i.fileName,i.artifactName,i.name].map(We).some(n=>n&&s.includes(n))})||null}function jf(t,e){var i,n;const r=et((n=(i=t==null?void 0:t.metadata)==null?void 0:i.compatibility)==null?void 0:n.deployHints).find(o=>We(o==null?void 0:o.artifactId)===We(e.id)||We(o==null?void 0:o.fileName)===We(e.fileName));return(r==null?void 0:r.pathHint)||""}function Uf(t,e){return et(t==null?void 0:t.relationships).filter(s=>We(s==null?void 0:s.from)===We(e.id)||We(s==null?void 0:s.to)===We(e.id))}function Hf(t,e){var s,r;return et((r=(s=t==null?void 0:t.metadata)==null?void 0:s.compatibility)==null?void 0:r.findings).filter(i=>!(i!=null&&i.artifactId)||We(i.artifactId)===We(e.id)).map(i=>Yu(i,"warning","Compatibility check")).filter(Boolean)}function zf(t,e,s,r){const i=Bf(e,s),n=Oe((i==null?void 0:i.review)||i||s.review),o=Object.keys(n).length>0,a=[...no(n),...Hf(t,s)],l=oo(n,s.id),u=Bo(n.status||n.verdict||n.outcome||n.result),c=a.length?io(...a.map(h=>h.severity)):null,d=io(u,c,o?null:"warning");return{...s,index:r,status:d,statusReason:o?gt(n.summary,n.overview,n.assessment,n.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,pathHint:jf(t,s),relationships:Uf(t,s)}}function Wf({bundle:t,reviewResult:e}){var S;const s=Oe(t),r=et(s.artifacts),{root:i,rawText:n}=Df(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(Oe).find(k=>Object.keys(k).length)||{},a=et(i.artifacts||i.files||i.reviews),l=r.map((k,E)=>zf(s,a,k,E)),u=no(i),d=[...no(o),...u],h=[...oo(o),...oo(i),...l.flatMap(k=>k.manualSteps)].filter((k,E,P)=>P.findIndex(D=>D.title===k.title&&D.artifactId===k.artifactId)===E),f=Bo(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),p=io(f,...d.map(k=>k.severity),...l.map(k=>k.status)),v=o.score??i.score??i.overallScore??n,_=Lf(v),m=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,i.overallSummary,i.headline,i.summary,i.executiveSummary,i.overview,i.assessment,i.conclusion,n,s.description)||"Code Review completed without an overarching written summary.",w=l.reduce((k,E)=>(k[E.status]+=1,k),{pass:0,warning:0,fail:0});return{title:s.title||"Generated artifact bundle",description:s.description||"",status:p,score:_,summary:m,findings:d,manualSteps:h,artifacts:l,counts:w,reviewCoverage:{reviewed:l.filter(k=>k.reviewComplete).length,total:l.length},deployOrder:et(s.deployOrder),relationships:et(s.relationships),warnings:et(s.warnings),compatibility:Oe((S=s.metadata)==null?void 0:S.compatibility)}}function Zu(t){if(typeof t=="string")return t;if(Array.isArray(t)){const e=t.map(s=>typeof s=="string"?s:s==null?void 0:s.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}function Ml(t,e){const s=`${t}${e}`.split(` +`),r=s.pop()??"",i=[];for(const n of s){const o=Xu(n);o&&i.push(o)}return{events:i,buffer:r}}function qf(t){const e=Xu(t);return e?[e]:[]}function Xu(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function Vf(t,e={}){var a;const{onPhase:s,onLog:r}=e;let i=null,n="";const o=l=>{if(l.event==="phase"){l.message&&s&&s(l.message);return}if(l.event==="log"){l.message&&r&&r(l.message);return}i=l};if((a=t.body)!=null&&a.getReader){const l=t.body.getReader(),u=new TextDecoder;for(;;){const{done:c,value:d}=await l.read();if(c)break;const h=Ml(n,u.decode(d,{stream:!0}));n=h.buffer,h.events.forEach(o)}}else{const l=Ml("",await t.text());n=l.buffer,l.events.forEach(o)}return qf(n).forEach(o),i?{...i,success:i.success===!0||i.success===void 0&&t.ok}:{success:!1,error:t.ok?"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}function Gf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Nl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of Gf(t).split(` +`)){if(!/^[A-Za-z_$]/.test(r)||e.test(r))continue;const i=r.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);i&&s.push(i[1])}return s}function Kf(t,e){const s=t.replace(/\.dart$/,"");if(e==="W")return s.replace(/(^|_)(\w)/g,(r,i,n)=>n.toUpperCase());if(e==="A"){const r=s.replace(/(^|_)(\w)/g,(i,n,o)=>o.toUpperCase());return r.charAt(0).toLowerCase()+r.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:s}async function Ll(t){const e=new TextEncoder().encode(String(t||"")),s=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(s),r=>r.toString(16).padStart(2,"0")).join("")}async function Jf(t,e=new Map){const s={},r=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=Kf(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Ll(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Ll(c)),s[o]=u,a.type==="F"){const d=Nl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(f=>r.add(f))}}const i=new Set(Nl(e.get("lib/flutter_flow/custom_functions.dart")||"")),n={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(s),functionsMapContents:JSON.stringify(n)}}const Yf=/^dependencies\s*:\s*(?:#.*)?$/,Zf=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function Xf(t){const e=t.match(Zf);return e?e[1]??e[2]??e[3]:null}function Qu(t){const e=t.trim();return e===""||e.startsWith("#")}function ed(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function jo(t){const e=t.findIndex(i=>Yf.test(i));if(e===-1)return null;let s=e,r=null;for(let i=e+1;iu&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const i=s.split(` +`),n=new Set(td(s)),o=[],a=[];for(const[u,c]of r)n.has(u)?a.push(u):(o.push([u,c]),n.add(u));if(o.length===0)return{yaml:s,added:[],alreadyPresent:a};const l=jo(i);if(l){const u=o.map(([c,d])=>Ol(l.childIndent,c,d));i.splice(l.endIndex,0,...u)}else i.length>0&&i[i.length-1].trim()!==""&&i.push(""),i.push("dependencies:"),o.forEach(([u,c])=>{i.push(Ol(" ",u,c))});return{yaml:i.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function sd(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),jo(e.split(` +`))||s.push("pubspec.yaml missing dependencies section"),td(e).includes("flutter")||s.push("pubspec.yaml missing Flutter SDK dependency"),{valid:s.length===0,errors:s}):(s.push("pubspec.yaml is empty"),{valid:!1,errors:s})}const tg={"&":"&","<":"<",">":">",'"':""","'":"'"};function wt(t){return String(t??"").replace(/[&<>"']/g,e=>tg[e])}function j(t){return t?wt(t).replace(/\n/g,"
"):""}function zt(t){return wt(t).replace(/\r?\n/g," ")}function sg(t,e={}){const s=t==null?void 0:t.pipelineStep;if(s!=null&&e[s]!=null)return e[s];const r=(t==null?void 0:t.message)||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function rg(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📄"}function ig(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📝"}function ng(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 ms(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,s=t.match(e);return s?s[1].trim():t.trim()}function Dl(t){return t=wt(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 rd(t,e="dart",s=globalThis.hljs){if(!t)return"";const r=ms(t);try{return s.highlight(r,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return s.highlight(r,{language:"json"}).value}catch{return wt(r)}}}function ki(t,e={}){const{highlighter:s=globalThis.hljs}=e;let r='
';const i=String(t??"").split(` +`);let n=!1,o="";for(const a of i){if(a.startsWith("```")){if(n){const l=ng(o),u=rd(o.trim(),l,s);r+=`
+
${u}
+
`,o="",n=!1}else n=!0;continue}if(n){o+=a+` +`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();r+=`
+

+ ${rg(l)} + ${wt(l)} +

+
`;continue}if(a.startsWith("## ")){const l=a.substring(3).trim();r+=`
+

+ ${ig(l)} + ${wt(l)} +

+
`;continue}if(/^[-*+]\s+/.test(a)||/^\d+\.\s+/.test(a)){const l=a.replace(/^([-*+]|\d+\.)\s+/,"").trim();r+=`
+ + ${Dl(l)} +
`;continue}a.trim()!==""&&(r+=`

${Dl(a)}

`)}return r+="
",` +
+
+
+ Live Audit Report +
+ ${r} +
+ `}const og="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses",ag="phc_KoqpBJCIiWMW5I6HKBM092DVXZbMmE4KkPHqI518pF3",lg="https://us.i.posthog.com";Lu.init(ag,{api_host:lg,person_profiles:"identified_only"});function tt(t,e={}){try{Lu.capture(t,e)}catch(s){console.error("PostHog tracking failed",s)}}const Je="https://4tgke4.buildship.run",id={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},li="ccc_auth_session",Bl=new WeakSet;let q={email:null,sessionToken:null,isVerified:!1};function _s(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=_s({isResolved:!0});const cg=`${Je}/service/runpipeline`,ug="bs_user_id",dg=`${Je}/authUserCheck`;let Rr={userId:null,status:null,resolved:!1};const ci={free:2,professional:50,power:2e3},ui="ccc_subscription",jl=3,hg=new Set(["active","trialing","paid"]),er="google/gemini-3.6-flash",Tr=["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"],pg={"google/gemini-3.6-flash":"Gemini 3.6 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 He(t){return pg[t]||t}const ls="ccc_usage",ao="google/gemini-3.6-flash",lo="google/gemini-3.6-flash",mn="google/gemini-3.6-flash",Ul={professional:11,power:49},co={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"},$r={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 Mr={...$r};async function fg(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const s=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!s.ok)return;const r=await s.json();if(r.result!=="success"||!r.rates)return;const i=r.rates,n={AUD:1},o=new Set([...Object.keys($r),...Object.values(uo),...Object.values(co)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?n[a]=i[a]:$r[a]&&(n[a]=$r[a]));Mr=n}catch{}finally{clearTimeout(e)}}const uo={"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 nd(){try{const n=Intl.DateTimeFormat().resolvedOptions().timeZone;if(n&&uo[n])return uo[n]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=co[e];if(s)return s;const r=e.split("_")[0],i=co[r];return i||"USD"}function Hl(t,e){const s=Mr[e]??Mr.USD,r=t*s,i=Math.round(r*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:i>=100||i%1===0?0:2}).format(i)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*Mr.USD)}}const st="ccc_api_key_",_t="ccc_session_api_key_",nt="ccc_encryption_key",tr="ccc_encryption_key_scope",gg="ccc_keystore",di="keys",sr="ccc_encryption_key_version";let ho=null,hi=null,rr=!1,pi=!1,zl=!1;class fi extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function Wl(){if(zl)return;zl=!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&&he(t,"warning")}function od(){return localStorage.getItem(sr)||""}function po(){var t;return((t=crypto.randomUUID)==null?void 0:t.call(crypto))||ld(crypto.getRandomValues(new Uint8Array(16)))}function vg(){const t=od();if(t)return t;const e=po();return localStorage.setItem(sr,e),e}function ys(){ho=null,hi=null,rr=!1,pi=!1}window.addEventListener("storage",t=>{t.key===sr&&ys()});function mg(){return new Promise((t,e)=>{const s=indexedDB.open(gg,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(di)||r.createObjectStore(di)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function Uo(t,e){const s=await mg();return new Promise((r,i)=>{const n=s.transaction(di,t);let o;try{o=e(n.objectStore(di))}catch(l){s.close(),i(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>i(o.error),n.oncomplete=()=>{s.close(),r(a)},n.onerror=()=>{s.close(),i(n.error||new Error("Encryption key transaction failed."))},n.onabort=()=>{s.close(),i(n.error||new Error("Encryption key transaction aborted."))}})}function _g(t){var e;return t instanceof CryptoKey&&((e=t.algorithm)==null?void 0:e.name)==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function yg(){const t=await Uo("readonly",e=>e.get(nt));return _g(t)?t:null}async function ad(t){await Uo("readwrite",e=>e.put(t,nt))}async function wg(){ys();try{await Uo("readwrite",t=>t.delete(nt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function bg(){const t=sessionStorage.getItem(nt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await ad(e),sessionStorage.removeItem(nt),sessionStorage.removeItem(tr),localStorage.removeItem(st+"salt"),e}async function ql(t){const e=sessionStorage.getItem(nt);if(e)return pi=sessionStorage.getItem(tr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new fi;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",s);return sessionStorage.setItem(nt,JSON.stringify(r)),sessionStorage.setItem(tr,"session"),pi=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function Eg(t){if(sessionStorage.getItem(tr)==="session"&&sessionStorage.getItem(nt))return Wl(),rr=!0,ql(t);try{const e=await yg();if(e)return e;const s=await bg();if(s)return s;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await ad(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),Wl(),rr=!0,ql(t)}}async function Ho(t={}){const{allowSessionFallbackCreation:e=!0}=t,s=vg();hi!==s&&ys();const r=ho||Eg(e);ho=r,hi=s;try{return await r}catch(i){throw ys(),i}}async function Sg(t){const e=await Ho(),s=hi,r=new TextEncoder,i=crypto.getRandomValues(new Uint8Array(12)),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,r.encode(t)),o=new Uint8Array(i.length+n.byteLength);return o.set(i),o.set(new Uint8Array(n),i.length),{ciphertext:ld(o),keyVersion:s,sessionFallback:rr}}async function xg(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await Ho({allowSessionFallbackCreation:!1});if(rr&&!s&&!pi)throw new fi;const i=kg(t),n=i.slice(0,12),o=i.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof fi)throw r;return console.error("Decryption failed:",r),null}}function ld(t){const e=new Uint8Array(t);let s="";for(let r=0;r0}let ir="",gi="";async function zo(){sessionStorage.getItem(nt)&&await Ho(),ir=await ke("flutterflow"),gi=await ke("flutterflow_project_id"),Ag(),Kt()}function Wo(){document.getElementById("api-keys-modal").classList.add("open"),Vo(),ir&&hd(ir)}function cd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-modal");s&&(qo(),s.classList.add("open"))}let bt=1;function ud(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Ii(){const t=ud();t.length&&t.forEach((e,s)=>{const r=s+1;if(r===bt){e.classList.remove("opacity-60","bg-gray-50","border-gray-200"),e.classList.add("bg-blue-50","border-blue-200");const i=e.querySelector("div:first-child");i&&(i.classList.remove("bg-gray-400"),i.classList.add("bg-blue-500"),i.innerHTML=r)}else if(r0&&bt<=t&&(bt++,Ii())}function Cg(){const t=document.getElementById("walkthrough-modal");t&&(bt=1,Ii(),t.classList.add("open"))}function Fg(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-dont-show");s&&s.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function dd(){if(q.isVerified&&Vt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(bt=1,Ii(),e.classList.add("open"))}}async function Vo(){const t=document.getElementById("flutterflow-api-key-input");ir?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Pg()}function Pg(){Gl("flutterflow","flutterflow-key-status"),Gl("flutterflow_project_id","flutterflow-project-status")}function Gl(t,e){const s=document.getElementById(e);if(!s)return;const r=s.querySelector(".key-status-dot"),i=s.querySelector("span");rs(t)?(r.className="key-status-dot configured",i.className="text-green-600",i.textContent="User key configured"):(r.className="key-status-dot missing",i.className="text-gray-500",i.textContent="Not configured")}function Kt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),s=document.getElementById("btn-run-pipeline");s&&s.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Ag(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),s=["flutterflow"];e.forEach((r,i)=>{const n=s[i];n==="flutterflow"?rs("flutterflow")&&rs("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):rs("flutterflow")||rs("flutterflow_project_id")?(r.className="key-status-dot env",r.title="FlutterFlow (Partially configured)"):(r.className="key-status-dot missing",r.title="FlutterFlow (Not configured)"):rs(n)?(r.className="key-status-dot configured",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (Not configured)")}),Kt()}async function Rg(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await Vl("flutterflow",t.value);const s=(e==null?void 0:e.value.trim())||"";if(s){if(!Ci(s)){he("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await Vl("flutterflow_project_id",s)}await zo(),Vo();const r=document.querySelector("#api-keys-modal .bg-blue-500"),i=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=i,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),cd()},1e3)}async function Tg(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(sr,po()),ys(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(nt),sessionStorage.removeItem(tr),localStorage.removeItem(st+"salt"),await wg(),localStorage.setItem(sr,po()),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),await zo();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),Vo()}function Ci(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function $g(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function Mg(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;$g("flutterflow-api-key-input",s)}),t.addEventListener("blur",Ng(async e=>{const s=e.target.value.trim();s&&await hd(s)},500)))}function Ng(t,e){let s;return function(...i){const n=()=>{clearTimeout(s),t(...i)};clearTimeout(s),s=setTimeout(n,e)}}async function hd(t){const e=document.getElementById("flutterflow-projects-select"),s=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',s&&s.classList.add("hidden");try{const i=await new Ai(t,"").listProjects();if(!i||i.length===0){e.innerHTML='';return}e.innerHTML='',i.forEach(n=>{const o=document.createElement("option");o.value=n.id||n.projectId||"",o.textContent=n.name||n.projectName||`Project ${n.id}`,e.appendChild(o)}),gi&&(e.value=gi)}catch(r){console.error("Failed to fetch projects:",r),e.innerHTML='',s&&(s.textContent=`Failed to load projects: ${r.message}`,s.classList.remove("hidden"))}}function Lg(t){const e=document.getElementById(t),r=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",r.innerHTML=` + + `):(e.type="password",r.innerHTML=` + + + `)}let y={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1};function Og(){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 Dg(){y.bundleSpec=Qs(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Fi(){var s,r,i,n;const t=oi(y.bundleSpec);y.artifactBundle=Qs(y.step2Result,{id:(s=y.bundleSpec)==null?void 0:s.id,title:(r=y.bundleSpec)==null?void 0:r.title,description:(i=y.bundleSpec)==null?void 0:i.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:(n=y.bundleSpec)==null?void 0:n.relationships,code:y.step2Result||""});const e=Ef(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(o=>o.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=oi(y.artifactBundle).id}function Pi(){var s,r,i,n,o,a,l,u;const t=Qs(y.step3Result,{id:(s=y.artifactBundle)==null?void 0:s.id,title:(r=y.artifactBundle)==null?void 0:r.title}),e=new Map(t.artifacts.map(c=>[c.id,c.review]));y.bundleReview=Qs({id:(i=y.artifactBundle)==null?void 0:i.id,title:(n=y.artifactBundle)==null?void 0:n.title,artifacts:((a=(o=y.artifactBundle)==null?void 0:o.artifacts)==null?void 0:a.map(c=>({...c,review:e.get(c.id)||c.review||y.step3Result||null})))||[],relationships:(l=y.artifactBundle)==null?void 0:l.relationships,warnings:(u=y.artifactBundle)==null?void 0:u.warnings})}function pd(){const t=Go();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget"}}function Go(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||oi(t)}function Ko(){return Go().code||y.step2Result||""}async function Bg(){try{await zo()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Nr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};class Ai{constructor(e,s,r="main",i=Nr.production){this.apiKey=e,this.baseUrl=i,this._projectId=s,this._branchName=r,this._endpoint=i}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){var r;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 s=null;for(const i of e)try{const n=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(i)});if(!n.ok){const l=await n.text();s=new Error(`Export failed: ${n.status} - ${l}`);continue}const o=await n.json(),a=((r=o==null?void 0:o.value)==null?void 0:r.project_zip)||(o==null?void 0:o.project_zip);if(!a){s=new Error("Export response did not include project source.");continue}return a}catch(n){s=n}throw s||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),s=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(s.files).filter(a=>!s.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const i=r.slice(0,r.length-12),n=new Map,o=Object.keys(s.files).filter(a=>{if(s.files[a].dir||!a.startsWith(i))return!1;const l=a.slice(i.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=>{n.set(a.slice(i.length),await s.files[a].async("string"))})),{pubspecYaml:await s.files[r].async("string"),files:n}}async pushCodeWithRetry(e,s=3){var n,o,a;const r=[Nr.production,Nr.staging],i=Math.max(0,r.indexOf(this._endpoint));for(let l=0;lsetTimeout(p,1e3*(l+1)));continue}return d}catch(d){console.warn(`Push to ${c} failed: ${d.message}, trying next...`),await new Promise(h=>setTimeout(h,1e3*(l+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}async listProjects(e={}){const{page:s=1,limit:r=100}=e;console.log("Listing projects for API key via V2 endpoint");try{const i=await fetch("https://api.flutterflow.io/v2/l/listProjects",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(!i.ok){const a=await i.text();throw new Error(`List projects failed: ${i.status} - ${a}`)}const n=await i.json();if(n.success&&typeof n.value=="string")try{const a=JSON.parse(n.value);if(a&&Array.isArray(a.entries))return a.entries.map(l=>{var u;return{id:l.id,name:((u=l.project)==null?void 0:u.name)||l.id}})}catch(a){console.error("Failed to parse stringified project value:",a)}const o=n.projects||n.items||n.entries||(Array.isArray(n)?n:[]);return Array.isArray(o)?o:[]}catch(i){throw console.error("Error listing projects:",i),i}}}async function Jo(t){const e=t.clone();let s;try{s=await t.json()}catch{const n=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:n||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${n}`)}if(!t.ok){let i=s.message||`HTTP ${t.status}`,n=new Map;if(s.errors)n=new Map(Object.entries(s.errors));else if(!s.message&&typeof s=="object"){const o=Object.keys(s).filter(a=>a.endsWith(".dart")&&Array.isArray(s[a]));o.length>0&&(n=new Map(Object.entries(s)),i=o.flatMap(l=>s[l].map(u=>`${l}: ${u.errorMessage}`)).join(` +`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:i,errorMap:n}}const r=s.value?JSON.parse(s.value):{};return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function Yo(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 U={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},fd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,gd=/extends\s+State<\w+>/;function jg(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const s=fd.test(e),r=gd.test(e);if(s||r)return U.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return U.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return U.FUNCTION}return U.CODE_FILE}function vd(t,e){switch(e){case U.ACTION:return`lib/custom_code/actions/${t}`;case U.WIDGET:return`lib/custom_code/widgets/${t}`;case U.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case U.CODE_FILE:return`lib/custom_code/${t}`;case U.DEPENDENCIES:return"pubspec.yaml";case U.OTHER:return`lib/custom_code/${t}`;default:return t}}async function Zo(t,e=new Map){return Jf(t,e)}const fo=new Map;function md(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Ri(t){fo.delete(md(t))}async function Xo(t,e,s,r){const i=$f(e,s);if(i.length===0)return{remoteFiles:s,syncFileMap:e};console.log(`Provisioning ${i.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const n=await fetch(og,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:i,stream:!0})}),o=await Vf(n,{onPhase:a=>be.setSubstatus(a),onLog:a=>console.log(`[custom class deploy] ${a}`)});if(!o.success){const a=o.details?` ${o.details}`:"";throw new Error(`${o.error||"FlutterFlow custom class provisioning failed."}${a}`)}return Ri(t),{remoteFiles:s,syncFileMap:Mf(e,i)}}async function Qo(t,e={}){const s=md(t);let r=fo.get(s);if(r===void 0){try{r=await t.fetchProjectSource()}catch(n){throw new Error(`Could not read your project's pubspec.yaml (${n.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const i=sd(r.pubspecYaml);if(!i.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${i.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);fo.set(s,r)}return{...eg(r.pubspecYaml,e),remoteFiles:r.files}}function Ug(t){const e=[],s=[];t.content.length>5e4&&s.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 r=t.content.split(` +`).length;r>500&&s.push(`Code has ${r} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&s.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&s.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&s.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const i=t.content.match(/print\s*\(/g);return i&&i.length>3&&s.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`),{canProceed:e.length===0,issues:e,warnings:s}}async function Hg(t,e){let s=` +
+
+

Commit Summary

+

+ File: ${t.fileName}
+ Type: ${t.artifactType}
+ Size: ${(t.content.length/1024).toFixed(1)} KB
+ Lines: ${t.content.split(` +`).length} +

+
+ `;return e.warnings.length>0&&(s+=` +
+

Warnings (${e.warnings.length})

+
    + ${e.warnings.map(r=>`
  • • ${r}
  • `).join("")} +
+
+ `),e.issues.length>0&&(s+=` +
+

Issues (${e.issues.length})

+
    + ${e.issues.map(r=>`
  • • ${r}
  • `).join("")} +
+
+ `),s+="
",console.log("Pre-commit summary:",s),e.canProceed?e.warnings.length>0?confirm(`Found ${e.warnings.length} warning(s). Proceed with commit? + +${e.warnings.join(` +`)}`):!0:!1}function _d(t,e={}){const{artifactType:s="CustomWidget",artifactName:r="GeneratedCode"}=e;let i=t.trim();i.startsWith("```dart")?i=i.replace(/^```dart\n/,""):i.startsWith("```")&&(i=i.replace(/^```\n/,"")),i.endsWith("```")&&(i=i.replace(/\n```$/,""));let n=r;n.endsWith(".dart")||(n+=".dart");let o=U.CODE_FILE;switch(s){case"CustomAction":o=U.ACTION;break;case"CustomWidget":o=U.WIDGET;break;case"CustomFunction":o=U.FUNCTION,n="custom_functions.dart";break;case"CustomClass":case"CodeFile":o=U.CODE_FILE;break}let a="";return o===U.WIDGET?a=`// 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! + +`:o===U.ACTION?a=`// 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! + +`:o===U.FUNCTION&&(a=`// 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:a+i,fileName:n,codeType:o,artifactType:s,artifactName:r}}function zg(t){const e={};for(const s of Ju(t))e[s]="^1.0.0";return e}function Wg(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 qg(t,e,s,r=new Set,i=""){const n=[],o=fd.test(e),a=gd.test(e),l=[{pattern:/void\s+main\s*\(/,message:"Contains main() function - not allowed in FlutterFlow"},{pattern:/runApp\s*\(/,message:"Contains runApp() - not allowed in FlutterFlow"},{pattern:/MaterialApp\s*\(/,message:"Contains MaterialApp - not allowed in FlutterFlow"},{pattern:/Scaffold\s*\(/,message:"Contains Scaffold - usually not needed in FlutterFlow widgets"}],u=t.includes("custom_functions")||t.includes("functions"),c=/^\s*import\s+['"]([^'"]+)['"]/gm;let d;for(;(d=c.exec(e))!==null;){const h=d[1],f=h.startsWith("/flutter_flow/")||h.startsWith("/backend/")||h.startsWith("/custom_code/")||h==="index.dart"||h==="package:flutter/material.dart"||h==="package:flutter/services.dart",p=h.startsWith("dart:")||h.startsWith("package:");u?h.startsWith("dart:")||n.push(`Custom Functions cannot use '${h}' - only Dart SDK imports allowed`):!f&&!p&&n.push(`Unknown import '${h}' - use FlutterFlow managed imports`)}for(const{pattern:h,message:f}of l)h.test(e)&&n.push(f);if(s===U.WIDGET&&!o&&!a&&n.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),s===U.ACTION){const h=Ku(e,{functionName:i,declaredTypes:r});h&&n.push(h)}if(s===U.CODE_FILE){const h=Gu(t,e);h&&n.push(h)}return{valid:n.length===0,errors:n}}function Ti(t){const e=[],s=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:s};const r=new Set(Array.from(t.values()).flatMap(i=>xi(i.content||"")));for(const[i,n]of t.entries()){if((!n.content||n.content.trim().length===0)&&e.push(`File ${i} is empty`),n.content&&n.content.length>1e5&&s.push(`File ${i} is very large (>100KB)`),i.endsWith(".dart")){const o=qg(i,n.content,n.type,r,n.artifactName);o.valid||e.push(...o.errors.map(a=>`${i}: ${a}`))}if(i==="pubspec.yaml"){const o=sd(n.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:s}}const G={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:G.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=G.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(G).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===G.PREPARING&&(this.startTime=Date.now()),(t===G.SUCCESS||t===G.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(G.ERROR)},setSuccess(t){this.result=t,this.setState(G.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===G.PREPARING||this.currentState===G.VALIDATING||this.currentState===G.PUSHING}};async function Vg(t,e,s={}){let{codeType:r="W"}=s;const{pubspecDeps:i={},artifactName:n=e}=s;r==="CustomWidget"&&(r=U.WIDGET),r==="CustomAction"&&(r=U.ACTION),r==="CustomFunction"&&(r=U.FUNCTION),r==="CustomClass"&&(r=U.CODE_FILE),r==="CodeFile"&&(r=U.CODE_FILE),K.reset(),K.setState(G.PREPARING);try{const o=await ke("flutterflow"),a=await ke("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(!Ci(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=or(),u=new Ai(o,a,"main",l);K.setState(G.VALIDATING);const c=new Map,d=r||jg(e,t),h=vd(e,d);c.set(e,{artifactName:n,content:t,type:d,path:h}),K.setProgress(0,c.size);const f=Ti(c);if(!f.valid)throw new Error(`Validation failed: +${f.errors.join(` +`)}`);const p=await Qo(u,i),v=p.yaml,_=await Xo(u,c,p.remoteFiles,`Provision ${n} custom class`),m=await Zo(_.syncFileMap,_.remoteFiles),w=new Map(_.syncFileMap);w.set("pubspec.yaml",{content:v,type:"D",path:"pubspec.yaml"}),be.set("package");const S=await ea(w),k={project_id:a,zipped_custom_code:S,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:v,file_map:m.fileMapContents,functions_map:m.functionsMapContents};K.setState(G.PUSHING),K.setProgress(1,c.size),Ri(u),be.set("push");const E=await u.pushCode(k),P=await Jo(E);if(P.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:P.errorMap&&P.errorMap.size>0?Array.from(P.errorMap.entries()):[]});else{const D=P.errorMessage||Yo(P.responseCode);throw new Error(D)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:p.added,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),{success:!1,error:o.message,state:K.currentState}}}async function ea(t){try{const e=new JSZip;for(const[r,i]of t.entries())e.file(r,i.content);return await e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}catch(e){return console.error("Error creating zip:",e),""}}async function yd(t,e={}){const{artifactType:s,artifactName:r,pipelineResult:i}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(G.PREPARING);const n=_d(t,{artifactType:s,artifactName:r}),o=zg(n.content);console.log("Detected dependencies:",o),K.setState(G.VALIDATING);const a=await ke("flutterflow"),l=await ke("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(!Ci(l))throw new Error("Invalid FlutterFlow Project ID format.");const u=new Map;u.set(n.fileName,{artifactName:r,content:n.content,type:n.codeType,path:vd(n.fileName,n.codeType),functionName:n.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,u.size);const c=Ti(u);if(!c.valid)throw new Error(`File validation failed: +${c.errors.join(` +`)}`);c.warnings.length>0&&console.warn("Validation warnings:",c.warnings),K.setState(G.PUSHING);const d=or(),h=new Ai(a,l,"main",d),f=await Qo(h,o),p=f.yaml,v=await Xo(h,u,f.remoteFiles,`Provision ${r} custom class`),_=await Zo(v.syncFileMap,v.remoteFiles),m=new Map(v.syncFileMap);m.set("pubspec.yaml",{content:p,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const w=await ea(m),S={project_id:l,zipped_custom_code:w,uid:`web_${Date.now()}`,branch_name:h.branchName,serialized_yaml:p,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,u.size),Ri(h),be.set("push");const k=await h.pushCode(S),E=await Jo(k);if(E.success){const P={...Wg(n,i),projectId:l};return K.setSuccess({...P,fileCount:u.size,warnings:E.errorMap?Array.from(E.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${n.fileName} to FlutterFlow`,metadata:P,addedDependencies:f.added,warnings:E.errorMap?Array.from(E.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const P=E.errorMessage||Yo(E.responseCode),D=new Error(P);throw D.errorMap=E.errorMap,D}}catch(n){console.error("Commit execution failed:",n),K.setError(n);let o=new Map;if(n.errorMap)o=n.errorMap;else if(n.message&&n.message.includes("{"))try{const a=n.message.match(/\{[\s\S]*\}/);if(a){const l=JSON.parse(a[0]);o=new Map(Object.entries(l))}}catch(a){console.warn("Failed to parse error map from commit response:",a)}return{success:!1,error:n.message,errorMap:o,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Gg(t,e={}){var r;const{pipelineResult:s}=e;try{if(K.setState(G.PREPARING),((r=t.errors)==null?void 0:r.length)>0)throw new Error(`Bundle validation failed: +${t.errors.join(` +`)}`);const i=new Map(t.fileEntries.map(E=>[E.fileName,{artifactId:E.artifactId,artifactName:E.artifactName,content:E.content,type:E.type,path:E.path,functionName:E.type===U.FUNCTION?E.artifactName:void 0}]));K.setProgress(0,i.size);const n=Ti(i);if(!n.valid)throw new Error(`File validation failed: +${n.errors.join(` +`)}`);K.setState(G.VALIDATING);const o=await ke("flutterflow"),a=await ke("flutterflow_project_id");if(!o)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!a)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ci(a))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(G.PUSHING);const l=or(),u=new Ai(o,a,"main",l),c=await Qo(u,t.dependencies),d=c.yaml,h=await Xo(u,i,c.remoteFiles,`Provision ${t.title} custom classes`),f=await Zo(h.syncFileMap,h.remoteFiles),p=new Map(h.syncFileMap);p.set("pubspec.yaml",{content:d,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const v=await ea(p),_={project_id:a,zipped_custom_code:v,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:d,file_map:f.fileMapContents,functions_map:f.functionsMapContents};K.setProgress(1,i.size),Ri(u),be.set("push");const m=await u.pushCode(_),w=await Jo(m);if(w.success){const E={...s,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((P,D)=>P+D.content.length,0),projectId:a};return K.setSuccess({...E,fileCount:i.size,warnings:w.errorMap?Array.from(w.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:E,addedDependencies:c.added,warnings:w.errorMap?Array.from(w.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const S=w.errorMessage||Yo(w.responseCode),k=new Error(S);throw k.errorMap=w.errorMap,k}catch(i){return console.error("Bundle commit execution failed:",i),K.setError(i),{success:!1,error:i.message,errorMap:i.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Kg(t){try{return await vi("architect",ao,tf(t),Do("architect"))}catch(e){throw e.isModelArmor?e:new Error(`Prompt Architect failed: ${e.message}`)}}async function $i(t,e){const s=sf(t),r=Do("generator",y.bundleSpec);try{return await vi("generator",e,s,r)}catch(i){if(i.isModelArmor)throw i;if(e!==mn){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await vi("generator",mn,s,r)}catch(n){throw n.isModelArmor?n:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${mn}): ${n.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function Mi(t,e=null){const s={...Do("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await vi("review",lo,rf(t),s)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function ta(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function go(t,e){const s=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!s||!r||(s.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(s.classList.add("active"),r.classList.add("running"),r.innerHTML=` + + `):e==="completed"?(s.classList.add("completed"),r.classList.add("completed"),r.innerHTML=` + + `):e==="error"?(s.classList.add("error"),r.classList.add("error"),r.innerHTML=` + + `):r.innerHTML=` + + `)}function me(t,e){const s=document.getElementById(`step${t}-loading`),r=document.getElementById(`step${t}-result`);e?(s.classList.remove("hidden"),r.classList.add("hidden"),go(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),go(t,"completed"))}function Jg(t){const e=document.getElementById(`${t}-content`),s=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),s&&(s.style.transform="rotate(0deg)")):(e.classList.add("open"),s&&(s.style.transform="rotate(180deg)"))}function Yg(t){qe(parseInt(t.replace("step","")))}function qe(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"),Gt();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const r=document.getElementById(`step${t}-content`);r&&r.classList.remove("hidden");const i=document.getElementById("stage-title"),n={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};i&&(i.textContent=n[t]||"Active Workflow Stage")}function Zg(t){const e=document.getElementById(t);if(!e)return;const s=e.dataset.raw||e.textContent;navigator.clipboard.writeText(s).then(()=>{tt("Code Copied",{elementId:t});const r=e.closest(".code-container"),i=r==null?void 0:r.querySelector(".copy-btn");i&&(i.classList.add("copied"),i.innerHTML=' Copied!',setTimeout(()=>{i.classList.remove("copied"),i.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function vo(t){const e=document.getElementById("step1-model-label");e&&(e.textContent=He(ao));const s=_o(t),r=document.getElementById("step2-model-label");r&&(s!==t?r.textContent=`${He(t)} → ${He(s)} (Free Tier)`:r.textContent=He(t));const i=document.getElementById("step3-model-label");i&&(i.textContent=He(lo)),console.log(`Step 1 (Prompt Architect): ${He(ao)}`),console.log(s!==t?`Step 2 (Code Generator): ${He(t)} → ${He(s)} (Free Tier fallback)`:`Step 2 (Code Generator): ${He(t)}`),console.log(`Step 3 (Code Review): ${He(lo)}`)}async function Xg(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,sa("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(s=>{s.disabled=!0,s.innerHTML=` + + + Refining...`});try{const s=Go(),r=nf({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:s.id,userFeedback:"Fix the issues listed in the audit report."});Di(),it(2),qe(2),me(2,!0),y.step2Result=await $i(r,t),Fi();const i=document.getElementById("step2-output"),n=ms(y.step2Result);i.textContent=n,i.dataset.raw=n,me(2,!1),qe(3),it(3),me(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi();const o=document.getElementById("step3-output");o.textContent=y.step3Result,me(3,!1),Ft();const a=ki(y.step3Result);Bi(n,a)}catch(s){console.error("Refinement failed:",s),Ft(),he(ta(s,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(s=>{s.disabled=!1,s.textContent="Refine & Regenerate"}),Kt()}}async function sa(t,e,s){const r=`${Je}/connectFeedback`,i={type:t,code:e,input:s};try{const n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok){const a=await n.text();return console.error(`callEndpoint failed: ${n.status} ${n.statusText}`,a),{success:!1,status:n.status,error:a}}const o=await n.json();return console.log("Telemetry success:",o),o}catch(n){return console.error("callEndpoint failed:",n),{success:!1,error:n.message}}}function Qg(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function ev(){var i;const t=document.getElementById("ff-error-paste-input"),e=(i=t==null?void 0:t.value)==null?void 0:i.trim();if(!e){t==null||t.focus(),t==null||t.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t==null?void 0:t.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){he("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0,sa("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` + + Fixing…`);try{const n=Hu({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});Fd(),Di(),it(2),qe(2),me(2,!0),y.step2Result=await $i(n,s),Fi();const o=document.getElementById("step2-output"),a=ms(y.step2Result);o.textContent=a,o.dataset.raw=a,me(2,!1),qe(3),it(3),me(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,me(3,!1),Ft();const u=ki(y.step3Result);Bi(a,u),t&&(t.value="")}catch(n){console.error("Fix from errors failed:",n),Ft(),he(ta(n,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Kt()}}async function mo(){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;if(!t.trim()){he("Please describe your FlutterFlow widget first.","warning");return}if(!await wv())return;const s=_o(e);tt("Pipeline Started",{selectedModel:e,effectiveModel:s,inputLength:t.length});const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,Og(),r.disabled=!0,r.innerHTML=` + + + Running...`,vo(s);try{Gt();const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("paywall-exhausted");n&&n.classList.add("hidden"),Di(),qe(1),it(1),me(1,!0),y.step1Result=await Kg(t),Dg(),tt("Prompt Architect Completed");const o=document.getElementById("step1-output"),a=ms(y.step1Result);o.textContent=a,o.dataset.raw=a,me(1,!1),qe(2),it(2),me(2,!0),y.step2Result=await $i(y.step1Result,s),Fi(),tt("Code Generator Completed");const l=document.getElementById("step2-output"),u=ms(y.step2Result);l.textContent=u,l.dataset.raw=u,me(2,!1),qe(3),it(3),me(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi(),tt("Code Review Completed");const c=document.getElementById("step3-output");c.textContent=y.step3Result,me(3,!1),Ft();const d=ki(y.step3Result);Bi(u,d),gv(),Li()}catch(i){if(console.error("Pipeline failed:",i),Ft(),i.isUsageLimit){const{count:c}=Ni();ca(c,la(),{openModal:!0});return}tt("Pipeline Failed",{error:i.message,effectiveModel:_o(document.getElementById("code-generator-model").value)});const o=sg(i,{architect:1,generator:2,review:3});qe(o);const a=document.getElementById(`step${o}-result`),l=document.getElementById(`step${o}-loading`),u=document.getElementById(`step${o}-output`);if(l&&l.classList.add("hidden"),a&&a.classList.remove("hidden"),u)if(i.isModelArmor)u.innerHTML=``;else{let c=i.message;i.message.includes("image input")?c=`This model doesn't support image input. Please use ${He(er)} for image-based requests or remove image references from your prompt.`:(i.message.includes("Load failed")||i.message.includes("CORS"))&&(c="API connection failed. This might be due to CORS restrictions or network issues. Please check your API key and try again."),u.innerHTML=`
+

Connection Error

+

${j(c)}

+
+

Check if API key is valid

+

Try using a different model

+

Ensure network allows API calls

+
+
`}go(o,"error")}finally{y.isRunning=!1,r.disabled=!1,r.innerHTML=` + + + Run Pipeline`,Kt()}}function tv(){const t=document.getElementById("code-generator-model").value,e=[er,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(r=>r!==t),s=prompt(`Retry with different model? + +Current: ${t} + +Options: +1. ${e[0]} +2. ${e[1]} + +Enter 1 or 2:`);s==="1"?(document.getElementById("code-generator-model").value=e[0],mo()):s==="2"&&(document.getElementById("code-generator-model").value=e[1],mo())}async function sv(){var u,c,d;const t=Ko();if(!t){he("No code to commit. Please run the pipeline first.","warning");return}const e=await ke("flutterflow"),s=await ke("flutterflow_project_id");if(!e||!s){he("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Wo();return}if(((c=(u=y.artifactBundle)==null?void 0:u.artifacts)==null?void 0:c.length)>1){await rv();return}const{artifactType:r,artifactName:i}=pd(),n=_d(t,{artifactType:r,artifactName:i}),o=Ug(n);if(!await Hg(n,o)){console.log("User cancelled commit");return}da({withProvisioning:n.codeType===U.CODE_FILE}),tt("Deploy to FlutterFlow Started",{artifactType:r,artifactName:i});const l=await yd(t,{artifactType:r,artifactName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:(d=document.getElementById("code-generator-model"))==null?void 0:d.value}});nr(),l.success?(tt("Deploy to FlutterFlow Success",{artifactType:r,artifactName:i}),_i(l)):(tt("Deploy to FlutterFlow Failed",{artifactType:r,artifactName:i,error:l.error}),yi(l))}async function rv(){const t=await ke("flutterflow"),e=await ke("flutterflow_project_id");if(!t||!e){he("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Wo();return}const s=Pf(y.artifactBundle);if(s.errors.length>0){he(`Bundle validation failed: ${s.errors.join("; ")}`,"error");return}const r=new Map(s.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),i=Ti(r),n={canProceed:i.valid&&s.errors.length===0,issues:[...s.errors,...i.errors],warnings:[...s.warnings,...i.warnings]};if(!n.canProceed){he(`Bundle validation failed: ${n.issues.join("; ")}`,"error");return}const o={content:s.fileEntries.map(a=>`// ${a.fileName} +${a.content}`).join(` + +`),fileName:`${s.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:s.title};Fv(o,n,s.dependencies,s)}function iv(t){var i;let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let s=`
+

FlutterFlow Commit Failed

+

${j(t.error)}

`;if(e&&e.size>0){s+=`
+

Errors:

+
    `;for(const[n,o]of e.entries()){const a=Zu(o);s+=`
  • + ${j(n)}: ${j(a)} +
  • `}s+="
"}s+="
",s+=`
+ +
`;const r=document.getElementById("step3-output");r&&(r.innerHTML=s,(i=document.getElementById("btn-regenerate-from-error"))==null||i.addEventListener("click",()=>{nv(t.error,e)}))}async function nv(t,e){if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0;const r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` + + Fixing...`);try{let i=`The previous code had the following errors when committing to FlutterFlow: + +`;if(e&&e.size>0)for(const[c,d]of e.entries()){const h=Zu(d);i+=`File: ${c} +Error: ${h} + +`}else i+=`${t} +`;const n=Hu({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});Di(),it(2),qe(2),me(2,!0),y.step2Result=await $i(n,s),Fi();const o=document.getElementById("step2-output"),a=ms(y.step2Result);o.textContent=a,o.dataset.raw=a,me(2,!1),qe(3),it(3),me(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,me(3,!1),Ft();const u=ki(y.step3Result);Bi(a,u)}catch(i){console.error("Regeneration failed:",i),Ft(),he(ta(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Kt()}}async function ov(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const s=await ke("flutterflow"),r=await ke("flutterflow_project_id");s&&r?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):s||r?(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 av(t){try{const e=await fetch(`${Je}/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 lv(t){try{const s=await(await fetch(`${Je}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(s.error||!s.email||!s.sessionToken)throw new Error(s.error||"Invalid or expired link");return s}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function cv(t){try{const e=await fetch(`${Je}/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:`${Je}/auth/refresh-session`,status:e.status}),null;const s=await e.json();return s.error||!s.email||!s.sessionToken?(console.warn("refreshSession: validation failed",{error:s.error,hasEmail:!!s.email,hasToken:!!s.sessionToken}),null):s}catch(e){return console.error("refreshSession: fetch failed",{url:`${Je}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function Kl(t,e){const s=wd(),r=(q.email||s.email)!==t;q.email=t,q.sessionToken=e,q.isVerified=!0,fe=_s({isLoading:!0}),localStorage.setItem(li,JSON.stringify({email:t,sessionToken:e})),r&&ua()}function ra(){q.email=null,q.sessionToken=null,q.isVerified=!1,fe=_s({isResolved:!0}),localStorage.removeItem(li),localStorage.removeItem(ui)}function wd(){try{const t=localStorage.getItem(li);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(li),{email:null,sessionToken:null}}}async function uv(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await lv(e);Kl(s,r)}catch(s){he(s.message||"Sign-in link invalid or expired.","error")}}else{const{email:s,sessionToken:r}=wd();if(s&&r){const i=await cv(r);i?Kl(i.email,i.sessionToken):ra()}}na()}function ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function dv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function hv(){var n;const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),s=document.getElementById("signin-message"),r=(n=t==null?void 0:t.value)==null?void 0:n.trim();if(!r||!/^[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(r)||r.length>254){s&&(s.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…"),s&&(s.textContent="");try{await av(r),t&&(t.value=""),s&&(s.textContent=`Check your email — we sent a link to ${r}`),e&&(e.textContent="Sent!")}catch(o){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:o}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function pv(){ra(),ua(),na(),Oi()}function na(){const t=q.isVerified&&!!q.email,e=document.getElementById("auth-signedout"),s=document.getElementById("auth-signedin"),r=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),s&&s.classList.toggle("hidden",!t),r&&r.classList.toggle("hidden",t);const i=document.getElementById("auth-user-email");i&&(i.textContent=q.email||""),Lr(),Oi()}async function fv(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),s=e.visitorId,r=await fetch(dg,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:s})});if(!r.ok)throw new Error(`Identity check HTTP ${r.status}`);const i=await r.json();if(Rr.userId=i.user_id,Rr.status=i.status,Rr.resolved=!0,sessionStorage.setItem(ug,i.user_id),i.usage_count!==void 0){const n=qt(),o=i.usage_month||n,a=o===n?i.usage_count:0,l=oa(),u=l.month===n?l.count:0;(a>=u||o>l.month)&&localStorage.setItem(ls,JSON.stringify({count:a,month:n})),Li()}console.log(`Identity resolved: ${i.status} (${i.user_id.slice(0,8)}...) usage: ${i.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}function oa(){const t=qt();try{const e=localStorage.getItem(ls);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:ls,month:t,err:e}),localStorage.removeItem(ls),{count:0,month:t}}}function qt(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Ni(){const t=oa();return t.month!==qt()?{count:0,month:qt()}:t}function gv(){const e={count:Ni().count+1,month:qt()};return localStorage.setItem(ls,JSON.stringify(e)),e}function aa(){return!!fe.isLoading}function Vt(){return!!fe.isResolved}function vv(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(ci,e)?e:null}function mv(t){var e;return t&&((e=Object.entries(id).find(([,s])=>s===t))==null?void 0:e[0])||null}function Er(...t){return t.find(e=>e!=null&&e!=="")}function _v(...t){return t.find(e=>e&&typeof e=="object")||{}}function yv(t){var c,d,h,f,p,v,_,m,w,S,k,E,P,D,x,A,R,M,$,N;const e=t.data&&typeof t.data=="object"?t.data:t,s=_v(e.subscription,e.stripeSubscription,e.currentSubscription,(h=(d=(c=e.customer)==null?void 0:c.subscriptions)==null?void 0:d.data)==null?void 0:h[0],(p=(f=e.subscriptions)==null?void 0:f.data)==null?void 0:p[0],(v=e.subscriptions)==null?void 0:v[0]),r=e.metadata||s.metadata||((_=e.customer)==null?void 0:_.metadata)||{},i=Er(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,s.priceId,s.price_id,(m=s.plan)==null?void 0:m.id,(w=s.price)==null?void 0:w.id,(P=(E=(k=(S=s.items)==null?void 0:S.data)==null?void 0:k[0])==null?void 0:E.price)==null?void 0:P.id,(A=(x=(D=s.items)==null?void 0:D[0])==null?void 0:x.price)==null?void 0:A.id,(N=($=(M=(R=s.lines)==null?void 0:R.data)==null?void 0:M[0])==null?void 0:$.price)==null?void 0:N.id),n=Er(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=vv(Er(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,s.tier,s.plan,r.tier,r.plan)),a=hg.has(String(n).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||mv(i)||(a||l?"professional":"free");return _s({tier:u,status:n,periodEnd:Er(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function la(){return ci[fe.tier]??ci.free}async function wv(){if(q.isVerified&&(!Vt()||aa())&&(await bd({force:!0}),Oi()),q.isVerified&&!Vt())return he("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Ni(),e=la();if(t>=e)return ca(t,e,{openModal:!0}),!1;const s=Math.floor(e*.8);if(t>=s){const r=e-t;he(`${r} run${r===1?"":"s"} remaining this month.`,"warning")}return!0}function _n(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function ca(t,e,s={}){const r=document.getElementById("walkthrough-modal");r&&r.classList.remove("open");const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("preview-frame-container");n&&(n.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){he(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),mi();return}const c=document.getElementById("paywall-exhausted-text");if(c){const h=fe.tier;h==="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 ${h} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",q.isVerified),u.classList.remove("hidden"),s.openModal&&mi()}function _o(t){return fe.tier==="free"&&Tr.includes(t)?er:t}function bv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,i=!(q.isVerified&&!Vt())&&s==="free";Array.from(e.options).forEach(o=>{const a=He(o.value),l=Tr.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&Tr.includes(e.value)&&(e.value=er),e.disabled=!1,Bl.has(e)||(e.addEventListener("change",()=>{Vt()&&fe.tier==="free"&&Tr.includes(e.value)&&(e.value=er,mi()),vo(e.value)}),Bl.add(e));let n=document.getElementById("model-selector-free-notice");i?(n||(n=document.createElement("p"),n.id="model-selector-free-notice",n.className="text-xs text-gray-400 mt-1",t.appendChild(n)),n.innerHTML='Free plan — Gemini only. '):n&&n.remove(),vo(e.value)}function Li(){const t=document.getElementById("usage-counter");if(!t)return;if(q.isVerified&&aa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",Lr(),_n();return}if(q.isVerified&&!Vt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",Lr(),_n();return}const{count:e}=Ni(),s=la();t.textContent=`${e} / ${s} runs this month`;const r=s>0?e/s:0;t.className=r>=1?"text-xs text-red-600 font-medium":r>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500",Lr(),e>=s&&!y.isRunning?ca(e,s):_n()}function Lr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=oa(),s=e.month===qt()?e.count??0:0,r=ci.free;t.textContent=`${s} / ${r} generations used`}async function bd(t={}){const e=t.force===!0;if(!q.isVerified||!q.sessionToken){fe=_s({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const s=localStorage.getItem(ui);if(!e&&s)try{const{data:r,email:i,ts:n,version:o}=JSON.parse(s);if(o===jl&&i===q.email&&Date.now()-n<5*60*1e3){fe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",s)}try{const i=await(await fetch(`${Je}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:q.sessionToken,email:q.email})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){ra(),na();return}fe=_s({isResolved:!1,error:i.error});return}fe=yv(i),localStorage.setItem(ui,JSON.stringify({version:jl,data:fe,email:q.email,ts:Date.now()}))}catch(r){console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function ua(){localStorage.removeItem(ui)}async function Ev(t){if(!q.isVerified||!q.sessionToken){Ed(),ia();return}if(!id[t]){he("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const r=await(await fetch(`${Je}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:q.sessionToken,currency:nd()})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to create checkout session");const{url:i}=r;window.location.href=i}catch(s){console.error("startCheckout failed:",s),e&&(e.disabled=!1,e.textContent="Subscribe"),he("Could not start checkout. Please try again.","error")}}async function Sv(){if(!q.isVerified||!q.sessionToken){ia();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const s=await(await fetch(`${Je}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:q.sessionToken})})).json();if(s.error||!s.url)throw new Error(s.error||"Failed to open billing portal");const{url:r}=s;window.location.href=r}catch(e){console.error("openCustomerPortal failed:",e),t&&(t.disabled=!1,t.textContent="Manage billing"),he("Could not open billing portal. Please try again.","error")}}async function vi(t,e,s,r={}){const n=new AbortController,o=setTimeout(()=>n.abort(),12e4);try{const a=await fetch(cg,{method:"POST",headers:{"Content-Type":"application/json"},signal:n.signal,body:JSON.stringify({user_id:Rr.userId,step:t,model:e,prompt:s,context:r})}),l=await a.json();if(a.status===429){l.serverCount!==void 0&&(localStorage.setItem(ls,JSON.stringify({count:l.serverCount,month:qt()})),Li());const d=new Error(l.message||"Monthly usage limit reached. Upgrade to continue.");throw d.isUsageLimit=!0,d}const u=hf(l,t);if(u)throw u;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(l),"content type:",typeof l.content),!a.ok)throw new Error(`${l.message||l.error||"BuildShip pipeline error"} (HTTP ${a.status})`);let c=l.output||l.content;if(!c)throw new Error(`BuildShip returned no output for step "${t}"`);return Array.isArray(c)&&(c=c.map(d=>typeof d=="string"?d:d.text||"").join("")),typeof c!="string"&&(c=JSON.stringify(c)),c}catch(a){throw a.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):a instanceof TypeError?new Error(`BuildShip unreachable: ${a.message}`):a}finally{clearTimeout(o)}}function xv(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),ua(),he("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),he("Checkout cancelled.","info"))}function Oi(){const t=q.isVerified&&!!q.email,e=fe.tier,s=t&&aa(),r=!t||Vt(),i=document.getElementById("subscription-tier-badge");if(i){const a={free:"Free",professional:"Professional",power:"Power Developer"},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"};i.textContent=s?"Checking…":r?a[e]||"Free":"Plan unavailable",i.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r?l[e]||l.free:l.unresolved}`}const n=document.getElementById("upgrade-prompt");n&&n.classList.toggle("hidden",!t||s||!r||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||s||r&&e==="free"),kv(r?e:null),bv(),Li()}function kv(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(([i,{btnId:n,defaultText:o}])=>{const a=document.getElementById(n);a&&(i===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const r=document.getElementById("free-tier-current");r&&r.classList.toggle("hidden",t!=="free")}function yo(){const t=nd(),e=document.getElementById("pro-price"),s=document.getElementById("power-price"),r=document.getElementById("pro-price-note"),i=document.getElementById("power-price-note");e&&(e.textContent=Hl(Ul.professional,t)),s&&(s.textContent=Hl(Ul.power,t));const n="billed monthly";r&&(r.textContent=n),i&&(i.textContent=n)}function mi(){yo();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),fg().then(()=>yo())}function Ed(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function he(t,e="info"){const s={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},r=document.createElement("div");r.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 ${s[e]||s.info}`,r.textContent=t,document.body.appendChild(r),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>r.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),Iv(),await uv(),xv(),await bd(),Oi(),yo(),await Bg(),Mg();const t=document.getElementById("flutterflow-endpoint-select");if(t){const s=or();t.value=s}dd(),fv();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{bt===2&&e.value.trim().length>0&&(qo(),Ii())}),e.addEventListener("blur",()=>{const s=document.getElementById("walkthrough-modal");bt===2&&s&&s.classList.add("open")}),e.addEventListener("keydown",s=>{if(s.key==="Tab"){const r=document.getElementById("walkthrough-modal");bt===2&&r&&setTimeout(()=>{r.classList.add("open")},100)}})),window.addEventListener("commitStateChange",s=>{const{state:r}=s.detail;r===G.PREPARING||r===G.VALIDATING||r===G.PUSHING?(be.phaseId||da(),Yl(r)):(r===G.SUCCESS||r===G.ERROR)&&(Yl(r),setTimeout(nr,1e3))})});function Iv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Cv(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Gt),document.addEventListener("keydown",Gt))}function Gt(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),s=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),s&&s.classList.remove("hidden");const r=document.getElementById("welcome-video-player");r&&r.removeEventListener("click",Gt),document.removeEventListener("keydown",Gt),dd()}let Vs=null;function Fv(t,e,s,r=null){Vs={codeInfo:t,checks:e,deps:s,bundlePlan:r},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=r?`${r.fileEntries.length} files`:t.content.split(` +`).length,ke("flutterflow_project_id").then(u=>{document.getElementById("confirm-project-id").textContent=u||"Not configured"});const i=document.getElementById("confirm-deps-list"),n=document.getElementById("confirm-deps-section");s&&Object.keys(s).length>0?(i.innerHTML=Object.entries(s).map(([u,c])=>`
  • • ${wt(u)}: ${wt(c)}
  • `).join(""),n.classList.remove("hidden")):n.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=>`
  • • ${wt(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&&l.classList.add("open")}function Sd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),Vs=null}function Pv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&e.classList.remove("open");const s=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const n of s){const o=document.getElementById(n);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const i=document.getElementById("success-warnings-list");i&&(i.innerHTML="")}function _i(t){var f,p,v,_;const e=(m,w)=>{const S=document.getElementById(m);S&&(S.textContent=w||"")},s=((f=t.metadata)==null?void 0:f.fileName)||"",r=((p=t.metadata)==null?void 0:p.projectId)||"",i=((v=t.metadata)==null?void 0:v.artifactType)||"",n=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=(_=t.metadata)!=null&&_.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",r),e("success-file-name",s),e("success-artifact-type",i),e("success-time",n),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&&r&&(u.href=`https://app.flutterflow.io/project/${r}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list");t.warnings&&t.warnings.length>0&&c&&d&&(d.innerHTML=t.warnings.map(([m,w])=>`
  • ${j(m)}: ${j(String(w))}
  • `).join(""),c.classList.remove("hidden"));const h=document.getElementById("commit-success-modal");h&&h.classList.add("open")}function yi(t){nr(),iv(t)}function Av(){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 Jl={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}},Rv=[{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..."}],be={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&e.classList.add("open"),this.set("prepare")},set(t,e=null){if(!(!Jl[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const s=this.sequence.indexOf("package");this.sequence.splice(s===-1?this.sequence.length:s,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=Jl[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,s=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=Rv.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),n=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&n.push(Tv(e)),xd(this.phaseId==="done"?100:s,t.message,n.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&t.classList.remove("open")}};function Tv(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 da(t){be.start(t)}function nr(){be.stop()}function xd(t,e,s,r=null){const i=document.getElementById("commit-progress-bar"),n=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");i&&(i.style.width=`${Math.round(t*10)/10}%`),n&&(n.textContent=e),o&&(o.textContent=s),a&&(a.textContent=r||"",a.classList.toggle("hidden",!r))}function Yl(t){const e={[G.PREPARING]:"prepare",[G.VALIDATING]:"validate",[G.PUSHING]:"project",[G.SUCCESS]:"done"};if(t===G.ERROR){be.timer&&clearInterval(be.timer),be.timer=null,xd(100,"Failed","Error occurred");return}const s=e[t];s&&be.set(s)}function $v(t){var e;return t.bundlePlan?t.bundlePlan.fileEntries.some(s=>s.type===U.CODE_FILE):((e=t.codeInfo)==null?void 0:e.codeType)===U.CODE_FILE}async function Mv(){var n,o;if(!Vs){console.error("No pending commit data");return}const t=Vs;if(Sd(),da({withProvisioning:$v(t)}),t.bundlePlan){const a=await Gg(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:(n=document.getElementById("code-generator-model"))==null?void 0:n.value}});nr(),a.success?_i(a):yi(a);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r}=pd(),i=await yd(e.content,{artifactType:s,artifactName:r,pipelineResult:{step1Result:y.step1Result,selectedModel:(o=document.getElementById("code-generator-model"))==null?void 0:o.value}});nr(),i.success?_i(i):yi(i),Vs=null}window.runThinkingPipeline=mo;window.toggleStep=Yg;window.toggleSection=Jg;window.selectWorkflowStep=qe;window.copyCode=Zg;window.retryWithDifferentModel=tv;window.openApiKeysModal=Wo;window.closeApiKeysModal=cd;window.closeWalkthroughModal=Fg;window.openWalkthroughModal=Cg;window.advanceWalkthrough=qo;window.commitToFlutterFlow=Vg;function Nv(){const t=document.getElementById("pipeline-input");t&&t.focus()}function Lv(){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=Nv;window.openModelSelector=Lv;window.saveApiKeys=Rg;window.clearAllApiKeys=Tg;window.toggleKeyVisibility=Lg;window.handleWelcomeVideoEnd=Cv;window.dismissWelcomeVideo=Gt;window.initiateCommitToFlutterFlow=sv;window.updateFlutterFlowCredentialStatus=ov;window.closeCommitConfirmModal=Sd;window.closeCommitSuccessModal=Pv;window.showCommitSuccessModal=_i;window.showCommitFailureModal=yi;window.toggleCodePreview=Av;window.confirmCommitToFlutterFlow=Mv;window.runRefinement=Xg;window.regenerateFromPastedErrors=ev;window.clearErrorInput=Qg;window.setFlutterFlowEndpoint=Ig;window.getFlutterFlowEndpoint=or;window.commitProgress=be;window.openSignInModal=ia;window.closeSignInModal=dv;window.handleMagicLinkRequest=hv;window.handleSignOut=pv;window.startCheckout=Ev;window.openCustomerPortal=Sv;window.openPricingModal=mi;window.closePricingModal=Ed;let cs=null,kd=null;const Zl=120;function Di(){const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),s=document.getElementById("ready-state");s&&s.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),kd=Date.now();for(let r=1;r<=3;r++){const i=document.getElementById(`pdot-${r}`);i&&(i.className="progress-dot")}it(1),Ov()}function it(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},s={1:"Step 1 of 3 — Prompt Architect",2:"Step 2 of 3 — Code Generator",3:"Step 3 of 3 — Code Review"},r=document.getElementById("progress-title-text"),i=document.getElementById("progress-substep-text");r&&(r.textContent=e[t]||e[1]),i&&(i.textContent=s[t]||s[1]);for(let n=1;n<=3;n++){const o=document.getElementById(`pdot-${n}`);o&&(n{const t=(Date.now()-kd)/1e3,e=document.getElementById("progress-elapsed"),s=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/Zl*100,i=Math.min(95,r*(1-Math.exp(-t/(Zl*.6)))*1.2);s&&(s.style.width=`${i}%`)},250)}function Ft(){cs&&(clearInterval(cs),cs=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const s=document.getElementById(`pdot-${e}`);s&&(s.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function ws(t,e=""){const s={pass:'',warning:'',fail:''};return``}function Id(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function Dv(){return Wf({bundle:y.artifactBundle,reviewResult:y.step3Result})}function Bv(t){return` +
    + ${ws(t.severity)} +
    +
    ${j(t.message)}
    + ${t.suggestion?`
    ${j(t.suggestion)}
    `:""} + ${j(t.source)} +
    +
    + `}function jv(t){return` +
  • +
    + ${j(t.title)} + ${t.detail&&t.detail!==t.title?`

    ${j(t.detail)}

    `:""} +
    +
  • + `}function Uv(t){const e=document.getElementById("results-summary-detail"),s=document.getElementById("results-title");if(!e)return;s&&(s.textContent=t.title);const r=t.score,i=r==null?"neutral":r>=80?"pass":r>=60?"warning":"fail",n=r==null?"":r>=80?"Strong":r>=60?"Needs work":"High risk",o=t.findings.length?` +
      + ${t.findings.map(l=>` +
    • + ${ws(l.severity)} + + ${j(l.message)} + ${l.suggestion?`${j(l.suggestion)}`:""} + +
    • + `).join("")} +
    + `:"",a=t.manualSteps.length?` +
    +

    ${ws("warning")} Complete in FlutterFlow

    +
      + ${t.manualSteps.map(l=>` +
    • + ${j(l.title)} + ${l.detail&&l.detail!==l.title?`${j(l.detail)}`:""} +
    • + `).join("")} +
    +
    + `:"";e.innerHTML=` +
    +
    +

    ${j(t.summary)}

    + ${o} + ${a} +
    +
    + +
    + Is the generated code correct? +
    + + +
    +
    +
    +
    + `}function Hv(t){var l,u,c;const e=t.artifacts.find(d=>d.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const s={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],r=e.findings.length?e.findings.map(Bv).join(""):`
    ${ws(s.icon)} ${j(s.message)}
    `,i=(l=e.dependencies)!=null&&l.length?e.dependencies.map(d=>` +
  • ${j(d.name)}${d.version?` ${j(d.version)}`:""}${d.reason?`

    ${j(d.reason)}

    `:""}
  • + `).join(""):'
  • No external packages
  • ',n=(u=e.imports)!=null&&u.length?e.imports.map(d=>`${j(d)}`).join(""):'No imports returned',o=(c=e.publicApi)!=null&&c.length?e.publicApi.map(d=>`${j(d)}`).join(""):'No public API signature returned',a=e.relationships.length?e.relationships.map(d=>` +
  • ${j(d.from||"Bundle")} ${j(d.type)} ${j(d.to||"Bundle")}${d.description?`

    ${j(d.description)}

    `:""}
  • + `).join(""):'
  • No relationships for this file
  • ';return` +
    +
    + ${ws(e.status)} ${j(Id(e.status))} +

    ${j(e.artifactName)}

    + ${e.description?`

    ${j(e.description)}

    `:""} +
    +
    + ${j(e.artifactType)} + ${j(e.fileName)} +
    +
    +
    +

    Code Review findings

    + ${r} +
    + ${e.manualSteps.length?` +
    +

    Manual FlutterFlow steps for this file

    +
      ${e.manualSteps.map(jv).join("")}
    +
    + `:""} +
    + File details +
    +
    +

    Dependencies

    +
      ${i}
    +
    +
    +

    Deployment

    +
    +
    Status
    ${j(e.deployStatus||"pending")}
    +
    Order
    ${e.index+1} of ${t.artifacts.length}
    +
    Path hint
    ${j(e.pathHint||"Not returned")}
    +
    +
    +
    +
    +

    Public API

    +
    ${o}
    +
    +
    +

    Imports

    +
    ${n}
    +
    +
    +

    Relationships

    +
      ${a}
    +
    +
    + `}function zv(t){const e=document.getElementById("bundle-strip"),s=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(s&&s.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){i&&(i.textContent="0 files"),e&&e.classList.remove("visible"),r&&(r.innerHTML="");return}if(i){const n=t.artifacts.length;i.textContent=`${n} ${n===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(n=>` + + `).join(""),r.onclick=n=>{var a;const o=n.target.closest(".artifact-tab");(a=o==null?void 0:o.dataset)!=null&&a.artifactId&&Cd(o.dataset.artifactId)}),e&&e.classList.add("visible")}function ha(){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"),s=document.getElementById("results-audit-output"),r=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),n=Dv(),o=Ko();if(Uv(n),zv(n),e&&(e.textContent=""),e){const a=rd(o);e.innerHTML=a}s&&(s.innerHTML=Hv(n)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Bi(t,e){y.selectedArtifactId||(y.selectedArtifactId=oi(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),ha(),Kt();const r=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),i&&(i.className="feedback-btn")}function Cd(t){y.selectedArtifactId=t,y.resultsViewMode="file",ha()}function Wv(){y.resultsViewMode="summary",ha()}function qv(){const t=document.getElementById("btn-copy-results"),e=Ko();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const s=t.querySelector("span");if(s){const r=s.textContent;s.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),s.textContent=r},2e3)}}})}function Vv(t){const e=document.getElementById("btn-feedback-up"),s=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),s.classList.remove("active-down")):(s.classList.toggle("active-down"),e.classList.remove("active-up"));const r=t==="up"?"thumbsUp":"thumbsDown";sa(r,y.step2Result,y.step1Result),tt("Generation Feedback",{feedback:r})}function Gv(){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 Fd(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=qv;window.selectArtifact=Cd;window.selectResultsSummary=Wv;window.submitResultsFeedback=Vv;window.showErrorInputPanel=Gv;window.hideErrorInputPanel=Fd; diff --git a/dist/assets/index-CqRheZeQ.js b/dist/assets/index-CqRheZeQ.js deleted file mode 100644 index 900b8e8..0000000 --- a/dist/assets/index-CqRheZeQ.js +++ /dev/null @@ -1,307 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function t(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=t(r);fetch(r.href,i)}})();var h=typeof window<"u"?window:void 0,te=typeof globalThis<"u"?globalThis:h;typeof self>"u"&&(te.self=te),typeof File>"u"&&(te.File=function(){});var ga=Array.prototype,Wi=ga.forEach,zi=ga.indexOf,he=te==null?void 0:te.navigator,w=te==null?void 0:te.document,ee=te==null?void 0:te.location,cr=te==null?void 0:te.fetch,ur=te!=null&&te.XMLHttpRequest&&"withCredentials"in new te.XMLHttpRequest?te.XMLHttpRequest:void 0,Gi=te==null?void 0:te.AbortController,ue=he==null?void 0:he.userAgent,k=h??{},je={DEBUG:!1,LIB_VERSION:"1.353.0"};function Vi(n,e,t,s,r,i,o){try{var a=n[i](o),l=a.value}catch(c){return void t(c)}a.done?e(l):Promise.resolve(l).then(s,r)}function Ue(n){return function(){var e=this,t=arguments;return new Promise(function(s,r){var i=n.apply(e,t);function o(l){Vi(i,s,r,o,a,"next",l)}function a(l){Vi(i,s,r,o,a,"throw",l)}o(void 0)})}}function S(){return S=Object.assign?Object.assign.bind():function(n){for(var e=1;e{var r=s.toLowerCase();return t.indexOf(r)!==-1})};function $(n,e){return n.indexOf(e)!==-1}var Es=function(n){return n.trim()},dr=function(n){return n.replace(/^\$/,"")},Cc=Array.isArray,va=Object.prototype,_a=va.hasOwnProperty,Ss=va.toString,N=Cc||function(n){return Ss.call(n)==="[object Array]"},Ge=n=>typeof n=="function",Z=n=>n===Object(n)&&!N(n),Ft=n=>{if(Z(n)){for(var e in n)if(_a.call(n,e))return!1;return!0}return!1},b=n=>n===void 0,K=n=>Ss.call(n)=="[object String]",pr=n=>K(n)&&n.trim().length===0,ke=n=>n===null,O=n=>b(n)||ke(n),Xe=n=>Ss.call(n)=="[object Number]"&&n==n,Rt=n=>Xe(n)&&n>0,Ke=n=>Ss.call(n)==="[object Boolean]",xc=n=>n instanceof FormData,kc=n=>$(Sc,n);function fr(n){return n===null||typeof n!="object"}function qn(n,e){return Object.prototype.toString.call(n)==="[object "+e+"]"}function ya(n){return!b(Event)&&function(e,t){try{return e instanceof t}catch{return!1}}(n,Event)}var Tc=[!0,"true",1,"1","yes"],Ws=n=>$(Tc,n),Rc=[!1,"false",0,"0","no"];function Ne(n,e,t,s,r){return e>t&&(s.warn("min cannot be greater than max."),e=t),Xe(n)?n>t?(s.warn(" cannot be greater than max: "+t+". Using max value instead."),t):n0){var i=r*this.m;e.tokens=Math.min(e.tokens+i,this.o),e.lastAccess=e.lastAccess+r*this.$}}consumeRateLimit(e){var t,s=Date.now(),r=String(e),i=this.t[r];return i?this.S(i,s):(i={tokens:this.o,lastAccess:s},this.t[r]=i),i.tokens===0||(i.tokens--,i.tokens===0&&((t=this.i)==null||t.call(this,e)),i.tokens===0)}stop(){this.t={}}}var Ie="Mobile",Kn="iOS",Ve="Android",gn="Tablet",wa=Ve+" "+gn,ba="iPad",Ea="Apple",Sa=Ea+" Watch",mn="Safari",Dt="BlackBerry",Ia="Samsung",Ca=Ia+"Browser",xa=Ia+" Internet",vt="Chrome",Pc=vt+" OS",ka=vt+" "+Kn,Qr="Internet Explorer",Ta=Qr+" "+Ie,ei="Opera",Fc=ei+" Mini",ti="Edge",Ra="Microsoft "+ti,Mt="Firefox",Aa=Mt+" "+Kn,vn="Nintendo",_n="PlayStation",Ot="Xbox",Pa=Ve+" "+Ie,Fa=Ie+" "+mn,sn="Windows",hr=sn+" Phone",Ki="Nokia",gr="Ouya",$a="Generic",$c=$a+" "+Ie.toLowerCase(),Ma=$a+" "+gn.toLowerCase(),mr="Konqueror",le="(\\d+(\\.\\d+)?)",zs=new RegExp("Version/"+le),Mc=new RegExp(Ot,"i"),Oc=new RegExp(_n+" \\w+","i"),Nc=new RegExp(vn+" \\w+","i"),ni=new RegExp(Dt+"|PlayBook|BB10","i"),Lc={"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"},Fn,Yi,Gs,Dc=(n,e)=>e&&$(e,Ea)||function(t){return $(t,mn)&&!$(t,vt)&&!$(t,Ve)}(n),Oa=function(n,e){return e=e||"",$(n," OPR/")&&$(n,"Mini")?Fc:$(n," OPR/")?ei:ni.test(n)?Dt:$(n,"IE"+Ie)||$(n,"WPDesktop")?Ta:$(n,Ca)?xa:$(n,ti)||$(n,"Edg/")?Ra:$(n,"FBIOS")?"Facebook "+Ie:$(n,"UCWEB")||$(n,"UCBrowser")?"UC Browser":$(n,"CriOS")?ka:$(n,"CrMo")||$(n,vt)?vt:$(n,Ve)&&$(n,mn)?Pa:$(n,"FxiOS")?Aa:$(n.toLowerCase(),mr.toLowerCase())?mr:Dc(n,e)?$(n,Ie)?Fa:mn:$(n,Mt)?Mt:$(n,"MSIE")||$(n,"Trident/")?Qr:$(n,"Gecko")?Mt:""},Bc={[Ta]:[new RegExp("rv:"+le)],[Ra]:[new RegExp(ti+"?\\/"+le)],[vt]:[new RegExp("("+vt+"|CrMo)\\/"+le)],[ka]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[mn]:[zs],[Fa]:[zs],[ei]:[new RegExp("(Opera|OPR)\\/"+le)],[Mt]:[new RegExp(Mt+"\\/"+le)],[Aa]:[new RegExp("FxiOS\\/"+le)],[mr]:[new RegExp("Konqueror[:/]?"+le,"i")],[Dt]:[new RegExp(Dt+" "+le),zs],[Pa]:[new RegExp("android\\s"+le,"i")],[xa]:[new RegExp(Ca+"\\/"+le)],[Qr]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},jc=function(n,e){var t=Oa(n,e),s=Bc[t];if(b(s))return null;for(var r=0;r[Ot,n&&n[1]||""]],[new RegExp(vn,"i"),[vn,""]],[new RegExp(_n,"i"),[_n,""]],[ni,[Dt,""]],[new RegExp(sn,"i"),(n,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[hr,""];if(new RegExp(Ie).test(e)&&!/IEMobile\b/.test(e))return[sn+" "+Ie,""];var t=/Windows NT ([0-9.]+)/i.exec(e);if(t&&t[1]){var s=t[1],r=Lc[s]||"";return/arm/i.test(e)&&(r="RT"),[sn,r]}return[sn,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,n=>{if(n&&n[3]){var e=[n[3],n[4],n[5]||"0"];return[Kn,e.join(".")]}return[Kn,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,n=>{var e="";return n&&n.length>=3&&(e=b(n[2])?n[3]:n[2]),["watchOS",e]}],[new RegExp("("+Ve+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Ve+")","i"),n=>{if(n&&n[2]){var e=[n[2],n[3],n[4]||"0"];return[Ve,e.join(".")]}return[Ve,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,n=>{var e=["Mac OS X",""];if(n&&n[1]){var t=[n[1],n[2],n[3]||"0"];e[1]=t.join(".")}return e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[Pc,""]],[/Linux|debian/i,["Linux",""]]],Zi=function(n){return Nc.test(n)?vn:Oc.test(n)?_n:Mc.test(n)?Ot:new RegExp(gr,"i").test(n)?gr:new RegExp("("+hr+"|WPDesktop)","i").test(n)?hr:/iPad/.test(n)?ba:/iPod/.test(n)?"iPod Touch":/iPhone/.test(n)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(n)?Sa:ni.test(n)?Dt:/(kobo)\s(ereader|touch)/i.test(n)?"Kobo":new RegExp(Ki,"i").test(n)?Ki:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(n)||/(kf[a-z]+)( bui|\)).+silk\//i.test(n)?"Kindle Fire":/(Android|ZTE)/i.test(n)?new RegExp(Ie).test(n)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(n)||/pixel[\daxl ]{1,6}/i.test(n)&&!/pixel c/i.test(n)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(n)||/lmy47v/i.test(n)&&!/QTAQZ3/i.test(n)?Ve:wa:new RegExp("(pda|"+Ie+")","i").test(n)?$c:new RegExp(gn,"i").test(n)&&!new RegExp(gn+" pc","i").test(n)?Ma:""},Uc=n=>n instanceof Error;function Hc(n){var e=globalThis._posthogChunkIds;if(e){var t=Object.keys(e);return Gs&&t.length===Yi||(Yi=t.length,Gs=t.reduce((s,r)=>{Fn||(Fn={});var i=Fn[r];if(i)s[i[0]]=i[1];else for(var o=n(r),a=o.length-1;a>=0;a--){var l=o[a],c=l==null?void 0:l.filename,u=e[r];if(c&&u){s[c]=u,Fn[r]=[c,u];break}}return s},{})),Gs}}class Wc{constructor(e,t,s){s===void 0&&(s=[]),this.coercers=e,this.stackParser=t,this.modifiers=s}buildFromUnknown(e,t){t===void 0&&(t={});var s=t&&t.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(s,t,0).apply(e),i=this.buildParsingContext(t),o=this.parseStacktrace(r,i);return{$exception_list:this.convertToExceptionList(o,s),$exception_level:"error"}}modifyFrames(e){var t=this;return Ue(function*(){for(var s of e)s.stacktrace&&s.stacktrace.frames&&N(s.stacktrace.frames)&&(s.stacktrace.frames=yield t.applyModifiers(s.stacktrace.frames));return e})()}coerceFallback(e){var t;return{type:"Error",value:"Unknown error",stack:(t=e.syntheticException)==null?void 0:t.stack,synthetic:!0}}parseStacktrace(e,t){var s,r;return e.cause!=null&&(s=this.parseStacktrace(e.cause,t)),e.stack!=""&&e.stack!=null&&(r=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap)),S({},e,{cause:s,stack:r})}applyChunkIds(e,t){return e.map(s=>(s.filename&&t&&(s.chunk_id=t[s.filename]),s))}applyCoercers(e,t){for(var s of this.coercers)if(s.match(e))return s.coerce(e,t);return this.coerceFallback(t)}applyModifiers(e){var t=this;return Ue(function*(){var s=e;for(var r of t.modifiers)s=yield r(s);return s})()}convertToExceptionList(e,t){var s,r,i,o={type:e.type,value:e.value,mechanism:{type:(s=t.type)!==null&&s!==void 0?s:"generic",handled:(r=t.handled)===null||r===void 0||r,synthetic:(i=e.synthetic)!==null&&i!==void 0&&i}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,S({},t,{handled:!0}))),a}buildParsingContext(e){var t;return{chunkIdMap:Hc(this.stackParser),skipFirstLines:(t=e.skipFirstLines)!==null&&t!==void 0?t:1}}buildCoercingContext(e,t,s){s===void 0&&(s=0);var r=(i,o)=>{if(o<=4){var a=this.buildCoercingContext(e,t,o);return this.applyCoercers(i,a)}};return S({},t,{syntheticException:s==0?t.syntheticException:void 0,mechanism:e,apply:i=>r(i,s),next:i=>r(i,s+1)})}}var Bt="?";function vr(n,e,t,s,r){var i={platform:n,filename:e,function:t===""?Bt:t,in_app:!0};return b(s)||(i.lineno=s),b(r)||(i.colno=r),i}var Na=(n,e)=>{var t=n.indexOf("safari-extension")!==-1,s=n.indexOf("safari-web-extension")!==-1;return t||s?[n.indexOf("@")!==-1?n.split("@")[0]:Bt,t?"safari-extension:"+e:"safari-web-extension:"+e]:[n,e]},zc=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Gc=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Vc=/\((\S*)(?::(\d+))(?::(\d+))\)/,qc=(n,e)=>{var t=zc.exec(n);if(t){var[,s,r,i]=t;return vr(e,s,Bt,+r,+i)}var o=Gc.exec(n);if(o){if(o[2]&&o[2].indexOf("eval")===0){var a=Vc.exec(o[2]);a&&(o[2]=a[1],o[3]=a[2],o[4]=a[3])}var[l,c]=Na(o[1]||Bt,o[2]);return vr(e,c,l,o[3]?+o[3]:void 0,o[4]?+o[4]:void 0)}},Kc=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Yc=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Jc=(n,e)=>{var t=Kc.exec(n);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){var s=Yc.exec(t[3]);s&&(t[1]=t[1]||"eval",t[3]=s[1],t[4]=s[2],t[5]="")}var r=t[3],i=t[1]||Bt;return[i,r]=Na(i,r),vr(e,r,i,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}},Xi=/\(error: (.*)\)/,Qi=50;function Zc(){return function(n){for(var e=arguments.length,t=new Array(e>1?e-1:0),s=1;s1024)){var u=Xi.test(c)?c.replace(Xi,"$1"):c;if(!u.match(/\S*Error: /)){for(var d of t){var p=d(u,n);if(p){o.push(p);break}}if(o.length>=Qi)break}}}return function(f){if(!f.length)return[];var m=Array.from(f);return m.reverse(),m.slice(0,Qi).map(v=>{return S({},v,{filename:v.filename||(_=m,_[_.length-1]||{}).filename,function:v.function||Bt});var _})}(o)}}("web:javascript",qc,Jc)}class Xc{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){var s=K(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:s?e.stack:void 0,cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var t=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?t+": "+e.message:t}isDOMException(e){return qn(e,"DOMException")}isDOMError(e){return qn(e,"DOMError")}}class Qc{match(e){return(t=>t instanceof Error)(e)}coerce(e,t){return{type:this.getType(e),value:this.getMessage(e,t),stack:this.getStack(e),cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,t){var s=e.message;return s.error&&typeof s.error.message=="string"?String(s.error.message):String(s)}getStack(e){return e.stacktrace||e.stack||void 0}}class eu{constructor(){}match(e){return qn(e,"ErrorEvent")&&e.error!=null}coerce(e,t){var s,r=t.apply(e.error);return r||{type:"ErrorEvent",value:e.message,stack:(s=t.syntheticException)==null?void 0:s.stack,synthetic:!0}}}var tu=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class nu{match(e){return typeof e=="string"}coerce(e,t){var s,[r,i]=this.getInfos(e);return{type:r??"Error",value:i??e,stack:(s=t.syntheticException)==null?void 0:s.stack,synthetic:!0}}getInfos(e){var t="Error",s=e,r=e.match(tu);return r&&(t=r[1],s=r[2]),[t,s]}}var su=["fatal","error","warning","log","info","debug"];function La(n,e){e===void 0&&(e=40);var t=Object.keys(n);if(t.sort(),!t.length)return"[object has no keys]";for(var s=t.length;s>0;s--){var r=t.slice(0,s).join(", ");if(!(r.length>e))return s===t.length||r.length<=e?r:r.slice(0,e)+"..."}return""}class ru{match(e){return typeof e=="object"&&e!==null}coerce(e,t){var s,r=this.getErrorPropertyFromObject(e);return r?t.apply(r):{type:this.getType(e),value:this.getValue(e),stack:(s=t.syntheticException)==null?void 0:s.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return ya(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var t="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(t+=" with message: '"+e.message+"'"),t}if("message"in e&&typeof e.message=="string")return e.message;var s=this.getObjectClassName(e);return(s&&s!=="Object"?"'"+s+"'":"Object")+" captured as exception with keys: "+La(e)}isSeverityLevel(e){return K(e)&&!pr(e)&&su.indexOf(e)>=0}getErrorPropertyFromObject(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var s=e[t];if(Uc(s))return s}}getObjectClassName(e){try{var t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{return}}}class iu{match(e){return ya(e)}coerce(e,t){var s,r=e.constructor.name;return{type:r,value:r+" captured as exception with keys: "+La(e),stack:(s=t.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class ou{match(e){return fr(e)}coerce(e,t){var s;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(s=t.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class au{match(e){return qn(e,"PromiseRejectionEvent")}coerce(e,t){var s,r=this.getUnhandledRejectionReason(e);return fr(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:(s=t.syntheticException)==null?void 0:s.stack,synthetic:!0}:t.apply(r)}getUnhandledRejectionReason(e){if(fr(e))return e;try{if("reason"in e)return e.reason;if("detail"in e&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var Da=function(n,e){var{debugEnabled:t}=e===void 0?{}:e,s={k:function(r){if(h&&(je.DEBUG||k.POSTHOG_DEBUG||t)&&!b(h.console)&&h.console){for(var i=("__rrweb_original__"in h.console[r])?h.console[r].__rrweb_original__:h.console[r],o=arguments.length,a=new Array(o>1?o-1:0),l=1;l{s.error("You must initialize PostHog before calling "+r)},createLogger:(r,i)=>Da(n+" "+r,i)};return s},E=Da("[PostHog.js]"),z=E.createLogger,lu=z("[ExternalScriptsLoader]"),eo=(n,e,t)=>{if(n.config.disable_external_dependency_loading)return lu.warn(e+" was requested but loading of external scripts is disabled."),t("Loading of external scripts is disabled");var s=w==null?void 0:w.querySelectorAll("script");if(s){for(var r,i=function(){if(s[o].src===e){var l=s[o];return l.__posthog_loading_callback_fired?{v:t()}:(l.addEventListener("load",c=>{l.__posthog_loading_callback_fired=!0,t(void 0,c)}),l.onerror=c=>t(c),{v:void 0})}},o=0;o{if(!w)return t("document not found");var l=w.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,t(void 0,d)},l.onerror=d=>t(d),n.config.prepare_external_dependency_script&&(l=n.config.prepare_external_dependency_script(l)),!l)return t("prepare_external_dependency_script returned null");if(n.config.external_scripts_inject_target==="head")w.head.appendChild(l);else{var c,u=w.querySelectorAll("body > script");u.length>0?(c=u[0].parentNode)==null||c.insertBefore(l,u[0]):w.body.appendChild(l)}};w!=null&&w.body?a():w==null||w.addEventListener("DOMContentLoaded",a)};k.__PosthogExtensions__=k.__PosthogExtensions__||{},k.__PosthogExtensions__.loadExternalDependency=(n,e,t)=>{var s="/static/"+e+".js?v="+n.version;if(e==="remote-config"&&(s="/array/"+n.config.token+"/config.js"),e==="toolbar"){var r=3e5;s=s+"&t="+Math.floor(Date.now()/r)*r}var i=n.requestRouter.endpointFor("assets",s);eo(n,i,t)},k.__PosthogExtensions__.loadSiteApp=(n,e,t)=>{var s=n.requestRouter.endpointFor("api",e);eo(n,s,t)};var Yn={};function lt(n,e,t){if(N(n)){if(Wi&&n.forEach===Wi)n.forEach(e,t);else if("length"in n&&n.length===+n.length){for(var s=0,r=n.length;s1?e-1:0),s=1;s1?e-1:0),s=1;s0||Xe(t))&&(e[s]=t)}),e};function uu(n,e){return t=n,s=i=>K(i)&&!ke(e)?i.slice(0,e):i,r=new Set,function i(o,a){return o!==Object(o)?s?s(o,a):o:r.has(o)?void 0:(r.add(o),N(o)?(l=[],lt(o,c=>{l.push(i(c))})):(l={},U(o,(c,u)=>{r.has(c)||(l[u]=i(c,u))})),l);var l}(t);var t,s,r}var du=["herokuapp.com","vercel.app","netlify.app"];function pu(n){var e=n==null?void 0:n.hostname;if(!K(e))return!1;var t=e.split(".").slice(-2).join(".");for(var s of du)if(t===s)return!1;return!0}function Ba(n,e){for(var t=0;te.match(t)))}function es(n){var e="";switch(typeof n.className){case"string":e=n.className;break;case"object":e=(n.className&&"baseVal"in n.className?n.className.baseVal:null)||n.getAttribute("class")||"";break;default:e=""}return ri(e)}function qa(n){return O(n)?null:Es(n).split(/(\s+)/).filter(e=>yn(e)).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function Tn(n){var e="";return kr(n)&&!Xa(n)&&n.childNodes&&n.childNodes.length&&U(n.childNodes,function(t){var s;Ga(t)&&t.textContent&&(e+=(s=qa(t.textContent))!==null&&s!==void 0?s:"")}),Es(e)}function Ka(n){return b(n.target)?n.srcElement||null:(e=n.target)!=null&&e.shadowRoot?n.composedPath()[0]||null:n.target||null;var e}var ii=["a","button","form","input","select","textarea","label"];function Ya(n,e){if(b(e))return!0;var t,s=function(i){if(e.some(o=>i.matches(o)))return{v:!0}};for(var r of n)if(t=s(r))return t.v;return!1}function Ja(n){var e=n.parentNode;return!(!e||!Is(e))&&e}var hu=["next","previous","prev",">","<"],uo=10,po=[".ph-no-rageclick",".ph-no-capture"];function gu(n,e){if(!h||oi(n))return!1;var t,s,r;if(Ke(e)?(t=!!e&&po,s=void 0):(t=(r=e==null?void 0:e.css_selector_ignorelist)!==null&&r!==void 0?r:po,s=e==null?void 0:e.content_ignorelist),t===!1)return!1;var{targetElementList:i}=Za(n,!1);return!function(o,a){if(o===!1||b(o))return!1;var l;if(o===!0)l=hu;else{if(!N(o))return!1;if(o.length>uo)return E.error("[PostHog] content_ignorelist array cannot exceed "+uo+" items. Use css_selector_ignorelist for more complex matching."),!1;l=o.map(c=>c.toLowerCase())}return a.some(c=>{var{safeText:u,ariaLabel:d}=c;return l.some(p=>u.includes(p)||d.includes(p))})}(s,i.map(o=>{var a;return{safeText:Tn(o).toLowerCase(),ariaLabel:((a=o.getAttribute("aria-label"))==null?void 0:a.toLowerCase().trim())||""}}))&&!Ya(i,t)}var oi=n=>!n||ct(n,"html")||!Is(n),Za=(n,e)=>{if(!h||oi(n))return{parentIsUsefulElement:!1,targetElementList:[]};for(var t=!1,s=[n],r=n;r.parentNode&&!ct(r,"body");)if(Va(r.parentNode))s.push(r.parentNode.host),r=r.parentNode.host;else{var i=Ja(r);if(!i)break;if(e||ii.indexOf(i.tagName.toLowerCase())>-1)t=!0;else{var o=h.getComputedStyle(i);o&&o.getPropertyValue("cursor")==="pointer"&&(t=!0)}s.push(i),r=i}return{parentIsUsefulElement:t,targetElementList:s}};function mu(n,e,t,s,r){var i,o,a,l;if(t===void 0&&(t=void 0),!h||oi(n)||(i=t)!=null&&i.url_allowlist&&!co(t.url_allowlist)||(o=t)!=null&&o.url_ignorelist&&co(t.url_ignorelist))return!1;if((a=t)!=null&&a.dom_event_allowlist){var c=t.dom_event_allowlist;if(c&&!c.some(m=>e.type===m))return!1}var{parentIsUsefulElement:u,targetElementList:d}=Za(n,s);if(!function(m,v){var _=v==null?void 0:v.element_allowlist;if(b(_))return!0;var x,I=function(C){if(_.some(y=>C.tagName.toLowerCase()===y))return{v:!0}};for(var T of m)if(x=I(T))return x.v;return!1}(d,t)||!Ya(d,(l=t)==null?void 0:l.css_selector_allowlist))return!1;var p=h.getComputedStyle(n);if(p&&p.getPropertyValue("cursor")==="pointer"&&e.type==="click")return!0;var f=n.tagName.toLowerCase();switch(f){case"html":return!1;case"form":return(r||["submit"]).indexOf(e.type)>=0;case"input":case"select":case"textarea":return(r||["change","click"]).indexOf(e.type)>=0;default:return u?(r||["click"]).indexOf(e.type)>=0:(r||["click"]).indexOf(e.type)>=0&&(ii.indexOf(f)>-1||n.getAttribute("contenteditable")==="true")}}function kr(n){for(var e=n;e.parentNode&&!ct(e,"body");e=e.parentNode){var t=es(e);if($(t,"ph-sensitive")||$(t,"ph-no-capture"))return!1}if($(es(n),"ph-include"))return!0;var s=n.type||"";if(K(s))switch(s.toLowerCase()){case"hidden":case"password":return!1}var r=n.name||n.id||"";return!(K(r)&&/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(r.replace(/[^a-zA-Z0-9]/g,"")))}function Xa(n){return!!(ct(n,"input")&&!["button","checkbox","submit","reset"].includes(n.type)||ct(n,"select")||ct(n,"textarea")||n.getAttribute("contenteditable")==="true")}var Qa="(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})",vu=new RegExp("^(?:"+Qa+")$"),_u=new RegExp(Qa),el="\\d{3}-?\\d{2}-?\\d{4}",yu=new RegExp("^("+el+")$"),wu=new RegExp("("+el+")");function yn(n,e){return e===void 0&&(e=!0),!(O(n)||K(n)&&(n=Es(n),(e?vu:_u).test((n||"").replace(/[- ]/g,""))||(e?yu:wu).test(n)))}function tl(n){var e=Tn(n);return yn(e=(e+" "+nl(n)).trim())?e:""}function nl(n){var e="";return n&&n.childNodes&&n.childNodes.length&&U(n.childNodes,function(t){var s;if(t&&((s=t.tagName)==null?void 0:s.toLowerCase())==="span")try{var r=Tn(t);e=(e+" "+r).trim(),t.childNodes&&t.childNodes.length&&(e=(e+" "+nl(t)).trim())}catch(i){E.error("[AutoCapture]",i)}}),e}function bu(n){return function(e){var t=e.map(s=>{var r,i,o="";if(s.tag_name&&(o+=s.tag_name),s.attr_class)for(var a of(s.attr_class.sort(),s.attr_class))o+="."+a.replace(/"/g,"");var l=S({},s.text?{text:s.text}:{},{"nth-child":(r=s.nth_child)!==null&&r!==void 0?r:0,"nth-of-type":(i=s.nth_of_type)!==null&&i!==void 0?i:0},s.href?{href:s.href}:{},s.attr_id?{attr_id:s.attr_id}:{},s.attributes),c={};return Bn(l).sort((u,d)=>{var[p]=u,[f]=d;return p.localeCompare(f)}).forEach(u=>{var[d,p]=u;return c[fo(d.toString())]=fo(p.toString())}),o+=":",o+=Bn(c).map(u=>{var[d,p]=u;return d+'="'+p+'"'}).join("")});return t.join(";")}(function(e){return e.map(t=>{var s,r,i={text:(s=t.$el_text)==null?void 0:s.slice(0,400),tag_name:t.tag_name,href:(r=t.attr__href)==null?void 0:r.slice(0,2048),attr_class:Eu(t),attr_id:t.attr__id,nth_child:t.nth_child,nth_of_type:t.nth_of_type,attributes:{}};return Bn(t).filter(o=>{var[a]=o;return a.indexOf("attr__")===0}).forEach(o=>{var[a,l]=o;return i.attributes[a]=l}),i})}(n))}function fo(n){return n.replace(/"|\\"/g,'\\"')}function Eu(n){var e=n.attr__class;return e?N(e)?e:ri(e):void 0}class sl{constructor(e){this.disabled=e===!1;var t=Z(e)?e:{};this.thresholdPx=t.threshold_px||30,this.timeoutMs=t.timeout_ms||1e3,this.clickCount=t.click_count||3,this.clicks=[]}isRageClick(e,t,s){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(t-r.y){var e=w==null?void 0:w.createElement("a");return b(e)?null:(e.href=n,e)},Su=function(n,e){var t,s;e===void 0&&(e="&");var r=[];return U(n,function(i,o){b(i)||b(o)||o==="undefined"||(t=encodeURIComponent((a=>a instanceof File)(i)?i.name:i.toString()),s=encodeURIComponent(o),r[r.length]=s+"="+t)}),r.join(e)},ns=function(n,e){for(var t,s=((n.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),r=0;rn?e.slice(0,n)+"...":e}function Iu(n){if(n.previousElementSibling)return n.previousElementSibling;var e=n;do e=e.previousSibling;while(e&&!Is(e));return e}function Cu(n,e,t,s){var r=n.tagName.toLowerCase(),i={tag_name:r};ii.indexOf(r)>-1&&!t&&(r.toLowerCase()==="a"||r.toLowerCase()==="button"?i.$el_text=qs(1024,tl(n)):i.$el_text=qs(1024,Tn(n)));var o=es(n);o.length>0&&(i.classes=o.filter(function(u){return u!==""})),U(n.attributes,function(u){var d;if((!Xa(n)||["name","id","class","aria-label"].indexOf(u.name)!==-1)&&(s==null||!s.includes(u.name))&&!e&&yn(u.value)&&(d=u.name,!K(d)||d.substring(0,10)!=="_ngcontent"&&d.substring(0,7)!=="_nghost")){var p=u.value;u.name==="class"&&(p=ri(p).join(" ")),i["attr__"+u.name]=qs(1024,p)}});for(var a=1,l=1,c=n;c=Iu(c);)a++,c.tagName===n.tagName&&l++;return i.nth_child=a,i.nth_of_type=l,i}function xu(n,e){for(var t,s,{e:r,maskAllElementAttributes:i,maskAllText:o,elementAttributeIgnoreList:a,elementsChainAsString:l}=e,c=[n],u=n;u.parentNode&&!ct(u,"body");)Va(u.parentNode)?(c.push(u.parentNode.host),u=u.parentNode.host):(c.push(u.parentNode),u=u.parentNode);var d,p=[],f={},m=!1,v=!1;if(U(c,C=>{var y=kr(C);C.tagName.toLowerCase()==="a"&&(m=C.getAttribute("href"),m=y&&m&&yn(m)&&m),$(es(C),"ph-no-capture")&&(v=!0),p.push(Cu(C,i,o,a));var P=function(A){if(!kr(A))return{};var R={};return U(A.attributes,function(ne){if(ne.name&&ne.name.indexOf("data-ph-capture-attribute")===0){var J=ne.name.replace("data-ph-capture-attribute-",""),ie=ne.value;J&&ie&&yn(ie)&&(R[J]=ie)}}),R}(C);G(f,P)}),v)return{props:{},explicitNoCapture:v};if(o||(n.tagName.toLowerCase()==="a"||n.tagName.toLowerCase()==="button"?p[0].$el_text=tl(n):p[0].$el_text=Tn(n)),m){var _,x;p[0].attr__href=m;var I=(_=ts(m))==null?void 0:_.host,T=h==null||(x=h.location)==null?void 0:x.host;I&&T&&I!==T&&(d=m)}return{props:G({$event_type:r.type,$ce_version:1},l?{}:{$elements:p},{$elements_chain:bu(p)},(t=p[0])!=null&&t.$el_text?{$el_text:(s=p[0])==null?void 0:s.$el_text}:{},d&&r.type==="click"?{$external_click_url:d}:{},f)}}class ku{constructor(e){this.P=!1,this.T=null,this.I=!1,this.instance=e,this.rageclicks=new sl(e.config.rageclick),this.C=null}get R(){var e,t,s=Z(this.instance.config.autocapture)?this.instance.config.autocapture:{};return s.url_allowlist=(e=s.url_allowlist)==null?void 0:e.map(r=>new RegExp(r)),s.url_ignorelist=(t=s.url_ignorelist)==null?void 0:t.map(r=>new RegExp(r)),s}F(){if(this.isBrowserSupported()){if(h&&w){var e=s=>{s=s||(h==null?void 0:h.event);try{this.O(s)}catch(r){ho.error("Failed to capture event",r)}};if(Y(w,"submit",e,{capture:!0}),Y(w,"change",e,{capture:!0}),Y(w,"click",e,{capture:!0}),this.R.capture_copied_text){var t=s=>{s=s||(h==null?void 0:h.event),this.O(s,Vs)};Y(w,"copy",t,{capture:!0}),Y(w,"cut",t,{capture:!0})}}}else ho.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.P&&(this.F(),this.P=!0)}onRemoteConfig(e){e.elementsChainAsString&&(this.I=e.elementsChainAsString),this.instance.persistence&&this.instance.persistence.register({[no]:!!e.autocapture_opt_out}),this.T=!!e.autocapture_opt_out,this.startIfEnabled()}setElementSelectors(e){this.C=e}getElementSelectors(e){var t,s=[];return(t=this.C)==null||t.forEach(r=>{var i=w==null?void 0:w.querySelectorAll(r);i==null||i.forEach(o=>{e===o&&s.push(r)})}),s}get isEnabled(){var e,t,s=(e=this.instance.persistence)==null?void 0:e.props[no],r=this.T;if(ke(r)&&!Ke(s)&&!this.instance.M())return!1;var i=(t=this.T)!==null&&t!==void 0?t:!!s;return!!this.instance.config.autocapture&&!i}O(e,t){if(t===void 0&&(t="$autocapture"),this.isEnabled){var s,r=Ka(e);Ga(r)&&(r=r.parentNode||null),t==="$autocapture"&&e.type==="click"&&e instanceof MouseEvent&&this.instance.config.rageclick&&(s=this.rageclicks)!=null&&s.isRageClick(e.clientX,e.clientY,e.timeStamp||new Date().getTime())&&gu(r,this.instance.config.rageclick)&&this.O(e,"$rageclick");var i=t===Vs;if(r&&mu(r,e,this.R,i,i?["copy","cut"]:void 0)){var{props:o,explicitNoCapture:a}=xu(r,{e,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.R.element_attribute_ignorelist,elementsChainAsString:this.I});if(a)return!1;var l=this.getElementSelectors(r);if(l&&l.length>0&&(o.$element_selectors=l),t===Vs){var c,u=qa(h==null||(c=h.getSelection())==null?void 0:c.toString()),d=e.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=d}return this.instance.capture(t,o),!0}}}isBrowserSupported(){return Ge(w==null?void 0:w.querySelectorAll)}}Math.trunc||(Math.trunc=function(n){return n<0?Math.ceil(n):Math.floor(n)}),Number.isInteger||(Number.isInteger=function(n){return Xe(n)&&isFinite(n)&&Math.floor(n)===n});var go="0123456789abcdef";class rs{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,t,s,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(s)||!Number.isInteger(r)||e<0||t<0||s<0||r<0||e>0xffffffffffff||t>4095||s>1073741823||r>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/Math.pow(2,8),i[5]=e,i[6]=112|t>>>8,i[7]=t,i[8]=128|s>>>24,i[9]=s>>>16,i[10]=s>>>8,i[11]=s,i[12]=r>>>24,i[13]=r>>>16,i[14]=r>>>8,i[15]=r,new rs(i)}toString(){for(var e="",t=0;t>>4)+go.charAt(15&this.bytes[t]),t!==3&&t!==5&&t!==7&&t!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new rs(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var t=0;t<16;t++){var s=this.bytes[t]-e.bytes[t];if(s!==0)return Math.sign(s)}return 0}}class Tu{constructor(){this.A=0,this.j=0,this.D=new Ru}generate(){var e=this.generateOrAbort();if(b(e)){this.A=0;var t=this.generateOrAbort();if(b(t))throw new Error("Could not generate UUID after timestamp reset");return t}return e}generateOrAbort(){var e=Date.now();if(e>this.A)this.A=e,this.L();else{if(!(e+1e4>this.A))return;this.j++,this.j>4398046511103&&(this.A++,this.L())}return rs.fromFieldsV7(this.A,Math.trunc(this.j/Math.pow(2,30)),this.j&Math.pow(2,30)-1,this.D.nextUint32())}L(){this.j=1024*this.D.nextUint32()+(1023&this.D.nextUint32())}}var mo,rl=n=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;ecrypto.getRandomValues(n));class Ru{constructor(){this.N=new Uint32Array(8),this.U=1/0}nextUint32(){return this.U>=this.N.length&&(rl(this.N),this.U=0),this.N[this.U++]}}var at=()=>Au().toString(),Au=()=>(mo||(mo=new Tu)).generate(),Yt="",Pu=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i;function Fu(n,e){if(e){var t=function(r,i){if(i===void 0&&(i=w),Yt)return Yt;if(!i||["localhost","127.0.0.1"].includes(r))return"";for(var o=r.split("."),a=Math.min(o.length,8),l="dmn_chk_"+at();!Yt&&a--;){var c=o.slice(a).join("."),u=l+"=1;domain=."+c+";path=/";i.cookie=u+";max-age=3",i.cookie.includes(l)&&(i.cookie=u+";max-age=0",Yt=c)}return Yt}(n);if(!t){var s=(r=>{var i=r.match(Pu);return i?i[0]:""})(n);s!==t&&E.info("Warning: cookie subdomain discovery mismatch",s,t),t=s}return t?"; domain=."+t:""}return""}var Fe={H:()=>!!w,B:function(n){E.error("cookieStore error: "+n)},q:function(n){if(w){try{for(var e=n+"=",t=w.cookie.split(";").filter(i=>i.length),s=0;s3686.4&&E.warn("cookieStore warning: large cookie, len="+c.length),w.cookie=c,c}catch{return}},V:function(n,e){if(w!=null&&w.cookie)try{Fe.G(n,"",-1,e)}catch{return}}},Ks=null,W={H:function(){if(!ke(Ks))return Ks;var n=!0;if(b(h))n=!1;else try{var e="__mplssupport__";W.G(e,"xyz"),W.q(e)!=='"xyz"'&&(n=!1),W.V(e)}catch{n=!1}return n||E.error("localStorage unsupported; falling back to cookie store"),Ks=n,n},B:function(n){E.error("localStorage error: "+n)},q:function(n){try{return h==null?void 0:h.localStorage.getItem(n)}catch(e){W.B(e)}return null},W:function(n){try{return JSON.parse(W.q(n))||{}}catch{}return null},G:function(n,e){try{h==null||h.localStorage.setItem(n,JSON.stringify(e))}catch(t){W.B(t)}},V:function(n){try{h==null||h.localStorage.removeItem(n)}catch(e){W.B(e)}}},$u=["$device_id","distinct_id",Jn,Wa,Qn,Xn,Pe],Mn={},Mu={H:function(){return!0},B:function(n){E.error("memoryStorage error: "+n)},q:function(n){return Mn[n]||null},W:function(n){return Mn[n]||null},G:function(n,e){Mn[n]=e},V:function(n){delete Mn[n]}},ft=null,Q={H:function(){if(!ke(ft))return ft;if(ft=!0,b(h))ft=!1;else try{var n="__support__";Q.G(n,"xyz"),Q.q(n)!=='"xyz"'&&(ft=!1),Q.V(n)}catch{ft=!1}return ft},B:function(n){E.error("sessionStorage error: ",n)},q:function(n){try{return h==null?void 0:h.sessionStorage.getItem(n)}catch(e){Q.B(e)}return null},W:function(n){try{return JSON.parse(Q.q(n))||null}catch{}return null},G:function(n,e){try{h==null||h.sessionStorage.setItem(n,JSON.stringify(e))}catch(t){Q.B(t)}},V:function(n){try{h==null||h.sessionStorage.removeItem(n)}catch(e){Q.B(e)}}},He=function(n){return n[n.PENDING=-1]="PENDING",n[n.DENIED=0]="DENIED",n[n.GRANTED=1]="GRANTED",n}({});class Ou{constructor(e){this._instance=e}get R(){return this._instance.config}get consent(){return this.J()?He.DENIED:this.K}isOptedOut(){return this.R.cookieless_mode==="always"||this.consent===He.DENIED||this.consent===He.PENDING&&(this.R.opt_out_capturing_by_default||this.R.cookieless_mode==="on_reject")}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===He.DENIED}optInOut(e){this.Y.G(this.X,e?1:0,this.R.cookie_expiration,this.R.cross_subdomain_cookie,this.R.secure_cookie)}reset(){this.Y.V(this.X,this.R.cross_subdomain_cookie)}get X(){var{token:e,opt_out_capturing_cookie_prefix:t,consent_persistence_name:s}=this._instance.config;return s||(t?t+e:"__ph_opt_in_out_"+e)}get K(){var e=this.Y.q(this.X);return Ws(e)?He.GRANTED:$(Rc,e)?He.DENIED:He.PENDING}get Y(){if(!this.Z){var e=this.R.opt_out_capturing_persistence_type;this.Z=e==="localStorage"?W:Fe;var t=e==="localStorage"?Fe:W;t.q(this.X)&&(this.Z.q(this.X)||this.optInOut(Ws(t.q(this.X))),t.V(this.X,this.R.cross_subdomain_cookie))}return this.Z}J(){return!!this.R.respect_dnt&&!!Ba([he==null?void 0:he.doNotTrack,he==null?void 0:he.msDoNotTrack,k.doNotTrack],e=>Ws(e))}}var On=z("[Dead Clicks]"),Nu=()=>!0,Lu=n=>{var e,t=!((e=n.instance.persistence)==null||!e.get_property(Ha)),s=n.instance.config.capture_dead_clicks;return Ke(s)?s:!!Z(s)||t};class il{get lazyLoadedDeadClicksAutocapture(){return this.tt}constructor(e,t,s){this.instance=e,this.isEnabled=t,this.onCapture=s,this.startIfEnabledOrStop()}onRemoteConfig(e){"captureDeadClicks"in e&&(this.instance.persistence&&this.instance.persistence.register({[Ha]:e.captureDeadClicks}),this.startIfEnabledOrStop())}startIfEnabledOrStop(){this.isEnabled(this)?this.it(()=>{this.et()}):this.stop()}it(e){var t,s;(t=k.__PosthogExtensions__)!=null&&t.initDeadClicksAutocapture&&e(),(s=k.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this.instance,"dead-clicks-autocapture",r=>{r?On.error("failed to load script",r):e()})}et(){var e;if(w){if(!this.tt&&(e=k.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var t=Z(this.instance.config.capture_dead_clicks)?this.instance.config.capture_dead_clicks:{};t.__onCapture=this.onCapture,this.tt=k.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,t),this.tt.start(w),On.info("starting...")}}else On.error("`document` not found. Cannot start.")}stop(){this.tt&&(this.tt.stop(),this.tt=void 0,On.info("stopping..."))}}var Jt=z("[ExceptionAutocapture]");class Du{constructor(e){var t,s,r;this.rt=()=>{var i;if(h&&this.isEnabled&&(i=k.__PosthogExtensions__)!=null&&i.errorWrappingFunctions){var o=k.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,a=k.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,l=k.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.st&&this.R.capture_unhandled_errors&&(this.st=o(this.captureException.bind(this))),!this.nt&&this.R.capture_unhandled_rejections&&(this.nt=a(this.captureException.bind(this))),!this.ot&&this.R.capture_console_errors&&(this.ot=l(this.captureException.bind(this)))}catch(c){Jt.error("failed to start",c),this.ut()}}},this._instance=e,this.ht=!((t=this._instance.persistence)==null||!t.props[so]),this.dt=new Ac({refillRate:(s=this._instance.config.error_tracking.__exceptionRateLimiterRefillRate)!==null&&s!==void 0?s:1,bucketSize:(r=this._instance.config.error_tracking.__exceptionRateLimiterBucketSize)!==null&&r!==void 0?r:10,refillInterval:1e4,h:Jt}),this.R=this.vt(),this.startIfEnabledOrStop()}vt(){var e=this._instance.config.capture_exceptions,t={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return Z(e)?t=S({},t,e):(b(e)?this.ht:e)&&(t=S({},t,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),t}get isEnabled(){return this.R.capture_console_errors||this.R.capture_unhandled_errors||this.R.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Jt.info("enabled"),this.ut(),this.it(this.rt)):this.ut()}it(e){var t,s;(t=k.__PosthogExtensions__)!=null&&t.errorWrappingFunctions&&e(),(s=k.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"exception-autocapture",r=>{if(r)return Jt.error("failed to load script",r);e()})}ut(){var e,t,s;(e=this.st)==null||e.call(this),this.st=void 0,(t=this.nt)==null||t.call(this),this.nt=void 0,(s=this.ot)==null||s.call(this),this.ot=void 0}onRemoteConfig(e){if("autocaptureExceptions"in e){var t=e.autocaptureExceptions;this.ht=!!t||!1,this._instance.persistence&&this._instance.persistence.register({[so]:this.ht}),this.R=this.vt(),this.startIfEnabledOrStop()}}onConfigChange(){this.R=this.vt()}captureException(e){var t,s,r=(t=e==null||(s=e.$exception_list)==null||(s=s[0])==null?void 0:s.type)!==null&&t!==void 0?t:"Exception";this.dt.consumeRateLimit(r)?Jt.info("Skipping exception capture because of client rate limiting.",{exception:r}):this._instance.exceptions.sendExceptionEvent(e)}}function vo(n,e,t){try{if(!(e in n))return()=>{};var s=n[e],r=t(s);return Ge(r)&&(r.prototype=r.prototype||{},Object.defineProperties(r,{__posthog_wrapped__:{enumerable:!1,value:!0}})),n[e]=r,()=>{n[e]=s}}catch{return()=>{}}}class Bu{constructor(e){var t;this._instance=e,this.ct=(h==null||(t=h.location)==null?void 0:t.pathname)||""}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(E.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.ft&&this.ft(),this.ft=void 0,E.info("History API monitoring stopped")}monitorHistoryChanges(){var e,t;if(h&&h.history){var s=this;(e=h.history.pushState)!=null&&e.__posthog_wrapped__||vo(h.history,"pushState",r=>function(i,o,a){r.call(this,i,o,a),s._t("pushState")}),(t=h.history.replaceState)!=null&&t.__posthog_wrapped__||vo(h.history,"replaceState",r=>function(i,o,a){r.call(this,i,o,a),s._t("replaceState")}),this.bt()}}_t(e){try{var t,s=h==null||(t=h.location)==null?void 0:t.pathname;if(!s)return;s!==this.ct&&this.isEnabled&&this._instance.capture("$pageview",{navigation_type:e}),this.ct=s}catch(r){E.error("Error capturing "+e+" pageview",r)}}bt(){if(!this.ft){var e=()=>{this._t("popstate")};Y(h,"popstate",e),this.ft=()=>{h&&h.removeEventListener("popstate",e)}}}}var Ys=z("[SegmentIntegration]");function ju(n,e){var t=n.config.segment;if(!t)return e();(function(s,r){var i=s.config.segment;if(!i)return r();var o=l=>{var c=()=>l.anonymousId()||at();s.config.get_device_id=c,l.id()&&(s.register({distinct_id:l.id(),$device_id:c()}),s.persistence.set_property(Pe,"identified")),r()},a=i.user();"then"in a&&Ge(a.then)?a.then(o):o(a)})(n,()=>{t.register((s=>{Promise&&Promise.resolve||Ys.warn("This browser does not have Promise support, and can not use the segment integration");var r=(i,o)=>{if(!o)return i;i.event.userId||i.event.anonymousId===s.get_distinct_id()||(Ys.info("No userId set, resetting PostHog"),s.reset()),i.event.userId&&i.event.userId!==s.get_distinct_id()&&(Ys.info("UserId set, identifying with PostHog"),s.identify(i.event.userId));var a=s.calculateEventProperties(o,i.event.properties);return i.event.properties=Object.assign({},a,i.event.properties),i};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:i=>r(i,i.event.event),page:i=>r(i,"$pageview"),identify:i=>r(i,"$identify"),screen:i=>r(i,"$screen")}})(n)).then(()=>{e()})})}var ol="posthog-js";function al(n,e){var{organization:t,projectId:s,prefix:r,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}=e===void 0?{}:e;return a=>{var l,c,u,d,p;if(!(i==="*"||i.includes(a.level))||!n.__loaded)return a;a.tags||(a.tags={});var f=n.requestRouter.endpointFor("ui","/project/"+n.config.token+"/person/"+n.get_distinct_id());a.tags["PostHog Person URL"]=f,n.sessionRecordingStarted()&&(a.tags["PostHog Recording URL"]=n.get_session_replay_url({withTimestamp:!0}));var m=((l=a.exception)==null?void 0:l.values)||[],v=m.map(x=>S({},x,{stacktrace:x.stacktrace?S({},x.stacktrace,{type:"raw",frames:(x.stacktrace.frames||[]).map(I=>S({},I,{platform:"web:javascript"}))}):void 0})),_={$exception_message:((c=m[0])==null?void 0:c.value)||a.message,$exception_type:(u=m[0])==null?void 0:u.type,$exception_level:a.level,$exception_list:v,$sentry_event_id:a.event_id,$sentry_exception:a.exception,$sentry_exception_message:((d=m[0])==null?void 0:d.value)||a.message,$sentry_exception_type:(p=m[0])==null?void 0:p.type,$sentry_tags:a.tags};return t&&s&&(_.$sentry_url=(r||"https://sentry.io/organizations/")+t+"/issues/?project="+s+"&query="+a.event_id),o&&n.exceptions.sendExceptionEvent(_),a}}class Uu{constructor(e,t,s,r,i,o){this.name=ol,this.setupOnce=function(a){a(al(e,{organization:t,projectId:s,prefix:r,severityAllowList:i,sendExceptionsToPostHog:o==null||o}))}}}var Hu=h!=null&&h.location?ss(h.location.hash,"__posthog")||ss(location.hash,"state"):null,_o="_postHogToolbarParams",yo=z("[Toolbar]"),ot=function(n){return n[n.UNINITIALIZED=0]="UNINITIALIZED",n[n.LOADING=1]="LOADING",n[n.LOADED=2]="LOADED",n}(ot||{});class Wu{constructor(e){this.instance=e}yt(e){k.ph_toolbar_state=e}wt(){var e;return(e=k.ph_toolbar_state)!==null&&e!==void 0?e:ot.UNINITIALIZED}maybeLoadToolbar(e,t,s){if(e===void 0&&(e=void 0),t===void 0&&(t=void 0),s===void 0&&(s=void 0),ja(this.instance.config)||!h||!w)return!1;e=e??h.location,s=s??h.history;try{if(!t){try{h.localStorage.setItem("test","test"),h.localStorage.removeItem("test")}catch{return!1}t=h==null?void 0:h.localStorage}var r,i=Hu||ss(e.hash,"__posthog")||ss(e.hash,"state"),o=i?to(()=>JSON.parse(atob(decodeURIComponent(i))))||to(()=>JSON.parse(decodeURIComponent(i))):null;return o&&o.action==="ph_authorize"?((r=o).source="url",r&&Object.keys(r).length>0&&(o.desiredHash?e.hash=o.desiredHash:s?s.replaceState(s.state,"",e.pathname+e.search):e.hash="")):((r=JSON.parse(t.getItem(_o)||"{}")).source="localstorage",delete r.userIntent),!(!r.token||this.instance.config.token!==r.token)&&(this.loadToolbar(r),!0)}catch{return!1}}xt(e){var t=k.ph_load_toolbar||k.ph_load_editor;!O(t)&&Ge(t)?t(e,this.instance):yo.warn("No toolbar load function found")}loadToolbar(e){var t=!(w==null||!w.getElementById(za));if(!h||t)return!1;var s=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=S({token:this.instance.config.token},e,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(h.localStorage.setItem(_o,JSON.stringify(S({},r,{source:void 0}))),this.wt()===ot.LOADED)this.xt(r);else if(this.wt()===ot.UNINITIALIZED){var i;this.yt(ot.LOADING),(i=k.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"toolbar",o=>{if(o)return yo.error("[Toolbar] Failed to load",o),void this.yt(ot.UNINITIALIZED);this.yt(ot.LOADED),this.xt(r)}),Y(h,"turbolinks:load",()=>{this.yt(ot.UNINITIALIZED),this.loadToolbar(r)})}return!0}$t(e){return this.loadToolbar(e)}maybeLoadEditor(e,t,s){return e===void 0&&(e=void 0),t===void 0&&(t=void 0),s===void 0&&(s=void 0),this.maybeLoadToolbar(e,t,s)}}var zu=z("[TracingHeaders]");class Gu{constructor(e){this.Et=void 0,this.St=void 0,this.rt=()=>{var t,s;b(this.Et)&&((t=k.__PosthogExtensions__)==null||(t=t.tracingHeadersPatchFns)==null||t._patchXHR(this._instance.config.__add_tracing_headers||[],this._instance.get_distinct_id(),this._instance.sessionManager)),b(this.St)&&((s=k.__PosthogExtensions__)==null||(s=s.tracingHeadersPatchFns)==null||s._patchFetch(this._instance.config.__add_tracing_headers||[],this._instance.get_distinct_id(),this._instance.sessionManager))},this._instance=e}it(e){var t,s;(t=k.__PosthogExtensions__)!=null&&t.tracingHeadersPatchFns&&e(),(s=k.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"tracing-headers",r=>{if(r)return zu.error("failed to load script",r);e()})}startIfEnabledOrStop(){var e,t;this._instance.config.__add_tracing_headers?this.it(this.rt):((e=this.Et)==null||e.call(this),(t=this.St)==null||t.call(this),this.Et=void 0,this.St=void 0)}}var Nn="https?://(.*)",qt=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Vu=Vt(["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid"],qt),An="",qu=["li_fat_id"];function ll(n,e,t){if(!w)return{};var s,r=e?Vt([],qt,t||[]):[],i=cl(Rn(w.URL,r,An),n),o=(s={},U(qu,function(a){var l=Fe.q(a);s[a]=l||null}),s);return G(o,i)}function cl(n,e){var t=Vu.concat(e||[]),s={};return U(t,function(r){var i=ns(n,r);s[r]=i||null}),s}function ul(n){var e=function(i){return i?i.search(Nn+"google.([^/?]*)")===0?"google":i.search(Nn+"bing.com")===0?"bing":i.search(Nn+"yahoo.com")===0?"yahoo":i.search(Nn+"duckduckgo.com")===0?"duckduckgo":null:null}(n),t=e!="yahoo"?"q":"p",s={};if(!ke(e)){s.$search_engine=e;var r=w?ns(w.referrer,t):"";r.length&&(s.ph_keyword=r)}return s}function wo(){return navigator.language||navigator.userLanguage}function dl(){return(w==null?void 0:w.referrer)||"$direct"}function pl(n,e){var t=n?Vt([],qt,e||[]):[],s=ee==null?void 0:ee.href.substring(0,1e3);return{r:dl().substring(0,1e3),u:s?Rn(s,t,An):void 0}}function fl(n){var e,{r:t,u:s}=n,r={$referrer:t,$referring_domain:t==null?void 0:t=="$direct"?"$direct":(e=ts(t))==null?void 0:e.host};if(s){r.$current_url=s;var i=ts(s);r.$host=i==null?void 0:i.host,r.$pathname=i==null?void 0:i.pathname;var o=cl(s);G(r,o)}if(t){var a=ul(t);G(r,a)}return r}function hl(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Ku(){try{return new Date().getTimezoneOffset()}catch{return}}function Yu(n,e){if(!ue)return{};var t,s,r,i=n?Vt([],qt,e||[]):[],[o,a]=function(l){for(var c=0;c1e3?ue.substring(0,997)+"...":ue,$browser_version:jc(ue,navigator.vendor),$browser_language:wo(),$browser_language_prefix:(t=wo(),typeof t=="string"?t.split("-")[0]:void 0),$screen_height:h==null?void 0:h.screen.height,$screen_width:h==null?void 0:h.screen.width,$viewport_height:h==null?void 0:h.innerHeight,$viewport_width:h==null?void 0:h.innerWidth,$lib:"web",$lib_version:je.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3})}var st=z("[Web Vitals]"),bo=9e5;class Ju{constructor(e){var t;this.kt=!1,this.P=!1,this.N={url:void 0,metrics:[],firstMetricTimestamp:void 0},this.Pt=()=>{clearTimeout(this.Tt),this.N.metrics.length!==0&&(this._instance.capture("$web_vitals",this.N.metrics.reduce((s,r)=>S({},s,{["$web_vitals_"+r.name+"_event"]:S({},r),["$web_vitals_"+r.name+"_value"]:r.value}),{})),this.N={url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.It=s=>{var r,i=(r=this._instance.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0);if(b(i))st.error("Could not read session ID. Dropping metrics!");else{this.N=this.N||{url:void 0,metrics:[],firstMetricTimestamp:void 0};var o=this.Ct();b(o)||(O(s==null?void 0:s.name)||O(s==null?void 0:s.value)?st.error("Invalid metric received",s):this.Rt&&s.value>=this.Rt?st.error("Ignoring metric with value >= "+this.Rt,s):(this.N.url!==o&&(this.Pt(),this.Tt=setTimeout(this.Pt,this.flushToCaptureTimeoutMs)),b(this.N.url)&&(this.N.url=o),this.N.firstMetricTimestamp=b(this.N.firstMetricTimestamp)?Date.now():this.N.firstMetricTimestamp,s.attribution&&s.attribution.interactionTargetElement&&(s.attribution.interactionTargetElement=void 0),this.N.metrics.push(S({},s,{$current_url:o,$session_id:i.sessionId,$window_id:i.windowId,timestamp:Date.now()})),this.N.metrics.length===this.allowedMetrics.length&&this.Pt()))}},this.rt=()=>{if(!this.P){var s,r,i,o,a=k.__PosthogExtensions__;b(a)||b(a.postHogWebVitalsCallbacks)||({onLCP:s,onCLS:r,onFCP:i,onINP:o}=a.postHogWebVitalsCallbacks),s&&r&&i&&o?(this.allowedMetrics.indexOf("LCP")>-1&&s(this.It.bind(this)),this.allowedMetrics.indexOf("CLS")>-1&&r(this.It.bind(this)),this.allowedMetrics.indexOf("FCP")>-1&&i(this.It.bind(this)),this.allowedMetrics.indexOf("INP")>-1&&o(this.It.bind(this)),this.P=!0):st.error("web vitals callbacks not loaded - not starting")}},this._instance=e,this.kt=!((t=this._instance.persistence)==null||!t.props[io]),this.startIfEnabled()}get allowedMetrics(){var e,t,s=Z(this._instance.config.capture_performance)?(e=this._instance.config.capture_performance)==null?void 0:e.web_vitals_allowed_metrics:void 0;return O(s)?((t=this._instance.persistence)==null?void 0:t.props[ao])||["CLS","FCP","INP","LCP"]:s}get flushToCaptureTimeoutMs(){return(Z(this._instance.config.capture_performance)?this._instance.config.capture_performance.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var e=Z(this._instance.config.capture_performance)?this._instance.config.capture_performance.web_vitals_attribution:void 0;return e!=null&&e}get Rt(){var e=Z(this._instance.config.capture_performance)&&Xe(this._instance.config.capture_performance.__web_vitals_max_value)?this._instance.config.capture_performance.__web_vitals_max_value:bo;return 0{i?st.error("failed to load script",i):e()})}}Ct(){var e=h?h.location.href:void 0;if(e){var t=this._instance.config.mask_personal_data_properties,s=this._instance.config.custom_personal_data_properties,r=t?Vt([],qt,s||[]):[];return Rn(e,r,An)}st.error("Could not determine current URL")}}var Zu=z("[Heatmaps]");function Eo(n){return Z(n)&&"clientX"in n&&"clientY"in n&&Xe(n.clientX)&&Xe(n.clientY)}class Xu{constructor(e){var t;this.kt=!1,this.P=!1,this.Ft=null,this.instance=e,this.kt=!((t=this.instance.persistence)==null||!t.props[_r]),this.rageclicks=new sl(e.config.rageclick)}get flushIntervalMilliseconds(){var e=5e3;return Z(this.instance.config.capture_heatmaps)&&this.instance.config.capture_heatmaps.flush_interval_milliseconds&&(e=this.instance.config.capture_heatmaps.flush_interval_milliseconds),e}get isEnabled(){return O(this.instance.config.capture_heatmaps)?O(this.instance.config.enable_heatmaps)?this.kt:this.instance.config.enable_heatmaps:this.instance.config.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.P)return;Zu.info("starting..."),this.Ot(),this.Mt()}else{var e;clearInterval((e=this.Ft)!==null&&e!==void 0?e:void 0),this.At(),this.getAndClearBuffer()}}onRemoteConfig(e){if("heatmaps"in e){var t=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[_r]:t}),this.kt=t,this.startIfEnabled()}}getAndClearBuffer(){var e=this.N;return this.N=void 0,e}jt(e){this.Dt(e.originalEvent,"deadclick")}Mt(){this.Ft&&clearInterval(this.Ft),this.Ft=function(e){return(e==null?void 0:e.visibilityState)==="visible"}(w)?setInterval(this.Lt.bind(this),this.flushIntervalMilliseconds):null}Ot(){h&&w&&(this.Nt=this.Lt.bind(this),Y(h,"beforeunload",this.Nt),this.Ut=e=>this.Dt(e||(h==null?void 0:h.event)),Y(w,"click",this.Ut,{capture:!0}),this.zt=e=>this.Ht(e||(h==null?void 0:h.event)),Y(w,"mousemove",this.zt,{capture:!0}),this.Bt=new il(this.instance,Nu,this.jt.bind(this)),this.Bt.startIfEnabledOrStop(),this.qt=this.Mt.bind(this),Y(w,"visibilitychange",this.qt),this.P=!0)}At(){var e;h&&w&&(this.Nt&&h.removeEventListener("beforeunload",this.Nt),this.Ut&&w.removeEventListener("click",this.Ut,{capture:!0}),this.zt&&w.removeEventListener("mousemove",this.zt,{capture:!0}),this.qt&&w.removeEventListener("visibilitychange",this.qt),clearTimeout(this.Wt),(e=this.Bt)==null||e.stop(),this.P=!1)}Gt(e,t){var s=this.instance.scrollManager.scrollY(),r=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),o=function(a,l,c){for(var u=a;u&&Is(u)&&!ct(u,"body");){if(u===c)return!1;if($(l,h==null?void 0:h.getComputedStyle(u).position))return!0;u=Ja(u)}return!1}(Ka(e),["fixed","sticky"],i);return{x:e.clientX+(o?0:r),y:e.clientY+(o?0:s),target_fixed:o,type:t}}Dt(e,t){var s;if(t===void 0&&(t="click"),!lo(e.target)&&Eo(e)){var r=this.Gt(e,t);(s=this.rageclicks)!=null&&s.isRageClick(e.clientX,e.clientY,new Date().getTime())&&this.Vt(S({},r,{type:"rageclick"})),this.Vt(r)}}Ht(e){!lo(e.target)&&Eo(e)&&(clearTimeout(this.Wt),this.Wt=setTimeout(()=>{this.Vt(this.Gt(e,"mousemove"))},500))}Vt(e){if(h){var t=h.location.href,s=this.instance.config.mask_personal_data_properties,r=this.instance.config.custom_personal_data_properties,i=s?Vt([],qt,r||[]):[],o=Rn(t,i,An);this.N=this.N||{},this.N[o]||(this.N[o]=[]),this.N[o].push(e)}}Lt(){this.N&&!Ft(this.N)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}}class So{constructor(e){this.Jt=(t,s,r)=>{r&&(r.noSessionId||r.activityTimeout||r.sessionPastMaximumLength)&&(E.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:t,changeReason:r}),this.Kt=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.Yt()}Yt(){var e;this.Xt=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.Jt)}destroy(){var e;(e=this.Xt)==null||e.call(this),this.Xt=void 0}doPageView(e,t){var s,r=this.Qt(e,t);return this.Kt={pathname:(s=h==null?void 0:h.location.pathname)!==null&&s!==void 0?s:"",pageViewId:t,timestamp:e},this._instance.scrollManager.resetContext(),r}doPageLeave(e){var t;return this.Qt(e,(t=this.Kt)==null?void 0:t.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.Kt)==null?void 0:e.pageViewId}}Qt(e,t){var s=this.Kt;if(!s)return{$pageview_id:t};var r={$pageview_id:t,$prev_pageview_id:s.pageViewId},i=this._instance.scrollManager.getContext();if(i&&!this._instance.config.disable_scroll_properties){var{maxScrollHeight:o,lastScrollY:a,maxScrollY:l,maxContentHeight:c,lastContentY:u,maxContentY:d}=i;if(!(b(o)||b(a)||b(l)||b(c)||b(u)||b(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),c=Math.ceil(c),u=Math.ceil(u),d=Math.ceil(d);var p=o<=1?1:Ne(a/o,0,1,E),f=o<=1?1:Ne(l/o,0,1,E),m=c<=1?1:Ne(u/c,0,1,E),v=c<=1?1:Ne(d/c,0,1,E);r=G(r,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:p,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:f,$prev_pageview_last_content:u,$prev_pageview_last_content_percentage:m,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:v})}}return s.pathname&&(r.$prev_pageview_pathname=s.pathname),s.timestamp&&(r.$prev_pageview_duration=(e.getTime()-s.timestamp.getTime())/1e3),r}}var We=function(n){return n.GZipJS="gzip-js",n.Base64="base64",n}({}),Ce=Uint8Array,de=Uint16Array,jt=Uint32Array,ai=new Ce([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]),li=new Ce([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]),Io=new Ce([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),gl=function(n,e){for(var t=new de(31),s=0;s<31;++s)t[s]=e+=1<>>1|(21845&H)<<1;ht=(61680&(ht=(52428&ht)>>>2|(13107&ht)<<2))>>>4|(3855&ht)<<4,vl[H]=((65280&ht)>>>8|(255&ht)<<8)>>>1}var pn=function(n,e,t){for(var s=n.length,r=0,i=new de(e);r>>15-n[r];return o},_t=new Ce(288);for(H=0;H<144;++H)_t[H]=8;for(H=144;H<256;++H)_t[H]=9;for(H=256;H<280;++H)_t[H]=7;for(H=280;H<288;++H)_t[H]=8;var is=new Ce(32);for(H=0;H<32;++H)is[H]=5;var ed=pn(_t,9),td=pn(is,5),_l=function(n){return(n/8>>0)+(7&n&&1)},yl=function(n,e,t){(t==null||t>n.length)&&(t=n.length);var s=new(n instanceof de?de:n instanceof jt?jt:Ce)(t-e);return s.set(n.subarray(e,t)),s},Be=function(n,e,t){t<<=7&e;var s=e/8>>0;n[s]|=t,n[s+1]|=t>>>8},Zt=function(n,e,t){t<<=7&e;var s=e/8>>0;n[s]|=t,n[s+1]|=t>>>8,n[s+2]|=t>>>16},Js=function(n,e){for(var t=[],s=0;sp&&(p=i[s].s);var f=new de(p+1),m=Rr(t[u-1],f,0);if(m>e){s=0;var v=0,_=m-e,x=1<<_;for(i.sort(function(y,P){return f[P.s]-f[y.s]||y.f-P.f});se))break;v+=x-(1<>>=_;v>0;){var T=i[s].s;f[T]=0&&v;--s){var C=i[s].s;f[C]==e&&(--f[C],++v)}m=e}return[new Ce(f),m]},Rr=function(n,e,t){return n.s==-1?Math.max(Rr(n.l,e,t+1),Rr(n.r,e,t+1)):e[n.s]=t},xo=function(n){for(var e=n.length;e&&!n[--e];);for(var t=new de(++e),s=0,r=n[0],i=1,o=function(l){t[s++]=l},a=1;a<=e;++a)if(n[a]==r&&a!=e)++i;else{if(!r&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(r),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(r);i=1,r=n[a]}return[t.subarray(0,s),e]},Xt=function(n,e){for(var t=0,s=0;s>>8,n[r+2]=255^n[r],n[r+3]=255^n[r+1];for(var i=0;i4&&!J[Io[oe-1]];--oe);var ve,Te,Re,St,Qe=c+5<<3,pt=Xt(r,_t)+Xt(i,is)+o,Ae=Xt(r,p)+Xt(i,v)+o+14+3*oe+Xt(A,J)+(2*A[16]+3*A[17]+7*A[18]);if(Qe<=pt&&Qe<=Ae)return Ar(e,u,n.subarray(l,l+c));if(Be(e,u,1+(Ae15&&(Be(e,u,_e[R]>>>5&127),u+=_e[R]>>>12)}}}else ve=ed,Te=_t,Re=td,St=is;for(R=0;R255){pe=s[R]>>>18&31,Zt(e,u,ve[pe+257]),u+=Te[pe+257],pe>7&&(Be(e,u,s[R]>>>23&31),u+=ai[pe]);var Ct=31&s[R];Zt(e,u,Re[Ct]),u+=St[Ct],Ct>3&&(Zt(e,u,s[R]>>>5&8191),u+=li[Ct])}else Zt(e,u,ve[s[R]]),u+=Te[s[R]];return Zt(e,u,ve[256]),u+Te[256]},nd=new jt([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),sd=function(){for(var n=new jt(256),e=0;e<256;++e){for(var t=e,s=9;--s;)t=(1&t&&3988292384)^t>>>1;n[e]=t}return n}(),rd=function(n,e,t,s,r){return function(i,o,a,l,c,u){var d=i.length,p=new Ce(l+d+5*(1+Math.floor(d/7e3))+c),f=p.subarray(l,p.length-c),m=0;if(!o||d<8)for(var v=0;v<=d;v+=65535){var _=v+65535;_>>13,T=8191&x,C=(1<7e3||Re>24576)&&It>423){m=ko(i,f,0,J,ie,oe,Te,Re,Qe,v-Qe,m),Re=ve=Te=0,Qe=v;for(var ae=0;ae<286;++ae)ie[ae]=0;for(ae=0;ae<30;++ae)oe[ae]=0}var _e=2,pe=0,Ct=T,tt=Ae-et&32767;if(It>2&&pt==ne(v-tt))for(var yc=Math.min(I,It)-1,wc=Math.min(32767,v),bc=Math.min(258,It);tt<=wc&&--Ct&&Ae!=et;){if(i[v+_e]==i[v+_e-tt]){for(var nt=0;nt_e){if(_e=nt,pe=tt,nt>yc)break;var Ec=Math.min(tt,nt-2),Bi=0;for(ae=0;aeBi&&(Bi=ji,et=Us)}}}tt+=(Ae=et)-(et=y[Ae])+32768&32767}if(pe){J[Re++]=268435456|Tr[_e]<<18|Co[pe];var Ui=31&Tr[_e],Hi=31&Co[pe];Te+=ai[Ui]+li[Hi],++ie[257+Ui],++oe[Hi],St=v+_e,++ve}else J[Re++]=i[v],++ie[i[v]]}}m=ko(i,f,u,J,ie,oe,Te,Re,Qe,v-Qe,m)}return yl(p,0,l+_l(m)+c)}(n,e.level==null?6:e.level,e.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+e.mem,t,s,!0)},Zs=function(n,e,t){for(;t;++e)n[e]=t,t>>>=8};function id(n,e){e===void 0&&(e={});var t=function(){var a=4294967295;return{p:function(l){for(var c=a,u=0;u>>8;a=c},d:function(){return 4294967295^a}}}(),s=n.length;t.p(n);var r,i=rd(n,e,10+((r=e).filename&&r.filename.length+1||0),8),o=i.length;return function(a,l){var c=l.filename;if(a[0]=31,a[1]=139,a[2]=8,a[8]=l.level<2?4:l.level==9?2:0,a[9]=3,l.mtime!=0&&Zs(a,4,Math.floor(new Date(l.mtime||Date.now())/1e3)),c){a[3]=8;for(var u=0;u<=c.length;++u)a[u+10]=c.charCodeAt(u)}}(i,e),Zs(i,o-8,t.d()),Zs(i,o-4,s),i}var od=function(n){var e,t,s,r,i="";for(e=t=0,s=(n=(n+"").replace(/\r\n/g,` -`).replace(/\r/g,` -`)).length,r=0;r127&&o<2048?String.fromCharCode(o>>6|192,63&o|128):String.fromCharCode(o>>12|224,o>>6&63|128,63&o|128),ke(a)||(t>e&&(i+=n.substring(e,t)),i+=a,e=t=r+1)}return t>e&&(i+=n.substring(e,n.length)),i},ad=!!ur||!!cr,To="text/plain",os=function(n,e,t){var s;t===void 0&&(t=!0);var[r,i]=n.split("?"),o=S({},e),a=(s=i==null?void 0:i.split("&").map(c=>{var u,[d,p]=c.split("="),f=t&&(u=o[d])!==null&&u!==void 0?u:p;return delete o[d],d+"="+f}))!==null&&s!==void 0?s:[],l=Su(o);return l&&a.push(l),r+"?"+a.join("&")},cn=(n,e)=>JSON.stringify(n,(t,s)=>typeof s=="bigint"?s.toString():s,e),Xs=n=>{var{data:e,compression:t}=n;if(e){if(t===We.GZipJS){var s=id(function(l,c){var u=l.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(l);for(var d=new Ce(l.length+(l.length>>>1)),p=0,f=function(x){d[p++]=x},m=0;md.length){var v=new Ce(p+8+(u-m<<1));v.set(d),d=v}var _=l.charCodeAt(m);_<128||c?f(_):_<2048?(f(192|_>>>6),f(128|63&_)):_>55295&&_<57344?(f(240|(_=65536+(1047552&_)|1023&l.charCodeAt(++m))>>>18),f(128|_>>>12&63),f(128|_>>>6&63),f(128|63&_)):(f(224|_>>>12),f(128|_>>>6&63),f(128|63&_))}return yl(d,0,p)}(cn(e)),{mtime:0}),r=new Blob([s],{type:To});return{contentType:To,body:r,estimatedSize:r.size}}if(t===We.Base64){var i=function(l){var c,u,d,p,f,m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",v=0,_=0,x="",I=[];if(!l)return l;l=od(l);do c=(f=l.charCodeAt(v++)<<16|l.charCodeAt(v++)<<8|l.charCodeAt(v++))>>18&63,u=f>>12&63,d=f>>6&63,p=63&f,I[_++]=m.charAt(c)+m.charAt(u)+m.charAt(d)+m.charAt(p);while(v"data="+encodeURIComponent(typeof l=="string"?l:cn(l)))(i);return{contentType:"application/x-www-form-urlencoded",body:o,estimatedSize:new Blob([o]).size}}var a=cn(e);return{contentType:"application/json",body:a,estimatedSize:new Blob([a]).size}}},jn=[];cr&&jn.push({transport:"fetch",method:n=>{var e,t,{contentType:s,body:r,estimatedSize:i}=(e=Xs(n))!==null&&e!==void 0?e:{},o=new Headers;U(n.headers,function(u,d){o.append(d,u)}),s&&o.append("Content-Type",s);var a=n.url,l=null;if(Gi){var c=new Gi;l={signal:c.signal,timeout:setTimeout(()=>c.abort(),n.timeout)}}cr(a,S({method:(n==null?void 0:n.method)||"GET",headers:o,keepalive:n.method==="POST"&&(i||0)<52428.8,body:r,signal:(t=l)==null?void 0:t.signal},n.fetchOptions)).then(u=>u.text().then(d=>{var p={statusCode:u.status,text:d};if(u.status===200)try{p.json=JSON.parse(d)}catch(f){E.error(f)}n.callback==null||n.callback(p)})).catch(u=>{E.error(u),n.callback==null||n.callback({statusCode:0,error:u})}).finally(()=>l?clearTimeout(l.timeout):null)}}),ur&&jn.push({transport:"XHR",method:n=>{var e,t=new ur;t.open(n.method||"GET",n.url,!0);var{contentType:s,body:r}=(e=Xs(n))!==null&&e!==void 0?e:{};U(n.headers,function(i,o){t.setRequestHeader(o,i)}),s&&t.setRequestHeader("Content-Type",s),n.timeout&&(t.timeout=n.timeout),n.disableXHRCredentials||(t.withCredentials=!0),t.onreadystatechange=()=>{if(t.readyState===4){var i={statusCode:t.status,text:t.responseText};if(t.status===200)try{i.json=JSON.parse(t.responseText)}catch{}n.callback==null||n.callback(i)}},t.send(r)}}),he!=null&&he.sendBeacon&&jn.push({transport:"sendBeacon",method:n=>{var e=os(n.url,{beacon:"1"});try{var t,{contentType:s,body:r}=(t=Xs(n))!==null&&t!==void 0?t:{},i=typeof r=="string"?new Blob([r],{type:s}):r;he.sendBeacon(e,i)}catch{}}});var as=function(n,e){if(!function(t){try{new RegExp(t)}catch{return!1}return!0}(e))return!1;try{return new RegExp(e).test(n)}catch{return!1}};function Ro(n,e,t){return cn({distinct_id:n,userPropertiesToSet:e,userPropertiesToSetOnce:t})}var wl={exact:(n,e)=>e.some(t=>n.some(s=>t===s)),is_not:(n,e)=>e.every(t=>n.every(s=>t!==s)),regex:(n,e)=>e.some(t=>n.some(s=>as(t,s))),not_regex:(n,e)=>e.every(t=>n.every(s=>!as(t,s))),icontains:(n,e)=>e.map(Ln).some(t=>n.map(Ln).some(s=>t.includes(s))),not_icontains:(n,e)=>e.map(Ln).every(t=>n.map(Ln).every(s=>!t.includes(s))),gt:(n,e)=>e.some(t=>{var s=parseFloat(t);return!isNaN(s)&&n.some(r=>s>parseFloat(r))}),lt:(n,e)=>e.some(t=>{var s=parseFloat(t);return!isNaN(s)&&n.some(r=>sn.toLowerCase();function bl(n,e){return!n||Object.entries(n).every(t=>{var[s,r]=t,i=e==null?void 0:e[s];if(b(i)||ke(i))return!1;var o=[String(i)],a=wl[r.operator];return!!a&&a(r.values,o)})}var Qs=z("[Error tracking]");class ld{constructor(e){var t,s;this.Zt=[],this.ti=new Wc([new Xc,new au,new eu,new Qc,new iu,new ru,new nu,new ou],Zc()),this._instance=e,this.Zt=(t=(s=this._instance.persistence)==null?void 0:s.get_property(yr))!==null&&t!==void 0?t:[]}onRemoteConfig(e){var t,s,r;if("errorTracking"in e){var i=(t=(s=e.errorTracking)==null?void 0:s.suppressionRules)!==null&&t!==void 0?t:[],o=(r=e.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Zt=i,this._instance.persistence&&this._instance.persistence.register({[yr]:this.Zt,[ro]:o})}}get ii(){var e,t=!!this._instance.get_property(ro),s=this._instance.config.error_tracking.captureExtensionExceptions;return(e=s??t)!==null&&e!==void 0&&e}buildProperties(e,t){return this.ti.buildFromUnknown(e,{syntheticException:t==null?void 0:t.syntheticException,mechanism:{handled:t==null?void 0:t.handled}})}sendExceptionEvent(e){var t=e.$exception_list;if(this.ei(t)){if(this.ri(t))return void Qs.info("Skipping exception capture because a suppression rule matched");if(!this.ii&&this.si(t))return void Qs.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.ni(t))return void Qs.info("Skipping exception capture because it was thrown by the PostHog SDK")}return this._instance.capture("$exception",e,{_noTruncate:!0,_batchKey:"exceptionEvent",oi:!0})}ri(e){if(e.length===0)return!1;var t=e.reduce((s,r)=>{var{type:i,value:o}=r;return K(i)&&i.length>0&&s.$exception_types.push(i),K(o)&&o.length>0&&s.$exception_values.push(o),s},{$exception_types:[],$exception_values:[]});return this.Zt.some(s=>{var r=s.values.map(i=>{var o,a=wl[i.operator],l=N(i.value)?i.value:[i.value],c=(o=t[i.key])!==null&&o!==void 0?o:[];return l.length>0&&a(l,c)});return s.type==="OR"?r.some(Boolean):r.every(Boolean)})}si(e){return e.flatMap(t=>{var s,r;return(s=(r=t.stacktrace)==null?void 0:r.frames)!==null&&s!==void 0?s:[]}).some(t=>t.filename&&t.filename.startsWith("chrome-extension://"))}ni(e){if(e.length>0){var t,s,r,i,o=(t=(s=e[0].stacktrace)==null?void 0:s.frames)!==null&&t!==void 0?t:[],a=o[o.length-1];return(r=a==null||(i=a.filename)==null?void 0:i.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}ei(e){return!O(e)&&N(e)}}var fe=z("[FeatureFlags]"),Qt=z("[FeatureFlags]",{debugEnabled:!0}),cd="errors_while_computing_flags",ud="flag_missing",dd="quota_limited",pd="timeout",fd="connection_error",hd="unknown_error",gd=n=>"api_error_"+n,er="$active_feature_flags",xt="$override_feature_flags",Ao="$feature_flag_payloads",en="$override_feature_flag_payloads",Po="$feature_flag_request_id",Fo="$feature_flag_evaluated_at",$o=n=>{var e={};for(var[t,s]of Bn(n||{}))s&&(e[t]=s);return e},md=n=>{var e=n.flags;return e?(n.featureFlags=Object.fromEntries(Object.keys(e).map(t=>{var s;return[t,(s=e[t].variant)!==null&&s!==void 0?s:e[t].enabled]})),n.featureFlagPayloads=Object.fromEntries(Object.keys(e).filter(t=>e[t].enabled).filter(t=>{var s;return(s=e[t].metadata)==null?void 0:s.payload}).map(t=>{var s;return[t,(s=e[t].metadata)==null?void 0:s.payload]}))):fe.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),n},vd=function(n){return n.FeatureFlags="feature_flags",n.Recordings="recordings",n}({});class _d{constructor(e){this.ai=!1,this.li=!1,this.ui=!1,this.hi=!1,this.di=!1,this.vi=!1,this.ci=!1,this._instance=e,this.featureFlagEventHandlers=[]}fi(){var e,t=(e=this._instance.config.evaluation_contexts)!==null&&e!==void 0?e:this._instance.config.evaluation_environments;return!this._instance.config.evaluation_environments||this._instance.config.evaluation_contexts||this.ci||(fe.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.ci=!0),t!=null&&t.length?t.filter(s=>{var r=s&&typeof s=="string"&&s.trim().length>0;return r||fe.error("Invalid evaluation context found:",s,"Expected non-empty string"),r}):[]}pi(){return this.fi().length>0}get hasLoadedFlags(){return this.li}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var e=this._instance.get_property(wr),t=this._instance.get_property(xt),s=this._instance.get_property(en);if(!s&&!t)return e||{};var r=G({},e||{}),i=[...new Set([...Object.keys(s||{}),...Object.keys(t||{})])];for(var o of i){var a,l,c=r[o],u=t==null?void 0:t[o],d=b(u)?(a=c==null?void 0:c.enabled)!==null&&a!==void 0&&a:!!u,p=b(u)?c.variant:typeof u=="string"?u:void 0,f=s==null?void 0:s[o],m=S({},c,{enabled:d,variant:d?p??(c==null?void 0:c.variant):void 0});d!==(c==null?void 0:c.enabled)&&(m.original_enabled=c==null?void 0:c.enabled),p!==(c==null?void 0:c.variant)&&(m.original_variant=c==null?void 0:c.variant),f&&(m.metadata=S({},c==null?void 0:c.metadata,{payload:f,original_payload:c==null||(l=c.metadata)==null?void 0:l.payload})),r[o]=m}return this.ai||(fe.warn(" Overriding feature flag details!",{flagDetails:e,overriddenPayloads:s,finalDetails:r}),this.ai=!0),r}getFlagVariants(){var e=this._instance.get_property($t),t=this._instance.get_property(xt);if(!t)return e||{};for(var s=G({},e),r=Object.keys(t),i=0;i{this.bi()},5))}yi(){clearTimeout(this.gi),this.gi=void 0}ensureFlagsLoaded(){this.li||this.ui||this.gi||this.reloadFeatureFlags()}setAnonymousDistinctId(e){this.$anon_distinct_id=e}setReloadingPaused(e){this.hi=e}bi(e){var t;if(this.yi(),!this._instance.M())if(this.ui)this.di=!0;else{var s=this._instance.config.token,r=this._instance.get_property("$device_id"),i={token:s,distinct_id:this._instance.get_distinct_id(),groups:this._instance.getGroups(),$anon_distinct_id:this.$anon_distinct_id,person_properties:S({},((t=this._instance.persistence)==null?void 0:t.get_initial_props())||{},this._instance.get_property(ln)||{}),group_properties:this._instance.get_property(gt),timezone:hl()};ke(r)||b(r)||(i.$device_id=r),(e!=null&&e.disableFlags||this._instance.config.advanced_disable_feature_flags)&&(i.disable_flags=!0),this.pi()&&(i.evaluation_contexts=this.fi());var o=this._instance.config.advanced_only_evaluate_survey_feature_flags?"&only_evaluate_survey_feature_flags=true":"",a=this._instance.requestRouter.endpointFor("flags","/flags/?v=2"+o);this.ui=!0,this._instance._send_request({method:"POST",url:a,data:i,compression:this._instance.config.disable_compression?void 0:We.Base64,timeout:this._instance.config.feature_flag_request_timeout_ms,callback:l=>{var c,u,d,p=!0;if(l.statusCode===200&&(this.di||(this.$anon_distinct_id=void 0),p=!1),this.ui=!1,!i.disable_flags||this.di){this.vi=!p;var f=[];l.error?l.error instanceof Error?f.push(l.error.name==="AbortError"?pd:fd):f.push(hd):l.statusCode!==200&&f.push(gd(l.statusCode)),(c=l.json)!=null&&c.errorsWhileComputingFlags&&f.push(cd);var m=!((u=l.json)==null||(u=u.quotaLimited)==null||!u.includes(vd.FeatureFlags));if(m&&f.push(dd),(d=this._instance.persistence)==null||d.register({[Er]:f}),m)fe.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.");else{var v;i.disable_flags||this.receivedFeatureFlags((v=l.json)!==null&&v!==void 0?v:{},p),this.di&&(this.di=!1,this.bi())}}}})}}getFeatureFlag(e,t){var s;if(t===void 0&&(t={}),!t.fresh||this.vi){if(this.li||this.getFlags()&&this.getFlags().length>0){var r=this.getFeatureFlagResult(e,t);return(s=r==null?void 0:r.variant)!==null&&s!==void 0?s:r==null?void 0:r.enabled}fe.warn('getFeatureFlag for key "'+e+`" failed. Feature flags didn't load in time.`)}}getFeatureFlagDetails(e){return this.getFlagsWithDetails()[e]}getFeatureFlagPayload(e){var t=this.getFeatureFlagResult(e,{send_event:!1});return t==null?void 0:t.payload}getFeatureFlagResult(e,t){if(t===void 0&&(t={}),!t.fresh||this.vi)if(this.li||this.getFlags()&&this.getFlags().length>0){var s=this.getFlagVariants(),r=e in s,i=s[e],o=this.getFlagPayloads()[e],a=String(i),l=this._instance.get_property(Po)||void 0,c=this._instance.get_property(Fo)||void 0,u=this._instance.get_property(Zn)||{};if((t.send_event||!("send_event"in t))&&(!(e in u)||!u[e].includes(a))){var d,p,f,m,v,_,x,I,T,C;N(u[e])?u[e].push(a):u[e]=[a],(d=this._instance.persistence)==null||d.register({[Zn]:u});var y=this.getFeatureFlagDetails(e),P=[...(p=this._instance.get_property(Er))!==null&&p!==void 0?p:[]];b(i)&&P.push(ud);var A={$feature_flag:e,$feature_flag_response:i,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:c,$feature_flag_bootstrapped_response:((f=this._instance.config.bootstrap)==null||(f=f.featureFlags)==null?void 0:f[e])||null,$feature_flag_bootstrapped_payload:((m=this._instance.config.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[e])||null,$used_bootstrap_value:!this.vi};b(y==null||(v=y.metadata)==null?void 0:v.version)||(A.$feature_flag_version=y.metadata.version);var R,ne=(_=y==null||(x=y.reason)==null?void 0:x.description)!==null&&_!==void 0?_:y==null||(I=y.reason)==null?void 0:I.code;ne&&(A.$feature_flag_reason=ne),y!=null&&(T=y.metadata)!=null&&T.id&&(A.$feature_flag_id=y.metadata.id),b(y==null?void 0:y.original_variant)&&b(y==null?void 0:y.original_enabled)||(A.$feature_flag_original_response=b(y.original_variant)?y.original_enabled:y.original_variant),y!=null&&(C=y.metadata)!=null&&C.original_payload&&(A.$feature_flag_original_payload=y==null||(R=y.metadata)==null?void 0:R.original_payload),P.length&&(A.$feature_flag_error=P.join(",")),this._instance.capture("$feature_flag_called",A)}if(r){var J=o;if(!b(o))try{J=JSON.parse(o)}catch{}return{key:e,enabled:!!i,variant:typeof i=="string"?i:void 0,payload:J}}}else fe.warn('getFeatureFlagResult for key "'+e+`" failed. Feature flags didn't load in time.`)}getRemoteConfigPayload(e,t){var s=this._instance.config.token,r={distinct_id:this._instance.get_distinct_id(),token:s};this.pi()&&(r.evaluation_contexts=this.fi()),this._instance._send_request({method:"POST",url:this._instance.requestRouter.endpointFor("flags","/flags/?v=2"),data:r,compression:this._instance.config.disable_compression?void 0:We.Base64,timeout:this._instance.config.feature_flag_request_timeout_ms,callback:i=>{var o,a=(o=i.json)==null?void 0:o.featureFlagPayloads;t((a==null?void 0:a[e])||void 0)}})}isFeatureEnabled(e,t){if(t===void 0&&(t={}),!t.fresh||this.vi){if(this.li||this.getFlags()&&this.getFlags().length>0){var s=this.getFeatureFlag(e,t);return b(s)?void 0:!!s}fe.warn('isFeatureEnabled for key "'+e+`" failed. Feature flags didn't load in time.`)}}addFeatureFlagsHandler(e){this.featureFlagEventHandlers.push(e)}removeFeatureFlagsHandler(e){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter(t=>t!==e)}receivedFeatureFlags(e,t){if(this._instance.persistence){this.li=!0;var s=this.getFlagVariants(),r=this.getFlagPayloads(),i=this.getFlagsWithDetails();(function(o,a,l,c,u){l===void 0&&(l={}),c===void 0&&(c={}),u===void 0&&(u={});var d=md(o),p=d.flags,f=d.featureFlags,m=d.featureFlagPayloads;if(f){var v=o.requestId,_=o.evaluatedAt;if(N(f)){fe.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var x={};if(f)for(var I=0;I{var R;return!((R=p[A])!=null&&R.failed)}));T=S({},l,Object.fromEntries(Object.entries(T).filter(A=>{var[R]=A;return P.has(R)}))),C=S({},c,Object.fromEntries(Object.entries(C||{}).filter(A=>{var[R]=A;return P.has(R)}))),y=S({},u,Object.fromEntries(Object.entries(y||{}).filter(A=>{var[R]=A;return P.has(R)})))}else T=S({},l,T),C=S({},c,C),y=S({},u,y);a&&a.register(S({[er]:Object.keys($o(T)),[$t]:T||{},[Ao]:C||{},[wr]:y||{}},v?{[Po]:v}:{},_?{[Fo]:_}:{}))}}})(e,this._instance.persistence,s,r,i),this.wi(t)}}override(e,t){t===void 0&&(t=!1),fe.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:e,suppressWarning:t})}overrideFeatureFlags(e){if(!this._instance.__loaded||!this._instance.persistence)return fe.uninitializedWarning("posthog.featureFlags.overrideFeatureFlags");if(e===!1)return this._instance.persistence.unregister(xt),this._instance.persistence.unregister(en),this.wi(),Qt.info("All overrides cleared");if(e&&typeof e=="object"&&("flags"in e||"payloads"in e)){var t,s=e;if(this.ai=!!((t=s.suppressWarning)!==null&&t!==void 0&&t),"flags"in s){if(s.flags===!1)this._instance.persistence.unregister(xt),Qt.info("Flag overrides cleared");else if(s.flags){if(N(s.flags)){for(var r={},i=0;ithis.removeFeatureFlagsHandler(e)}updateEarlyAccessFeatureEnrollment(e,t,s){var r,i=(this._instance.get_property(an)||[]).find(c=>c.flagKey===e),o={["$feature_enrollment/"+e]:t},a={$feature_flag:e,$feature_enrollment:t,$set:o};i&&(a.$early_access_feature_name=i.name),s&&(a.$feature_enrollment_stage=s),this._instance.capture("$feature_enrollment_update",a),this.setPersonPropertiesForFlags(o,!1);var l=S({},this.getFlagVariants(),{[e]:t});(r=this._instance.persistence)==null||r.register({[er]:Object.keys($o(l)),[$t]:l}),this.wi()}getEarlyAccessFeatures(e,t,s){t===void 0&&(t=!1);var r=this._instance.get_property(an),i=s?"&"+s.map(o=>"stage="+o).join("&"):"";if(r&&!t)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/early_access_features/?token="+this._instance.config.token+i),method:"GET",callback:o=>{var a,l;if(o.json){var c=o.json.earlyAccessFeatures;return(a=this._instance.persistence)==null||a.unregister(an),(l=this._instance.persistence)==null||l.register({[an]:c}),e(c)}}})}xi(){var e=this.getFlags(),t=this.getFlagVariants();return{flags:e.filter(s=>t[s]),flagVariants:Object.keys(t).filter(s=>t[s]).reduce((s,r)=>(s[r]=t[r],s),{})}}wi(e){var{flags:t,flagVariants:s}=this.xi();this.featureFlagEventHandlers.forEach(r=>r(t,s,{errorsLoading:e}))}setPersonPropertiesForFlags(e,t){t===void 0&&(t=!0);var s=this._instance.get_property(ln)||{};this._instance.register({[ln]:S({},s,e)}),t&&this._instance.reloadFeatureFlags()}resetPersonPropertiesForFlags(){this._instance.unregister(ln)}setGroupPropertiesForFlags(e,t){t===void 0&&(t=!0);var s=this._instance.get_property(gt)||{};Object.keys(s).length!==0&&Object.keys(s).forEach(r=>{s[r]=S({},s[r],e[r]),delete e[r]}),this._instance.register({[gt]:S({},s,e)}),t&&this._instance.reloadFeatureFlags()}resetGroupPropertiesForFlags(e){if(e){var t=this._instance.get_property(gt)||{};this._instance.register({[gt]:S({},t,{[e]:{}})})}else this._instance.unregister(gt)}reset(){this.li=!1,this.ui=!1,this.hi=!1,this.di=!1,this.vi=!1,this.$anon_distinct_id=void 0,this.yi(),this.ai=!1}}var yd=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"];class tr{constructor(e,t){this.R=e,this.props={},this.$i=!1,this.Ei=(s=>{var r="";return s.token&&(r=s.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),s.persistence_name?"ph_"+s.persistence_name:"ph_"+r+"_posthog"})(e),this.Y=this.Si(e),this.load(),e.debug&&E.info("Persistence loaded",e.persistence,S({},this.props)),this.update_config(e,e,t),this.save()}isDisabled(){return!!this.ki}Si(e){yd.indexOf(e.persistence.toLowerCase())===-1&&(E.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var t=function(r){r===void 0&&(r=[]);var i=[...$u,...r];return S({},W,{W:function(o){try{var a={};try{a=Fe.W(o)||{}}catch{}var l=G(a,JSON.parse(W.q(o)||"{}"));return W.G(o,l),l}catch{}return null},G:function(o,a,l,c,u,d){try{W.G(o,a,void 0,void 0,d);var p={};i.forEach(f=>{a[f]&&(p[f]=a[f])}),Object.keys(p).length&&Fe.G(o,p,l,c,u,d)}catch(f){W.B(f)}},V:function(o,a){try{h==null||h.localStorage.removeItem(o),Fe.V(o,a)}catch(l){W.B(l)}}})}(e.cookie_persisted_properties||[]),s=e.persistence.toLowerCase();return s==="localstorage"&&W.H()?W:s==="localstorage+cookie"&&t.H()?t:s==="sessionstorage"&&Q.H()?Q:s==="memory"?Mu:s==="cookie"?Fe:t.H()?t:Fe}properties(){var e={};return U(this.props,function(t,s){if(s===$t&&Z(t))for(var r=Object.keys(t),i=0;i{this.props.hasOwnProperty(o)&&this.props[o]!==t||(this.props[o]=i,r=!0)}),r)return this.save(),!0}return!1}register(e,t){if(Z(e)){this.Pi=b(t)?this.Ci:t;var s=!1;if(U(e,(r,i)=>{e.hasOwnProperty(i)&&this.props[i]!==r&&(this.props[i]=r,s=!0)}),s)return this.save(),!0}return!1}unregister(e){e in this.props&&(delete this.props[e],this.save())}update_campaign_params(){if(!this.$i){var e=ll(this.R.custom_campaign_params,this.R.mask_personal_data_properties,this.R.custom_personal_data_properties);Ft(si(e))||this.register(e),this.$i=!0}}update_search_keyword(){var e;this.register((e=w==null?void 0:w.referrer)?ul(e):{})}update_referrer_info(){var e;this.register_once({$referrer:dl(),$referring_domain:w!=null&&w.referrer&&((e=ts(w.referrer))==null?void 0:e.host)||"$direct"},void 0)}set_initial_person_info(){this.props[Cr]||this.props[xr]||this.register_once({[Xn]:pl(this.R.mask_personal_data_properties,this.R.custom_personal_data_properties)},void 0)}get_initial_props(){var e={};U([xr,Cr],o=>{var a=this.props[o];a&&U(a,function(l,c){e["$initial_"+dr(c)]=l})});var t,s,r=this.props[Xn];if(r){var i=(t=fl(r),s={},U(t,function(o,a){s["$initial_"+dr(a)]=o}),s);G(e,i)}return e}safe_merge(e){return U(this.props,function(t,s){s in e||(e[s]=t)}),e}update_config(e,t,s){if(this.Ci=this.Pi=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!s),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie),e.persistence!==t.persistence||!((o,a)=>{if(o.length!==a.length)return!1;var l=[...o].sort(),c=[...a].sort();return l.every((u,d)=>u===c[d])})(e.cookie_persisted_properties||[],t.cookie_persisted_properties||[])){var r=this.Si(e),i=this.props;this.clear(),this.Y=r,this.props=i,this.save()}}set_disabled(e){this.ki=e,this.ki?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ti&&(this.Ti=e,this.remove(),this.save())}set_secure(e){e!==this.Ii&&(this.Ii=e,this.remove(),this.save())}set_event_timer(e,t){var s=this.props[on]||{};s[e]=t,this.props[on]=s,this.save()}remove_event_timer(e){var t=(this.props[on]||{})[e];return b(t)||(delete this.props[on][e],this.save()),t}get_property(e){return this.props[e]}set_property(e,t){this.props[e]=t,this.save()}}var Mo=z("[Product Tours]"),nr="ph_product_tours";class wd{constructor(e){this.Ri=null,this.Fi=null,this._instance=e}onRemoteConfig(e){"productTours"in e&&(this._instance.persistence&&this._instance.persistence.register({[oo]:!!e.productTours}),this.loadIfEnabled())}loadIfEnabled(){var e,t;this.Ri||(e=this._instance).config.disable_product_tours||(t=e.persistence)==null||!t.get_property(oo)||this.it(()=>this.Oi())}it(e){var t,s;(t=k.__PosthogExtensions__)!=null&&t.generateProductTours?e():(s=k.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"product-tours",r=>{r?Mo.error("Could not load product tours script",r):e()})}Oi(){var e;!this.Ri&&(e=k.__PosthogExtensions__)!=null&&e.generateProductTours&&(this.Ri=k.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(e,t){if(t===void 0&&(t=!1),!N(this.Fi)||t){var s=this._instance.persistence;if(s){var r=s.props[nr];if(N(r)&&!t)return this.Fi=r,void e(r,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",callback:i=>{var o=i.statusCode;if(o!==200||!i.json){var a="Product Tours API could not be loaded, status: "+o;return Mo.error(a),void e([],{isLoaded:!1,error:a})}var l=N(i.json.product_tours)?i.json.product_tours:[];this.Fi=l,s&&s.register({[nr]:l}),e(l,{isLoaded:!0})}})}else e(this.Fi,{isLoaded:!0})}getActiveProductTours(e){O(this.Ri)?e([],{isLoaded:!1,error:"Product tours not loaded"}):this.Ri.getActiveProductTours(e)}showProductTour(e){var t;(t=this.Ri)==null||t.showTourById(e)}previewTour(e){this.Ri?this.Ri.previewTour(e):this.it(()=>{var t;this.Oi(),(t=this.Ri)==null||t.previewTour(e)})}dismissProductTour(){var e;(e=this.Ri)==null||e.dismissTour("user_clicked_skip")}nextStep(){var e;(e=this.Ri)==null||e.nextStep()}previousStep(){var e;(e=this.Ri)==null||e.previousStep()}clearCache(){var e;this.Fi=null,(e=this._instance.persistence)==null||e.unregister(nr)}resetTour(e){var t;(t=this.Ri)==null||t.resetTour(e)}resetAllTours(){var e;(e=this.Ri)==null||e.resetAllTours()}cancelPendingTour(e){var t;(t=this.Ri)==null||t.cancelPendingTour(e)}}var tn=function(n){return n.Activation="events",n.Cancellation="cancelEvents",n}({});(function(n){return n.Button="button",n.Tab="tab",n.Selector="selector",n})({});(function(n){return n.TopLeft="top_left",n.TopRight="top_right",n.TopCenter="top_center",n.MiddleLeft="middle_left",n.MiddleRight="middle_right",n.MiddleCenter="middle_center",n.Left="left",n.Center="center",n.Right="right",n.NextToTrigger="next_to_trigger",n})({});(function(n){return n.Top="top",n.Left="left",n.Right="right",n.Bottom="bottom",n})({});var sr=function(n){return n.Popover="popover",n.API="api",n.Widget="widget",n.ExternalSurvey="external_survey",n}({});(function(n){return n.Open="open",n.MultipleChoice="multiple_choice",n.SingleChoice="single_choice",n.Rating="rating",n.Link="link",n})({});(function(n){return n.NextQuestion="next_question",n.End="end",n.ResponseBased="response_based",n.SpecificQuestion="specific_question",n})({});(function(n){return n.Once="once",n.Recurring="recurring",n.Always="always",n})({});var un=function(n){return n.SHOWN="survey shown",n.DISMISSED="survey dismissed",n.SENT="survey sent",n.ABANDONED="survey abandoned",n}({}),rr=function(n){return n.SURVEY_ID="$survey_id",n.SURVEY_NAME="$survey_name",n.SURVEY_RESPONSE="$survey_response",n.SURVEY_ITERATION="$survey_iteration",n.SURVEY_ITERATION_START_DATE="$survey_iteration_start_date",n.SURVEY_PARTIALLY_COMPLETED="$survey_partially_completed",n.SURVEY_SUBMISSION_ID="$survey_submission_id",n.SURVEY_QUESTIONS="$survey_questions",n.SURVEY_COMPLETED="$survey_completed",n.PRODUCT_TOUR_ID="$product_tour_id",n.SURVEY_LAST_SEEN_DATE="$survey_last_seen_date",n}({}),Pr=function(n){return n.Popover="popover",n.Inline="inline",n}({}),j=z("[Surveys]"),El="seenSurvey_",bd=(n,e)=>{var t="$survey_"+e+"/"+n.id;return n.current_iteration&&n.current_iteration>0&&(t="$survey_"+e+"/"+n.id+"/"+n.current_iteration),t},Oo=n=>((e,t)=>{var s=""+e+t.id;return t.current_iteration&&t.current_iteration>0&&(s=""+e+t.id+"_"+t.current_iteration),s})(El,n),Ed=[sr.Popover,sr.Widget,sr.API],Sd={ignoreConditions:!1,ignoreDelay:!1,displayType:Pr.Popover};class ci{constructor(){this.Mi={},this.Mi={}}on(e,t){return this.Mi[e]||(this.Mi[e]=[]),this.Mi[e].push(t),()=>{this.Mi[e]=this.Mi[e].filter(s=>s!==t)}}emit(e,t){for(var s of this.Mi[e]||[])s(t);for(var r of this.Mi["*"]||[])r(e,t)}}function kt(n,e,t){if(O(n))return!1;switch(t){case"exact":return n===e;case"contains":var s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(s,"i").test(n);case"regex":try{return new RegExp(e).test(n)}catch{return!1}default:return!1}}class Id{constructor(e){this.Ai=new ci,this.ji=(t,s)=>this.Di(t,s)&&this.Li(t,s)&&this.Ni(t,s)&&this.Ui(t,s),this.Di=(t,s)=>s==null||!s.event||(t==null?void 0:t.event)===(s==null?void 0:s.event),this._instance=e,this.zi=new Set,this.Hi=new Set}init(){var e;if(!b((e=this._instance)==null?void 0:e._addCaptureHook)){var t;(t=this._instance)==null||t._addCaptureHook((s,r)=>{this.on(s,r)})}}register(e){var t,s;if(!b((t=this._instance)==null?void 0:t._addCaptureHook)&&(e.forEach(o=>{var a,l;(a=this.Hi)==null||a.add(o),(l=o.steps)==null||l.forEach(c=>{var u;(u=this.zi)==null||u.add((c==null?void 0:c.event)||"")})}),(s=this._instance)!=null&&s.autocapture)){var r,i=new Set;e.forEach(o=>{var a;(a=o.steps)==null||a.forEach(l=>{l!=null&&l.selector&&i.add(l==null?void 0:l.selector)})}),(r=this._instance)==null||r.autocapture.setElementSelectors(i)}}on(e,t){var s;t!=null&&e.length!=0&&(this.zi.has(e)||this.zi.has(t==null?void 0:t.event))&&this.Hi&&((s=this.Hi)==null?void 0:s.size)>0&&this.Hi.forEach(r=>{this.Bi(t,r)&&this.Ai.emit("actionCaptured",r.name)})}qi(e){this.onAction("actionCaptured",t=>e(t))}Bi(e,t){if((t==null?void 0:t.steps)==null)return!1;for(var s of t.steps)if(this.ji(e,s))return!0;return!1}onAction(e,t){return this.Ai.on(e,t)}Li(e,t){if(t!=null&&t.url){var s,r=e==null||(s=e.properties)==null?void 0:s.$current_url;if(!r||typeof r!="string"||!kt(r,t.url,t.url_matching||"contains"))return!1}return!0}Ni(e,t){return!!this.Wi(e,t)&&!!this.Gi(e,t)&&!!this.Vi(e,t)}Wi(e,t){var s;if(t==null||!t.href)return!0;var r=this.Ji(e);if(r.length>0)return r.some(a=>kt(a.href,t.href,t.href_matching||"exact"));var i,o=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!o&&kt((i=o.match(/(?::|")href="(.*?)"/))?i[1]:"",t.href,t.href_matching||"exact")}Gi(e,t){var s;if(t==null||!t.text)return!0;var r=this.Ji(e);if(r.length>0)return r.some(c=>kt(c.text,t.text,t.text_matching||"exact")||kt(c.$el_text,t.text,t.text_matching||"exact"));var i,o,a,l=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!l&&(i=function(c){for(var u,d=[],p=/(?::|")text="(.*?)"/g;!O(u=p.exec(c));)d.includes(u[1])||d.push(u[1]);return d}(l),o=t.text,a=t.text_matching||"exact",i.some(c=>kt(c,o,a)))}Vi(e,t){var s,r;if(t==null||!t.selector)return!0;var i=e==null||(s=e.properties)==null?void 0:s.$element_selectors;if(i!=null&&i.includes(t.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(t.selector_regex&&o)try{return new RegExp(t.selector_regex).test(o)}catch{return!1}return!1}Ji(e){var t;return(e==null||(t=e.properties)==null?void 0:t.$elements)==null?[]:e==null?void 0:e.properties.$elements}Ui(e,t){return t==null||!t.properties||t.properties.length===0||bl(t.properties.reduce((s,r)=>{var i=N(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return s[r.key]={values:i,operator:r.operator||"exact"},s},{}),e==null?void 0:e.properties)}}class Cd{constructor(e){this._instance=e,this.Ki=new Map,this.Yi=new Map,this.Xi=new Map}Qi(e,t){return!!e&&bl(e.propertyFilters,t==null?void 0:t.properties)}Zi(e,t){var s=new Map;return e.forEach(r=>{var i;(i=r.conditions)==null||(i=i[t])==null||(i=i.values)==null||i.forEach(o=>{if(o!=null&&o.name){var a=s.get(o.name)||[];a.push(r.id),s.set(o.name,a)}})}),s}te(e,t,s){var r=(s===tn.Activation?this.Ki:this.Yi).get(e),i=[];return this.ie(o=>{i=o.filter(a=>r==null?void 0:r.includes(a.id))}),i.filter(o=>{var a,l=(a=o.conditions)==null||(a=a[s])==null||(a=a.values)==null?void 0:a.find(c=>c.name===e);return this.Qi(l,t)})}register(e){var t;b((t=this._instance)==null?void 0:t._addCaptureHook)||(this.ee(e),this.re(e))}re(e){var t=e.filter(s=>{var r,i;return((r=s.conditions)==null?void 0:r.actions)&&((i=s.conditions)==null||(i=i.actions)==null||(i=i.values)==null?void 0:i.length)>0});t.length!==0&&(this.se==null&&(this.se=new Id(this._instance),this.se.init(),this.se.qi(s=>{this.onAction(s)})),t.forEach(s=>{var r,i,o,a,l;s.conditions&&(r=s.conditions)!=null&&r.actions&&(i=s.conditions)!=null&&(i=i.actions)!=null&&i.values&&((o=s.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.se)==null||a.register(s.conditions.actions.values),(l=s.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach(c=>{if(c&&c.name){var u=this.Xi.get(c.name);u&&u.push(s.id),this.Xi.set(c.name,u||[s.id])}}))}))}ee(e){var t,s=e.filter(i=>{var o,a;return((o=i.conditions)==null?void 0:o.events)&&((a=i.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0}),r=e.filter(i=>{var o,a;return((o=i.conditions)==null?void 0:o.cancelEvents)&&((a=i.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0});(s.length!==0||r.length!==0)&&((t=this._instance)==null||t._addCaptureHook((i,o)=>{this.onEvent(i,o)}),this.Ki=this.Zi(e,tn.Activation),this.Yi=this.Zi(e,tn.Cancellation))}onEvent(e,t){var s,r=this.ne(),i=this.oe(),o=this.ae(),a=((s=this._instance)==null||(s=s.persistence)==null?void 0:s.props[i])||[];if(o===e&&t&&a.length>0){var l,c;r.info("event matched, removing item from activated items",{event:e,eventPayload:t,existingActivatedItems:a});var u=(t==null||(l=t.properties)==null?void 0:l.$survey_id)||(t==null||(c=t.properties)==null?void 0:c.$product_tour_id);if(u){var d=a.indexOf(u);d>=0&&(a.splice(d,1),this.le(a))}}else{if(this.Yi.has(e)){var p=this.te(e,t,tn.Cancellation);p.length>0&&(r.info("cancel event matched, cancelling items",{event:e,itemsToCancel:p.map(m=>m.id)}),p.forEach(m=>{var v=a.indexOf(m.id);v>=0&&a.splice(v,1),this.ue(m.id)}),this.le(a))}if(this.Ki.has(e)){r.info("event name matched",{event:e,eventPayload:t,items:this.Ki.get(e)});var f=this.te(e,t,tn.Activation);this.le(a.concat(f.map(m=>m.id)||[]))}}}onAction(e){var t,s=this.oe(),r=((t=this._instance)==null||(t=t.persistence)==null?void 0:t.props[s])||[];this.Xi.has(e)&&this.le(r.concat(this.Xi.get(e)||[]))}le(e){var t,s=this.ne(),r=this.oe(),i=[...new Set(e)].filter(o=>!this.he(o));s.info("updating activated items",{activatedItems:i}),(t=this._instance)==null||(t=t.persistence)==null||t.register({[r]:i})}getActivatedIds(){var e,t=this.oe(),s=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[t];return s||[]}getEventToItemsMap(){return this.Ki}de(){return this.se}}class xd extends Cd{constructor(e){super(e)}oe(){return"$surveys_activated"}ae(){return un.SHOWN}ie(e){var t;(t=this._instance)==null||t.getSurveys(e)}ue(e){var t;(t=this._instance)==null||t.cancelPendingSurvey(e)}ne(){return j}he(){return!1}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}class kd{constructor(e){this.ve=void 0,this._surveyManager=null,this.ce=!1,this.fe=[],this.pe=null,this._instance=e,this._surveyEventReceiver=null}onRemoteConfig(e){if(!this._instance.config.disable_surveys){var t=e.surveys;if(O(t))return j.warn("Flags not loaded yet. Not loading surveys.");var s=N(t);this.ve=s?t.length>0:t,j.info("flags response received, isSurveysEnabled: "+this.ve),this.loadIfEnabled()}}reset(){localStorage.removeItem("lastSeenSurveyDate");for(var e=[],t=0;tlocalStorage.removeItem(r))}loadIfEnabled(){if(!this._surveyManager)if(this.ce)j.info("Already initializing surveys, skipping...");else if(this._instance.config.disable_surveys)j.info("Disabled. Not loading surveys.");else if(this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())j.info("Not loading surveys in cookieless mode without consent.");else{var e=k==null?void 0:k.__PosthogExtensions__;if(e){if(!b(this.ve)||this._instance.config.advanced_enable_surveys){var t=this.ve||this._instance.config.advanced_enable_surveys;this.ce=!0;try{var s=e.generateSurveys;if(s)return void this._e(s,t);var r=e.loadExternalDependency;if(!r)return void this.ge("PostHog loadExternalDependency extension not found.");r(this._instance,"surveys",i=>{i||!e.generateSurveys?this.ge("Could not load surveys script",i):this._e(e.generateSurveys,t)})}catch(i){throw this.ge("Error initializing surveys",i),i}finally{this.ce=!1}}}else j.error("PostHog Extensions not found.")}}_e(e,t){this._surveyManager=e(this._instance,t),this._surveyEventReceiver=new xd(this._instance),j.info("Surveys loaded successfully"),this.me({isLoaded:!0})}ge(e,t){j.error(e,t),this.me({isLoaded:!1,error:e})}onSurveysLoaded(e){return this.fe.push(e),this._surveyManager&&this.me({isLoaded:!0}),()=>{this.fe=this.fe.filter(t=>t!==e)}}getSurveys(e,t){if(t===void 0&&(t=!1),this._instance.config.disable_surveys)return j.info("Disabled. Not loading surveys."),e([]);var s,r=this._instance.get_property(br);if(r&&!t)return e(r,{isLoaded:!0});typeof Promise<"u"&&this.pe?this.pe.then(i=>{var{surveys:o,context:a}=i;return e(o,a)}):(typeof Promise<"u"&&(this.pe=new Promise(i=>{s=i})),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this._instance.config.token),method:"GET",timeout:this._instance.config.surveys_request_timeout_ms,callback:i=>{var o;this.pe=null;var a=i.statusCode;if(a!==200||!i.json){var l="Surveys API could not be loaded, status: "+a;j.error(l);var c={isLoaded:!1,error:l};return e([],c),void(s==null||s({surveys:[],context:c}))}var u,d=i.json.surveys||[],p=d.filter(m=>function(v){return!(!v.start_date||v.end_date)}(m)&&(function(v){var _;return!((_=v.conditions)==null||(_=_.events)==null||(_=_.values)==null||!_.length)}(m)||function(v){var _;return!((_=v.conditions)==null||(_=_.actions)==null||(_=_.values)==null||!_.length)}(m)));p.length>0&&((u=this._surveyEventReceiver)==null||u.register(p)),(o=this._instance.persistence)==null||o.register({[br]:d});var f={isLoaded:!0};e(d,f),s==null||s({surveys:d,context:f})}}))}me(e){for(var t of this.fe)try{if(!e.isLoaded)return t([],e);this.getSurveys(t)}catch(s){j.error("Error in survey callback",s)}}getActiveMatchingSurveys(e,t){if(t===void 0&&(t=!1),!O(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(e,t);j.warn("init was not called")}be(e){var t=null;return this.getSurveys(s=>{var r;t=(r=s.find(i=>i.id===e))!==null&&r!==void 0?r:null}),t}ye(e){if(O(this._surveyManager))return{eligible:!1,reason:"SDK is not enabled or survey functionality is not yet loaded"};var t=typeof e=="string"?this.be(e):e;return t?this._surveyManager.checkSurveyEligibility(t):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(e){if(O(this._surveyManager))return j.warn("init was not called"),{visible:!1,disabledReason:"SDK is not enabled or survey functionality is not yet loaded"};var t=this.ye(e);return{visible:t.eligible,disabledReason:t.reason}}canRenderSurveyAsync(e,t){return O(this._surveyManager)?(j.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:"SDK is not enabled or survey functionality is not yet loaded"})):new Promise(s=>{this.getSurveys(r=>{var i,o=(i=r.find(l=>l.id===e))!==null&&i!==void 0?i:null;if(o){var a=this.ye(o);s({visible:a.eligible,disabledReason:a.reason})}else s({visible:!1,disabledReason:"Survey not found"})},t)})}renderSurvey(e,t,s){var r;if(O(this._surveyManager))j.warn("init was not called");else{var i=typeof e=="string"?this.be(e):e;if(i!=null&&i.id)if(Ed.includes(i.type)){var o=w==null?void 0:w.querySelector(t);if(o)return(r=i.appearance)!=null&&r.surveyPopupDelaySeconds?(j.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout(()=>{var a,l;j.info("Rendering survey "+i.id+" with delay of "+((a=i.appearance)==null?void 0:a.surveyPopupDelaySeconds)+" seconds"),(l=this._surveyManager)==null||l.renderSurvey(i,o,s),j.info("Survey "+i.id+" rendered")},1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,o,s);j.warn("Survey element not found")}else j.warn("Surveys of type "+i.type+" cannot be rendered in the app");else j.warn("Survey not found")}}displaySurvey(e,t){var s;if(O(this._surveyManager))j.warn("init was not called");else{var r=this.be(e);if(r){var i=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&t.ignoreDelay&&(i=S({},r,{appearance:S({},r.appearance,{surveyPopupDelaySeconds:0})})),t.displayType!==Pr.Popover&&t.initialResponses&&j.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),t.ignoreConditions===!1){var o=this.canRenderSurvey(r);if(!o.visible)return void j.warn("Survey is not eligible to be displayed: ",o.disabledReason)}t.displayType!==Pr.Inline?this._surveyManager.handlePopoverSurvey(i,t):this.renderSurvey(i,t.selector,t.properties)}else j.warn("Survey not found")}}cancelPendingSurvey(e){O(this._surveyManager)?j.warn("init was not called"):this._surveyManager.cancelSurvey(e)}handlePageUnload(){var e;(e=this._surveyManager)==null||e.handlePageUnload()}}var ye=z("[Conversations]");class Td{constructor(e){this.we=void 0,this._conversationsManager=null,this.xe=!1,this.$e=null,this._instance=e}onRemoteConfig(e){if(!this._instance.config.disable_conversations){var t=e.conversations;O(t)||(Ke(t)?this.we=t:(this.we=t.enabled,this.$e=t),this.loadIfEnabled())}}reset(){var e;(e=this._conversationsManager)==null||e.reset(),this._conversationsManager=null,this.we=void 0,this.$e=null}loadIfEnabled(){if(!(this._conversationsManager||this.xe||this._instance.config.disable_conversations||ja(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var e=k==null?void 0:k.__PosthogExtensions__;if(e&&!b(this.we)&&this.we)if(this.$e&&this.$e.token){this.xe=!0;try{var t=e.initConversations;if(t)return this.Ee(t),void(this.xe=!1);var s=e.loadExternalDependency;if(!s)return void this.Se("PostHog loadExternalDependency extension not found.");s(this._instance,"conversations",r=>{r||!e.initConversations?this.Se("Could not load conversations script",r):this.Ee(e.initConversations),this.xe=!1})}catch(r){this.Se("Error initializing conversations",r),this.xe=!1}}else ye.error("Conversations enabled but missing token in remote config.")}}Ee(e){if(this.$e)try{this._conversationsManager=e(this.$e,this._instance),ye.info("Conversations loaded successfully")}catch(t){this.Se("Error completing conversations initialization",t)}else ye.error("Cannot complete initialization: remote config is null")}Se(e,t){ye.error(e,t),this._conversationsManager=null,this.xe=!1}show(){this._conversationsManager?this._conversationsManager.show():ye.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.we===!0&&!ke(this._conversationsManager)}isVisible(){var e,t;return(e=(t=this._conversationsManager)==null?void 0:t.isVisible())!==null&&e!==void 0&&e}sendMessage(e,t,s){var r=this;return Ue(function*(){return r._conversationsManager?r._conversationsManager.sendMessage(e,t,s):(ye.warn("Conversations not available yet."),null)})()}getMessages(e,t){var s=this;return Ue(function*(){return s._conversationsManager?s._conversationsManager.getMessages(e,t):(ye.warn("Conversations not available yet."),null)})()}markAsRead(e){var t=this;return Ue(function*(){return t._conversationsManager?t._conversationsManager.markAsRead(e):(ye.warn("Conversations not available yet."),null)})()}getTickets(e){var t=this;return Ue(function*(){return t._conversationsManager?t._conversationsManager.getTickets(e):(ye.warn("Conversations not available yet."),null)})()}requestRestoreLink(e){var t=this;return Ue(function*(){return t._conversationsManager?t._conversationsManager.requestRestoreLink(e):(ye.warn("Conversations not available yet."),null)})()}restoreFromToken(e){var t=this;return Ue(function*(){return t._conversationsManager?t._conversationsManager.restoreFromToken(e):(ye.warn("Conversations not available yet."),null)})()}restoreFromUrlToken(){var e=this;return Ue(function*(){return e._conversationsManager?e._conversationsManager.restoreFromUrlToken():(ye.warn("Conversations not available yet."),null)})()}getCurrentTicketId(){var e,t;return(e=(t=this._conversationsManager)==null?void 0:t.getCurrentTicketId())!==null&&e!==void 0?e:null}getWidgetSessionId(){var e,t;return(e=(t=this._conversationsManager)==null?void 0:t.getWidgetSessionId())!==null&&e!==void 0?e:null}}class Rd{constructor(e){var t;this.ke=!1,this.Pe=!1,this._instance=e,this._instance&&(t=this._instance.config.logs)!=null&&t.captureConsoleLogs&&(this.ke=!0)}onRemoteConfig(e){var t,s=(t=e.logs)==null?void 0:t.captureConsoleLogs;!O(s)&&s&&(this.ke=!0,this.loadIfEnabled())}reset(){}loadIfEnabled(){if(this.ke&&!this.Pe){var e=z("[logs]"),t=k==null?void 0:k.__PosthogExtensions__;if(t){var s=t.loadExternalDependency;s?s(this._instance,"logs",r=>{var i;r||(i=t.logs)==null||!i.initializeLogs?e.error("Could not load logs script",r):(t.logs.initializeLogs(this._instance),this.Pe=!0)}):e.error("PostHog loadExternalDependency extension not found.")}else e.error("PostHog Extensions not found.")}}}var No=z("[RateLimiter]");class Ad{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=t=>{var s=t.text;if(s&&s.length)try{(JSON.parse(s).quota_limited||[]).forEach(r=>{No.info((r||"events")+" is quota limited."),this.serverLimits[r]=new Date().getTime()+6e4})}catch(r){return void No.warn('could not rate limit - continuing. Error: "'+(r==null?void 0:r.message)+'"',{text:s})}},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 t,s,r;e===void 0&&(e=!1);var{captureEventsBurstLimit:i,captureEventsPerSecond:o}=this,a=new Date().getTime(),l=(t=(s=this.instance.persistence)==null?void 0:s.get_property(Ir))!==null&&t!==void 0?t:{tokens:i,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>i&&(l.tokens=i);var c=l.tokens<1;return c||e||(l.tokens=Math.max(0,l.tokens-1)),!c||this.lastEventRateLimited||e||this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited. Config is set to "+o+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0}),this.lastEventRateLimited=c,(r=this.instance.persistence)==null||r.set_property(Ir,l),{isRateLimited:c,remainingTokens:l.tokens}}isServerRateLimited(e){var t=this.serverLimits[e||"events"]||!1;return t!==!1&&new Date().getTime()e(this.remoteConfig)):e()}Ie(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:t=>{e(t.json)}})}load(){try{if(this.remoteConfig)return nn.info("Using preloaded remote config",this.remoteConfig),this.Ce(this.remoteConfig),void this.Re();if(this._instance.M())return void nn.warn("Remote config is disabled. Falling back to local config.");this.Te(e=>{if(!e)return nn.info("No config found after loading remote JS config. Falling back to JSON."),void this.Ie(t=>{this.Ce(t),this.Re()});this.Ce(e),this.Re()})}catch(e){nn.error("Error loading remote config",e)}}stop(){this.Fe&&(clearInterval(this.Fe),this.Fe=void 0)}refresh(){this._instance.M()||(w==null?void 0:w.visibilityState)==="hidden"||this._instance.featureFlags.reloadFeatureFlags()}Re(){this.Fe||(this.Fe=setInterval(()=>{this.refresh()},3e5))}Ce(e){e||nn.error("Failed to fetch remote config from PostHog."),this._instance.Ce(e??{}),(e==null?void 0:e.hasFeatureFlags)!==!1&&(this._instance.config.advanced_disable_feature_flags_on_first_load||this._instance.featureFlags.ensureFlagsLoaded())}}var Fr=3e3;class Pd{constructor(e,t){this.Oe=!0,this.Me=[],this.Ae=Ne((t==null?void 0:t.flush_interval_ms)||Fr,250,5e3,E.createLogger("flush interval"),Fr),this.je=e}enqueue(e){this.Me.push(e),this.De||this.Le()}unload(){this.Ne();var e=this.Me.length>0?this.Ue():{},t=Object.values(e);[...t.filter(s=>s.url.indexOf("/e")===0),...t.filter(s=>s.url.indexOf("/e")!==0)].map(s=>{this.je(S({},s,{transport:"sendBeacon"}))})}enable(){this.Oe=!1,this.Le()}Le(){var e=this;this.Oe||(this.De=setTimeout(()=>{if(this.Ne(),this.Me.length>0){var t=this.Ue(),s=function(){var i=t[r],o=new Date().getTime();i.data&&N(i.data)&&U(i.data,a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp}),e.je(i)};for(var r in t)s()}},this.Ae))}Ne(){clearTimeout(this.De),this.De=void 0}Ue(){var e={};return U(this.Me,t=>{var s,r=t,i=(r?r.batchKey:null)||r.url;b(e[i])&&(e[i]=S({},r,{data:[]})),(s=e[i].data)==null||s.push(r.data)}),this.Me=[],e}}var Fd=["retriesPerformedSoFar"];class $d{constructor(e){this.ze=!1,this.He=3e3,this.Me=[],this._instance=e,this.Me=[],this.Be=!0,!b(h)&&"onLine"in h.navigator&&(this.Be=h.navigator.onLine,this.qe=()=>{this.Be=!0,this.Lt()},this.We=()=>{this.Be=!1},Y(h,"online",this.qe),Y(h,"offline",this.We))}get length(){return this.Me.length}retriableRequest(e){var{retriesPerformedSoFar:t}=e,s=ma(e,Fd);Rt(t)&&(s.url=os(s.url,{retry_count:t})),this._instance._send_request(S({},s,{callback:r=>{r.statusCode!==200&&(r.statusCode<400||r.statusCode>=500)&&(t??0)<10?this.Ge(S({retriesPerformedSoFar:t},s)):s.callback==null||s.callback(r)}}))}Ge(e){var t=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=t+1;var s=function(o){var a=3e3*Math.pow(2,o),l=a/2,c=Math.min(18e5,a),u=(Math.random()-.5)*(c-l);return Math.ceil(c+u)}(t),r=Date.now()+s;this.Me.push({retryAt:r,requestOptions:e});var i="Enqueued failed request for retry in "+s;navigator.onLine||(i+=" (Browser is offline)"),E.warn(i),this.ze||(this.ze=!0,this.Ve())}Ve(){if(this.Je&&clearTimeout(this.Je),this.Me.length===0)return this.ze=!1,void(this.Je=void 0);this.Je=setTimeout(()=>{this.Be&&this.Me.length>0&&this.Lt(),this.Ve()},this.He)}Lt(){var e=Date.now(),t=[],s=this.Me.filter(i=>i.retryAt0)for(var{requestOptions:r}of s)this.retriableRequest(r)}unload(){for(var{requestOptions:e}of(this.Je&&(clearTimeout(this.Je),this.Je=void 0),this.ze=!1,b(h)||(this.qe&&(h.removeEventListener("online",this.qe),this.qe=void 0),this.We&&(h.removeEventListener("offline",this.We),this.We=void 0)),this.Me))try{this._instance._send_request(S({},e,{transport:"sendBeacon"}))}catch(t){E.error(t)}this.Me=[]}}class Md{constructor(e){this.Ke=()=>{var t,s,r,i;this.Ye||(this.Ye={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,c=a+((o==null?void 0:o.clientHeight)||0),u=(o==null?void 0:o.scrollHeight)||0;this.Ye.lastScrollY=Math.ceil(a),this.Ye.maxScrollY=Math.max(a,(t=this.Ye.maxScrollY)!==null&&t!==void 0?t:0),this.Ye.maxScrollHeight=Math.max(l,(s=this.Ye.maxScrollHeight)!==null&&s!==void 0?s:0),this.Ye.lastContentY=c,this.Ye.maxContentY=Math.max(c,(r=this.Ye.maxContentY)!==null&&r!==void 0?r:0),this.Ye.maxContentHeight=Math.max(u,(i=this.Ye.maxContentHeight)!==null&&i!==void 0?i:0)},this._instance=e}getContext(){return this.Ye}resetContext(){var e=this.Ye;return setTimeout(this.Ke,0),e}startMeasuringScrollPosition(){Y(h,"scroll",this.Ke,{capture:!0}),Y(h,"scrollend",this.Ke,{capture:!0}),Y(h,"resize",this.Ke)}scrollElement(){if(!this._instance.config.scroll_root_selector)return h==null?void 0:h.document.documentElement;var e=N(this._instance.config.scroll_root_selector)?this._instance.config.scroll_root_selector:[this._instance.config.scroll_root_selector];for(var t of e){var s=h==null?void 0:h.document.querySelector(t);if(s)return s}}scrollY(){if(this._instance.config.scroll_root_selector){var e=this.scrollElement();return e&&e.scrollTop||0}return h&&(h.scrollY||h.pageYOffset||h.document.documentElement.scrollTop)||0}scrollX(){if(this._instance.config.scroll_root_selector){var e=this.scrollElement();return e&&e.scrollLeft||0}return h&&(h.scrollX||h.pageXOffset||h.document.documentElement.scrollLeft)||0}}var Od=n=>pl(n==null?void 0:n.config.mask_personal_data_properties,n==null?void 0:n.config.custom_personal_data_properties);class Lo{constructor(e,t,s,r){this.Xe=i=>{var o=this.Qe();if(!o||o.sessionId!==i){var a={sessionId:i,props:this.Ze(this._instance)};this.tr.register({[Sr]:a})}},this._instance=e,this.ir=t,this.tr=s,this.Ze=r||Od,this.ir.onSessionId(this.Xe)}Qe(){return this.tr.props[Sr]}getSetOnceProps(){var e,t=(e=this.Qe())==null?void 0:e.props;return t?"r"in t?fl(t):{$referring_domain:t.referringDomain,$pathname:t.initialPathName,utm_source:t.utm_source,utm_campaign:t.utm_campaign,utm_medium:t.utm_medium,utm_content:t.utm_content,utm_term:t.utm_term}:{}}getSessionProps(){var e={};return U(si(this.getSetOnceProps()),(t,s)=>{s==="$current_url"&&(s="url"),e["$session_entry_"+dr(s)]=t}),e}}var ir=z("[SessionId]");class Do{on(e,t){return this.er.on(e,t)}constructor(e,t,s){var r;if(this.rr=[],this.sr=void 0,this.er=new ci,this.nr=(u,d)=>!(!Rt(u)||!Rt(d))&&Math.abs(u-d)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode==="always")throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.R=e.config,this.tr=e.persistence,this.ar=void 0,this.lr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.ur=t||at,this.hr=s||at;var i=this.R.persistence_name||this.R.token,o=this.R.session_idle_timeout_seconds||1800;if(this._sessionTimeoutMs=1e3*Ne(o,60,36e3,ir.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.dr(),this.vr="ph_"+i+"_window_id",this.cr="ph_"+i+"_primary_window_exists",this.pr()){var a=Q.W(this.vr),l=Q.W(this.cr);a&&!l?this.ar=a:Q.V(this.vr),Q.G(this.cr,!0)}if((r=this.R.bootstrap)!=null&&r.sessionID)try{var c=(u=>{var d=u.replace(/-/g,"");if(d.length!==32)throw new Error("Not a valid UUID");if(d[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(d.substring(0,12),16)})(this.R.bootstrap.sessionID);this._r(this.R.bootstrap.sessionID,new Date().getTime(),c)}catch(u){ir.error("Invalid sessionID in bootstrap",u)}this.gr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return b(this.rr)&&(this.rr=[]),this.rr.push(e),this.lr&&e(this.lr,this.ar),()=>{this.rr=this.rr.filter(t=>t!==e)}}pr(){return this.R.persistence!=="memory"&&!this.tr.ki&&Q.H()}mr(e){e!==this.ar&&(this.ar=e,this.pr()&&Q.G(this.vr,e))}br(){return this.ar?this.ar:this.pr()?Q.W(this.vr):null}_r(e,t,s){e===this.lr&&t===this._sessionActivityTimestamp&&s===this._sessionStartTimestamp||(this._sessionStartTimestamp=s,this._sessionActivityTimestamp=t,this.lr=e,this.tr.register({[Jn]:[t,e,s]}))}yr(){var e=this.tr.props[Jn];return N(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this._r(null,null,null)}destroy(){clearTimeout(this.wr),this.wr=void 0,this.sr&&h&&(h.removeEventListener("beforeunload",this.sr,{capture:!1}),this.sr=void 0),this.rr=[]}gr(){this.sr=()=>{this.pr()&&Q.V(this.cr)},Y(h,"beforeunload",this.sr,{capture:!1})}checkAndGetSessionAndWindowId(e,t){if(e===void 0&&(e=!1),t===void 0&&(t=null),this.R.cookieless_mode==="always")throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var s=t||new Date().getTime(),[r,i,o]=this.yr(),a=this.br(),l=Rt(o)&&Math.abs(s-o)>864e5,c=!1,u=!i,d=!u&&!e&&this.nr(s,r);u||d||l?(i=this.ur(),a=this.hr(),ir.info("new session ID generated",{sessionId:i,windowId:a,changeReason:{noSessionId:u,activityTimeout:d,sessionPastMaximumLength:l}}),o=s,c=!0):a||(a=this.hr(),c=!0);var p=Rt(r)&&e&&!l?r:s,f=Rt(o)?o:new Date().getTime();return this.mr(a),this._r(i,p,f),e||this.dr(),c&&this.rr.forEach(m=>m(i,a,c?{noSessionId:u,activityTimeout:d,sessionPastMaximumLength:l}:void 0)),{sessionId:i,windowId:a,sessionStartTimestamp:f,changeReason:c?{noSessionId:u,activityTimeout:d,sessionPastMaximumLength:l}:void 0,lastActivityTimestamp:r}}dr(){clearTimeout(this.wr),this.wr=setTimeout(()=>{var[e]=this.yr();if(this.nr(new Date().getTime(),e)){var t=this.lr;this.resetSessionId(),this.er.emit("forcedIdleReset",{idleSessionId:t})}},1.1*this.sessionTimeoutMs)}}var Nd=["$set_once","$set"],rt=z("[SiteApps]");class Ld{constructor(e){this._instance=e,this.$r=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}Er(e,t){if(t){var s=this.globalsForEvent(t);this.$r.push(s),this.$r.length>1e3&&(this.$r=this.$r.slice(10))}}get siteAppLoaders(){var e;return(e=k._POSTHOG_REMOTE_CONFIG)==null||(e=e[this._instance.config.token])==null?void 0:e.siteApps}init(){if(this.isEnabled){var e=this._instance._addCaptureHook(this.Er.bind(this));this.Sr=()=>{e(),this.$r=[],this.Sr=void 0}}}globalsForEvent(e){var t,s,r,i,o,a,l;if(!e)throw new Error("Event payload is required");var c={},u=this._instance.get_property("$groups")||[],d=this._instance.get_property("$stored_group_properties")||{};for(var[p,f]of Object.entries(d))c[p]={id:u[p],type:p,properties:f};var{$set_once:m,$set:v}=e;return{event:S({},ma(e,Nd),{properties:S({},e.properties,v?{$set:S({},(t=(s=e.properties)==null?void 0:s.$set)!==null&&t!==void 0?t:{},v)}:{},m?{$set_once:S({},(r=(i=e.properties)==null?void 0:i.$set_once)!==null&&r!==void 0?r:{},m)}:{}),elements_chain:(o=(a=e.properties)==null?void 0:a.$elements_chain)!==null&&o!==void 0?o:"",distinct_id:(l=e.properties)==null?void 0:l.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:c}}setupSiteApp(e){var t=this.apps[e.id],s=()=>{var a;!t.errored&&this.$r.length&&(rt.info("Processing "+this.$r.length+" events for site app with id "+e.id),this.$r.forEach(l=>t.processEvent==null?void 0:t.processEvent(l)),t.processedBuffer=!0),Object.values(this.apps).every(l=>l.processedBuffer||l.errored)&&((a=this.Sr)==null||a.call(this))},r=!1,i=a=>{t.errored=!a,t.loaded=!0,rt.info("Site app with id "+e.id+" "+(a?"loaded":"errored")),r&&s()};try{var{processEvent:o}=e.init({posthog:this._instance,callback:a=>{i(a)}});o&&(t.processEvent=o),r=!0}catch(a){rt.error("Error while initializing PostHog app with config id "+e.id,a),i(!1)}if(r&&t.loaded)try{s()}catch(a){rt.error("Error while processing buffered events PostHog app with config id "+e.id,a),t.errored=!0}}kr(){var e=this.siteAppLoaders||[];for(var t of e)this.apps[t.id]={id:t.id,loaded:!1,errored:!1,processedBuffer:!1};for(var s of e)this.setupSiteApp(s)}Pr(e){if(Object.keys(this.apps).length!==0){var t=this.globalsForEvent(e);for(var s of Object.values(this.apps))try{s.processEvent==null||s.processEvent(t)}catch(r){rt.error("Error while processing event "+e.event+" for site app "+s.id,r)}}}onRemoteConfig(e){var t,s,r,i=this;if((t=this.siteAppLoaders)!=null&&t.length)return this.isEnabled?(this.kr(),void this._instance.on("eventCaptured",c=>this.Pr(c))):void rt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((s=this.Sr)==null||s.call(this),(r=e.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(c){var u;k["__$$ph_site_app_"+c]=i._instance,(u=k.__PosthogExtensions__)==null||u.loadSiteApp==null||u.loadSiteApp(i._instance,l,d=>{if(d)return rt.error("Error while initializing PostHog app with config id "+c,d)})};for(var{id:a,url:l}of e.siteApps)o(a)}else rt.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}var Il=function(n,e){if(!n)return!1;var t=n.userAgent;if(t&&qi(t,e))return!0;try{var s=n==null?void 0:n.userAgentData;if(s!=null&&s.brands&&s.brands.some(r=>qi(r==null?void 0:r.brand,e)))return!0}catch{}return!!n.webdriver},dn=function(n){return n.US="us",n.EU="eu",n.CUSTOM="custom",n}({}),Bo="i.posthog.com";class Dd{constructor(e){this.Tr={},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,t=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return t||(t=this.apiHost.replace("."+Bo,".posthog.com")),t==="https://app.posthog.com"?"https://us.posthog.com":t}get region(){return this.Tr[this.apiHost]||(/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?this.Tr[this.apiHost]=dn.US:/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?this.Tr[this.apiHost]=dn.EU:this.Tr[this.apiHost]=dn.CUSTOM),this.Tr[this.apiHost]}endpointFor(e,t){if(t===void 0&&(t=""),t&&(t=t[0]==="/"?t:"/"+t),e==="ui")return this.uiHost+t;if(e==="flags")return this.flagsApiHost+t;if(this.region===dn.CUSTOM)return this.apiHost+t;var s=Bo+t;switch(e){case"assets":return"https://"+this.region+"-assets."+s;case"api":return"https://"+this.region+"."+s}}}var Bd={icontains:(n,e)=>!!h&&e.href.toLowerCase().indexOf(n.toLowerCase())>-1,not_icontains:(n,e)=>!!h&&e.href.toLowerCase().indexOf(n.toLowerCase())===-1,regex:(n,e)=>!!h&&as(e.href,n),not_regex:(n,e)=>!!h&&!as(e.href,n),exact:(n,e)=>e.href===n,is_not:(n,e)=>e.href!==n};class se{constructor(e){var t=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(s){s===void 0&&(s=!1),t.getWebExperiments(r=>{se.Ir("retrieved web experiments from the server"),t.Cr=new Map,r.forEach(i=>{if(i.feature_flag_key){var o;t.Cr&&(se.Ir("setting flag key ",i.feature_flag_key," to web experiment ",i),(o=t.Cr)==null||o.set(i.feature_flag_key,i));var a=t._instance.getFeatureFlag(i.feature_flag_key);K(a)&&i.variants[a]&&t.Rr(i.name,a,i.variants[a].transforms)}else if(i.variants)for(var l in i.variants){var c=i.variants[l];se.Fr(c)&&t.Rr(i.name,l,c.transforms)}})},s)},this._instance=e,this._instance.onFeatureFlags(s=>{this.onFeatureFlags(s)})}onFeatureFlags(e){if(this._is_bot())se.Ir("Refusing to render web experiment since the viewer is a likely bot");else if(!this._instance.config.disable_web_experiments){if(O(this.Cr))return this.Cr=new Map,this.loadIfEnabled(),void this.previewWebExperiment();se.Ir("applying feature flags",e),e.forEach(t=>{var s;if(this.Cr&&(s=this.Cr)!=null&&s.has(t)){var r,i=this._instance.getFeatureFlag(t),o=(r=this.Cr)==null?void 0:r.get(t);i&&o!=null&&o.variants[i]&&this.Rr(o.name,i,o.variants[i].transforms)}})}}previewWebExperiment(){var e=se.getWindowLocation();if(e!=null&&e.search){var t=ns(e==null?void 0:e.search,"__experiment_id"),s=ns(e==null?void 0:e.search,"__experiment_variant");t&&s&&(se.Ir("previewing web experiments "+t+" && "+s),this.getWebExperiments(r=>{this.Or(parseInt(t),s,r)},!1,!0))}}loadIfEnabled(){this._instance.config.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,t,s){if(this._instance.config.disable_web_experiments&&!s)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!t)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this._instance.config.token),method:"GET",callback:i=>{if(i.statusCode!==200||!i.json)return e([]);var o=i.json.experiments||[];return e(o)}})}Or(e,t,s){var r=s.filter(i=>i.id===e);r&&r.length>0&&(se.Ir("Previewing web experiment ["+r[0].name+"] with variant ["+t+"]"),this.Rr(r[0].name,t,r[0].variants[t].transforms))}static Fr(e){return!O(e.conditions)&&se.Mr(e)&&se.Ar(e)}static Mr(e){var t;if(O(e.conditions)||O((t=e.conditions)==null?void 0:t.url))return!0;var s,r,i,o=se.getWindowLocation();return!!o&&((s=e.conditions)==null||!s.url||Bd[(r=(i=e.conditions)==null?void 0:i.urlMatchType)!==null&&r!==void 0?r:"icontains"](e.conditions.url,o))}static getWindowLocation(){return h==null?void 0:h.location}static Ar(e){var t;if(O(e.conditions)||O((t=e.conditions)==null?void 0:t.utm))return!0;var s=ll();if(s.utm_source){var r,i,o,a,l,c,u,d,p=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((i=e.conditions)==null||(i=i.utm)==null?void 0:i.utm_campaign)==s.utm_campaign,f=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==s.utm_source,m=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((c=e.conditions)==null||(c=c.utm)==null?void 0:c.utm_medium)==s.utm_medium,v=(u=e.conditions)==null||(u=u.utm)==null||!u.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==s.utm_term;return p&&m&&v&&f}return!1}static Ir(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),r=1;r{if(r.selector){var i;se.Ir("applying transform of variant "+t+" for experiment "+e+" ",r);var o=(i=document)==null?void 0:i.querySelectorAll(r.selector);o==null||o.forEach(a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)})}}):se.Ir("Control variants leave the page unmodified.")}_is_bot(){return he&&this._instance?Il(he,this._instance.config.custom_blocked_useragents):void 0}}var jd=z("[PostHog ExternalIntegrations]"),Ud={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class Hd{constructor(e){this._instance=e}it(e,t){var s;(s=k.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,e,r=>{if(r)return jd.error("failed to load script",r);t()})}startIfEnabledOrStop(){var e=this,t=function(o){var a,l,c;!r||(a=k.__PosthogExtensions__)!=null&&(a=a.integrations)!=null&&a[o]||e.it(Ud[o],()=>{var u;(u=k.__PosthogExtensions__)==null||(u=u.integrations)==null||(u=u[o])==null||u.start(e._instance)}),!r&&(l=k.__PosthogExtensions__)!=null&&(l=l.integrations)!=null&&l[o]&&((c=k.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[o])==null||c.stop())};for(var[s,r]of Object.entries((i=this._instance.config.integrations)!==null&&i!==void 0?i:{})){var i;t(s)}}}z("[SessionRecording]");var $r="[SessionRecording]",Tt=z($r);class jo{get started(){var e;return!((e=this.jr)==null||!e.isStarted)}get status(){return this.jr?this.jr.status:this.Dr&&!this.Lr?"disabled":"lazy_loading"}constructor(e){if(this._forceAllowLocalhostNetworkCapture=!1,this.Dr=!1,this.Nr=!1,this.Ur=void 0,this._instance=e,!this._instance.sessionManager)throw Tt.error("started without valid sessionManager"),new Error($r+" started without valid sessionManager. This is a bug.");if(this._instance.config.cookieless_mode==="always")throw new Error($r+' cannot be used with cookieless_mode="always"')}get Lr(){var e,t=!((e=this._instance.get_property($n))==null||!e.enabled),s=!this._instance.config.disable_session_recording,r=this._instance.config.disable_session_recording||this._instance.consent.isOptedOut();return h&&t&&s&&!r}startIfEnabledOrStop(e){var t;if(!this.Lr||(t=this.jr)==null||!t.isStarted){var s=!b(Object.assign)&&!b(Array.from);this.Lr&&s?(this.zr(e),Tt.info("starting")):this.stopRecording()}}zr(e){var t,s,r;this.Lr&&(k!=null&&(t=k.__PosthogExtensions__)!=null&&(t=t.rrweb)!=null&&t.record&&(s=k.__PosthogExtensions__)!=null&&s.initSessionRecording?this.Hr(e):(r=k.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,this.Br,i=>{if(i)return Tt.error("could not load recorder",i);this.Hr(e)}))}stopRecording(){var e,t;(e=this.Ur)==null||e.call(this),this.Ur=void 0,(t=this.jr)==null||t.stop()}qr(){var e;(e=this._instance.persistence)==null||e.unregister(Wa)}Wr(e){if(this._instance.persistence){var t,s,r=this._instance.persistence,i=()=>{var o=e.sessionRecording===!1?void 0:e.sessionRecording,a=o==null?void 0:o.sampleRate,l=O(a)?null:parseFloat(a);O(l)&&this.qr();var c=o==null?void 0:o.minimumDurationMilliseconds;r.register({[$n]:S({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:S({capturePerformance:e.capturePerformance},o==null?void 0:o.networkPayloadCapture),canvasRecording:{enabled:o==null?void 0:o.recordCanvas,fps:o==null?void 0:o.canvasFps,quality:o==null?void 0:o.canvasQuality},sampleRate:l,minimumDurationMilliseconds:b(c)?null:c,endpoint:o==null?void 0:o.endpoint,triggerMatchType:o==null?void 0:o.triggerMatchType,masking:o==null?void 0:o.masking,urlTriggers:o==null?void 0:o.urlTriggers})})};i(),(t=this.Ur)==null||t.call(this),this.Ur=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(i)}}onRemoteConfig(e){"sessionRecording"in e?e.sessionRecording!==!1?(this.Nr=!1,this.Wr(e),this.Dr=!0,this.startIfEnabledOrStop()):this.Dr=!0:Tt.info("skipping remote config with no sessionRecording",e)}log(e,t){var s;t===void 0&&(t="log"),(s=this.jr)!=null&&s.log?this.jr.log(e,t):Tt.warn("log called before recorder was ready")}get Br(){var e,t,s=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.get_property($n);return(s==null||(t=s.scriptConfig)==null?void 0:t.script)||"lazy-recorder"}Gr(){var e,t=this._instance.get_property($n);if(!t)return!1;var s=(e=(typeof t=="object"?t:JSON.parse(t)).cache_timestamp)!==null&&e!==void 0?e:Date.now();return Date.now()-s<=3e5}Hr(e){var t,s;if((t=k.__PosthogExtensions__)==null||!t.initSessionRecording)throw Error("Called on script loaded before session recording is available");this.jr||(this.jr=(s=k.__PosthogExtensions__)==null?void 0:s.initSessionRecording(this._instance),this.jr._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),this.Gr()?this.jr.start(e):this.Nr||(this.Nr=!0,Tt.info("persisted remote config is stale, requesting fresh config before starting"),new Sl(this._instance).load())}onRRwebEmit(e){var t;(t=this.jr)==null||t.onRRwebEmit==null||t.onRRwebEmit(e)}overrideLinkedFlag(){var e,t;this.jr||(t=this._instance.persistence)==null||t.register({$replay_override_linked_flag:!0}),(e=this.jr)==null||e.overrideLinkedFlag()}overrideSampling(){var e,t;this.jr||(t=this._instance.persistence)==null||t.register({$replay_override_sampling:!0}),(e=this.jr)==null||e.overrideSampling()}overrideTrigger(e){var t,s;this.jr||(s=this._instance.persistence)==null||s.register({[e==="url"?"$replay_override_url_trigger":"$replay_override_event_trigger"]:!0}),(t=this.jr)==null||t.overrideTrigger(e)}get sdkDebugProperties(){var e;return((e=this.jr)==null?void 0:e.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(e,t){var s;return!((s=this.jr)==null||!s.tryAddCustomEvent(e,t))}}var fn={},or=0,Mr=()=>{},At="posthog",Cl=!ad&&(ue==null?void 0:ue.indexOf("MSIE"))===-1&&(ue==null?void 0:ue.indexOf("Mozilla"))===-1,Uo=n=>{var e;return S({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,token:"",autocapture:!0,cross_subdomain_cookie:pu(w==null?void 0:w.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:Mr,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:n??"unset",__preview_deferred_init_extensions:!1,debug:ee&&K(ee==null?void 0:ee.search)&&ee.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,disable_external_dependency_loading:!1,enable_recording_console_log:void 0,secure_cookie:(h==null||(e=h.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_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error:t=>{var s="Bad HTTP status: "+t.statusCode+" "+t.text;E.error(s)},get_device_id:t=>t,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:"identified_only",before_send:void 0,request_queue_config:{flush_interval_ms:Fr},error_tracking:{},_onCapture:Mr,__preview_eager_load_replay:!1},(t=>({rageclick:!(t&&t>="2025-11-30")||{content_ignorelist:!0},capture_pageview:!(t&&t>="2025-05-24")||"history_change",session_recording:t&&t>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:t&&t>="2026-01-30"?"head":"body",internal_or_test_user_hostname:t&&t>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0}))(n))},Ho=n=>{var e={};b(n.process_person)||(e.person_profiles=n.process_person),b(n.xhr_headers)||(e.request_headers=n.xhr_headers),b(n.cookie_name)||(e.persistence_name=n.cookie_name),b(n.disable_cookie)||(e.disable_persistence=n.disable_cookie),b(n.store_google)||(e.save_campaign_params=n.store_google),b(n.verbose)||(e.debug=n.verbose);var t=G({},e,n);return N(n.property_blacklist)&&(b(n.property_denylist)?t.property_denylist=n.property_blacklist:N(n.property_denylist)?t.property_denylist=[...n.property_blacklist,...n.property_denylist]:E.error("Invalid value for property_denylist config: "+n.property_denylist)),t};class Wd{constructor(){this.__forceAllowLocalhost=!1}get Vr(){return this.__forceAllowLocalhost}set Vr(e){E.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class wn{get decideEndpointWasHit(){var e,t;return(e=(t=this.featureFlags)==null?void 0:t.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,t;return(e=(t=this.featureFlags)==null?void 0:t.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){this.webPerformance=new Wd,this.Jr=!1,this.version=je.LIB_VERSION,this.mi=new ci,this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Uo(),this.SentryIntegration=Uu,this.sentryIntegration=e=>function(t,s){var r=al(t,s);return{name:ol,processEvent:i=>r(i)}}(this,e),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.Kr=!1,this.Yr=null,this.Xr=null,this.Qr=null,this.featureFlags=new _d(this),this.toolbar=new Wu(this),this.scrollManager=new Md(this),this.pageViewManager=new So(this),this.surveys=new kd(this),this.conversations=new Td(this),this.logs=new Rd(this),this.experiments=new se(this),this.exceptions=new ld(this),this.rateLimiter=new Ad(this),this.requestRouter=new Dd(this),this.consent=new Ou(this),this.externalIntegrations=new Hd(this),this.people={set:(e,t,s)=>{var r=K(e)?{[e]:t}:e;this.setPersonProperties(r),s==null||s({})},set_once:(e,t,s)=>{var r=K(e)?{[e]:t}:e;this.setPersonProperties(void 0,r),s==null||s({})}},this.on("eventCaptured",e=>E.info('send "'+(e==null?void 0:e.event)+'"',e))}init(e,t,s){if(s&&s!==At){var r,i=(r=fn[s])!==null&&r!==void 0?r:new wn;return i._init(e,t,s),fn[s]=i,fn[At][s]=i,i}return this._init(e,t,s)}_init(e,t,s){var r;if(t===void 0&&(t={}),b(e)||pr(e))return E.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 console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config={},t.debug=this.Zr(t.debug),this.ts=t,this.es=[],t.person_profiles?this.Xr=t.person_profiles:t.process_person&&(this.Xr=t.process_person),this.set_config(G({},Uo(t.defaults),Ho(t),{name:s,token:e})),this.config.on_xhr_error&&E.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=t.disable_compression?void 0:We.GZipJS;var i=this.rs();this.persistence=new tr(this.config,i),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new tr(S({},this.config,{persistence:"sessionStorage"}),i);var o=S({},this.persistence.props),a=S({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.ss=new Pd(I=>this.ns(I),this.config.request_queue_config),this.os=new $d(this),this.__request_queue=[];var l=this.config.cookieless_mode==="always"||this.config.cookieless_mode==="on_reject"&&this.consent.isExplicitlyOptedOut();if(l||(this.sessionManager=new Do(this),this.sessionPropsManager=new Lo(this,this.sessionManager,this.persistence)),this.config.__preview_deferred_init_extensions?(E.info("Deferring extension initialization to improve startup performance"),setTimeout(()=>{this.ls(l)},0)):(E.info("Initializing extensions synchronously"),this.ls(l)),je.DEBUG=je.DEBUG||this.config.debug,je.DEBUG&&E.info("Starting in debug mode",{this:this,config:t,thisC:S({},this.config),p:o,s:a}),((r=t.bootstrap)==null?void 0:r.distinctID)!==void 0){var c,u,d=this.config.get_device_id(at()),p=(c=t.bootstrap)!=null&&c.isIdentifiedID?d:t.bootstrap.distinctID;this.persistence.set_property(Pe,(u=t.bootstrap)!=null&&u.isIdentifiedID?"identified":"anonymous"),this.register({distinct_id:t.bootstrap.distinctID,$device_id:p})}if(this.us()){var f,m,v=Object.keys(((f=t.bootstrap)==null?void 0:f.featureFlags)||{}).filter(I=>{var T;return!((T=t.bootstrap)==null||(T=T.featureFlags)==null||!T[I])}).reduce((I,T)=>{var C;return I[T]=((C=t.bootstrap)==null||(C=C.featureFlags)==null?void 0:C[T])||!1,I},{}),_=Object.keys(((m=t.bootstrap)==null?void 0:m.featureFlagPayloads)||{}).filter(I=>v[I]).reduce((I,T)=>{var C,y;return(C=t.bootstrap)!=null&&(C=C.featureFlagPayloads)!=null&&C[T]&&(I[T]=(y=t.bootstrap)==null||(y=y.featureFlagPayloads)==null?void 0:y[T]),I},{});this.featureFlags.receivedFeatureFlags({featureFlags:v,featureFlagPayloads:_})}if(l)this.register_once({distinct_id:Kt,$device_id:null},"");else if(!this.get_distinct_id()){var x=this.config.get_device_id(at());this.register_once({distinct_id:x,$device_id:x},""),this.persistence.set_property(Pe,"anonymous")}return Y(h,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),this.toolbar.maybeLoadToolbar(),t.segment?ju(this,()=>this.hs()):this.hs(),Ge(this.config._onCapture)&&this.config._onCapture!==Mr&&(E.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",I=>this.config._onCapture(I.event,I))),this.config.ip&&E.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}ls(e){var t=performance.now();this.historyAutocapture=new Bu(this),this.historyAutocapture.startIfEnabled();var s=[];s.push(()=>{new Gu(this).startIfEnabledOrStop()}),s.push(()=>{var r;this.siteApps=new Ld(this),(r=this.siteApps)==null||r.init()}),e||s.push(()=>{this.sessionRecording=new jo(this),this.sessionRecording.startIfEnabledOrStop()}),this.config.disable_scroll_properties||s.push(()=>{this.scrollManager.startMeasuringScrollPosition()}),s.push(()=>{this.autocapture=new ku(this),this.autocapture.startIfEnabled()}),s.push(()=>{this.surveys.loadIfEnabled()}),s.push(()=>{this.logs.loadIfEnabled()}),s.push(()=>{this.conversations.loadIfEnabled()}),s.push(()=>{this.productTours=new wd(this),this.productTours.loadIfEnabled()}),s.push(()=>{this.heatmaps=new Xu(this),this.heatmaps.startIfEnabled()}),s.push(()=>{this.webVitalsAutocapture=new Ju(this)}),s.push(()=>{this.exceptionObserver=new Du(this),this.exceptionObserver.startIfEnabledOrStop()}),s.push(()=>{this.deadClicksAutocapture=new il(this,Lu),this.deadClicksAutocapture.startIfEnabledOrStop()}),s.push(()=>{if(this.ds){var r=this.ds;this.ds=void 0,this.Ce(r)}}),this.vs(s,t)}vs(e,t){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-t>=30&&e.length>0)return void setTimeout(()=>{this.vs(e,t)},0);var s=e.shift();if(s)try{s()}catch(i){E.error("Error initializing extension:",i)}}var r=Math.round(performance.now()-t);this.register_for_session({$sdk_debug_extensions_init_method:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",$sdk_debug_extensions_init_time_ms:r}),this.config.__preview_deferred_init_extensions&&E.info("PostHog extensions initialized ("+r+"ms)")}Ce(e){var t,s,r,i,o,a,l,c,u;if(!w||!w.body)return E.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout(()=>{this.Ce(e)},500);this.config.__preview_deferred_init_extensions&&(this.ds=e),this.compression=void 0,e.supportedCompression&&!this.config.disable_compression&&(this.compression=$(e.supportedCompression,We.GZipJS)?We.GZipJS:$(e.supportedCompression,We.Base64)?We.Base64:void 0),(t=e.analytics)!=null&&t.endpoint&&(this.analyticsDefaultEndpoint=e.analytics.endpoint),this.set_config({person_profiles:this.Xr?this.Xr:"identified_only"}),(s=this.siteApps)==null||s.onRemoteConfig(e),(r=this.sessionRecording)==null||r.onRemoteConfig(e),(i=this.autocapture)==null||i.onRemoteConfig(e),(o=this.heatmaps)==null||o.onRemoteConfig(e),this.surveys.onRemoteConfig(e),this.logs.onRemoteConfig(e),this.conversations.onRemoteConfig(e),(a=this.productTours)==null||a.onRemoteConfig(e),(l=this.webVitalsAutocapture)==null||l.onRemoteConfig(e),(c=this.exceptionObserver)==null||c.onRemoteConfig(e),this.exceptions.onRemoteConfig(e),(u=this.deadClicksAutocapture)==null||u.onRemoteConfig(e)}hs(){try{this.config.loaded(this)}catch(s){E.critical("`loaded` function failed",s)}if(this.cs(),this.config.internal_or_test_user_hostname&&ee!=null&&ee.hostname){var e=ee.hostname,t=this.config.internal_or_test_user_hostname;(typeof t=="string"?e===t:t.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout(()=>{(this.consent.isOptedIn()||this.config.cookieless_mode==="always")&&this.fs()},1),this.ps=new Sl(this),this.ps.load()}cs(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.ss)==null||e.enable())}_dom_loaded(){this.is_capturing()&<(this.__request_queue,e=>this.ns(e)),this.__request_queue=[],this.cs()}_handle_unload(){var e,t;this.surveys.handlePageUnload(),this.config.request_batching?(this._s()&&this.capture("$pageleave"),(e=this.ss)==null||e.unload(),(t=this.os)==null||t.unload()):this._s()&&this.capture("$pageleave",null,{transport:"sendBeacon"})}_send_request(e){this.__loaded&&(Cl?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)||(e.transport=e.transport||this.config.api_transport,e.url=os(e.url,{ip:this.config.ip?1:0}),e.headers=S({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,e.disableXHRCredentials=this.config.__preview_disable_xhr_credentials,this.config.__preview_disable_beacon&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(t=>{var s,r,i,o=S({},t);o.timeout=o.timeout||6e4,o.url=os(o.url,{_:new Date().getTime().toString(),ver:je.LIB_VERSION,compression:o.compression});var a=(s=o.transport)!==null&&s!==void 0?s:"fetch",l=jn.filter(u=>!o.disableTransport||!u.transport||!o.disableTransport.includes(u.transport)),c=(r=(i=Ba(l,u=>u.transport===a))==null?void 0:i.method)!==null&&r!==void 0?r:l[0].method;if(!c)throw new Error("No available transport method");c(o)})(S({},e,{callback:t=>{var s,r;this.rateLimiter.checkForLimiting(t),t.statusCode>=400&&((s=(r=this.config).on_request_error)==null||s.call(r,t)),e.callback==null||e.callback(t)}}))))}ns(e){this.os?this.os.retriableRequest(e):this._send_request(e)}_execute_array(e){or++;try{var t,s=[],r=[],i=[];lt(e,a=>{a&&(t=a[0],N(t)?i.push(a):Ge(a)?a.call(this):N(a)&&t==="alias"?s.push(a):N(a)&&t.indexOf("capture")!==-1&&Ge(this[t])?i.push(a):r.push(a))});var o=function(a,l){lt(a,function(c){if(N(c[0])){var u=l;U(c,function(d){u=u[d[0]].apply(u,d.slice(1))})}else this[c[0]].apply(this,c.slice(1))},l)};o(s,this),o(r,this),o(i,this)}finally{or--}}us(){var e,t;return((e=this.config.bootstrap)==null?void 0:e.featureFlags)&&Object.keys((t=this.config.bootstrap)==null?void 0:t.featureFlags).length>0||!1}push(e){if(or>0&&N(e)&&K(e[0])){var t=wn.prototype[e[0]];Ge(t)&&t.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,t,s){var r;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.ss){if(this.is_capturing())if(!b(e)&&K(e)){var i=!this.config.opt_out_useragent_filter&&this._is_bot();if(!(i&&!this.config.__preview_capture_bot_pageviews)){var o=s!=null&&s.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(o==null||!o.isRateLimited){t!=null&&t.$current_url&&!K(t==null?void 0:t.$current_url)&&(E.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),t==null||delete t.$current_url),e!=="$exception"||s!=null&&s.oi||E.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 a=new Date,l=(s==null?void 0:s.timestamp)||a,c=at(),u={uuid:c,event:e,properties:this.calculateEventProperties(e,t||{},l,c)};e==="$pageview"&&this.config.__preview_capture_bot_pageviews&&i&&(u.event="$bot_pageview",u.properties.$browser_type="bot"),o&&(u.properties.$lib_rate_limit_remaining_tokens=o.remainingTokens),s!=null&&s.$set&&(u.$set=s==null?void 0:s.$set);var d,p=e!=="$groupidentify",f=this.gs(s==null?void 0:s.$set_once,p);if(f&&(u.$set_once=f),(u=uu(u,s!=null&&s._noTruncate?null:this.config.properties_string_max_length)).timestamp=l,b(s==null?void 0:s.timestamp)||(u.properties.$event_time_override_provided=!0,u.properties.$event_time_override_system_time=a),e===un.DISMISSED||e===un.SENT){var m=t==null?void 0:t[rr.SURVEY_ID],v=t==null?void 0:t[rr.SURVEY_ITERATION];d={id:m,current_iteration:v},localStorage.getItem(Oo(d))||localStorage.setItem(Oo(d),"true"),u.$set=S({},u.$set,{[bd({id:m,current_iteration:v},e===un.SENT?"responded":"dismissed")]:!0})}else e===un.SHOWN&&(u.$set=S({},u.$set,{[rr.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));var _=S({},u.properties.$set,u.$set);if(Ft(_)||this.setPersonPropertiesForFlags(_),!O(this.config.before_send)){var x=this.bs(u);if(!x)return;u=x}this.mi.emit("eventCaptured",u);var I={method:"POST",url:(r=s==null?void 0:s._url)!==null&&r!==void 0?r:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),data:u,compression:"best-available",batchKey:s==null?void 0:s._batchKey};return!this.config.request_batching||s&&(s==null||!s._batchKey)||s!=null&&s.send_instantly?this.ns(I):this.ss.enqueue(I),u}E.critical("This capture call is ignored due to client rate limiting.")}}else E.error("No event name provided to posthog.capture")}else E.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",t=>e(t.event,t))}calculateEventProperties(e,t,s,r,i){if(s=s||new Date,!this.persistence||!this.sessionPersistence)return t;var o=i?void 0:this.persistence.remove_event_timer(e),a=S({},t);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,(this.config.cookieless_mode=="always"||this.config.cookieless_mode=="on_reject"&&this.consent.isExplicitlyOptedOut())&&(a.$cookieless_mode=!0),e==="$snapshot"){var l=S({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!K(a.distinct_id)&&!Xe(a.distinct_id)||pr(a.distinct_id))&&E.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var c,u=Yu(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties);if(this.sessionManager){var{sessionId:d,windowId:p}=this.sessionManager.checkAndGetSessionAndWindowId(i,s.getTime());a.$session_id=d,a.$window_id=p}this.sessionPropsManager&&G(a,this.sessionPropsManager.getSessionProps());try{var f;this.sessionRecording&&G(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(f=this.os)==null?void 0:f.length}catch(x){a.$sdk_debug_error_capturing_properties=String(x)}if(this.requestRouter.region===dn.CUSTOM&&(a.$lib_custom_api_host=this.config.api_host),c=e!=="$pageview"||i?e!=="$pageleave"||i?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(s):this.pageViewManager.doPageView(s,r),a=G(a,c),e==="$pageview"&&w&&(a.title=w.title),!b(o)){var m=s.getTime()-o;a.$duration=parseFloat((m/1e3).toFixed(3))}ue&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser"),(a=G({},u,this.persistence.properties(),this.sessionPersistence.properties(),a)).$is_identified=this._isIdentified(),N(this.config.property_denylist)?U(this.config.property_denylist,function(x){delete a[x]}):E.error("Invalid value for property_denylist config: "+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var v=this.config.sanitize_properties;v&&(E.error("sanitize_properties is deprecated. Use before_send instead"),a=v(a,e));var _=this.ys();return a.$process_person_profile=_,_&&!i&&this.ws("_calculate_event_properties"),a}gs(e,t){var s;if(t===void 0&&(t=!0),!this.persistence||!this.ys()||this.Jr)return e;var r=this.persistence.get_initial_props(),i=(s=this.sessionPropsManager)==null?void 0:s.getSetOnceProps(),o=G({},r,i||{},e||{}),a=this.config.sanitize_properties;return a&&(E.error("sanitize_properties is deprecated. Use before_send instead"),o=a(o,"$set_once")),t&&(this.Jr=!0),Ft(o)?void 0:o}register(e,t){var s;(s=this.persistence)==null||s.register(e,t)}register_once(e,t,s){var r;(r=this.persistence)==null||r.register_once(e,t,s)}register_for_session(e){var t;(t=this.sessionPersistence)==null||t.register(e)}unregister(e){var t;(t=this.persistence)==null||t.unregister(e)}unregister_for_session(e){var t;(t=this.sessionPersistence)==null||t.unregister(e)}xs(e,t){this.register({[e]:t})}getFeatureFlag(e,t){return this.featureFlags.getFeatureFlag(e,t)}getFeatureFlagPayload(e){return this.featureFlags.getFeatureFlagPayload(e)}getFeatureFlagResult(e,t){return this.featureFlags.getFeatureFlagResult(e,t)}isFeatureEnabled(e,t){return this.featureFlags.isFeatureEnabled(e,t)}reloadFeatureFlags(){this.featureFlags.reloadFeatureFlags()}updateFlags(e,t,s){var r=s!=null&&s.merge?this.featureFlags.getFlagVariants():{},i=s!=null&&s.merge?this.featureFlags.getFlagPayloads():{},o=S({},r,e),a=S({},i,t),l={};for(var[c,u]of Object.entries(o)){var d=typeof u=="string";l[c]={key:c,enabled:!!d||!!u,variant:d?u:void 0,reason:void 0,metadata:b(a==null?void 0:a[c])?void 0:{id:0,version:void 0,description:void 0,payload:a[c]}}}this.featureFlags.receivedFeatureFlags({flags:l})}updateEarlyAccessFeatureEnrollment(e,t,s){this.featureFlags.updateEarlyAccessFeatureEnrollment(e,t,s)}getEarlyAccessFeatures(e,t,s){return t===void 0&&(t=!1),this.featureFlags.getEarlyAccessFeatures(e,t,s)}on(e,t){return this.mi.on(e,t)}onFeatureFlags(e){return this.featureFlags.onFeatureFlags(e)}onSurveysLoaded(e){return this.surveys.onSurveysLoaded(e)}onSessionId(e){var t,s;return(t=(s=this.sessionManager)==null?void 0:s.onSessionId(e))!==null&&t!==void 0?t:()=>{}}getSurveys(e,t){t===void 0&&(t=!1),this.surveys.getSurveys(e,t)}getActiveMatchingSurveys(e,t){t===void 0&&(t=!1),this.surveys.getActiveMatchingSurveys(e,t)}renderSurvey(e,t){this.surveys.renderSurvey(e,t)}displaySurvey(e,t){t===void 0&&(t=Sd),this.surveys.displaySurvey(e,t)}cancelPendingSurvey(e){this.surveys.cancelPendingSurvey(e)}canRenderSurvey(e){return this.surveys.canRenderSurvey(e)}canRenderSurveyAsync(e,t){return t===void 0&&(t=!1),this.surveys.canRenderSurveyAsync(e,t)}identify(e,t,s){if(!this.__loaded||!this.persistence)return E.uninitializedWarning("posthog.identify");if(Xe(e)&&(e=e.toString(),E.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),e)if(["distinct_id","distinctid"].includes(e.toLowerCase()))E.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.');else if(e!==Kt){if(this.ws("posthog.identify")){var r=this.get_distinct_id();if(this.register({$user_id:e}),!this.get_property("$device_id")){var i=r;this.register_once({$had_persisted_distinct_id:!0,$device_id:i},"")}e!==r&&e!==this.get_property(rn)&&(this.unregister(rn),this.register({distinct_id:e}));var o=(this.persistence.get_property(Pe)||"anonymous")==="anonymous";e!==r&&o?(this.persistence.set_property(Pe,"identified"),this.setPersonPropertiesForFlags(S({},s||{},t||{}),!1),this.capture("$identify",{distinct_id:e,$anon_distinct_id:r},{$set:t||{},$set_once:s||{}}),this.Qr=Ro(e,t,s),this.featureFlags.setAnonymousDistinctId(r)):(t||s)&&this.setPersonProperties(t,s),e!==r&&(this.reloadFeatureFlags(),this.unregister(Zn))}}else E.critical('The string "'+Kt+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.');else E.error("Unique user id has not been set in posthog.identify")}setPersonProperties(e,t){if((e||t)&&this.ws("posthog.setPersonProperties")){var s=Ro(this.get_distinct_id(),e,t);this.Qr!==s?(this.setPersonPropertiesForFlags(S({},t||{},e||{})),this.capture("$set",{$set:e||{},$set_once:t||{}}),this.Qr=s):E.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}group(e,t,s){if(e&&t){var r=this.getGroups();r[e]!==t&&this.resetGroupPropertiesForFlags(e),this.register({$groups:S({},r,{[e]:t})}),s&&(this.capture("$groupidentify",{$group_type:e,$group_key:t,$group_set:s}),this.setGroupPropertiesForFlags({[e]:s})),r[e]===t||s||this.reloadFeatureFlags()}else E.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,t){t===void 0&&(t=!0),this.featureFlags.setPersonPropertiesForFlags(e,t)}resetPersonPropertiesForFlags(){this.featureFlags.resetPersonPropertiesForFlags()}setGroupPropertiesForFlags(e,t){t===void 0&&(t=!0),this.ws("posthog.setGroupPropertiesForFlags")&&this.featureFlags.setGroupPropertiesForFlags(e,t)}resetGroupPropertiesForFlags(e){this.featureFlags.resetGroupPropertiesForFlags(e)}reset(e){var t,s,r,i,o;if(E.info("reset"),!this.__loaded)return E.uninitializedWarning("posthog.reset");var a=this.get_property("$device_id");if(this.consent.reset(),(t=this.persistence)==null||t.clear(),(s=this.sessionPersistence)==null||s.clear(),this.surveys.reset(),(r=this.ps)==null||r.stop(),this.featureFlags.reset(),(i=this.persistence)==null||i.set_property(Pe,"anonymous"),(o=this.sessionManager)==null||o.resetSessionId(),this.Qr=null,this.config.cookieless_mode==="always")this.register_once({distinct_id:Kt,$device_id:null},"");else{var l=this.config.get_device_id(at());this.register_once({distinct_id:l,$device_id:e?l:a},"")}this.register({$last_posthog_reset:new Date().toISOString()},1)}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,t;return(e=(t=this.sessionManager)==null?void 0:t.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var{sessionId:t,sessionStartTimestamp:s}=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+t);if(e!=null&&e.withTimestamp&&s){var i,o=(i=e.timestampLookBack)!==null&&i!==void 0?i:10;if(!s)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-s)/1e3)-o,0)}return r}alias(e,t){return e===this.get_property(Ua)?(E.critical("Attempting to create alias for existing People user - aborting."),-2):this.ws("posthog.alias")?(b(t)&&(t=this.get_distinct_id()),e!==t?(this.xs(rn,e),this.capture("$create_alias",{alias:e,distinct_id:t})):(E.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var t=S({},this.config);if(Z(e)){var s,r,i,o,a,l,c,u;G(this.config,Ho(e));var d=this.rs();(s=this.persistence)==null||s.update_config(this.config,t,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new tr(S({},this.config,{persistence:"sessionStorage"}),d);var p=this.Zr(this.config.debug);Ke(p)&&(this.config.debug=p),Ke(this.config.debug)&&(this.config.debug?(je.DEBUG=!0,W.H()&&W.G("ph_debug","true"),E.info("set_config",{config:e,oldConfig:t,newConfig:S({},this.config)})):(je.DEBUG=!1,W.H()&&W.V("ph_debug"))),(r=this.exceptionObserver)==null||r.onConfigChange(),(i=this.sessionRecording)==null||i.startIfEnabledOrStop(),(o=this.autocapture)==null||o.startIfEnabled(),(a=this.heatmaps)==null||a.startIfEnabled(),(l=this.exceptionObserver)==null||l.startIfEnabledOrStop(),(c=this.deadClicksAutocapture)==null||c.startIfEnabledOrStop(),this.surveys.loadIfEnabled(),this.$s(),(u=this.externalIntegrations)==null||u.startIfEnabledOrStop()}}startSessionRecording(e){var t=e===!0,s={sampling:t||!(e==null||!e.sampling),linked_flag:t||!(e==null||!e.linked_flag),url_trigger:t||!(e==null||!e.url_trigger),event_trigger:t||!(e==null||!e.event_trigger)};if(Object.values(s).some(Boolean)){var r,i,o,a,l;(r=this.sessionManager)==null||r.checkAndGetSessionAndWindowId(),s.sampling&&((i=this.sessionRecording)==null||i.overrideSampling()),s.linked_flag&&((o=this.sessionRecording)==null||o.overrideLinkedFlag()),s.url_trigger&&((a=this.sessionRecording)==null||a.overrideTrigger("url")),s.event_trigger&&((l=this.sessionRecording)==null||l.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,t){var s=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:s});return this.exceptions.sendExceptionEvent(S({},r,t))}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){return this.toolbar.loadToolbar(e)}get_property(e){var t;return(t=this.persistence)==null?void 0:t.props[e]}getSessionProperty(e){var t;return(t=this.sessionPersistence)==null?void 0:t.props[e]}toString(){var e,t=(e=this.config.name)!==null&&e!==void 0?e:At;return t!==At&&(t=At+"."+t),t}_isIdentified(){var e,t;return((e=this.persistence)==null?void 0:e.get_property(Pe))==="identified"||((t=this.sessionPersistence)==null?void 0:t.get_property(Pe))==="identified"}ys(){var e,t;return!(this.config.person_profiles==="never"||this.config.person_profiles==="identified_only"&&!this._isIdentified()&&Ft(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[rn])&&((t=this.persistence)==null||(t=t.props)==null||!t[Qn]))}_s(){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.ys()||this.ws("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.ws("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}ws(e){return this.config.person_profiles==="never"?(E.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.xs(Qn,!0),!0)}rs(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut(),t=this.config.opt_out_persistence_by_default||this.config.cookieless_mode==="on_reject";return this.config.disable_persistence||e&&!!t}$s(){var e,t,s,r,i=this.rs();return((e=this.persistence)==null?void 0:e.ki)!==i&&((s=this.persistence)==null||s.set_disabled(i)),((t=this.sessionPersistence)==null?void 0:t.ki)!==i&&((r=this.sessionPersistence)==null||r.set_disabled(i)),i}opt_in_capturing(e){var t;if(this.config.cookieless_mode!=="always"){var s,r,i;this.config.cookieless_mode==="on_reject"&&this.consent.isExplicitlyOptedOut()&&(this.reset(!0),(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=new Do(this),this.pageViewManager=new So(this),this.persistence&&(this.sessionPropsManager=new Lo(this,this.sessionManager,this.persistence)),this.sessionRecording=new jo(this),this.sessionRecording.startIfEnabledOrStop()),this.consent.optInOut(!0),this.$s(),this.cs(),(t=this.sessionRecording)==null||t.startIfEnabledOrStop(),this.config.cookieless_mode=="on_reject"&&this.surveys.loadIfEnabled(),(b(e==null?void 0:e.captureEventName)||e!=null&&e.captureEventName)&&this.capture((i=e==null?void 0:e.captureEventName)!==null&&i!==void 0?i:"$opt_in",e==null?void 0:e.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.fs()}else E.warn('Consent opt in/out is not valid with cookieless_mode="always" and will be ignored')}opt_out_capturing(){var e,t,s;this.config.cookieless_mode!=="always"?(this.config.cookieless_mode==="on_reject"&&this.consent.isOptedIn()&&this.reset(!0),this.consent.optInOut(!1),this.$s(),this.config.cookieless_mode==="on_reject"&&(this.register({distinct_id:Kt,$device_id:null}),(e=this.sessionManager)==null||e.destroy(),(t=this.pageViewManager)==null||t.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,(s=this.sessionRecording)==null||s.stopRecording(),this.sessionRecording=void 0,this.fs())):E.warn('Consent opt in/out is not valid with cookieless_mode="always" and will be ignored')}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===He.GRANTED?"granted":e===He.DENIED?"denied":"pending"}is_capturing(){return this.config.cookieless_mode==="always"||(this.config.cookieless_mode==="on_reject"?this.consent.isExplicitlyOptedOut()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.$s()}_is_bot(){return he?Il(he,this.config.custom_blocked_useragents):void 0}fs(){w&&(w.visibilityState==="visible"?this.Kr||(this.Kr=!0,this.capture("$pageview",{title:w.title},{send_instantly:!0}),this.Yr&&(w.removeEventListener("visibilitychange",this.Yr),this.Yr=null)):this.Yr||(this.Yr=this.fs.bind(this),Y(w,"visibilitychange",this.Yr)))}debug(e){e===!1?(h==null||h.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(h==null||h.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}))}M(){var e,t,s,r,i,o,a,l=this.ts||{};return"advanced_disable_flags"in l?!!l.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(E.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):(s="advanced_disable_decide",r=!1,i=E,o=(t="advanced_disable_flags")in(e=l)&&!O(e[t]),a=s in e&&!O(e[s]),o?e[t]:a?(i&&i.warn("Config field '"+s+"' is deprecated. Please use '"+t+"' instead. The old field will be removed in a future major version."),e[s]):r)}bs(e){if(O(this.config.before_send))return e;var t=N(this.config.before_send)?this.config.before_send:[this.config.before_send],s=e;for(var r of t){if(s=r(s),O(s)){var i="Event '"+e.event+"' was rejected in beforeSend function";return kc(e.event)?E.warn(i+". This can cause unexpected behavior."):E.info(i),null}s.properties&&!Ft(s.properties)||E.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}return s}getPageViewId(){var e;return(e=this.pageViewManager.Kt)==null?void 0:e.pageViewId}captureTraceFeedback(e,t){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:t})}captureTraceMetric(e,t,s){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:t,$ai_metric_value:String(s)})}Zr(e){var t=Ke(e)&&!e,s=W.H()&&W.q("ph_debug")==="true";return!t&&(!!s||e)}}(function(n,e){for(var t=0;t{if(typeof e=="string")return{name:e,version:null,inferred:!1};const t=ut(e),s=t.name||t.package;return s?{name:s,version:t.version||null,inferred:!!t.inferred,...t.reason?{reason:t.reason}:{}}:null}).filter(Boolean):Object.entries(ut(n)).map(([e,t])=>({name:e,version:t||null,inferred:!1})):[]}function Pl(n){return n?(Array.isArray(n)?n:[n]).map(e=>{const t=ut(e);return!t.from&&!t.to?null:{from:t.from||null,to:t.to||null,type:t.type||"uses",description:t.description||""}}).filter(Boolean):[]}function Nr(n){if(typeof n!="string")return null;const e=n.trim();if(!e)return null;try{return JSON.parse(e)}catch{const t=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!t)return null;try{return JSON.parse(t[1].trim())}catch{return null}}}function bn(n,e={}){const t=[],s=typeof n=="string"?Nr(n):n,i=ut(s||{});!s&&typeof n=="string"&&t.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(i.artifacts)?i.artifacts:[{artifactType:i.artifactType||e.artifactType,artifactName:i.artifactName||e.artifactName,fileName:i.fileName||e.fileName,description:i.description,code:i.code||e.code||(typeof n=="string"?n:""),dependencies:i.dependencies||e.dependencies,relationships:i.relationships||e.relationships}],a=o.map((d,p)=>Rl(d,p)),l=new Map(o.map((d,p)=>{var f;return[ut(d).id,(f=a[p])==null?void 0:f.id]}).filter(([d,p])=>d&&p)),c=d=>l.get(d)||d,u=Pl(i.relationships||e.relationships).map(d=>({...d,from:d.from?c(d.from):d.from,to:d.to?c(d.to):d.to}));return{schemaVersion:i.schemaVersion||e.schemaVersion||null,id:i.id||e.id||"bundle-current",title:i.title||i.name||e.title||"Generated artifact bundle",description:i.description||e.description||"",artifacts:a,dependencies:Al(i.dependencies||e.dependencies),relationships:u,deployOrder:Array.isArray(i.deployOrder)?i.deployOrder.map(c):a.map(d=>d.id),warnings:[...t,...Array.isArray(i.warnings)?i.warnings:[]],metadata:ut(i.metadata)}}function ls(n){return bn(n).artifacts[0]||Rl()}function Ye(n){if(typeof n!="string")return n??"";const e=n.trim();if(!e)return"";try{return JSON.parse(e)}catch{return n}}function Ut(n){return JSON.stringify(n,null,2)}function Vd(n){return Ut({task:"architect",userRequest:String(n??"")})}function qd(n){const e=Ye(n);return e&&typeof e=="object"&&typeof e.task=="string"?Ut(e):Ut({task:"generate_bundle",bundleSpec:e})}function Kd(n){return Ut({task:"review_bundle",generatedBundle:Ye(n),outputRequirements:{overall:["status","score","summary","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"]}})}function ui(n,e=null){const t={stage:n};return e!=null&&(t.bundle=Ye(e)),t}function Yd({bundleSpec:n,artifactBundle:e,bundleReview:t,artifactId:s,userFeedback:r}){return Ut({task:"regenerate_artifact",artifactId:s,bundleSpec:Ye(n),artifactBundle:Ye(e),bundleReview:Ye(t),userFeedback:String(r)})}function Fl({bundleSpec:n,artifactBundle:e,bundleReview:t,userFeedback:s}){return Ut({task:"regenerate_bundle",bundleSpec:Ye(n),artifactBundle:Ye(e),bundleReview:Ye(t),userFeedback:String(s??"")})}const zo={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"},Jd=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function ge(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function Zd(n){return ge(n)?typeof n.filterMatchState=="string"||typeof n.invocationResult=="string"||Array.isArray(n.matchedFilters)||ge(n.filterSummary)||ge(n.filterResults):!1}function $l(n,e=0){if(!ge(n)||e>3)return null;if(Zd(n))return n;for(const t of Jd){const s=n[t];if(ge(s)){const r=$l(s,e+1);if(r)return r}}return null}function cs(n){return Array.isArray(n)?n.some(cs):ge(n)?n.matched===!0||n.matchState==="MATCH_FOUND"?!0:Object.values(n).some(cs):!1}function Lr(n){return Array.isArray(n)?n.some(Lr):ge(n)?typeof n.executionState=="string"&&n.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(n).some(Lr):!1}function Ml(n){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[n]||n}function Xd(n,e){if(ge(n))for(const[t,s]of Object.entries(n)){if(!ge(s))continue;const r=ge(s.categories)?s.categories:{},i=Object.entries(r).filter(([,o])=>ge(o)&&o.matched===!0).map(([o])=>o);i.length>0?i.forEach(o=>e.add(o)):s.matched===!0&&e.add(Ml(t))}}function Qd(n,e){var s;if(!n)return;const t=Array.isArray(n)?n.flatMap(r=>ge(r)?Object.entries(r):[]):Object.entries(n);for(const[r,i]of t){if(!cs(i))continue;const o=Ml(r),a=((s=i==null?void 0:i.raiFilterResult)==null?void 0:s.raiFilterTypeResults)||(o==="rai"?i==null?void 0:i.raiFilterTypeResults:null),l=ge(a)?Object.entries(a).filter(([,c])=>cs(c)).map(([c])=>c):[];l.length>0?l.forEach(c=>e.add(c)):e.add(o)}}function ep(n){return zo[n]?zo[n]:String(n).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Go(n){return n.length<=1?n[0]||"content that did not pass":n.length===2?`${n[0]} and ${n[1]}`:`${n.slice(0,-1).join(", ")}, and ${n.at(-1)}`}function tp(n){const e=$l(n);if(!e)return null;const t=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);Xd(e.filterSummary,t),Qd(e.filterResults,t);const s=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||t.size>0,r=e.invocationResult||null,i=Lr(e.filterSummary||e.filterResults);return!s&&!i&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:s?"blocked":"unavailable",invocationResult:r,matchedFilters:[...t]}}function np(n,e){const t=tp(n);if(!t)return null;const s=[...new Set(t.matchedFilters.map(ep))],r=t.kind==="blocked",i=new Error(r?`Safety screening blocked this pipeline step for ${Go(s)}.`:"Safety screening could not be completed. Please try again.");return i.name="ModelArmorError",i.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",i.isModelArmor=!0,i.pipelineStep=e,i.userTitle=r?"Request blocked for safety":"Safety check unavailable",i.userMessage=r?`The safety check detected ${Go(s)}. 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.",i.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",i.matchedFilters=t.matchedFilters,i}const sp=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Vo={CustomWidget:"custom_widgets/",CustomAction:"actions/",CustomFunction:"custom_functions/",CustomClass:"custom_code/",CodeFile:"custom_code/"},rp=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),ip=["Struct","Record"];function it(n,e,t){return{artifactId:n.id,artifactName:n.artifactName,artifactType:n.artifactType,severity:e,message:t}}function Ol(n){let e="",t=0;for(;t"&&(t--,t===0))return{inner:n.slice(e+1,s),end:s+1};return null}function ap(n){const e=[],t=n.matchAll(/\bFuture\b/g);for(const s of t){let r=s.index+6,i=null;const o=r;for(;ro;if(n[r]==="<"){const c=op(n,r);if(!c||(i=c.inner.replace(/\s+/g," ").trim(),r=c.end,!/\s/.test(n[r]||"")))continue;for(;rqo(o.functionName)===s);if(r)return r;const i=o=>!o.functionName.startsWith("_");return t.find(i)||t[0]}function Cs(n=""){return Array.from(Ol(n).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function lp(n="",e=""){var t;return((t=Nl(n,e))==null?void 0:t.returnType)||null}function Ko(n){return String(n||"").replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").toLowerCase()}function Ll(n,e){const t=Cs(e);if(t.length===0)return null;const r=String(n||"").split("/").pop().replace(/\.dart$/,"");if(t.some(l=>Ko(l)===r))return null;const[o]=t,a=`${Ko(o)}.dart`;return`File name "${n}" does not match declared class "${o}". FlutterFlow expects the file to be named "${a}" - rename the file (or the class) so they agree exactly.`}function cp(n="",e=""){return Nl(n,e)!==null}function up(n,e=new Set){return((n==null?void 0:n.match(/[A-Za-z_]\w*/g))||[]).filter(s=>rp.has(s)?!1:!ip.some(i=>s.endsWith(i))||e.has(s))}function Dl(n,{functionName:e="",declaredTypes:t=new Set}={}){const s=lp(n,e),r=up(s,t);if(r.length===0)return null;const[i]=r;let o;return t.has(i)?o=`uses Code File type "${i}", which FlutterFlow cannot process as an Action Return Value`:s===i?o="is not a FlutterFlow Action Return Value":o=`uses type "${i}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${s}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function dp(n,e={}){const t=[],s=n.fileName||"",r=n.code||"";if(sp.has(n.artifactType)||t.push(it(n,"error",`Unsupported artifact type "${n.artifactType}".`)),s.endsWith(".dart")||t.push(it(n,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return t.push(it(n,"warning","Generated artifact has no Dart code yet.")),t;if(n.artifactType==="CustomWidget"&&!/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&t.push(it(n,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget.")),n.artifactType==="CustomAction"&&!cp(r,n.artifactName)&&t.push(it(n,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),n.artifactType==="CustomAction"){const i=e.declaredTypes||new Set(Cs(r)),o=Dl(r,{functionName:n.artifactName,declaredTypes:i});o&&t.push(it(n,"error",o))}if(n.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&t.push(it(n,"warning","CustomFunction should be a callable function, not a widget class.")),n.artifactType==="CustomClass"||n.artifactType==="CodeFile"){const i=Ll(s,r);i&&t.push(it(n,"error",i))}return t}function pp(n){const e=Array.isArray(n==null?void 0:n.artifacts)?n.artifacts:[],t=new Set(e.flatMap(i=>Cs(i.code||""))),s=e.flatMap(i=>dp(i,{declaredTypes:t})),r=e.map(i=>({artifactId:i.id,fileName:i.fileName,pathHint:Vo[i.artifactType]||Vo.CodeFile}));return{valid:s.every(i=>i.severity!=="error"),findings:s,deployHints:r}}const fp=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function hp(n){let e="",t=0;for(;t{const s=t.name||t.package;return!s||s==="flutter"||(e[s]=t.version||""),e},{})}function _p(n){const e=new Map,t=new Map,s=[];for(const r of n)e.has(r.fileName)?s.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),t.has(r.path)?s.push(`Duplicate deploy path "${r.path}" for artifacts "${t.get(r.path)}" and "${r.artifactId}".`):t.set(r.path,r.artifactId);return s}function yp(n,e={}){const t=Array.isArray(n==null?void 0:n.artifacts)?n.artifacts:[],r=(e.selectedArtifactIds||(n==null?void 0:n.deployOrder)||t.map(d=>d.id)).map(d=>t.find(p=>p.id===d)).filter(Boolean),i=[...(n==null?void 0:n.warnings)||[]],o=[];r.forEach(d=>{const p=vp(d),f=d.code||"",m=d.codeType||gp[d.artifactType]||be.OTHER;f.trim()||i.push(`${d.artifactName||d.id} has no generated code.`),o.push({artifactId:d.id,artifactName:d.artifactName,artifactType:d.artifactType,fileName:p,content:f,type:m,path:mp(p,m),deployMode:"customCodeSync"})});const a={...Yo(n==null?void 0:n.dependencies),...r.reduce((d,p)=>({...d,...Yo(p.dependencies)}),{})},l={};r.forEach(d=>{Bl(d.code||"").forEach(p=>{p in a||(l[p]="^1.0.0")})});const c={...l,...a};r.forEach(d=>{(d.dependencies||[]).forEach(p=>{const f=p.name||p.package;f&&!p.version&&i.push(`${d.artifactName||d.id} dependency "${f}" has no explicit version.`)})});const u=_p(o);return{bundleId:(n==null?void 0:n.id)||"bundle-current",title:(n==null?void 0:n.title)||"Generated artifact bundle",fileEntries:o,dependencies:c,relationships:(n==null?void 0:n.relationships)||[],warnings:i,errors:u}}function wp(n){var e;return(e=String(n||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/))==null?void 0:e[1]}function bp(n){return String(n||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function Ep(n,e){const s=[bp(n),wp(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!s)throw new Error(`Cannot derive a FlutterFlow custom class name for ${n}.`);return s}function Sp(n,e=new Map){const t=[];for(const[s,r]of n.entries())r.type!=="C"||e.has(r.path)||t.push({artifactId:r.artifactId||s,className:Ep(s,r),content:r.content,fileName:s,path:r.path});return t}function Ip(n,e){const t=new Set(e.map(s=>s.path));return new Map(Array.from(n.entries()).filter(([,s])=>!t.has(s.path)))}const Jo={pass:0,warning:1,fail:2},Cp=["manualSteps","manualActions","requiredActions","flutterFlowSteps","flutterFlowActions","requiredUserActions","requiredFlutterFlowActions","flutterFlowSetup","userActions","nextSteps"];function me(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}function ze(...n){for(const e of n){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const t=e.filter(s=>typeof s=="string").join(` -`);if(t)return t}}return""}function $e(n){return n==null?[]:Array.isArray(n)?n:[n]}function xp(n){const e=me(n).value??n;if(e==null||typeof e=="string"&&e.trim()==="")return null;const t=Number(e);if(Number.isFinite(t))return t;const s=String(n||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return s?Number(s[1]):null}function Ee(n){return String(n||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function di(n){const e=String(n||"").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 Dr(...n){return n.filter(Boolean).reduce((e,t)=>Jo[t]>Jo[e]?t:e,"pass")}function jl(n,e="warning",t="review"){if(typeof n=="string")return{severity:e,message:n,suggestion:"",source:t};const s=me(n),r=ze(s.message,s.title,s.issue,s.description,s.summary);return r?{severity:di(s.severity||s.status||s.level)||e,message:r,suggestion:ze(s.suggestion,s.fix,s.recommendation,s.action),source:s.source||t}:null}function Br(n,e="review"){const t=me(n);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,i])=>$e(t[r]).map(o=>jl(o,i,e)).filter(Boolean))}function kp(n,e,t=null){if(typeof n=="string")return{id:`${t||"bundle"}-manual-${e+1}`,title:n,detail:"",location:"",timing:"unspecified",artifactId:t,source:"Code Review"};const s=me(n),r=ze(s.title,s.action,s.step,s.message,s.name,s.description);return r?{id:s.id||`${t||"bundle"}-manual-${e+1}`,title:r,detail:ze(s.detail,s.instructions,s.description),location:ze(s.location,s.flutterFlowPath,s.path),timing:ze(s.timing,s.phase)||"unspecified",artifactId:t,source:ze(s.source)||"Code Review"}:null}function jr(n,e=null){const t=me(n);return Cp.flatMap(s=>$e(t[s])).map((s,r)=>kp(s,r,e)).filter(Boolean)}function Tp(n){let e=typeof n=="string"?Nr(n):n;if(!e&&typeof n=="string")return{rawText:n,root:{}};const t=me(e);typeof t.content=="string"&&(e=Nr(t.content)||e);const s=me(e),r=me(s.reviewResult||s.codeReview||s.result);return{rawText:"",root:Object.keys(r).length?r:s}}function Rp(n,e){const t=[e.id,e.fileName,e.artifactName].map(Ee);return n.find(s=>{const r=me(s);return[r.id,r.fileName,r.artifactName,r.name].map(Ee).some(i=>i&&t.includes(i))})||null}function Ap(n,e){var r,i;const s=$e((i=(r=n==null?void 0:n.metadata)==null?void 0:r.compatibility)==null?void 0:i.deployHints).find(o=>Ee(o==null?void 0:o.artifactId)===Ee(e.id)||Ee(o==null?void 0:o.fileName)===Ee(e.fileName));return(s==null?void 0:s.pathHint)||""}function Pp(n,e){return $e(n==null?void 0:n.relationships).filter(t=>Ee(t==null?void 0:t.from)===Ee(e.id)||Ee(t==null?void 0:t.to)===Ee(e.id))}function Fp(n,e){var t,s;return $e((s=(t=n==null?void 0:n.metadata)==null?void 0:t.compatibility)==null?void 0:s.findings).filter(r=>!(r!=null&&r.artifactId)||Ee(r.artifactId)===Ee(e.id)).map(r=>jl(r,"warning","Compatibility check")).filter(Boolean)}function $p(n,e,t,s){const r=Rp(e,t),i=me((r==null?void 0:r.review)||r||t.review),o=Object.keys(i).length>0,a=[...Br(i),...Fp(n,t)],l=jr(i,t.id),c=di(i.status||i.verdict||i.outcome||i.result),u=a.length?Dr(...a.map(p=>p.severity)):null,d=Dr(c,u,o?null:"warning");return{...t,index:s,status:d,statusReason:o?ze(i.summary,i.overview,i.assessment,i.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,pathHint:Ap(n,t),relationships:Pp(n,t)}}function Mp({bundle:n,reviewResult:e}){var T;const t=me(n),s=$e(t.artifacts),{root:r,rawText:i}=Tp(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(me).find(C=>Object.keys(C).length)||{},a=$e(r.artifacts||r.files||r.reviews),l=s.map((C,y)=>$p(t,a,C,y)),c=Br(r),d=[...Br(o),...c],p=[...jr(o),...jr(r),...l.flatMap(C=>C.manualSteps)].filter((C,y,P)=>P.findIndex(A=>A.title===C.title&&A.artifactId===C.artifactId)===y),f=di(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),m=Dr(f,...d.map(C=>C.severity),...l.map(C=>C.status)),v=o.score??r.score??r.overallScore??i,_=xp(v),x=ze(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,i,t.description)||"Code Review completed without an overarching written summary.",I=l.reduce((C,y)=>(C[y.status]+=1,C),{pass:0,warning:0,fail:0});return{title:t.title||"Generated artifact bundle",description:t.description||"",status:m,score:_,summary:x,findings:d,manualSteps:p,artifacts:l,counts:I,reviewCoverage:{reviewed:l.filter(C=>C.reviewComplete).length,total:l.length},deployOrder:$e(t.deployOrder),relationships:$e(t.relationships),warnings:$e(t.warnings),compatibility:me((T=t.metadata)==null?void 0:T.compatibility)}}function Ul(n){if(typeof n=="string")return n;if(Array.isArray(n)){const e=n.map(t=>typeof t=="string"?t:t==null?void 0:t.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(n)}return n&&typeof n=="object"?n.errorMessage||JSON.stringify(n):String(n??"")}function Zo(n,e){const t=`${n}${e}`.split(` -`),s=t.pop()??"",r=[];for(const i of t){const o=Hl(i);o&&r.push(o)}return{events:r,buffer:s}}function Op(n){const e=Hl(n);return e?[e]:[]}function Hl(n){const e=n.trim();if(!e)return null;try{const t=JSON.parse(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}async function Np(n,e={}){var a;const{onPhase:t,onLog:s}=e;let r=null,i="";const o=l=>{if(l.event==="phase"){l.message&&t&&t(l.message);return}if(l.event==="log"){l.message&&s&&s(l.message);return}r=l};if((a=n.body)!=null&&a.getReader){const l=n.body.getReader(),c=new TextDecoder;for(;;){const{done:u,value:d}=await l.read();if(u)break;const p=Zo(i,c.decode(d,{stream:!0}));i=p.buffer,p.events.forEach(o)}}else{const l=Zo("",await n.text());i=l.buffer,l.events.forEach(o)}return Op(i).forEach(o),r?{...r,success:r.success===!0||r.success===void 0&&n.ok}:{success:!1,error:n.ok?"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${n.status}).`}}function Lp(n){return String(n||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Xo(n){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,t=[];for(const s of Lp(n).split(` -`)){if(!/^[A-Za-z_$]/.test(s)||e.test(s))continue;const r=s.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);r&&t.push(r[1])}return t}function Dp(n,e){const t=n.replace(/\.dart$/,"");if(e==="W")return t.replace(/(^|_)(\w)/g,(s,r,i)=>i.toUpperCase());if(e==="A"){const s=t.replace(/(^|_)(\w)/g,(r,i,o)=>o.toUpperCase());return s.charAt(0).toLowerCase()+s.slice(1)}return e==="F"?"CustomFunctions":e==="C"?n.endsWith(".dart")?n:`${n}.dart`:t}async function Qo(n){const e=new TextEncoder().encode(String(n||"")),t=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(t),s=>s.toString(16).padStart(2,"0")).join("")}async function Bp(n,e=new Map){const t={},s=new Set;for(const[o,a]of n.entries()){if(a.type==="D"||a.type==="O")continue;const l=Dp(o,a.type),c={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Qo(a.content)},u=e.get(a.path);if(u!==void 0&&(c.original_checksum=await Qo(u)),t[o]=c,a.type==="F"){const d=Xo(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(f=>s.add(f))}}const r=new Set(Xo(e.get("lib/flutter_flow/custom_functions.dart")||"")),i={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(s).filter(o=>!r.has(o))};return{fileMapContents:JSON.stringify(t),functionsMapContents:JSON.stringify(i)}}const jp=/^dependencies\s*:\s*(?:#.*)?$/,Up=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function Hp(n){const e=n.match(Up);return e?e[1]??e[2]??e[3]:null}function Wl(n){const e=n.trim();return e===""||e.startsWith("#")}function zl(n){const e=n.match(/^(\s*)/);return e?e[1].length:0}function pi(n){const e=n.findIndex(r=>jp.test(r));if(e===-1)return null;let t=e,s=null;for(let r=e+1;rc&&c!=="flutter");if(s.length===0)return{yaml:t,added:[],alreadyPresent:[]};const r=t.split(` -`),i=new Set(Gl(t)),o=[],a=[];for(const[c,u]of s)i.has(c)?a.push(c):(o.push([c,u]),i.add(c));if(o.length===0)return{yaml:t,added:[],alreadyPresent:a};const l=pi(r);if(l){const c=o.map(([u,d])=>ea(l.childIndent,u,d));r.splice(l.endIndex,0,...c)}else r.length>0&&r[r.length-1].trim()!==""&&r.push(""),r.push("dependencies:"),o.forEach(([c,u])=>{r.push(ea(" ",c,u))});return{yaml:r.join(` -`),added:o.map(([c])=>c),alreadyPresent:a}}function Vl(n){const e=String(n||""),t=[];return e.trim()?(/^name:\s*\S+/m.test(e)||t.push("pubspec.yaml missing name field"),pi(e.split(` -`))||t.push("pubspec.yaml missing dependencies section"),Gl(e).includes("flutter")||t.push("pubspec.yaml missing Flutter SDK dependency"),{valid:t.length===0,errors:t}):(t.push("pubspec.yaml is empty"),{valid:!1,errors:t})}const Gp={"&":"&","<":"<",">":">",'"':""","'":"'"};function Je(n){return String(n??"").replace(/[&<>"']/g,e=>Gp[e])}function F(n){return n?Je(n).replace(/\n/g,"
    "):""}function mt(n){return Je(n).replace(/\r?\n/g," ")}function Vp(n,e={}){const t=n==null?void 0:n.pipelineStep;if(t!=null&&e[t]!=null)return e[t];const s=(n==null?void 0:n.message)||"";return s.includes("Code Generator")?2:s.includes("Code Review")?3:1}function qp(n){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[t,s]of Object.entries(e))if(n.toLowerCase().includes(t.toLowerCase()))return s;return"📄"}function Kp(n){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[t,s]of Object.entries(e))if(n.toLowerCase().includes(t.toLowerCase()))return s;return"📝"}function Yp(n){return n.includes("class ")&&n.includes("extends ")||n.includes("StatelessWidget")||n.includes("StatefulWidget")||n.includes("import 'package:flutter/")?"dart":n.includes("def ")||n.includes("import ")||n.includes("print(")?"python":n.includes("function ")||n.includes("const ")||n.includes("console.")?"javascript":"dart"}function Ht(n){if(!n)return"";if(typeof n!="string")return String(n);const e=/```(?:\w+)?\n?([\s\S]*?)```/,t=n.match(e);return t?t[1].trim():n.trim()}function ta(n){return n=Je(n),n=n.replace(/\*\*(.*?)\*\*/g,'$1'),n=n.replace(/\*(.*?)\*/g,'$1'),n=n.replace(/`(.*?)`/g,'$1'),n=n.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),n=n.replace(/\b(WARN|WARNING)\b/g,'$1'),n=n.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),n}function ql(n,e="dart",t=globalThis.hljs){if(!n)return"";const s=Ht(n);try{return t.highlight(s,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return t.highlight(s,{language:"json"}).value}catch{return Je(s)}}}function xs(n,e={}){const{highlighter:t=globalThis.hljs}=e;let s='
    ';const r=String(n??"").split(` -`);let i=!1,o="";for(const a of r){if(a.startsWith("```")){if(i){const l=Yp(o),c=ql(o.trim(),l,t);s+=`
    -
    ${c}
    -
    `,o="",i=!1}else i=!0;continue}if(i){o+=a+` -`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();s+=`
    -

    - ${qp(l)} - ${Je(l)} -

    -
    `;continue}if(a.startsWith("## ")){const l=a.substring(3).trim();s+=`
    -

    - ${Kp(l)} - ${Je(l)} -

    -
    `;continue}if(/^[-*+]\s+/.test(a)||/^\d+\.\s+/.test(a)){const l=a.replace(/^([-*+]|\d+\.)\s+/,"").trim();s+=`
    - - ${ta(l)} -
    `;continue}a.trim()!==""&&(s+=`

    ${ta(a)}

    `)}return s+="
    ",` -
    -
    -
    - Live Audit Report -
    - ${s} -
    - `}const Jp="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses",Zp="phc_KoqpBJCIiWMW5I6HKBM092DVXZbMmE4KkPHqI518pF3",Xp="https://us.i.posthog.com";xl.init(Zp,{api_host:Xp,person_profiles:"identified_only"});function Me(n,e={}){try{xl.capture(n,e)}catch(t){console.error("PostHog tracking failed",t)}}const xe="https://4tgke4.buildship.run",Kl={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},us="ccc_auth_session",na=new WeakSet;let L={email:null,sessionToken:null,isVerified:!1};function Wt(n={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...n}}let q=Wt({isResolved:!0});const Qp=`${xe}/service/runpipeline`,ef="bs_user_id",tf=`${xe}/authUserCheck`;let Un={userId:null,status:null,resolved:!1};const ds={free:2,professional:50,power:2e3},ps="ccc_subscription",sa=3,nf=new Set(["active","trialing","paid"]),En="google/gemini-3.6-flash",Hn=["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"],sf={"google/gemini-3.6-flash":"Gemini 3.6 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 we(n){return sf[n]||n}const Nt="ccc_usage",Ur="google/gemini-3.6-flash",Hr="google/gemini-3.6-flash",ar="google/gemini-3.6-flash",ra={professional:11,power:49},Wr={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"},Wn={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 zn={...Wn};async function rf(){const n=new AbortController,e=setTimeout(()=>n.abort(),5e3);try{const t=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:n.signal});if(!t.ok)return;const s=await t.json();if(s.result!=="success"||!s.rates)return;const r=s.rates,i={AUD:1},o=new Set([...Object.keys(Wn),...Object.values(zr),...Object.values(Wr)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?i[a]=r[a]:Wn[a]&&(i[a]=Wn[a]));zn=i}catch{}finally{clearTimeout(e)}}const zr={"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 Yl(){try{const i=Intl.DateTimeFormat().resolvedOptions().timeZone;if(i&&zr[i])return zr[i]}catch{}const e=(navigator.language||"en-US").replace("-","_"),t=Wr[e];if(t)return t;const s=e.split("_")[0],r=Wr[s];return r||"USD"}function ia(n,e){const t=zn[e]??zn.USD,s=n*t,r=Math.round(s*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(n*zn.USD)}}const Oe="ccc_api_key_",qe="ccc_session_api_key_",De="ccc_encryption_key",Sn="ccc_encryption_key_scope",of="ccc_keystore",fs="keys",In="ccc_encryption_key_version";let Gr=null,hs=null,Cn=!1,gs=!1,oa=!1;class ms extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function aa(){if(oa)return;oa=!0;const n="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(n),document.body&&V(n,"warning")}function Jl(){return localStorage.getItem(In)||""}function Vr(){var n;return((n=crypto.randomUUID)==null?void 0:n.call(crypto))||Xl(crypto.getRandomValues(new Uint8Array(16)))}function af(){const n=Jl();if(n)return n;const e=Vr();return localStorage.setItem(In,e),e}function zt(){Gr=null,hs=null,Cn=!1,gs=!1}window.addEventListener("storage",n=>{n.key===In&&zt()});function lf(){return new Promise((n,e)=>{const t=indexedDB.open(of,1);t.onupgradeneeded=()=>{const s=t.result;s.objectStoreNames.contains(fs)||s.createObjectStore(fs)},t.onsuccess=()=>n(t.result),t.onerror=()=>e(t.error)})}async function fi(n,e){const t=await lf();return new Promise((s,r)=>{const i=t.transaction(fs,n);let o;try{o=e(i.objectStore(fs))}catch(l){t.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),i.oncomplete=()=>{t.close(),s(a)},i.onerror=()=>{t.close(),r(i.error||new Error("Encryption key transaction failed."))},i.onabort=()=>{t.close(),r(i.error||new Error("Encryption key transaction aborted."))}})}function cf(n){var e;return n instanceof CryptoKey&&((e=n.algorithm)==null?void 0:e.name)==="AES-GCM"&&n.extractable===!1&&n.usages.includes("encrypt")&&n.usages.includes("decrypt")}async function uf(){const n=await fi("readonly",e=>e.get(De));return cf(n)?n:null}async function Zl(n){await fi("readwrite",e=>e.put(n,De))}async function df(){zt();try{await fi("readwrite",n=>n.delete(De))}catch(n){console.warn("Could not delete the stored encryption key:",n)}}async function pf(){const n=sessionStorage.getItem(De);if(!n)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(n),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Zl(e),sessionStorage.removeItem(De),sessionStorage.removeItem(Sn),localStorage.removeItem(Oe+"salt"),e}async function la(n){const e=sessionStorage.getItem(De);if(e)return gs=sessionStorage.getItem(Sn)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!n)throw new ms;const t=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),s=await crypto.subtle.exportKey("jwk",t);return sessionStorage.setItem(De,JSON.stringify(s)),sessionStorage.setItem(Sn,"session"),gs=!1,crypto.subtle.importKey("jwk",s,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function ff(n){if(sessionStorage.getItem(Sn)==="session"&&sessionStorage.getItem(De))return aa(),Cn=!0,la(n);try{const e=await uf();if(e)return e;const t=await pf();if(t)return t;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Zl(s),s}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),aa(),Cn=!0,la(n)}}async function hi(n={}){const{allowSessionFallbackCreation:e=!0}=n,t=af();hs!==t&&zt();const s=Gr||ff(e);Gr=s,hs=t;try{return await s}catch(r){throw zt(),r}}async function hf(n){const e=await hi(),t=hs,s=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,s.encode(n)),o=new Uint8Array(r.length+i.byteLength);return o.set(r),o.set(new Uint8Array(i),r.length),{ciphertext:Xl(o),keyVersion:t,sessionFallback:Cn}}async function gf(n,e={}){const{isSessionCredential:t=!1}=e;try{const s=await hi({allowSessionFallbackCreation:!1});if(Cn&&!t&&!gs)throw new ms;const r=mf(n),i=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},s,o);return new TextDecoder().decode(a)}catch(s){if(s instanceof ms)throw s;return console.error("Decryption failed:",s),null}}function Xl(n){const e=new Uint8Array(n);let t="";for(let s=0;s0}let xn="",vs="";async function gi(){sessionStorage.getItem(De)&&await hi(),xn=await ce("flutterflow"),vs=await ce("flutterflow_project_id"),bf(),Et()}function mi(){document.getElementById("api-keys-modal").classList.add("open"),_i(),xn&&nc(xn)}function Ql(n){if(n&&n.target!==n.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const t=document.getElementById("walkthrough-modal");t&&(vi(),t.classList.add("open"))}let Ze=1;function ec(){const n=document.querySelector(".wt-steps");return n?Array.from(n.querySelectorAll(".wt-step-card")):[]}function ks(){const n=ec();n.length&&n.forEach((e,t)=>{const s=t+1;if(s===Ze){e.classList.remove("opacity-60","bg-gray-50","border-gray-200"),e.classList.add("bg-blue-50","border-blue-200");const r=e.querySelector("div:first-child");r&&(r.classList.remove("bg-gray-400"),r.classList.add("bg-blue-500"),r.innerHTML=s)}else if(s0&&Ze<=n&&(Ze++,ks())}function _f(){const n=document.getElementById("walkthrough-modal");n&&(Ze=1,ks(),n.classList.add("open"))}function yf(n){if(n&&n.target!==n.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const t=document.getElementById("walkthrough-dont-show");t&&t.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function tc(){if(L.isVerified&&wt()&&q.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Ze=1,ks(),e.classList.add("open"))}}async function _i(){const n=document.getElementById("flutterflow-api-key-input");xn?(n.value="",n.placeholder="Key saved (enter new to replace)"):n.placeholder="Enter your FlutterFlow API key",wf()}function wf(){ua("flutterflow","flutterflow-key-status"),ua("flutterflow_project_id","flutterflow-project-status")}function ua(n,e){const t=document.getElementById(e);if(!t)return;const s=t.querySelector(".key-status-dot"),r=t.querySelector("span");Pt(n)?(s.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(s.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function Et(){const n=g.step2Result&&g.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),t=document.getElementById("btn-run-pipeline");t&&t.classList.remove("hidden"),e&&e.classList.toggle("hidden",!n)}function bf(){const n=document.getElementById("api-keys-status");if(!n)return;const e=n.querySelectorAll(".key-status-dot"),t=["flutterflow"];e.forEach((s,r)=>{const i=t[r];i==="flutterflow"?Pt("flutterflow")&&Pt("flutterflow_project_id")?(s.className="key-status-dot configured",s.title="FlutterFlow (Fully configured)"):Pt("flutterflow")||Pt("flutterflow_project_id")?(s.className="key-status-dot env",s.title="FlutterFlow (Partially configured)"):(s.className="key-status-dot missing",s.title="FlutterFlow (Not configured)"):Pt(i)?(s.className="key-status-dot configured",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (User key)"):(s.className="key-status-dot missing",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (Not configured)")}),Et()}async function Ef(){const n=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");n.value.trim()&&await ca("flutterflow",n.value);const t=(e==null?void 0:e.value.trim())||"";if(t){if(!Ts(t)){V("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await ca("flutterflow_project_id",t)}await gi(),_i();const s=document.querySelector("#api-keys-modal .bg-blue-500"),r=s.textContent;s.textContent="Saved!",s.classList.remove("bg-blue-500","hover:bg-blue-600"),s.classList.add("bg-green-500"),setTimeout(()=>{s.textContent=r,s.classList.remove("bg-green-500"),s.classList.add("bg-blue-500","hover:bg-blue-600"),Ql()},1e3)}async function Sf(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(In,Vr()),zt(),localStorage.removeItem(Oe+"flutterflow"),localStorage.removeItem(Oe+"flutterflow_project_id"),sessionStorage.removeItem(qe+"flutterflow"),sessionStorage.removeItem(qe+"flutterflow_project_id"),sessionStorage.removeItem(De),sessionStorage.removeItem(Sn),localStorage.removeItem(Oe+"salt"),await df(),localStorage.setItem(In,Vr()),localStorage.removeItem(Oe+"flutterflow"),localStorage.removeItem(Oe+"flutterflow_project_id"),sessionStorage.removeItem(qe+"flutterflow"),sessionStorage.removeItem(qe+"flutterflow_project_id"),await gi();const n=document.getElementById("flutterflow-projects-select");n&&(n.innerHTML=''),_i()}function Ts(n){return!n||n.trim().length<5||n.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(n)}function If(n,e){const t=document.getElementById(n);t&&(t.value?e?t.style.borderColor="#22c55e":t.style.borderColor="#ef4444":t.style.borderColor="")}function Cf(){const n=document.getElementById("flutterflow-api-key-input");n&&(n.addEventListener("input",e=>{const t=e.target.value.trim().length>0;If("flutterflow-api-key-input",t)}),n.addEventListener("blur",xf(async e=>{const t=e.target.value.trim();t&&await nc(t)},500)))}function xf(n,e){let t;return function(...r){const i=()=>{clearTimeout(t),n(...r)};clearTimeout(t),t=setTimeout(i,e)}}async function nc(n){const e=document.getElementById("flutterflow-projects-select"),t=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',t&&t.classList.add("hidden");try{const r=await new Ps(n,"").listProjects();if(!r||r.length===0){e.innerHTML='';return}e.innerHTML='',r.forEach(i=>{const o=document.createElement("option");o.value=i.id||i.projectId||"",o.textContent=i.name||i.projectName||`Project ${i.id}`,e.appendChild(o)}),vs&&(e.value=vs)}catch(s){console.error("Failed to fetch projects:",s),e.innerHTML='',t&&(t.textContent=`Failed to load projects: ${s.message}`,t.classList.remove("hidden"))}}function kf(n){const e=document.getElementById(n),s=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",s.innerHTML=` - - `):(e.type="password",s.innerHTML=` - - - `)}let g={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1};function Tf(){g.step1Result=null,g.step2Result=null,g.step3Result=null,g.bundleSpec=null,g.artifactBundle=null,g.bundleReview=null,g.selectedArtifactId=null,g.resultsViewMode="summary"}function Rf(){g.bundleSpec=bn(g.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Rs(){var t,s,r,i;const n=ls(g.bundleSpec);g.artifactBundle=bn(g.step2Result,{id:(t=g.bundleSpec)==null?void 0:t.id,title:(s=g.bundleSpec)==null?void 0:s.title,description:(r=g.bundleSpec)==null?void 0:r.description,artifactType:n.artifactType,artifactName:n.artifactName,fileName:n.fileName,dependencies:n.dependencies,relationships:(i=g.bundleSpec)==null?void 0:i.relationships,code:g.step2Result||""});const e=pp(g.artifactBundle);g.artifactBundle={...g.artifactBundle,warnings:[...g.artifactBundle.warnings,...e.findings.map(o=>o.message)],metadata:{...g.artifactBundle.metadata,compatibility:e}},g.selectedArtifactId=ls(g.artifactBundle).id}function As(){var t,s,r,i,o,a,l,c;const n=bn(g.step3Result,{id:(t=g.artifactBundle)==null?void 0:t.id,title:(s=g.artifactBundle)==null?void 0:s.title}),e=new Map(n.artifacts.map(u=>[u.id,u.review]));g.bundleReview=bn({id:(r=g.artifactBundle)==null?void 0:r.id,title:(i=g.artifactBundle)==null?void 0:i.title,artifacts:((a=(o=g.artifactBundle)==null?void 0:o.artifacts)==null?void 0:a.map(u=>({...u,review:e.get(u.id)||u.review||g.step3Result||null})))||[],relationships:(l=g.artifactBundle)==null?void 0:l.relationships,warnings:(c=g.artifactBundle)==null?void 0:c.warnings})}function sc(){const n=yi();return{artifactType:n.artifactType||"CustomWidget",artifactName:n.artifactName||"GeneratedWidget"}}function yi(){const n=g.artifactBundle||g.bundleSpec||null;return(Array.isArray(n==null?void 0:n.artifacts)?n.artifacts:[]).find(t=>t.id===g.selectedArtifactId)||ls(n)}function wi(){return yi().code||g.step2Result||""}async function Af(){try{await gi()}catch(n){return console.error("checkConnection: initializeApiKeys failed:",n),!1}return!0}const Gn={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};class Ps{constructor(e,t,s="main",r=Gn.production){this.apiKey=e,this.baseUrl=r,this._projectId=t,this._branchName=s,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){var s;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 t=null;for(const r of e)try{const i=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(r)});if(!i.ok){const l=await i.text();t=new Error(`Export failed: ${i.status} - ${l}`);continue}const o=await i.json(),a=((s=o==null?void 0:o.value)==null?void 0:s.project_zip)||(o==null?void 0:o.project_zip);if(!a){t=new Error("Export response did not include project source.");continue}return a}catch(i){t=i}throw t||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),t=await JSZip.loadAsync(e,{base64:!0}),s=Object.keys(t.files).filter(a=>!t.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!s)throw new Error("Export did not contain a pubspec.yaml.");const r=s.slice(0,s.length-12),i=new Map,o=Object.keys(t.files).filter(a=>{if(t.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=>{i.set(a.slice(r.length),await t.files[a].async("string"))})),{pubspecYaml:await t.files[s].async("string"),files:i}}async pushCodeWithRetry(e,t=3){var i,o,a;const s=[Gn.production,Gn.staging],r=Math.max(0,s.indexOf(this._endpoint));for(let l=0;lsetTimeout(m,1e3*(l+1)));continue}return d}catch(d){console.warn(`Push to ${u} failed: ${d.message}, trying next...`),await new Promise(p=>setTimeout(p,1e3*(l+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}async listProjects(e={}){const{page:t=1,limit:s=100}=e;console.log("Listing projects for API key via V2 endpoint");try{const r=await fetch("https://api.flutterflow.io/v2/l/listProjects",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(!r.ok){const a=await r.text();throw new Error(`List projects failed: ${r.status} - ${a}`)}const i=await r.json();if(i.success&&typeof i.value=="string")try{const a=JSON.parse(i.value);if(a&&Array.isArray(a.entries))return a.entries.map(l=>{var c;return{id:l.id,name:((c=l.project)==null?void 0:c.name)||l.id}})}catch(a){console.error("Failed to parse stringified project value:",a)}const o=i.projects||i.items||i.entries||(Array.isArray(i)?i:[]);return Array.isArray(o)?o:[]}catch(r){throw console.error("Error listing projects:",r),r}}}async function bi(n){const e=n.clone();let t;try{t=await n.json()}catch{const i=await e.text();if(!n.ok)return{success:!1,responseCode:n.status,errorMessage:i||`HTTP ${n.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${i}`)}if(!n.ok){let r=t.message||`HTTP ${n.status}`,i=new Map;if(t.errors)i=new Map(Object.entries(t.errors));else if(!t.message&&typeof t=="object"){const o=Object.keys(t).filter(a=>a.endsWith(".dart")&&Array.isArray(t[a]));o.length>0&&(i=new Map(Object.entries(t)),r=o.flatMap(l=>t[l].map(c=>`${l}: ${c.errorMessage}`)).join(` -`)||`HTTP ${n.status}`)}return{success:!1,responseCode:n.status,errorMessage:r,errorMap:i}}const s=t.value?JSON.parse(t.value):{};return{success:!0,responseCode:n.status,errorMap:new Map(Object.entries(s))}}function Ei(n,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."}[n]||`FlutterFlow API error: ${`HTTP ${n}`}`}const M={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},rc=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,ic=/extends\s+State<\w+>/;function Pf(n,e=""){if(n==="pubspec.yaml")return M.DEPENDENCIES;if(!n.endsWith(".dart")||n.endsWith("index.dart"))return M.OTHER;if(n==="custom_functions.dart")return M.FUNCTION;if(e){const t=rc.test(e),s=ic.test(e);if(t||s)return M.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return M.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return M.FUNCTION}return M.CODE_FILE}function oc(n,e){switch(e){case M.ACTION:return`lib/custom_code/actions/${n}`;case M.WIDGET:return`lib/custom_code/widgets/${n}`;case M.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case M.CODE_FILE:return`lib/custom_code/${n}`;case M.DEPENDENCIES:return"pubspec.yaml";case M.OTHER:return`lib/custom_code/${n}`;default:return n}}async function Si(n,e=new Map){return Bp(n,e)}const qr=new Map;function ac(n){return`${n.baseUrl}|${n.projectId}|${n.branchName}`}function Fs(n){qr.delete(ac(n))}async function Ii(n,e,t,s){const r=Sp(e,t);if(r.length===0)return{remoteFiles:t,syncFileMap:e};console.log(`Provisioning ${r.length} new FlutterFlow custom code file(s) before sync.`),re.set("provision");const i=await fetch(Jp,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:n.apiKey,projectId:n.projectId,baseUrl:n.baseUrl,commitMessage:s,customClasses:r,stream:!0})}),o=await Np(i,{onPhase:a=>re.setSubstatus(a),onLog:a=>console.log(`[custom class deploy] ${a}`)});if(!o.success){const a=o.details?` ${o.details}`:"";throw new Error(`${o.error||"FlutterFlow custom class provisioning failed."}${a}`)}return Fs(n),{remoteFiles:t,syncFileMap:Ip(e,r)}}async function Ci(n,e={}){const t=ac(n);let s=qr.get(t);if(s===void 0){try{s=await n.fetchProjectSource()}catch(i){throw new Error(`Could not read your project's pubspec.yaml (${i.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const r=Vl(s.pubspecYaml);if(!r.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${r.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);qr.set(t,s)}return{...zp(s.pubspecYaml,e),remoteFiles:s.files}}function Ff(n){const e=[],t=[];n.content.length>5e4&&t.push("Code file is large (>50KB). This may take longer to commit."),n.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const s=n.content.split(` -`).length;s>500&&t.push(`Code has ${s} lines. Consider breaking it into smaller widgets.`),n.content.includes("setState")&&n.codeType===M.ACTION&&t.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),n.content.includes("dynamic")&&!n.content.includes("?")&&t.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),n.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&t.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const r=n.content.match(/print\s*\(/g);return r&&r.length>3&&t.push(`Code contains ${r.length} print statements. Consider removing debug prints before committing.`),{canProceed:e.length===0,issues:e,warnings:t}}async function $f(n,e){let t=` -
    -
    -

    Commit Summary

    -

    - File: ${n.fileName}
    - Type: ${n.artifactType}
    - Size: ${(n.content.length/1024).toFixed(1)} KB
    - Lines: ${n.content.split(` -`).length} -

    -
    - `;return e.warnings.length>0&&(t+=` -
    -

    Warnings (${e.warnings.length})

    -
      - ${e.warnings.map(s=>`
    • • ${s}
    • `).join("")} -
    -
    - `),e.issues.length>0&&(t+=` -
    -

    Issues (${e.issues.length})

    -
      - ${e.issues.map(s=>`
    • • ${s}
    • `).join("")} -
    -
    - `),t+="
    ",console.log("Pre-commit summary:",t),e.canProceed?e.warnings.length>0?confirm(`Found ${e.warnings.length} warning(s). Proceed with commit? - -${e.warnings.join(` -`)}`):!0:!1}function lc(n,e={}){const{artifactType:t="CustomWidget",artifactName:s="GeneratedCode"}=e;let r=n.trim();r.startsWith("```dart")?r=r.replace(/^```dart\n/,""):r.startsWith("```")&&(r=r.replace(/^```\n/,"")),r.endsWith("```")&&(r=r.replace(/\n```$/,""));let i=s;i.endsWith(".dart")||(i+=".dart");let o=M.CODE_FILE;switch(t){case"CustomAction":o=M.ACTION;break;case"CustomWidget":o=M.WIDGET;break;case"CustomFunction":o=M.FUNCTION,i="custom_functions.dart";break;case"CustomClass":case"CodeFile":o=M.CODE_FILE;break}let a="";return o===M.WIDGET?a=`// 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! - -`:o===M.ACTION?a=`// 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! - -`:o===M.FUNCTION&&(a=`// 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:a+r,fileName:i,codeType:o,artifactType:t,artifactName:s}}function Mf(n){const e={};for(const t of Bl(n))e[t]="^1.0.0";return e}function Of(n,e={}){return{timestamp:new Date().toISOString(),artifactType:n.artifactType,artifactName:n.artifactName,codeType:n.codeType,fileName:n.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:n.content.length}}function Nf(n,e,t,s=new Set,r=""){const i=[],o=rc.test(e),a=ic.test(e),l=[{pattern:/void\s+main\s*\(/,message:"Contains main() function - not allowed in FlutterFlow"},{pattern:/runApp\s*\(/,message:"Contains runApp() - not allowed in FlutterFlow"},{pattern:/MaterialApp\s*\(/,message:"Contains MaterialApp - not allowed in FlutterFlow"},{pattern:/Scaffold\s*\(/,message:"Contains Scaffold - usually not needed in FlutterFlow widgets"}],c=n.includes("custom_functions")||n.includes("functions"),u=/^\s*import\s+['"]([^'"]+)['"]/gm;let d;for(;(d=u.exec(e))!==null;){const p=d[1],f=p.startsWith("/flutter_flow/")||p.startsWith("/backend/")||p.startsWith("/custom_code/")||p==="index.dart"||p==="package:flutter/material.dart"||p==="package:flutter/services.dart",m=p.startsWith("dart:")||p.startsWith("package:");c?p.startsWith("dart:")||i.push(`Custom Functions cannot use '${p}' - only Dart SDK imports allowed`):!f&&!m&&i.push(`Unknown import '${p}' - use FlutterFlow managed imports`)}for(const{pattern:p,message:f}of l)p.test(e)&&i.push(f);if(t===M.WIDGET&&!o&&!a&&i.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),t===M.ACTION){const p=Dl(e,{functionName:r,declaredTypes:s});p&&i.push(p)}if(t===M.CODE_FILE){const p=Ll(n,e);p&&i.push(p)}return{valid:i.length===0,errors:i}}function $s(n){const e=[],t=[];if(!n||n.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:t};const s=new Set(Array.from(n.values()).flatMap(r=>Cs(r.content||"")));for(const[r,i]of n.entries()){if((!i.content||i.content.trim().length===0)&&e.push(`File ${r} is empty`),i.content&&i.content.length>1e5&&t.push(`File ${r} is very large (>100KB)`),r.endsWith(".dart")){const o=Nf(r,i.content,i.type,s,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${r}: ${a}`))}if(r==="pubspec.yaml"){const o=Vl(i.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:t}}const D={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},B={currentState:D.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=D.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(n){if(!Object.values(D).includes(n)){console.error(`Invalid commit state: ${n}`);return}this.currentState=n,n===D.PREPARING&&(this.startTime=Date.now()),(n===D.SUCCESS||n===D.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:n,commitState:this}})),console.log(`Commit state changed to: ${n}`)},setError(n){this.error=n,this.setState(D.ERROR)},setSuccess(n){this.result=n,this.setState(D.SUCCESS)},setProgress(n,e){this.filesProcessed=n,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===D.PREPARING||this.currentState===D.VALIDATING||this.currentState===D.PUSHING}};async function Lf(n,e,t={}){let{codeType:s="W"}=t;const{pubspecDeps:r={},artifactName:i=e}=t;s==="CustomWidget"&&(s=M.WIDGET),s==="CustomAction"&&(s=M.ACTION),s==="CustomFunction"&&(s=M.FUNCTION),s==="CustomClass"&&(s=M.CODE_FILE),s==="CodeFile"&&(s=M.CODE_FILE),B.reset(),B.setState(D.PREPARING);try{const o=await ce("flutterflow"),a=await ce("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(!Ts(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=Pn(),c=new Ps(o,a,"main",l);B.setState(D.VALIDATING);const u=new Map,d=s||Pf(e,n),p=oc(e,d);u.set(e,{artifactName:i,content:n,type:d,path:p}),B.setProgress(0,u.size);const f=$s(u);if(!f.valid)throw new Error(`Validation failed: -${f.errors.join(` -`)}`);const m=await Ci(c,r),v=m.yaml,_=await Ii(c,u,m.remoteFiles,`Provision ${i} custom class`),x=await Si(_.syncFileMap,_.remoteFiles),I=new Map(_.syncFileMap);I.set("pubspec.yaml",{content:v,type:"D",path:"pubspec.yaml"}),re.set("package");const T=await xi(I),C={project_id:a,zipped_custom_code:T,uid:`web_${Date.now()}`,branch_name:c.branchName,serialized_yaml:v,file_map:x.fileMapContents,functions_map:x.functionsMapContents};B.setState(D.PUSHING),B.setProgress(1,u.size),Fs(c),re.set("push");const y=await c.pushCode(C),P=await bi(y);if(P.success)B.setSuccess({fileCount:u.size,projectId:a,warnings:P.errorMap&&P.errorMap.size>0?Array.from(P.errorMap.entries()):[]});else{const A=P.errorMessage||Ei(P.responseCode);throw new Error(A)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:m.added,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),B.setError(o),{success:!1,error:o.message,state:B.currentState}}}async function xi(n){try{const e=new JSZip;for(const[s,r]of n.entries())e.file(s,r.content);return await e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}catch(e){return console.error("Error creating zip:",e),""}}async function cc(n,e={}){const{artifactType:t,artifactName:s,pipelineResult:r}=e;console.log(`Starting commit for ${s} (${t})`);try{B.setState(D.PREPARING);const i=lc(n,{artifactType:t,artifactName:s}),o=Mf(i.content);console.log("Detected dependencies:",o),B.setState(D.VALIDATING);const a=await ce("flutterflow"),l=await ce("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(!Ts(l))throw new Error("Invalid FlutterFlow Project ID format.");const c=new Map;c.set(i.fileName,{artifactName:s,content:i.content,type:i.codeType,path:oc(i.fileName,i.codeType),functionName:i.codeType===M.FUNCTION?s:void 0}),B.setProgress(0,c.size);const u=$s(c);if(!u.valid)throw new Error(`File validation failed: -${u.errors.join(` -`)}`);u.warnings.length>0&&console.warn("Validation warnings:",u.warnings),B.setState(D.PUSHING);const d=Pn(),p=new Ps(a,l,"main",d),f=await Ci(p,o),m=f.yaml,v=await Ii(p,c,f.remoteFiles,`Provision ${s} custom class`),_=await Si(v.syncFileMap,v.remoteFiles),x=new Map(v.syncFileMap);x.set("pubspec.yaml",{content:m,type:M.DEPENDENCIES,path:"pubspec.yaml"}),re.set("package");const I=await xi(x),T={project_id:l,zipped_custom_code:I,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:m,file_map:_.fileMapContents,functions_map:_.functionsMapContents};B.setProgress(1,c.size),Fs(p),re.set("push");const C=await p.pushCode(T),y=await bi(C);if(y.success){const P={...Of(i,r),projectId:l};return B.setSuccess({...P,fileCount:c.size,warnings:y.errorMap?Array.from(y.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${i.fileName} to FlutterFlow`,metadata:P,addedDependencies:f.added,warnings:y.errorMap?Array.from(y.errorMap.entries()):[],elapsedTime:B.getElapsedTime()}}else{const P=y.errorMessage||Ei(y.responseCode),A=new Error(P);throw A.errorMap=y.errorMap,A}}catch(i){console.error("Commit execution failed:",i),B.setError(i);let o=new Map;if(i.errorMap)o=i.errorMap;else if(i.message&&i.message.includes("{"))try{const a=i.message.match(/\{[\s\S]*\}/);if(a){const l=JSON.parse(a[0]);o=new Map(Object.entries(l))}}catch(a){console.warn("Failed to parse error map from commit response:",a)}return{success:!1,error:i.message,errorMap:o,state:B.currentState,elapsedTime:B.getElapsedTime()}}}async function Df(n,e={}){var s;const{pipelineResult:t}=e;try{if(B.setState(D.PREPARING),((s=n.errors)==null?void 0:s.length)>0)throw new Error(`Bundle validation failed: -${n.errors.join(` -`)}`);const r=new Map(n.fileEntries.map(y=>[y.fileName,{artifactId:y.artifactId,artifactName:y.artifactName,content:y.content,type:y.type,path:y.path,functionName:y.type===M.FUNCTION?y.artifactName:void 0}]));B.setProgress(0,r.size);const i=$s(r);if(!i.valid)throw new Error(`File validation failed: -${i.errors.join(` -`)}`);B.setState(D.VALIDATING);const o=await ce("flutterflow"),a=await ce("flutterflow_project_id");if(!o)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!a)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ts(a))throw new Error("Invalid FlutterFlow Project ID format.");B.setState(D.PUSHING);const l=Pn(),c=new Ps(o,a,"main",l),u=await Ci(c,n.dependencies),d=u.yaml,p=await Ii(c,r,u.remoteFiles,`Provision ${n.title} custom classes`),f=await Si(p.syncFileMap,p.remoteFiles),m=new Map(p.syncFileMap);m.set("pubspec.yaml",{content:d,type:M.DEPENDENCIES,path:"pubspec.yaml"}),re.set("package");const v=await xi(m),_={project_id:a,zipped_custom_code:v,uid:`web_${Date.now()}`,branch_name:c.branchName,serialized_yaml:d,file_map:f.fileMapContents,functions_map:f.functionsMapContents};B.setProgress(1,r.size),Fs(c),re.set("push");const x=await c.pushCode(_),I=await bi(x);if(I.success){const y={...t,artifactType:"Bundle",artifactName:n.title,fileName:`${n.fileEntries.length} artifacts`,codeSize:n.fileEntries.reduce((P,A)=>P+A.content.length,0),projectId:a};return B.setSuccess({...y,fileCount:r.size,warnings:I.errorMap?Array.from(I.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${n.fileEntries.length} artifacts to FlutterFlow`,metadata:y,addedDependencies:u.added,warnings:I.errorMap?Array.from(I.errorMap.entries()):[],elapsedTime:B.getElapsedTime()}}const T=I.errorMessage||Ei(I.responseCode),C=new Error(T);throw C.errorMap=I.errorMap,C}catch(r){return console.error("Bundle commit execution failed:",r),B.setError(r),{success:!1,error:r.message,errorMap:r.errorMap||new Map,state:B.currentState,elapsedTime:B.getElapsedTime()}}}async function Bf(n){try{return await _s("architect",Ur,Vd(n),ui("architect"))}catch(e){throw e.isModelArmor?e:new Error(`Prompt Architect failed: ${e.message}`)}}async function Ms(n,e){const t=qd(n),s=ui("generator",g.bundleSpec);try{return await _s("generator",e,t,s)}catch(r){if(r.isModelArmor)throw r;if(e!==ar){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,r.message);try{return await _s("generator",ar,t,s)}catch(i){throw i.isModelArmor?i:new Error(`Code Generator failed: primary (${e}): ${r.message} | fallback (${ar}): ${i.message}`)}}throw new Error(`Code Generator failed: ${r.message}`)}}async function Os(n,e=null){const t={...ui("review",g.artifactBundle||g.bundleSpec),architect_output:e};try{return await _s("review",Hr,Kd(n),t)}catch(s){throw s.isModelArmor?s:new Error(`Code Review failed: ${s.message}`)}}function ki(n,e){return n.isModelArmor?`${n.userTitle}: ${n.userMessage}`:`${e}: ${n.message}`}function Kr(n,e){const t=document.getElementById(`step${n}-item`),s=document.getElementById(`step${n}-status`);!t||!s||(t.classList.remove("active","completed","error"),s.classList.remove("running","completed","error"),e==="active"?(t.classList.add("active"),s.classList.add("running"),s.innerHTML=` - - `):e==="completed"?(t.classList.add("completed"),s.classList.add("completed"),s.innerHTML=` - - `):e==="error"?(t.classList.add("error"),s.classList.add("error"),s.innerHTML=` - - `):s.innerHTML=` - - `)}function X(n,e){const t=document.getElementById(`step${n}-loading`),s=document.getElementById(`step${n}-result`);e?(t.classList.remove("hidden"),s.classList.add("hidden"),Kr(n,"active")):(t.classList.add("hidden"),s.classList.remove("hidden"),Kr(n,"completed"))}function jf(n){const e=document.getElementById(`${n}-content`),t=document.getElementById(`${n}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),t&&(t.style.transform="rotate(0deg)")):(e.classList.add("open"),t&&(t.style.transform="rotate(180deg)"))}function Uf(n){Se(parseInt(n.replace("step","")))}function Se(n){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${n}-item`);e&&e.classList.add("active"),bt();const t=document.getElementById("ready-state");t&&t.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const s=document.getElementById(`step${n}-content`);s&&s.classList.remove("hidden");const r=document.getElementById("stage-title"),i={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=i[n]||"Active Workflow Stage")}function Hf(n){const e=document.getElementById(n);if(!e)return;const t=e.dataset.raw||e.textContent;navigator.clipboard.writeText(t).then(()=>{Me("Code Copied",{elementId:n});const s=e.closest(".code-container"),r=s==null?void 0:s.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(s=>{console.warn("Failed to copy to clipboard:",s)})}function Yr(n){const e=document.getElementById("step1-model-label");e&&(e.textContent=we(Ur));const t=Zr(n),s=document.getElementById("step2-model-label");s&&(t!==n?s.textContent=`${we(n)} → ${we(t)} (Free Tier)`:s.textContent=we(n));const r=document.getElementById("step3-model-label");r&&(r.textContent=we(Hr)),console.log(`Step 1 (Prompt Architect): ${we(Ur)}`),console.log(t!==n?`Step 2 (Code Generator): ${we(n)} → ${we(t)} (Free Tier fallback)`:`Step 2 (Code Generator): ${we(n)}`),console.log(`Step 3 (Code Review): ${we(Hr)}`)}async function Wf(){if(console.log("runRefinement called"),g.isRunning)return;const n=document.getElementById("code-generator-model").value;g.isRunning=!0,Ti("standardRegenerate",g.step2Result,g.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(t=>{t.disabled=!0,t.innerHTML=` - - - Refining...`});try{const t=yi(),s=Yd({bundleSpec:g.step1Result,artifactBundle:JSON.stringify(g.artifactBundle||g.step2Result),bundleReview:g.step3Result,artifactId:t.id,userFeedback:"Fix the issues listed in the audit report."});Bs(),Le(2),Se(2),X(2,!0),g.step2Result=await Ms(s,n),Rs();const r=document.getElementById("step2-output"),i=Ht(g.step2Result);r.textContent=i,r.dataset.raw=i,X(2,!1),Se(3),Le(3),X(3,!0),g.step3Result=await Os(g.step2Result,g.step1Result),As();const o=document.getElementById("step3-output");o.textContent=g.step3Result,X(3,!1),dt();const a=xs(g.step3Result);js(i,a)}catch(t){console.error("Refinement failed:",t),dt(),V(ki(t,"Refinement failed"),"error")}finally{g.isRunning=!1,e.forEach(t=>{t.disabled=!1,t.textContent="Refine & Regenerate"}),Et()}}async function Ti(n,e,t){const s=`${xe}/connectFeedback`,r={type:n,code:e,input:t};try{const i=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!i.ok){const a=await i.text();return console.error(`callEndpoint failed: ${i.status} ${i.statusText}`,a),{success:!1,status:i.status,error:a}}const o=await i.json();return console.log("Telemetry success:",o),o}catch(i){return console.error("callEndpoint failed:",i),{success:!1,error:i.message}}}function zf(){const n=document.getElementById("ff-error-paste-input");n&&(n.value="")}async function Gf(){var r;const n=document.getElementById("ff-error-paste-input"),e=(r=n==null?void 0:n.value)==null?void 0:r.trim();if(!e){n==null||n.focus(),n==null||n.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>n==null?void 0:n.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!g.step2Result){V("No generated code found. Please run the full pipeline first.","warning");return}if(g.isRunning)return;const t=document.getElementById("code-generator-model").value;g.isRunning=!0,Ti("flutterflowError",g.step2Result,e);const s=document.getElementById("btn-fix-from-errors");s&&(s.disabled=!0,s.innerHTML=` - - Fixing…`);try{const i=Fl({bundleSpec:g.step1Result,artifactBundle:JSON.stringify(g.artifactBundle||g.step2Result),bundleReview:g.step3Result,userFeedback:e});_c(),Bs(),Le(2),Se(2),X(2,!0),g.step2Result=await Ms(i,t),Rs();const o=document.getElementById("step2-output"),a=Ht(g.step2Result);o.textContent=a,o.dataset.raw=a,X(2,!1),Se(3),Le(3),X(3,!0),g.step3Result=await Os(g.step2Result,g.step1Result),As();const l=document.getElementById("step3-output");l.textContent=g.step3Result,X(3,!1),dt();const c=xs(g.step3Result);js(a,c),n&&(n.value="")}catch(i){console.error("Fix from errors failed:",i),dt(),V(ki(i,"Failed to fix errors"),"error")}finally{g.isRunning=!1,s&&(s.disabled=!1,s.textContent="Fix Errors & Regenerate"),Et()}}async function Jr(){if(console.log("runThinkingPipeline called"),g.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const n=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value;if(!n.trim()){V("Please describe your FlutterFlow widget first.","warning");return}if(!await dh())return;const t=Zr(e);Me("Pipeline Started",{selectedModel:e,effectiveModel:t,inputLength:n.length});const s=document.getElementById("btn-run-pipeline");g.isRunning=!0,Tf(),s.disabled=!0,s.innerHTML=` - - - Running...`,Yr(t);try{bt();const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const i=document.getElementById("paywall-exhausted");i&&i.classList.add("hidden"),Bs(),Se(1),Le(1),X(1,!0),g.step1Result=await Bf(n),Rf(),Me("Prompt Architect Completed");const o=document.getElementById("step1-output"),a=Ht(g.step1Result);o.textContent=a,o.dataset.raw=a,X(1,!1),Se(2),Le(2),X(2,!0),g.step2Result=await Ms(g.step1Result,t),Rs(),Me("Code Generator Completed");const l=document.getElementById("step2-output"),c=Ht(g.step2Result);l.textContent=c,l.dataset.raw=c,X(2,!1),Se(3),Le(3),X(3,!0),g.step3Result=await Os(g.step2Result,g.step1Result),As(),Me("Code Review Completed");const u=document.getElementById("step3-output");u.textContent=g.step3Result,X(3,!1),dt();const d=xs(g.step3Result);js(c,d),oh(),Ls()}catch(r){if(console.error("Pipeline failed:",r),dt(),r.isUsageLimit){const{count:u}=Ns();Oi(u,Mi(),{openModal:!0});return}Me("Pipeline Failed",{error:r.message,effectiveModel:Zr(document.getElementById("code-generator-model").value)});const o=Vp(r,{architect:1,generator:2,review:3});Se(o);const a=document.getElementById(`step${o}-result`),l=document.getElementById(`step${o}-loading`),c=document.getElementById(`step${o}-output`);if(l&&l.classList.add("hidden"),a&&a.classList.remove("hidden"),c)if(r.isModelArmor)c.innerHTML=``;else{let u=r.message;r.message.includes("image input")?u=`This model doesn't support image input. Please use ${we(En)} for image-based requests or remove image references from your prompt.`:(r.message.includes("Load failed")||r.message.includes("CORS"))&&(u="API connection failed. This might be due to CORS restrictions or network issues. Please check your API key and try again."),c.innerHTML=`
    -

    Connection Error

    -

    ${F(u)}

    -
    -

    Check if API key is valid

    -

    Try using a different model

    -

    Ensure network allows API calls

    -
    -
    `}Kr(o,"error")}finally{g.isRunning=!1,s.disabled=!1,s.innerHTML=` - - - Run Pipeline`,Et()}}function Vf(){const n=document.getElementById("code-generator-model").value,e=[En,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(s=>s!==n),t=prompt(`Retry with different model? - -Current: ${n} - -Options: -1. ${e[0]} -2. ${e[1]} - -Enter 1 or 2:`);t==="1"?(document.getElementById("code-generator-model").value=e[0],Jr()):t==="2"&&(document.getElementById("code-generator-model").value=e[1],Jr())}async function qf(){var c,u,d;const n=wi();if(!n){V("No code to commit. Please run the pipeline first.","warning");return}const e=await ce("flutterflow"),t=await ce("flutterflow_project_id");if(!e||!t){V("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),mi();return}if(((u=(c=g.artifactBundle)==null?void 0:c.artifacts)==null?void 0:u.length)>1){await Kf();return}const{artifactType:s,artifactName:r}=sc(),i=lc(n,{artifactType:s,artifactName:r}),o=Ff(i);if(!await $f(i,o)){console.log("User cancelled commit");return}Li({withProvisioning:i.codeType===M.CODE_FILE}),Me("Deploy to FlutterFlow Started",{artifactType:s,artifactName:r});const l=await cc(n,{artifactType:s,artifactName:r,pipelineResult:{step1Result:g.step1Result,selectedModel:(d=document.getElementById("code-generator-model"))==null?void 0:d.value}});kn(),l.success?(Me("Deploy to FlutterFlow Success",{artifactType:s,artifactName:r}),ws(l)):(Me("Deploy to FlutterFlow Failed",{artifactType:s,artifactName:r,error:l.error}),bs(l))}async function Kf(){const n=await ce("flutterflow"),e=await ce("flutterflow_project_id");if(!n||!e){V("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),mi();return}const t=yp(g.artifactBundle);if(t.errors.length>0){V(`Bundle validation failed: ${t.errors.join("; ")}`,"error");return}const s=new Map(t.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),r=$s(s),i={canProceed:r.valid&&t.errors.length===0,issues:[...t.errors,...r.errors],warnings:[...t.warnings,...r.warnings]};if(!i.canProceed){V(`Bundle validation failed: ${i.issues.join("; ")}`,"error");return}const o={content:t.fileEntries.map(a=>`// ${a.fileName} -${a.content}`).join(` - -`),fileName:`${t.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:t.title};yh(o,i,t.dependencies,t)}function Yf(n){var r;let e=n.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let t=`
    -

    FlutterFlow Commit Failed

    -

    ${F(n.error)}

    `;if(e&&e.size>0){t+=`
    -

    Errors:

    -
      `;for(const[i,o]of e.entries()){const a=Ul(o);t+=`
    • - ${F(i)}: ${F(a)} -
    • `}t+="
    "}t+="
    ",t+=`
    - -
    `;const s=document.getElementById("step3-output");s&&(s.innerHTML=t,(r=document.getElementById("btn-regenerate-from-error"))==null||r.addEventListener("click",()=>{Jf(n.error,e)}))}async function Jf(n,e){if(g.isRunning)return;const t=document.getElementById("code-generator-model").value;g.isRunning=!0;const s=document.getElementById("btn-regenerate-from-error");s&&(s.disabled=!0,s.innerHTML=` - - Fixing...`);try{let r=`The previous code had the following errors when committing to FlutterFlow: - -`;if(e&&e.size>0)for(const[u,d]of e.entries()){const p=Ul(d);r+=`File: ${u} -Error: ${p} - -`}else r+=`${n} -`;const i=Fl({bundleSpec:g.step1Result,artifactBundle:JSON.stringify(g.artifactBundle||g.step2Result),bundleReview:g.step3Result,userFeedback:r});Bs(),Le(2),Se(2),X(2,!0),g.step2Result=await Ms(i,t),Rs();const o=document.getElementById("step2-output"),a=Ht(g.step2Result);o.textContent=a,o.dataset.raw=a,X(2,!1),Se(3),Le(3),X(3,!0),g.step3Result=await Os(g.step2Result,g.step1Result),As();const l=document.getElementById("step3-output");l.textContent=g.step3Result,X(3,!1),dt();const c=xs(g.step3Result);js(a,c)}catch(r){console.error("Regeneration failed:",r),dt(),V(ki(r,"Regeneration failed"),"error")}finally{g.isRunning=!1,s&&(s.disabled=!1,s.textContent="Fix Errors & Regenerate"),Et()}}async function Zf(){const n=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!n||!e)return;const t=await ce("flutterflow"),s=await ce("flutterflow_project_id");t&&s?(n.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):t||s?(n.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(n.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function Xf(n){try{const e=await fetch(`${xe}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:n})});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:n,message:e.message,stack:e.stack}),e}}async function Qf(n){try{const t=await(await fetch(`${xe}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:n})})).json();if(t.error||!t.email||!t.sessionToken)throw new Error(t.error||"Invalid or expired link");return t}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function eh(n){try{const e=await fetch(`${xe}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:n})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${xe}/auth/refresh-session`,status:e.status}),null;const t=await e.json();return t.error||!t.email||!t.sessionToken?(console.warn("refreshSession: validation failed",{error:t.error,hasEmail:!!t.email,hasToken:!!t.sessionToken}),null):t}catch(e){return console.error("refreshSession: fetch failed",{url:`${xe}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function da(n,e){const t=uc(),s=(L.email||t.email)!==n;L.email=n,L.sessionToken=e,L.isVerified=!0,q=Wt({isLoading:!0}),localStorage.setItem(us,JSON.stringify({email:n,sessionToken:e})),s&&Ni()}function Ri(){L.email=null,L.sessionToken=null,L.isVerified=!1,q=Wt({isResolved:!0}),localStorage.removeItem(us),localStorage.removeItem(ps)}function uc(){try{const n=localStorage.getItem(us);if(!n)return{email:null,sessionToken:null};const e=JSON.parse(n);return!e.email||!e.sessionToken?{email:null,sessionToken:null}:e}catch(n){return console.warn("getStoredSession: failed to parse auth session:",n),localStorage.removeItem(us),{email:null,sessionToken:null}}}async function th(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:t,sessionToken:s}=await Qf(e);da(t,s)}catch(t){V(t.message||"Sign-in link invalid or expired.","error")}}else{const{email:t,sessionToken:s}=uc();if(t&&s){const r=await eh(s);r?da(r.email,r.sessionToken):Ri()}}Pi()}function Ai(){const n=document.getElementById("signin-modal");n&&n.classList.add("open")}function nh(n){if(n&&n.target!==n.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function sh(){var i;const n=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),t=document.getElementById("signin-message"),s=(i=n==null?void 0:n.value)==null?void 0:i.trim();if(!s||!/^[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(s)||s.length>254){t&&(t.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…"),t&&(t.textContent="");try{await Xf(s),n&&(n.value=""),t&&(t.textContent=`Check your email — we sent a link to ${s}`),e&&(e.textContent="Sent!")}catch(o){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:s,err:o}),t&&(t.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function rh(){Ri(),Ni(),Pi(),Ds()}function Pi(){const n=L.isVerified&&!!L.email,e=document.getElementById("auth-signedout"),t=document.getElementById("auth-signedin"),s=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",n),t&&t.classList.toggle("hidden",!n),s&&s.classList.toggle("hidden",n);const r=document.getElementById("auth-user-email");r&&(r.textContent=L.email||""),Vn(),Ds()}async function ih(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),t=e.visitorId,s=await fetch(tf,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:t})});if(!s.ok)throw new Error(`Identity check HTTP ${s.status}`);const r=await s.json();if(Un.userId=r.user_id,Un.status=r.status,Un.resolved=!0,sessionStorage.setItem(ef,r.user_id),r.usage_count!==void 0){const i=yt(),o=r.usage_month||i,a=o===i?r.usage_count:0,l=Fi(),c=l.month===i?l.count:0;(a>=c||o>l.month)&&localStorage.setItem(Nt,JSON.stringify({count:a,month:i})),Ls()}console.log(`Identity resolved: ${r.status} (${r.user_id.slice(0,8)}...) usage: ${r.usage_count??"n/a"}`)}catch(n){console.error("resolveIdentity failed:",n)}}function Fi(){const n=yt();try{const e=localStorage.getItem(Nt);return e?JSON.parse(e):{count:0,month:n}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Nt,month:n,err:e}),localStorage.removeItem(Nt),{count:0,month:n}}}function yt(){const n=new Date;return`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,"0")}`}function Ns(){const n=Fi();return n.month!==yt()?{count:0,month:yt()}:n}function oh(){const e={count:Ns().count+1,month:yt()};return localStorage.setItem(Nt,JSON.stringify(e)),e}function $i(){return!!q.isLoading}function wt(){return!!q.isResolved}function ah(n){if(!n)return null;const e=String(n).toLowerCase().replace(/[^a-z0-9]+/g,"_");return e==="pro"||e==="professional_plan"?"professional":e==="power_developer"||e==="power_plan"?"power":Object.prototype.hasOwnProperty.call(ds,e)?e:null}function lh(n){var e;return n&&((e=Object.entries(Kl).find(([,t])=>t===n))==null?void 0:e[0])||null}function Dn(...n){return n.find(e=>e!=null&&e!=="")}function ch(...n){return n.find(e=>e&&typeof e=="object")||{}}function uh(n){var u,d,p,f,m,v,_,x,I,T,C,y,P,A,R,ne,J,ie,oe,ve;const e=n.data&&typeof n.data=="object"?n.data:n,t=ch(e.subscription,e.stripeSubscription,e.currentSubscription,(p=(d=(u=e.customer)==null?void 0:u.subscriptions)==null?void 0:d.data)==null?void 0:p[0],(m=(f=e.subscriptions)==null?void 0:f.data)==null?void 0:m[0],(v=e.subscriptions)==null?void 0:v[0]),s=e.metadata||t.metadata||((_=e.customer)==null?void 0:_.metadata)||{},r=Dn(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,t.priceId,t.price_id,(x=t.plan)==null?void 0:x.id,(I=t.price)==null?void 0:I.id,(P=(y=(C=(T=t.items)==null?void 0:T.data)==null?void 0:C[0])==null?void 0:y.price)==null?void 0:P.id,(ne=(R=(A=t.items)==null?void 0:A[0])==null?void 0:R.price)==null?void 0:ne.id,(ve=(oe=(ie=(J=t.lines)==null?void 0:J.data)==null?void 0:ie[0])==null?void 0:oe.price)==null?void 0:ve.id),i=Dn(e.status,e.subscriptionStatus,e.subscription_status,t.status,"none"),o=ah(Dn(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,t.tier,t.plan,s.tier,s.plan)),a=nf.has(String(i).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,c=o||lh(r)||(a||l?"professional":"free");return Wt({tier:c,status:i,periodEnd:Dn(e.periodEnd,e.currentPeriodEnd,e.current_period_end,t.current_period_end,t.periodEnd,null),isResolved:!0})}function Mi(){return ds[q.tier]??ds.free}async function dh(){if(L.isVerified&&(!wt()||$i())&&(await dc({force:!0}),Ds()),L.isVerified&&!wt())return V("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:n}=Ns(),e=Mi();if(n>=e)return Oi(n,e,{openModal:!0}),!1;const t=Math.floor(e*.8);if(n>=t){const s=e-n;V(`${s} run${s===1?"":"s"} remaining this month.`,"warning")}return!0}function lr(){const n=document.getElementById("paywall-exhausted");n&&n.classList.add("hidden")}function Oi(n,e,t={}){const s=document.getElementById("walkthrough-modal");s&&s.classList.remove("open");const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const i=document.getElementById("preview-frame-container");i&&(i.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 c=document.getElementById("paywall-exhausted");if(!c){V(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),ys();return}const u=document.getElementById("paywall-exhausted-text");if(u){const p=q.tier;p==="free"?u.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:u.textContent=`You've used all ${e} generations this month on your ${p} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",L.isVerified),c.classList.remove("hidden"),t.openModal&&ys()}function Zr(n){return q.tier==="free"&&Hn.includes(n)?En:n}function ph(){const n=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!n||!e)return;const t=q.tier,r=!(L.isVerified&&!wt())&&t==="free";Array.from(e.options).forEach(o=>{const a=we(o.value),l=Hn.includes(o.value);o.textContent=l&&r?`${a} (PRO)`:a,o.disabled=!1}),r&&Hn.includes(e.value)&&(e.value=En),e.disabled=!1,na.has(e)||(e.addEventListener("change",()=>{wt()&&q.tier==="free"&&Hn.includes(e.value)&&(e.value=En,ys()),Yr(e.value)}),na.add(e));let i=document.getElementById("model-selector-free-notice");r?(i||(i=document.createElement("p"),i.id="model-selector-free-notice",i.className="text-xs text-gray-400 mt-1",n.appendChild(i)),i.innerHTML='Free plan — Gemini only. '):i&&i.remove(),Yr(e.value)}function Ls(){const n=document.getElementById("usage-counter");if(!n)return;if(L.isVerified&&$i()){n.textContent="Checking plan…",n.className="text-xs text-gray-500",Vn(),lr();return}if(L.isVerified&&!wt()){n.textContent="Plan check failed",n.className="text-xs text-red-600 font-medium",Vn(),lr();return}const{count:e}=Ns(),t=Mi();n.textContent=`${e} / ${t} runs this month`;const s=t>0?e/t:0;n.className=s>=1?"text-xs text-red-600 font-medium":s>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500",Vn(),e>=t&&!g.isRunning?Oi(e,t):lr()}function Vn(){const n=document.getElementById("guest-usage-text");if(!n)return;const e=Fi(),t=e.month===yt()?e.count??0:0,s=ds.free;n.textContent=`${t} / ${s} generations used`}async function dc(n={}){const e=n.force===!0;if(!L.isVerified||!L.sessionToken){q=Wt({isResolved:!0});return}q={...q,isLoading:!0,error:null};const t=localStorage.getItem(ps);if(!e&&t)try{const{data:s,email:r,ts:i,version:o}=JSON.parse(t);if(o===sa&&r===L.email&&Date.now()-i<5*60*1e3){q={...s,isLoading:!1,isResolved:s.isResolved!==!1};return}}catch(s){console.warn("Failed to parse subscription cache:",s,"| raw value:",t)}try{const r=await(await fetch(`${xe}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:L.sessionToken,email:L.email})})).json();if(r.error){if(["unauthorized","invalid session","expired session"].some(o=>String(r.error).toLowerCase().includes(o))){Ri(),Pi();return}q=Wt({isResolved:!1,error:r.error});return}q=uh(r),localStorage.setItem(ps,JSON.stringify({version:sa,data:q,email:L.email,ts:Date.now()}))}catch(s){console.error("fetchSubscription failed:",s),q={...q,isLoading:!1,isResolved:!1,error:s.message}}}function Ni(){localStorage.removeItem(ps)}async function fh(n){if(!L.isVerified||!L.sessionToken){pc(),Ai();return}if(!Kl[n]){V("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${n}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const s=await(await fetch(`${xe}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:n,sessionToken:L.sessionToken,currency:Yl()})})).json();if(s.error||!s.url)throw new Error(s.error||"Failed to create checkout session");const{url:r}=s;window.location.href=r}catch(t){console.error("startCheckout failed:",t),e&&(e.disabled=!1,e.textContent="Subscribe"),V("Could not start checkout. Please try again.","error")}}async function hh(){if(!L.isVerified||!L.sessionToken){Ai();return}const n=document.getElementById("manage-billing-btn");n&&(n.disabled=!0,n.textContent="Loading…");try{const t=await(await fetch(`${xe}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:L.sessionToken})})).json();if(t.error||!t.url)throw new Error(t.error||"Failed to open billing portal");const{url:s}=t;window.location.href=s}catch(e){console.error("openCustomerPortal failed:",e),n&&(n.disabled=!1,n.textContent="Manage billing"),V("Could not open billing portal. Please try again.","error")}}async function _s(n,e,t,s={}){const i=new AbortController,o=setTimeout(()=>i.abort(),12e4);try{const a=await fetch(Qp,{method:"POST",headers:{"Content-Type":"application/json"},signal:i.signal,body:JSON.stringify({user_id:Un.userId,step:n,model:e,prompt:t,context:s})}),l=await a.json();if(a.status===429){l.serverCount!==void 0&&(localStorage.setItem(Nt,JSON.stringify({count:l.serverCount,month:yt()})),Ls());const d=new Error(l.message||"Monthly usage limit reached. Upgrade to continue.");throw d.isUsageLimit=!0,d}const c=np(l,n);if(c)throw c;if(console.log(`[BuildShip] ${n} response keys:`,Object.keys(l),"content type:",typeof l.content),!a.ok)throw new Error(`${l.message||l.error||"BuildShip pipeline error"} (HTTP ${a.status})`);let u=l.output||l.content;if(!u)throw new Error(`BuildShip returned no output for step "${n}"`);return Array.isArray(u)&&(u=u.map(d=>typeof d=="string"?d:d.text||"").join("")),typeof u!="string"&&(u=JSON.stringify(u)),u}catch(a){throw a.name==="AbortError"?new Error(`BuildShip ${n} timed out after ${12e4/1e3}s`):a instanceof TypeError?new Error(`BuildShip unreachable: ${a.message}`):a}finally{clearTimeout(o)}}function gh(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),Ni(),V("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),V("Checkout cancelled.","info"))}function Ds(){const n=L.isVerified&&!!L.email,e=q.tier,t=n&&$i(),s=!n||wt(),r=document.getElementById("subscription-tier-badge");if(r){const a={free:"Free",professional:"Professional",power:"Power Developer"},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=t?"Checking…":s?a[e]||"Free":"Plan unavailable",r.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${s?l[e]||l.free:l.unresolved}`}const i=document.getElementById("upgrade-prompt");i&&i.classList.toggle("hidden",!n||t||!s||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!n||t||s&&e==="free"),mh(s?e:null),ph(),Ls()}function mh(n){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:i,defaultText:o}])=>{const a=document.getElementById(i);a&&(r===n?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const s=document.getElementById("free-tier-current");s&&s.classList.toggle("hidden",n!=="free")}function Xr(){const n=Yl(),e=document.getElementById("pro-price"),t=document.getElementById("power-price"),s=document.getElementById("pro-price-note"),r=document.getElementById("power-price-note");e&&(e.textContent=ia(ra.professional,n)),t&&(t.textContent=ia(ra.power,n));const i="billed monthly";s&&(s.textContent=i),r&&(r.textContent=i)}function ys(){Xr();const n=document.getElementById("pricing-modal");n&&n.classList.add("open"),rf().then(()=>Xr())}function pc(n){if(n&&n.target!==n.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function V(n,e="info"){const t={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},s=document.createElement("div");s.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 ${t[e]||t.info}`,s.textContent=n,document.body.appendChild(s),setTimeout(()=>{s.style.opacity="0",setTimeout(()=>s.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),vh(),await th(),gh(),await dc(),Ds(),Xr(),await Af(),Cf();const n=document.getElementById("flutterflow-endpoint-select");if(n){const t=Pn();n.value=t}tc(),ih();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{Ze===2&&e.value.trim().length>0&&(vi(),ks())}),e.addEventListener("blur",()=>{const t=document.getElementById("walkthrough-modal");Ze===2&&t&&t.classList.add("open")}),e.addEventListener("keydown",t=>{if(t.key==="Tab"){const s=document.getElementById("walkthrough-modal");Ze===2&&s&&setTimeout(()=>{s.classList.add("open")},100)}})),window.addEventListener("commitStateChange",t=>{const{state:s}=t.detail;s===D.PREPARING||s===D.VALIDATING||s===D.PUSHING?(re.phaseId||Li(),fa(s)):(s===D.SUCCESS||s===D.ERROR)&&(fa(s),setTimeout(kn,1e3))})});function vh(){const n=document.getElementById("preview-frame-container");n&&(n.style.display="")}function _h(){const n=document.getElementById("welcome-video-player");n&&(n.addEventListener("click",bt),document.addEventListener("keydown",bt))}function bt(){const n=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),t=document.getElementById("ready-state");n&&(n.style.display="none"),e&&e.classList.add("visible"),t&&t.classList.remove("hidden");const s=document.getElementById("welcome-video-player");s&&s.removeEventListener("click",bt),document.removeEventListener("keydown",bt),tc()}let hn=null;function yh(n,e,t,s=null){hn={codeInfo:n,checks:e,deps:t,bundlePlan:s},document.getElementById("confirm-file-name").textContent=n.fileName,document.getElementById("confirm-artifact-type").textContent=n.artifactType,document.getElementById("confirm-file-size").textContent=`${(n.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=s?`${s.fileEntries.length} files`:n.content.split(` -`).length,ce("flutterflow_project_id").then(c=>{document.getElementById("confirm-project-id").textContent=c||"Not configured"});const r=document.getElementById("confirm-deps-list"),i=document.getElementById("confirm-deps-section");t&&Object.keys(t).length>0?(r.innerHTML=Object.entries(t).map(([c,u])=>`
  • • ${Je(c)}: ${Je(u)}
  • `).join(""),i.classList.remove("hidden")):i.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(c=>`
  • • ${Je(c)}
  • `).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=n.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&&l.classList.add("open")}function fc(n){if(n&&n.target!==n.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),hn=null}function wh(n){if(n&&n.target!==n.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&e.classList.remove("open");const t=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const i of t){const o=document.getElementById(i);o&&(o.textContent="")}const s=document.getElementById("success-warnings-section");s&&s.classList.add("hidden");const r=document.getElementById("success-warnings-list");r&&(r.innerHTML="")}function ws(n){var f,m,v,_;const e=(x,I)=>{const T=document.getElementById(x);T&&(T.textContent=I||"")},t=((f=n.metadata)==null?void 0:f.fileName)||"",s=((m=n.metadata)==null?void 0:m.projectId)||"",r=((v=n.metadata)==null?void 0:v.artifactType)||"",i=n.elapsedTime?`${(n.elapsedTime/1e3).toFixed(1)}s`:"",o=(_=n.metadata)!=null&&_.codeSize?`${(n.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",n.message||"Code committed successfully!"),e("success-project-id",s),e("success-file-name",t),e("success-artifact-type",r),e("success-time",i),e("success-size",o);const a=n.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const c=document.getElementById("success-open-ff-link");c&&s&&(c.href=`https://app.flutterflow.io/project/${s}`);const u=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list");n.warnings&&n.warnings.length>0&&u&&d&&(d.innerHTML=n.warnings.map(([x,I])=>`
  • ${F(x)}: ${F(String(I))}
  • `).join(""),u.classList.remove("hidden"));const p=document.getElementById("commit-success-modal");p&&p.classList.add("open")}function bs(n){kn(),Yf(n)}function bh(){const n=document.getElementById("code-preview-content"),e=document.getElementById("code-preview-chevron");n.classList.contains("hidden")?(n.classList.remove("hidden"),e.style.transform="rotate(90deg)"):(n.classList.add("hidden"),e.style.transform="rotate(0deg)")}const pa={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}},Eh=[{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..."}],re={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:n=!1}={}){this.sequence=["prepare","validate","project"],n&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&e.classList.add("open"),this.set("prepare")},set(n,e=null){if(!(!pa[n]||n===this.phaseId)){if(!this.sequence.includes(n)){const t=this.sequence.indexOf("package");this.sequence.splice(t===-1?this.sequence.length:t,0,n)}this.phaseId=n,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),n!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(n){n&&(this.liveSubstatus=!0,this.substatus=n,this.render())},render(){const n=pa[this.phaseId];if(!n)return;const e=(Date.now()-this.phaseStartedAt)/1e3,t=n.start+(n.end-n.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=Eh.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const s=this.sequence.indexOf(this.phaseId),i=[`Step ${s===-1?1:s+1} of ${this.sequence.length}`];e>=5&&i.push(Sh(e)),hc(this.phaseId==="done"?100:t,n.message,i.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const n=document.getElementById("commit-progress-overlay");n&&n.classList.remove("open")}};function Sh(n){const e=Math.floor(n);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function Li(n){re.start(n)}function kn(){re.stop()}function hc(n,e,t,s=null){const r=document.getElementById("commit-progress-bar"),i=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");r&&(r.style.width=`${Math.round(n*10)/10}%`),i&&(i.textContent=e),o&&(o.textContent=t),a&&(a.textContent=s||"",a.classList.toggle("hidden",!s))}function fa(n){const e={[D.PREPARING]:"prepare",[D.VALIDATING]:"validate",[D.PUSHING]:"project",[D.SUCCESS]:"done"};if(n===D.ERROR){re.timer&&clearInterval(re.timer),re.timer=null,hc(100,"Failed","Error occurred");return}const t=e[n];t&&re.set(t)}function Ih(n){var e;return n.bundlePlan?n.bundlePlan.fileEntries.some(t=>t.type===M.CODE_FILE):((e=n.codeInfo)==null?void 0:e.codeType)===M.CODE_FILE}async function Ch(){var i,o;if(!hn){console.error("No pending commit data");return}const n=hn;if(fc(),Li({withProvisioning:Ih(n)}),n.bundlePlan){const a=await Df(n.bundlePlan,{pipelineResult:{step1Result:g.step1Result,selectedModel:(i=document.getElementById("code-generator-model"))==null?void 0:i.value}});kn(),a.success?ws(a):bs(a);return}const{codeInfo:e}=n,{artifactType:t,artifactName:s}=sc(),r=await cc(e.content,{artifactType:t,artifactName:s,pipelineResult:{step1Result:g.step1Result,selectedModel:(o=document.getElementById("code-generator-model"))==null?void 0:o.value}});kn(),r.success?ws(r):bs(r),hn=null}window.runThinkingPipeline=Jr;window.toggleStep=Uf;window.toggleSection=jf;window.selectWorkflowStep=Se;window.copyCode=Hf;window.retryWithDifferentModel=Vf;window.openApiKeysModal=mi;window.closeApiKeysModal=Ql;window.closeWalkthroughModal=yf;window.openWalkthroughModal=_f;window.advanceWalkthrough=vi;window.commitToFlutterFlow=Lf;function xh(){const n=document.getElementById("pipeline-input");n&&n.focus()}function kh(){const n=document.getElementById("advanced-settings");n&&(n.open=!0);const e=document.getElementById("code-generator-model");e&&(e.scrollIntoView({behavior:"smooth",block:"center"}),e.focus(),e.click())}window.focusPromptInput=xh;window.openModelSelector=kh;window.saveApiKeys=Ef;window.clearAllApiKeys=Sf;window.toggleKeyVisibility=kf;window.handleWelcomeVideoEnd=_h;window.dismissWelcomeVideo=bt;window.initiateCommitToFlutterFlow=qf;window.updateFlutterFlowCredentialStatus=Zf;window.closeCommitConfirmModal=fc;window.closeCommitSuccessModal=wh;window.showCommitSuccessModal=ws;window.showCommitFailureModal=bs;window.toggleCodePreview=bh;window.confirmCommitToFlutterFlow=Ch;window.runRefinement=Wf;window.regenerateFromPastedErrors=Gf;window.clearErrorInput=zf;window.setFlutterFlowEndpoint=vf;window.getFlutterFlowEndpoint=Pn;window.commitProgress=re;window.openSignInModal=Ai;window.closeSignInModal=nh;window.handleMagicLinkRequest=sh;window.handleSignOut=rh;window.startCheckout=fh;window.openCustomerPortal=hh;window.openPricingModal=ys;window.closePricingModal=pc;let Lt=null,gc=null;const ha=120;function Bs(){const n=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),t=document.getElementById("ready-state");t&&t.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),n&&n.classList.add("visible"),gc=Date.now();for(let s=1;s<=3;s++){const r=document.getElementById(`pdot-${s}`);r&&(r.className="progress-dot")}Le(1),Th()}function Le(n){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},t={1:"Step 1 of 3 — Prompt Architect",2:"Step 2 of 3 — Code Generator",3:"Step 3 of 3 — Code Review"},s=document.getElementById("progress-title-text"),r=document.getElementById("progress-substep-text");s&&(s.textContent=e[n]||e[1]),r&&(r.textContent=t[n]||t[1]);for(let i=1;i<=3;i++){const o=document.getElementById(`pdot-${i}`);o&&(i{const n=(Date.now()-gc)/1e3,e=document.getElementById("progress-elapsed"),t=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(n)}s`);const s=n/ha*100,r=Math.min(95,s*(1-Math.exp(-n/(ha*.6)))*1.2);t&&(t.style.width=`${r}%`)},250)}function dt(){Lt&&(clearInterval(Lt),Lt=null);const n=document.getElementById("pipeline-progress-fill");n&&(n.style.width="100%");for(let e=1;e<=3;e++){const t=document.getElementById(`pdot-${e}`);t&&(t.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),n&&(n.style.width="0%")},400)}function Gt(n,e=""){const t={pass:'',warning:'',fail:''};return``}function mc(n){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[n]||"Needs attention"}function Rh(){return Mp({bundle:g.artifactBundle,reviewResult:g.step3Result})}function Ah(n){return` -
    - ${Gt(n.severity)} -
    -
    ${F(n.message)}
    - ${n.suggestion?`
    ${F(n.suggestion)}
    `:""} - ${F(n.source)} -
    -
    - `}function Ph(n){return` -
  • -
    - ${F(n.title)} - ${n.detail&&n.detail!==n.title?`

    ${F(n.detail)}

    `:""} -
    -
  • - `}function Fh(n){const e=document.getElementById("results-summary-detail"),t=document.getElementById("results-title");if(!e)return;t&&(t.textContent=n.title);const s=n.score,r=s==null?"neutral":s>=80?"pass":s>=60?"warning":"fail",i=s==null?"":s>=80?"Strong":s>=60?"Needs work":"High risk",o=n.findings.length?` -
      - ${n.findings.map(l=>` -
    • - ${Gt(l.severity)} - - ${F(l.message)} - ${l.suggestion?`${F(l.suggestion)}`:""} - -
    • - `).join("")} -
    - `:"",a=n.manualSteps.length?` -
    -

    ${Gt("warning")} Complete in FlutterFlow

    -
      - ${n.manualSteps.map(l=>` -
    • - ${F(l.title)} - ${l.detail&&l.detail!==l.title?`${F(l.detail)}`:""} -
    • - `).join("")} -
    -
    - `:"";e.innerHTML=` -
    -
    -

    ${F(n.summary)}

    - ${o} - ${a} -
    -
    - -
    - Is the generated code correct? -
    - - -
    -
    -
    -
    - `}function $h(n){var l,c,u;const e=n.artifacts.find(d=>d.id===g.selectedArtifactId)||n.artifacts[0];if(!e)return"";const t={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],s=e.findings.length?e.findings.map(Ah).join(""):`
    ${Gt(t.icon)} ${F(t.message)}
    `,r=(l=e.dependencies)!=null&&l.length?e.dependencies.map(d=>` -
  • ${F(d.name)}${d.version?` ${F(d.version)}`:""}${d.reason?`

    ${F(d.reason)}

    `:""}
  • - `).join(""):'
  • No external packages
  • ',i=(c=e.imports)!=null&&c.length?e.imports.map(d=>`${F(d)}`).join(""):'No imports returned',o=(u=e.publicApi)!=null&&u.length?e.publicApi.map(d=>`${F(d)}`).join(""):'No public API signature returned',a=e.relationships.length?e.relationships.map(d=>` -
  • ${F(d.from||"Bundle")} ${F(d.type)} ${F(d.to||"Bundle")}${d.description?`

    ${F(d.description)}

    `:""}
  • - `).join(""):'
  • No relationships for this file
  • ';return` -
    -
    - ${Gt(e.status)} ${F(mc(e.status))} -

    ${F(e.artifactName)}

    - ${e.description?`

    ${F(e.description)}

    `:""} -
    -
    - ${F(e.artifactType)} - ${F(e.fileName)} -
    -
    -
    -

    Code Review findings

    - ${s} -
    - ${e.manualSteps.length?` -
    -

    Manual FlutterFlow steps for this file

    -
      ${e.manualSteps.map(Ph).join("")}
    -
    - `:""} -
    - File details -
    -
    -

    Dependencies

    -
      ${r}
    -
    -
    -

    Deployment

    -
    -
    Status
    ${F(e.deployStatus||"pending")}
    -
    Order
    ${e.index+1} of ${n.artifacts.length}
    -
    Path hint
    ${F(e.pathHint||"Not returned")}
    -
    -
    -
    -
    -

    Public API

    -
    ${o}
    -
    -
    -

    Imports

    -
    ${i}
    -
    -
    -

    Relationships

    -
      ${a}
    -
    -
    - `}function Mh(n){const e=document.getElementById("bundle-strip"),t=document.getElementById("results-summary-tab"),s=document.getElementById("artifact-tabs"),r=document.getElementById("results-file-count");if(t&&t.classList.toggle("active",g.resultsViewMode==="summary"),!n.artifacts.length){r&&(r.textContent="0 files"),e&&e.classList.remove("visible"),s&&(s.innerHTML="");return}if(r){const i=n.artifacts.length;r.textContent=`${i} ${i===1?"file":"files"}`}s&&(s.innerHTML=n.artifacts.map(i=>` - - `).join(""),s.onclick=i=>{var a;const o=i.target.closest(".artifact-tab");(a=o==null?void 0:o.dataset)!=null&&a.artifactId&&vc(o.dataset.artifactId)}),e&&e.classList.add("visible")}function Di(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const n=document.getElementById("results-view"),e=document.getElementById("results-code-output"),t=document.getElementById("results-audit-output"),s=document.getElementById("results-summary-detail"),r=document.getElementById("artifact-results-split"),i=Rh(),o=wi();if(Fh(i),Mh(i),e&&(e.textContent=""),e){const a=ql(o);e.innerHTML=a}t&&(t.innerHTML=$h(i)),s&&s.classList.toggle("hidden",g.resultsViewMode!=="summary"),r&&r.classList.toggle("hidden",g.resultsViewMode!=="file"),n&&n.classList.add("visible")}function js(n,e){g.selectedArtifactId||(g.selectedArtifactId=ls(g.artifactBundle).id),g.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const t=document.getElementById("step3-output");t&&(t.textContent=""),Di(),Et();const s=document.getElementById("btn-feedback-up"),r=document.getElementById("btn-feedback-down");s&&(s.className="feedback-btn"),r&&(r.className="feedback-btn")}function vc(n){g.selectedArtifactId=n,g.resultsViewMode="file",Di()}function Oh(){g.resultsViewMode="summary",Di()}function Nh(){const n=document.getElementById("btn-copy-results"),e=wi();navigator.clipboard.writeText(e).then(()=>{if(n){n.classList.add("copied");const t=n.querySelector("span");if(t){const s=t.textContent;t.textContent="Copied!",setTimeout(()=>{n.classList.remove("copied"),t.textContent=s},2e3)}}})}function Lh(n){const e=document.getElementById("btn-feedback-up"),t=document.getElementById("btn-feedback-down");n==="up"?(e.classList.toggle("active-up"),t.classList.remove("active-down")):(t.classList.toggle("active-down"),e.classList.remove("active-up"));const s=n==="up"?"thumbsUp":"thumbsDown";Ti(s,g.step2Result,g.step1Result),Me("Generation Feedback",{feedback:s})}function Dh(){const n=document.getElementById("error-input-panel");if(n){n.classList.remove("hidden"),n.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function _c(){const n=document.getElementById("error-input-panel");n&&(n.classList.add("hidden"),n.style.display="none")}window.copyResultsCode=Nh;window.selectArtifact=vc;window.selectResultsSummary=Oh;window.submitResultsFeedback=Lh;window.showErrorInputPanel=Dh;window.hideErrorInputPanel=_c; diff --git a/dist/favicon-brand-v2.svg b/dist/favicon-brand-v2.svg new file mode 100644 index 0000000..4a9a059 --- /dev/null +++ b/dist/favicon-brand-v2.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/dist/index.html b/dist/index.html index 03e97f5..1edb941 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2358,7 +2358,7 @@ .pm-cards { padding: 0 16px; } } - +
    diff --git a/dist/social-card.png b/dist/social-card.png new file mode 100644 index 0000000..2bd6c37 Binary files /dev/null and b/dist/social-card.png differ diff --git a/package-lock.json b/package-lock.json index 41fe4a8..b6dc6e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "dreamflow-command-dashboard", "version": "1.0.0", "dependencies": { - "posthog-js": "^1.353.0" + "posthog-js": "^1.415.7" }, "devDependencies": { "playwright": "^1.58.2", @@ -909,331 +909,31 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.208.0.tgz", - "integrity": "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", - "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/exporter-logs-otlp-http": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.208.0.tgz", - "integrity": "sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-exporter-base": "0.208.0", - "@opentelemetry/otlp-transformer": "0.208.0", - "@opentelemetry/sdk-logs": "0.208.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.208.0.tgz", - "integrity": "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-transformer": "0.208.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.208.0.tgz", - "integrity": "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/sdk-logs": "0.208.0", - "@opentelemetry/sdk-metrics": "2.2.0", - "@opentelemetry/sdk-trace-base": "2.2.0", - "protobufjs": "^7.3.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.5.1.tgz", - "integrity": "sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.5.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.5.1.tgz", - "integrity": "sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.208.0.tgz", - "integrity": "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.2.0.tgz", - "integrity": "sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", - "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", + "node_modules/@posthog/browser-common": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@posthog/browser-common/-/browser-common-0.5.0.tgz", + "integrity": "sha512-8DaxVZS1bQPbA514RePurLNbYjei3P4jhnC206DwVv5XThmZM3QdlsXenI2ujE3pLbgQ79hYn9o1Kda8I3WK/Q==", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", - "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" + "@posthog/core": "^1.47.0", + "@posthog/types": "^1.402.2" } }, "node_modules/@posthog/core": { - "version": "1.23.1", - "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.23.1.tgz", - "integrity": "sha512-GViD5mOv/mcbZcyzz3z9CS0R79JzxVaqEz4sP5Dsea178M/j3ZWe6gaHDZB9yuyGfcmIMQ/8K14yv+7QrK4sQQ==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.47.0.tgz", + "integrity": "sha512-LW62V+9yx7G7mLd+EYpwW0PiaPZI8XRJ1tLuhw+9fXHpugLp8XQD5JuCQ2kIXvoUfyx1DpKfGQY3dUnzMOIn7Q==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6" + "@posthog/types": "^1.402.2" } }, "node_modules/@posthog/types": { - "version": "1.353.0", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.353.0.tgz", - "integrity": "sha512-wG5zMdr80QNV+0XkJFCX5ZxcpdER1TtYe21YlLAuI4i0G1wjQDi/FDCjh4b0QGiV8KljQMHfC2xPZ/SXnPBlBQ==", + "version": "1.402.3", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.402.3.tgz", + "integrity": "sha512-nnqKIGUqggeNbCZg6of/hYN+4shYZUoPFkILIIpYq0p9HDX8PgOrnrtBAUH8kr1MOmDh2nm+fY5Ceks7A5y6BQ==", "license": "MIT" }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.55.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", @@ -1595,6 +1295,7 @@ "version": "22.19.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -1608,11 +1309,14 @@ "optional": true }, "node_modules/core-js": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", - "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz", + "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==", "hasInstallScript": true, "license": "MIT", + "engines": { + "node": "*" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -1625,20 +1329,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -1650,9 +1340,9 @@ } }, "node_modules/dompurify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", - "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.13.tgz", + "integrity": "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -1762,12 +1452,6 @@ "dev": true, "license": "MIT" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -1791,12 +1475,6 @@ "immediate": "~3.0.5" } }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -1823,15 +1501,6 @@ "dev": true, "license": "(MIT AND Zlib)" }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -1916,24 +1585,21 @@ } }, "node_modules/posthog-js": { - "version": "1.353.0", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.353.0.tgz", - "integrity": "sha512-1ifN9CDMavZwRvm+6UYAaEbvzJPvC6q0warmNGyqUcmtDe3SZh4PfvftSJrucH5Oeh6r+ihWtLS7ESIUS0pYuw==", - "license": "SEE LICENSE IN LICENSE", + "version": "1.415.7", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.415.7.tgz", + "integrity": "sha512-wczdBPDh6vr/Knft0HaJ+naO5NXVaML9Zk9ufoeejO16WrA0TeiX3yqv160eoqWVnWOU5tniYs8hMcxMLmpz2Q==", + "license": "(Apache-2.0 AND MIT)", "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.208.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.208.0", - "@opentelemetry/resources": "^2.2.0", - "@opentelemetry/sdk-logs": "^0.208.0", - "@posthog/core": "1.23.1", - "@posthog/types": "1.353.0", - "core-js": "^3.38.1", - "dompurify": "^3.3.1", + "@posthog/browser-common": "^0.5.0", + "@posthog/core": "^1.47.0", + "@posthog/types": "^1.402.3", + "core-js": "^3.49.0", + "dompurify": "^3.4.13", "fflate": "^0.4.8", - "preact": "^10.28.2", + "preact": "^10.29.3", "query-selector-shadow-dom": "^1.0.1", - "web-vitals": "^5.1.0" + "web-vitals": "^5.3.0", + "web-vitals-soft-navs": "npm:web-vitals@6.0.0" } }, "node_modules/pptxgenjs": { @@ -1950,13 +1616,21 @@ } }, "node_modules/preact": { - "version": "10.28.4", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.4.tgz", - "integrity": "sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ==", + "version": "10.29.8", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz", + "integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==", "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact-render-to-string": ">=5" + }, + "peerDependenciesMeta": { + "preact-render-to-string": { + "optional": true + } } }, "node_modules/process-nextick-args": { @@ -1966,30 +1640,6 @@ "dev": true, "license": "MIT" }, - "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/query-selector-shadow-dom": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", @@ -2139,27 +1789,6 @@ "@img/sharp-win32-x64": "0.34.5" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2192,6 +1821,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, "license": "MIT" }, "node_modules/util-deprecate": { @@ -2262,25 +1892,17 @@ } }, "node_modules/web-vitals": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.1.0.tgz", - "integrity": "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.3.0.tgz", + "integrity": "sha512-q6LWsLatGYZp5VGBIOvbTj6JBV2nOmC8KvWztXBmwJcfFAzhwKwbOxhUH306XY3CcaZDUlSmSuNPBsCn0bFu+g==", "license": "Apache-2.0" }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } + "node_modules/web-vitals-soft-navs": { + "name": "web-vitals", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-6.0.0.tgz", + "integrity": "sha512-Guaibvy/+uNtL6Bsu4jmMJGzuSl91oeRH5iO9pPRbYftnFUr3yqT1TUNX/OE4o9HexuEMU3Kb/Wg7iKhlffZUA==", + "license": "Apache-2.0" } } } diff --git a/package.json b/package.json index 21fd288..2603fc2 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,6 @@ "vite": "^5.0.0" }, "dependencies": { - "posthog-js": "^1.353.0" + "posthog-js": "^1.415.7" } } diff --git a/scripts/deploy_ftp.py b/scripts/deploy_ftp.py index f51fe07..ff9dc18 100755 --- a/scripts/deploy_ftp.py +++ b/scripts/deploy_ftp.py @@ -157,17 +157,79 @@ def prune_stale_files(ftp, local_files, local_dirs, dry_run): return removed, failed +def _git(args): + return subprocess.run( + ["git", *args], capture_output=True, text=True, cwd=REPO_ROOT, + ) + + +def ensure_dist_committed(allow_dirty): + """Refuse to deploy a dist/ the repo cannot reproduce. + + The FTP mirror pushes whatever is on disk, so the deployed artifact must be + exactly what a fresh checkout would build. Two checks: + - no uncommitted changes to tracked files under dist/ + - every file that will be uploaded exists at HEAD. git ignores + dist/assets/, so a new content-hashed bundle there never shows up in + the porcelain status yet would still ship over FTP — checking status + alone can't see it. + """ + if allow_dirty: + return + + status = _git(["status", "--porcelain", "--", "dist/"]) + if status.returncode != 0: + sys.exit( + "Could not validate git state; refusing to deploy.\n" + f"{status.stderr.strip() or status.stdout.strip()}" + ) + if status.stdout.strip(): + sys.exit( + "Refusing to deploy: tracked files under dist/ have uncommitted " + "changes and the live site must be reproducible from git.\n" + "Commit the build first, e.g.:\n" + f' git add -f dist/ && git commit -m "build: rebuild dist"\n' + 'Or override for an emergency push with `--allow-dirty` (not recommended).' + ) + + tracked = _git(["ls-tree", "-r", "--name-only", "HEAD", "--", "dist/"]) + if tracked.returncode != 0: + sys.exit( + "Could not enumerate committed dist files; refusing to deploy.\n" + f"{tracked.stderr.strip() or tracked.stdout.strip()}" + ) + committed = set(tracked.stdout.split()) + + local_files, _ = local_files_and_dirs(DIST) + for rel in local_files: + git_path = f"dist/{rel}" + if git_path not in committed: + sys.exit( + f"Refusing to deploy: {git_path} is not committed at HEAD. " + "git ignores dist/assets/, so new content-hashed build output " + "never appears in the porcelain status; commit the build first:\n" + ' git add -f dist/ && git commit -m "build: rebuild dist"\n' + 'Or override for an emergency push with `--allow-dirty` (not recommended).' + ) + + def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument( "--dry-run", action="store_true", help="Show what would be uploaded and deleted without changing the server", ) + parser.add_argument( + "--allow-dirty", action="store_true", + help="Allow deploying an uncommitted dist/ (not recommended)", + ) args = parser.parse_args() if not DIST.is_dir(): sys.exit(f"{DIST} does not exist. Run `npm run build` first.") + ensure_dist_committed(args.allow_dirty) + local_files, local_dirs = local_files_and_dirs(DIST) if not local_files: sys.exit(f"{DIST} has no files to deploy.") diff --git a/src/flutterFlowArtifactValidation.js b/src/flutterFlowArtifactValidation.js index 1f8fcf8..027e305 100644 --- a/src/flutterFlowArtifactValidation.js +++ b/src/flutterFlowArtifactValidation.js @@ -274,6 +274,19 @@ export function getWidgetRuleFindings(code = "") { .map(({ id, severity, message }) => ({ id, severity, message })); } +/** + * The CustomWidget rule messages that must stop a deploy - the defects that + * make FlutterFlow's generated constructor call fail to compile, so the widget + * cannot be placed at all. Warnings (a broken asset path, say) still deploy. + * @param {string} code - Dart source + * @returns {string[]} Blocking messages, empty when the widget is placeable + */ +export function getBlockingWidgetErrors(code = "") { + return getWidgetRuleFindings(code) + .filter((finding) => finding.severity === "error") + .map((finding) => finding.message); +} + /** * Finds every `Future<...> name(` signature in already-stripped Dart source. * @param {string} code - Source with comments and strings removed diff --git a/src/flutterFlowArtifactValidation.test.js b/src/flutterFlowArtifactValidation.test.js index 339dbaa..9989c6b 100644 --- a/src/flutterFlowArtifactValidation.test.js +++ b/src/flutterFlowArtifactValidation.test.js @@ -2,6 +2,7 @@ import assert from "node:assert/strict"; import test from "node:test"; import { calibrateWidgetRules, + getBlockingWidgetErrors, getCustomActionReturnType, getWidgetRuleFindings, validateArtifactCompatibility, @@ -643,3 +644,37 @@ test("required in one public widget is flagged even when a sibling is clean", () "required-public-param", ]); }); + +test("a widget FlutterFlow cannot construct blocks the deploy, not just the review", () => { + // The reported case: one placeable widget and one with `required this.value` + // in the same file. The review called it blocking while the deploy gate, + // which reads these errors, still let the file through. + const errors = getBlockingWidgetErrors(` + class BrandBadge extends StatelessWidget { + const BrandBadge({super.key, this.width, this.value = 0.0}); + final double? width; + final double value; + } + class BrandBanner extends StatelessWidget { + const BrandBanner({super.key, this.width, required this.value}); + final double? width; + final double value; + } + `); + + assert.equal(errors.length, 2); + assert.ok(errors.every((message) => typeof message === "string" && message.length > 0)); +}); + +test("a placeable widget carrying only a warning still deploys", () => { + const errors = getBlockingWidgetErrors(` + class Banner extends StatelessWidget { + const Banner({super.key, this.imagePath}); + final String? imagePath; + @override + Widget build(BuildContext context) => Image.asset(imagePath ?? ""); + } + `); + + assert.deepEqual(errors, []); +});